Loading [MathJax]/extensions/tex2jax.js

2021年10月17日日曜日

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


 

やりたいこと

前回の続きになります。

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

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

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

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

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


ソース

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

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

------
  1. // TC1 起動チェック  
  2. CheckStart()  
  3.   
  4. // TC2 文字の入力  
  5. InputString()  
  6.   
  7.   
  8. // 起動チェック  
  9. PROCEDURE  CheckStart()  
  10.     //起動  
  11.     DOSCMD("C:\test\memotter - ショートカット.lnk")  
  12.   
  13.     //チェック  
  14.     ret = GETID("memotter")  
  15.     IF ret = TRUE   
  16.         PRINT "起動OK"  
  17.     ELSE  
  18.         PRINT "起動NG"  
  19.         EXITEXIT  
  20.     ENDIF  
  21.       
  22. FEND  
  23.   
  24.   
  25. // 文字列入力  
  26. PROCEDURE  InputString()  
  27.   
  28.     WaitWindowText("memotter""What", 10)  
  29.       
  30.     id = GETID("memotter")  
  31.       
  32.     // ⑥  
  33.     SENDSTR(id, "あいうえお", 1, True)   
  34.       
  35.     //enterを送信  
  36.     //sckey(id, vk_enter)  
  37.       
  38. FEND  
  39.   
  40. // ①ウィンドウの中のテキストが表示されるのを待つ  
  41. FUNCTION WaitWindowText(WindowTitle, text, timeOut)  
  42.     RESULT = FALSE    
  43.   
  44.     // ウィンドウが表示されるのをtimeOutの時間まで待つ  
  45.     FOR i = 0 TO timeOut  
  46.         //②ウィンドウのID取得  
  47.         id = GETID(WindowTitle)  
  48.       
  49.         // ③  
  50.         staticText = GETITEM(id, ITM_STATIC)  
  51.         IF staticText <> 0  
  52.             FOR j = 0 TO staticText -1   
  53.                 n = POS(text, ALL_ITEM_LIST[j])  // ④  
  54.                 IFB n >= 1  
  55.                     PRINT text + "が見つかった"  
  56.                     BREAK 2         // ⑤  
  57.                 ELSE  
  58.                     PRINT text + "が見つからない"  
  59.                 ENDIF                 
  60.             NEXT  
  61.         ELSE  
  62.             PRINT "static text なし"  
  63.         ENDIF  
  64.           
  65.         // 1秒待機  
  66.         SLEEP(1)   
  67.     NEXT  
  68.       
  69. 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 件のコメント:
コメントを投稿