データを収集・使用する
SUTでテキストを読み取る
For simplicity, the following information refers to the ReadText() function. This information applies to the ReadTable() function as well.
長方形内のテキストを読み取る
When you call the ReadText() function with a rectangle parameter, the rectangle absolutely limits the returned text value. すなわち、テキストのラインがテキスト長方形の端を超えている場合は、はみ出ているテキストは返されません。
eggPlant Functional内のその他の長方形と同様に、テキスト長方形は2つの対向するポイントにより決定されます。各ポイントは、(画像が見つかったロケーションを表す)画像名として、またはその他の座標値で指定可能です。
例:
Set address to ReadText (("AddressField", "EndAddressField"))
// Sets the address variable to the text in the given rectangle. The diagonal points of
// the rectangle are the location of the AddressField image, the location of the
// EndAddressField image.
ポイント周辺のテキストを読み取る
When you call the ReadText() function with a single point parameter, the OCR engine attempts to find a line of text that includes your point, or a line of text that begins near that point.
ポイントは、(画像が見つかったロケーションを表す)画像名として、またはその他の座標値で指定可能です。
SUTクリップボードを使用する
If the text you want to read can be selected and copied, copy the text to the SUT clipboard, then return the clipboard contents through the RemoteClipboard() function.
例:
Click "SomeTextField"
TypeText CommandKey, "a" // Selects All in the text field.
TypeText CommandKey, "c" // Copies text to the clipboard.
put RemoteClipboard(5) // Waits up to 5 seconds to return the clipboard content generated by previous remote command; shows that content.
データ駆動テスト
テスト自動化の大きなメリットの1つは、異なるデータ値を使用して繰り返しテストを実行できるという点です。よくあるアプローチとして、データをテキストファイルに保存して、スクリプト実行中にそのファイルから値を読み取るやり方が挙げられます。SenseTalkではチャンク表現や直接的ファイルアクセスを利用しますので、フォーマットされたテキストファイルで上記アプローチを容易に行えます。
例えば、電卓アプリケーションをテストするため、コンマで区切られた数値をテキストファイルでパスするとします。
例:電卓テスト用データファイル |
|
1, 2, 2 |
|
3, 4, 12 |
|
5, 6, 30 |
以下のスクリプトは、ファイルの各ライン上の最初の2つの値をかけるよう、電卓を駆動します。その後生成物を返し、それらが正しいか3番目の値と比較します。
例:
repeat with theData = each line of file "CalculatorData.txt"
TypeText item 1 of theData // Enters 1st value from the current line of the data file
Click "Multiply Button"
TypeText item 2 of theData // Enters 2nd value from the current line of the data file
Click "Equals Button"
Click “OutputField”
TypeText CommandKey, "a" // Selects All in the output field
TypeText CommandKey, "c" // Copies text to the SUT clipboard
put remoteClipboard() into Answer // Puts clipboard contents into a variable
if (Answer is not equal to item 3 of theData) then // Compares results with 3rd value in the data file
LogError "Got: " & theAnswer & ", " & item 1 of theData & " x " & item 2 of theData & "should be " & item 3 of theData // Logs discrepancy as an error:
end if
end repeat
データファイルを作成する
The data you use in your scripts might come from a spreadsheet as well as a text file. スプレッドシートプログラムには通常、ファイルをCSV(コンマ区切り値)フォーマットで、またはタブ区切りテキストとしてエクスポートするオプションがあります。
You can also pass the data directly in a script, as shown in the following example. The script in this example creates a test data file with three numbers on each line. The third number is the product of the first two. *
例:
set file "/tmp/CalculatorData.txt" to {{
1,2,2
3,4,12
5,6,30
}}
データファイルを読み取り・検証する
The following example shows a script that reads a returned data file.
例:
repeat with theData = each line of file "/tmp/CalculatorData.txt" // Assigns the contents of each line to theData.txt in turn.
put repeatIndex() & ": " & theData // Counts the number of times the loop is repeated; writes this value before each line.
end repeat
If you run the script at this point, Data.txt returns like this:
1: 1,2,2
2: 3,4,12
3: 5,6,30
Now that the script can read the data file, the next step is to verify that the values on each line contain useful information a shown in the following example:
例:
put zero into goodCount
put zero into badCount
repeat with theData = each line of file "/tmp/CalculatorData.txt" // For each line of the /tmp/ file...
put item 1 of theData into num1 // Puts the three numbers from each line into three different variables.
put item 2 of theData into num2
put item 3 of theData into product
if product = num1 * num2 then // Compares the 3rd number to the product of the first two...
add 1 to GoodCount // then increments GoodCount if they are equal;
else
put "Bad Data at line " & repeatIndex() & ": " & theData // If they are not equal, displays a "Bad data" message,
add 1 to BadCount // and increments BadCount
end if
end repeat
put "Good data lines: " & GoodCount // Returns the GoodCount value
put "Bad data lines: " & BadCount // Returns the BadCount value
タイミングスクリプトイベント
This section defines some of the functions useful for timing script events, and provides an example of how you can use them in script logging. For more information, see the Date and Time Values in SenseTalk.
- The Date:現在の日付を返します
- The Time:現在の時刻を返します
- The Seconds:2001年1月1日からの現在までの秒数を返します。
The following script shows a time-logging example:
例:
log "Starting timed task at" && the time && "on" && the date // Logs the script start time and date.
put the time into startTime // (* put any code here that you want to time *)
put the time into stopTime // (* put any code here that you want to time *)
log "That took" && stopTime - startTime &&"seconds to complete." // Logs the total time of the script execution.
If you run the above code, look for the following output:
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.