データの収集と利用
SUT上のテキストの読み取り
ReadText()
関数と ReadTable()
関数は、Eggplant FunctionalのOCRエンジンを使用して、SUT上の指定された領域のテキストを読み取り、返します。領域は、長方形内(対角線上の二点によって決定される)や、単一の点の近くにあることができます。
簡単にするために、以下の情報は ReadText()
関数を参照しています。この情報は ReadTable()
関数にも適用されます。
長方形内のテキストの読み取り
ReadText()
関数を長方形のパラメータとともに呼び出すと、長方形は返されるテキスト値を絶対的に制限します。つまり、テキストの行がテキストの長方形の端を越えて伸びている場合、オーバーフローテキストは返されません。
Eggplant Functionalの他の長方形と同様に、テキストの長方形は二つの対角点によって決定されます。各点は 画像名(それが見つかった場所を表す)または他の座標値として指定できます。
例::
Set address to ReadText (("AddressField", "EndAddressField"))
// アドレス変数を指定された長方形内のテキストに設定します。長方形の対角点は
//「AddressField」画像の位置と「EndAddressField」画像の位置は、
// 指定された長方形内にあります。
点近くのテキストの読み取り
ReadText()
関数を単一の点パラメータとともに呼び出すと、OCRエンジンはあなたの点を含むテキスト行、またはその点近くで始まるテキスト行を見つけようと試みます。
点は画像名(それが見つかった場所を表す)または他の座標値として指定できます。
SUTクリップボードの使用
読みたいテキストが選択してコピーできる場合は、テキストをSUTのクリップボードにコピーし、RemoteClipboard()
関数を通じてクリップボードの内容を返します。
例:
Click "SomeTextField"
TypeText CommandKey, "a" // テキストフィールド内の全てを選択します。
TypeText CommandKey, "c" // テキストをクリップボードにコピーします。
put RemoteClipboard(5) // 前のリモートコマンドによって生成されたクリップボードの内容を最大5秒間待ってから返します。
注釈: Mac OS X システムでは、ユーザーアカウント外で実行されているVNCサーバー(システムサーバー)はクリップボードの内容を転送できません。SUTのクリップボードにアクセスしたい場合は、アクティブなユーザーアカウント内のVNCサーバーに接続していることを確認してください。
データ駆動型テスト
テスト自動化の大きな利点の一つは、異なるデータ値を使用してテストを繰り返し実行する能力です。一般的なアプローチは、テキストファイルにデータを保存し、スクリプトの途中でそのファイルから値を読み取ることです。SenseTalkのチャンク式と直接ファイルアクセスは、このタスクをフォーマットされたテキストファイルで簡単に行うことができます。
例えば、計算機アプリケーションをテストするために、カンマで区切られた数値が書かれたテキストファイルを渡すことができます。
例:計算機テストデータファイル | |
---|---|
1, 2, 2 | |
3, 4, 12 | |
5, 6, 30 |
以下のスクリプトは、ファイルの各行の最初の二つの値を掛け合わせるために計算機を駆動します。その後、それらの製品を返し、それらを三番目の値と比較して検証します。
例:
repeat with theData = each line of file "CalculatorData.txt"TypeText item 1 of theData // データファイルの現在の行から1つ目の値を入力します
TypeText item 1 of theData // データファイルの現在の行から2つ目の値を入力します
Click "Multiply Button"
TypeText item 2 of theData // データファイルの現在の行から2つ目の値を入力します
Click "Equals Button"
Click “OutputField”
TypeText CommandKey, "a" // 出力フィールド内の全てを選択します
TypeText CommandKey, "c" // テキストをSUTのクリップボードにコピーします
put remoteClipboard() into Answer // クリップボードの内容を変数に入れます
if (Answer is not equal to item 3 of theData) then // 結果とデータファイルの3つ目の値を比較します
LogError "Got: " & theAnswer & ", " & item 1 of theData & " x " & item 2 of theData & "should be " & item 3 of theData // 不一致をエラーとして記録します:
end if
end repeat
データファイルの作成
スクリプトで使用するデータは、テキストファイルだけでなく、スプレッドシートからも取得することができます。スプレッドシートプログラムには通常、CSV(カンマ区切りの値)形式、またはタブ区切りのテキストとしてファイルをエクスポートするオプションがあります。
次の例に示すように、スクリプト内で直接データを渡すこともできます。この例のスクリプトは、各行に3つの数字があるテストデータファイルを作成します。3つ目の数字は最初の2つの数字の積です。*
例:
set file "/tmp/CalculatorData.txt" to {{
1,2,2
3,4,12
5,6,30
}}
注釈: SenseTalkは、ファイルという言葉を使って、ファイル名を続けることで、ファイルの全内容を簡単に読み書きできます。上の例のファイル名を参照してください。正しいファイルを操作していることを確認するために、ファイルの完全なパス名を使用することをお勧めします。詳細については、File and Folder Interactionのページを参照してください。
データファイルの読み込みと検証
次の例は、返されたデータファイルを読み込むスクリプトを示しています。
例:
repeat with theData = each line of file "/tmp/CalculatorData.txt" // それぞれの行の内容を順番にtheData.txtに割り当てます。
put repeatIndex() & ": " & theData // ループが繰り返される回数をカウントし、各行の前にこの値を書き出します。
end repeat
この時点でスクリプトを実行すると、Data.txt
は次 のように返されます:
1: 1,2,22: 3,4,123: 5,6,30
スクリプトがデータファイルを読むことができるようになったので、次のステップは、各行の値が有用な情報を含んでいることを確認することです。次の例を参照してください:
例:
put zero into goodCount
put zero into badCount
repeat with theData = each line of file "/tmp/CalculatorData.txt" // /tmp/ ファイルの各行に対して...
put item 1 of theData into num1 // 各行の三つの数字を三つの異なる変数に入れます。
put item 2 of theData into num2
put item 3 of theData into product
if product = num1 * num2 then // 3つ目の数字を最初の二つの数字の積と比較し...
add 1 to GoodCount // それらが等しければGoodCountを増やす。
else
put "Bad Data at line " & repeatIndex() & ": " & theData // 等しくなければ、"Bad data"メッセージを表示し、
add 1 to BadCount // BadCountを増やす
end if
end repeat
put "Good data lines: " & GoodCount // GoodCountの値を返します
put "Bad data lines: " & BadCount // BadCountの値を返します
注記:このスクリプト内のline
とitem
という用語は、テキストの一部を指すSenseTalkの「チャンク表現」です。通常、アイテムはカンマで区切られますが、the itemDelimiter
ローカルプロパティを設定することで、他の文字をデリミタとして指定することができます。チャンク表現や異なるデリミタの使用についての詳細は、チャンク表現をご覧ください。
スクリプトイベントのタイミング
このセクションでは、スクリプトイベントのタイミングに役立ついくつかの関数を定義し、それらをスクリプトのログにどのように使用するかの例を提供します。詳細については、SenseTalkの日付と時間の値を参照してください。
- The Date: 現在の日付を返します
- The Time: 現在の時刻を返します
- The Seconds: 2001年1月1日以降の秒数を整数で返します
次のスクリプトは時間ログの例を示しています:
例:
log "Starting timed task at" && the time && "on" && the date // スクリプトの開始時刻と日付をログに記録します。
put the time into startTime // (* ここにタイムしたいコードを入れる *)
put the time into stopTime // (* ここにタイムしたいコードを入れる *)
log "That took" && stopTime - startTime &&"seconds to complete." // スクリプトの実行にかかった総時間をログに記録します。
上記のコードを実行すると、以下の出力が表示されます:
2002-07-16 14:33:36 -0600log Starting timed task at 02:33 PM on 07/16/02
2002-07-16 14:33:39 -0600log That took 2.500326 seconds to complete.