2021年10月17日日曜日

自動テストの練習3 (UWSC編②) 文字入力


 

やりたいこと

前回の続きになります。

UWPアプリの簡単なテスト(スモークテスト?)をUWSCでやってみたいというものになります。

UWSC編②では文字を入力するテストケースを実施しみました。

こちらの赤枠に文字列を入力するテストになります。

最初に考えたテストケースのTC2になります。

IDTestCaseの説明TestCaseの手順出力期待値
TC2文字の入力「あいうえお」を入力する
enterを押す
「あいうえお」が入力される


ソース

ソースコードはこちらになります。

前回の分に足してるので、ちょっと長いです。

------
// 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()を使って文字列を入力しています。

結果

実行すると文字を入力して、Enterを押すところまで実施できました。


苦労した点

Windowsがスプラッシュから切り替わったかどうかを判定するところ(WaitWindowText)が苦労しました。

Status()という標準関数を最初用いていたいのですが、これだとなんだかうまくいかず、苦肉の策でテキストで判定するようにしました。

次回へ続く。




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