やりたいこと
前回の続きになります。
UWPアプリの簡単なテスト(スモークテスト?)をUWSCでやってみたいというものになります。
UWSC編②では文字を入力するテストケースを実施しみました。
こちらの赤枠に文字列を入力するテストになります。
最初に考えたテストケースのTC2になります。
ソース
ソースコードはこちらになります。
前回の分に足してるので、ちょっと長いです。
------// TC1 起動チェック
CheckStart()
// TC2 文字の入力
InputString()
// 起動チェック
PROCEDURE CheckStart()
//起動
DOSCMD("C:\test\memotter - ショートカット.lnk")
//チェック
ret = GETID("memotter")
IF ret = TRUE
PRINT "起動OK"
ELSE
PRINT "起動NG"
EXITEXIT
ENDIF
FEND
// 文字列入力
PROCEDURE InputString()
WaitWindowText("memotter", "What", 10)
id = GETID("memotter")
// ⑥
SENDSTR(id, "あいうえお", 1, True)
//enterを送信
//sckey(id, vk_enter)
FEND
// ①ウィンドウの中のテキストが表示されるのを待つ
FUNCTION WaitWindowText(WindowTitle, text, timeOut)
RESULT = FALSE
// ウィンドウが表示されるのをtimeOutの時間まで待つ
FOR i = 0 TO timeOut
//②ウィンドウのID取得
id = GETID(WindowTitle)
// ③
staticText = GETITEM(id, ITM_STATIC)
IF staticText <> 0
FOR j = 0 TO staticText -1
n = POS(text, ALL_ITEM_LIST[j]) // ④
IFB n >= 1
PRINT text + "が見つかった"
BREAK 2 // ⑤
ELSE
PRINT text + "が見つからない"
ENDIF
NEXT
ELSE
PRINT "static text なし"
ENDIF
// 1秒待機
SLEEP(1)
NEXT
FEND
-------解説
①のコード
ウィンドウの中に検索したいテキストが表示されるのを待つ関数を作りました。
UWPアプリは起動時にスプラッシュ画面を表示するのですが、そのスプラッシュが消えて通常の状態になるのを待つ自作関数となります。
UWSCの標準関数GETID()だと、ウィンドウがあるかないかなので、スプラッシュの状態かどうかは判断できませんでした。
また、STATUS()という標準関数で、アクティブかどうかを判断できるのですが、こちらもスプラッシュでもアクティブと判断されるのでだめでした。
ということで、FOR文でループして、ウィンドウの中に、あるテキスト文字があるかどうかを判断する関数を作りました。
②のコード
GETIDをFOR文の中で実施しているのは、スプラッシュとスプラッシュがなくなったウィンドウでIDが違うので、FOR文の中でGETIDしています。
③のコード
GETITEM()はコントロールの内容を取得する標準関数です。
こちらを用いてStaticTextを取得してます。
StaticTextは戻り値として、取得できた文字列の数が入っており、ALL_ITEM_LIST[]に取得できたStaticTextが配列として入ってます。
④のコード
標準関数POS()で文字列が入っているかどうかを判定しています。
この場合"What"という文字列が入っているかどうかを判定してます。
⑤のコード
見つかったらBreakで抜けてます。
Breakの後に数字をいれると、ネストされたfor文の上の2個分抜けることができるので、2を指定してます。
⑥
標準関数のSENDSTR()を使って文字列を入力しています。
結果
苦労した点
Windowsがスプラッシュから切り替わったかどうかを判定するところ(WaitWindowText)が苦労しました。
Status()という標準関数を最初用いていたいのですが、これだとなんだかうまくいかず、苦肉の策でテキストで判定するようにしました。



0 件のコメント:
コメントを投稿