Eggplant Functionalスクリプティングのための上位10のSenseTalkコマンドと関数
Eggplant Functionalは、Turbo Captureセッション、Autosnippet Generation、およびAssisted Scriptingを含む、テストスクリプトとコードスニペットを作成するための複数の方法を提供します。これらの方法はすべて、ビューアウィンドウと対話し、スクリプトエディタでSenseTalkコードを生成するのに役立ちます。
しかし、あなたはまだ自分のコードを見直し、修正する必要があり、おそらく最終的にはより高度なSenseTalkスクリプトを手動で作成する必要があります。そのような状況のために、ここに便利なSenseTalkコマンドと関数のトップ10リストと、それらをいつどこで使用するかについてのいくつかのヒントをまとめました。
1. Clickコマンド
Click
コマンドを使用して、マウスボタンで行うように、テスト対象のシステム(SUT)上の位置をクリックします。通常は、画像参照を使用してクリックする位置を指定します:
Click "Launch_Chrome" // 画像名Launch_Chromeと一致する画面位置でクリックアクションを実行する
また、テキストでクリックする位置を指定することもできます。これは、提供されたテキストを画面で検索するためにOCRを使用します:
Click text:"Eggplant" // OCRが指定されたテキストを見つけた画面位置でクリックアクションを実行する
Click
コマンドは、ボタン、アイコン、リンク、チェックボックス、メニューオプションをクリックするなど、SUTと様々な方法で対話するのに便利です。また、テキストを入力するためのフィールドをクリックするためにも使用できます。また、マウスポインタのフォーカスを設定するために、SUT画面の任意のエリアをクリックすることもできます。
モバイルデバイスのSUTに対してテストを行っている場合、Tap
コマンドを Click
の代わりに使用することを選ぶかもしれません。これは、そのようなデバイス上のユーザー操作を考える際に、タップがより自然な方法だからです。しかし、Click
コマンドと Tap
コマンドは機能的 には同じであり、どちらもデスクトップOSでもモバイルOSでも使用できます。
関連記事
- マウスイベントと制御:
DoubleClick
、DoubleTap
、RightClick
などの関連コマンドについて学びます。 - ホットスポット: 画像のホットスポットを移動して、クリックアクションが画像の中心以外の場所、画像の外側を含む場所で行われるようにする方法を学びます。
- 画像プロパティリスト: スクリプティングを改善するために
Click
(および任意の画像検索)で使用できる追加のプロパティについて知ります。
2. TypeTextコマンド
TypeText
コマンドは、キーストロークをSUTに送信するため、あらゆるタイプのキーボード入力を入力するのに便利です。ドキュメントにテキストを入力したり、ウェブページやアプリケーション上のユーザー名とパスワードを自動的に入力する必要がある場合など、フォームフィールドにデータを入力するのに使用できます。
このコマンドを使用して、アプリケーション内で機能するキーボードコマンドを送 信することもできます。たとえば、コピーのためのCtrl+Cや貼り付けのためのCtrl+Vなどです。また、アプリケーション間を切り替えるためのAlt+tab(Windows)やCmd+tab(Mac)など、OSのアスペクトを制御するキーボードコマンドを送信することもできます。
リテラルテキストを送信するには、テキストを引用符で囲みます:
TypeText "Hello World!" // テキスト文字列をSUTに送信する
TypeTextキーワードを使用して非文字キーを送信することもできます:
TypeText AltKey,F4 // デスクトップ上のアプリを閉じるために必要なキーストロークをSUTに送信する
TypeText PageDown // ページダウンキーボードアクションを送信してページを下にスクロールする
文字キーと非文字キーの両方を組み合わせることもできます:
TypeText "Line1", Return, "Line2" // テキストドキュメントでは、このコマンドは2つの文字列を別々の行に印刷し、その間にリターン文字を挿入します
TypeText
コマンドは、SUT上で何も起こらないように見えても成功して完了することができます。たとえば、現在のフォーカスエリアがテキスト入力を受け付けない場合に文字を送信すると、キーストロークは送信されますが、通常は何も変わりません。
同様に、Ctrl+Vなどのキーボードコマンドを送信し、クリップボードに何もない場合、コマンドは成功して実行されますが、SUTには影響を与えません。したがって、このコマンドを使用するときには、SUTの状態を知り、画面やアプリケーションの目的の部分にフォーカスを当てることが重要です。
関連
- SUT上での入力:
TypeText
の使用とテキストの操作について、さらに詳しい情報を見る。 - TypeTextキーワード:
TypeText
コマンドで使用できるSenseTalkキーワードのリストを見る。iOSとAndroidのモバイルデバイスに固有のものが多数含まれています。 - キーボードとクリップボードのイベント: キーボード入力の操作に関する追加のコマンドと関数について学ぶ。
3. WaitForコマンド
WaitFor
コマンドは、指定された画像やテキスト文字列(OCR)がSUT上に見つかるか、指定された時間が経過するまで(どちらかが先に発生した場合)スクリプトの実行を停止します。この動作により、次のステップに進む前に要素が存在しているか、SUTが正しい状態にあるかを確認することができます。したがって、WaitFor
コマンドは、スクリプト内のタイミングと検証の両方に役立ちます。
最も基本的な使い方では、WaitFor
コマンドに検索する画像と時間値を提供します。時間値は、その画像が表示されるのをスクリプトが待つ最長時間です。画像が見つかったらすぐにスクリプトが続行され、経過時間にかかわらずスクリプトが続行されます。指定した時間 内に画像が見つからない場合は、例外がスローされます。
WaitFor 15, "Launch_Chrome.png" // 画像が見つかったときにすぐに進行するか、15秒以内に見つからない場合は例外をスローする
WaitFor
コマンドは、OCRを利用するためにテキスト参照と共に使用できます。また、一つ以上の画像やテキスト参照を指定することもできます。その場合、どちらかの参照が見つかったときにコマンドが進行します:
Click "Launch_Chrome.png"
waitfor 10, "Launch_AI", (text: "Apps", casesensitive: "yes", searchrectangle:(125,678,305,809)) // Launch_AI画像またはテキスト"Apps"のいずれかが見つかったときに進行するが、10秒以内にどちらも見つからない場合は例外をスローする
すべての画像とOCR検索と同様に、検索を補助するために追加のオプションを追加できます。上記のテキスト参照で示されている casesensitive
と searchrectangle
プロパティがその例です。
WaitFor
は、任意の画像またはテキスト(OCR)の検索コマンドのプロパティとしても使用できます。WaitFor
コマンドと同様に、WaitFor
プロパティは、Eggplant Functionalが指定した画像がSUTに表示されるまでの最大待ち時間です。
例:
Click (ImageName: "Done_button", waitFor: 2 minutes)
重要:
WaitFor コマンドは、より単純な Wait
コマンドとは明確に異なります。Wait
コマンドでは、時間値のみを指定し、ハードウェイト時間を作成します。これは、特にスクリプトの開発やデバッグ中に、いくつかの状況で役立つかもしれません。
最善の方法として、ほとんどの状況で WaitFor
を使用することを試みるべきです。WaitFor
コマンドは通常、より速く実行されるスクリプトにつながります。ただし、指定した画像やテキスト参照が見つからない場合は、例外がスローされることを覚えておいてください。
関連
- 画像とOCRの検索: 他の画像検索コマンドやテキスト検索コマンドについて学ぶ。
- 画像参照: コマンドや関数内で画像を参照する異なる方法について学ぶ。
- テキストプロパティ: テキスト(OCR)検索を改善するために設定できる異なるプロパティについて学ぶ。
4. Log コマンド
SenseTalk には、スクリプトログにメッ セージを追加し、追加情報を提供する可能性のある一連の Log
コマンドが含まれています。
-
Log コマンド: 基本的な
Log
コマンドを使用すると、スクリプトログにコメントを追加できます。これは、ログをデバッグのために後でレビューする必要がある場合、長いスクリプトのコードのセクションをマークするのに便利です。Log "Beginning SUT initialization" // 提供されたテキストをスクリプトログに書き込む
関数から返される値を記録するために Log コマンドを使用することもできます:
Click "Launch_Chrome"
Log FoundImageInfo() // 関数の返り値をログに書き込む。この場合、最後に見つけた画像の詳細
WaitFor 15, "Launch_Chrome.png"
Log the result // Displays how long it took to find the image基本的な
Log
メッセージは青いテキストで表示されます。 -
-
LogWarning コマンド:
LogWarning
コマンドは、スクリプトログにログメッセージを投稿するだけでなく、スクリプトの警告数に1を追加します。このコマンドは、スクリプトの失敗を引き起こすほどではないが、監視したい状態を注意深く記録するのに便利です。LogWarning "Search took longer than expected." // メッセージをログに書き込み、スクリプトの警告数を増やす
LogWarning
メッセージはスクリプトログにオレンジ色のテキストで表示されます。
-
-
-
LogError コマンド:
LogError
コマンドは、スクリプトログにログメッセージを投稿するだけでなく、スクリプトのエラーカウントにエラーを追加します。スクリプトの実行が終了するときにエラーがあると、スクリプトは失敗するので、スクリプトの実行が失敗としてカウントされる状況を追跡するためにLogError
を使用します。if the repeatIndex is greater than 5 then LogError "There is a problem." // repeatIndexはrepeatループの反復を数えるので、プロセスを完了するのに多くの反復が必要な場合にエラーを生成するようなこのような行を使用できます
LogError
メッセージはスクリプトログに赤いテキストで表示されます。
-
the ScriptLogging
グローバルプロパティを使用して、スクリプトログに書き込まれる情報のレベルを変更できます。ただし、LogWarning
と LogError
からの警告とエラーのカウントは、それらのコマンドのメッセージがログに書き込まれなくても常に更新されます。
関連
- 結果と報告:
Log
コマンドと他のスクリプトに関する情報を返すコマンドについて詳しく見る。 - テスト結果の読み取り: Eggplant Functionalでテスト結果情報を見つけてレビューする方法をご覧ください。
- Eggplant Functionalスクリプトのデバッグ: スクリプトのデバッグ方法について詳しく学習します。
5. ImageFound() 関数
ImageFound()
関数は、指定された画像が見つかったかどうかを示すtrue
またはfalse
の値を返します。通常、この関数は、repeatループやif/then/elseブロックなどの制御構造の一部としてスクリプトで使用します。画像がいつ見つかるか、または画像が見つかるかどうかに基づいて、次に何を行う かを制御できます。
例えば、ショッピングウェブサイトで検索を行い、その後、前回キャプチャした画像に基づいて、希望の商品が結果ページに表示されているかを確認する必要があると考えてみてください。次のような条件付き(if/then/else)を使用することができます:
if ImageFound(ImageName:"CatToy") // 画像が見つかるかどうかを確認
then
// 画像が見つかった場合にいくつかのアクションを実行
Log "Image found!"
else
// 画像が見つからなかった場合には別のアクションを実行
Log "Image not found."
end if
結果のページが長い場合、アイテムが存在する可能性がありますが、スクロールしないと画面に表示されません。アイテムが表示されるまでスクロールするために、ImageFound()
をrepeatループで使用することができます:
Repeat until ImageFound(ImageName:"CatToy", waitfor:5) // このrepeatループは、ImageFound()関数がtrueを返すまで反復します。
TypeText PageDown // ページダウンキーボードアクションを送信してページを下にスクロールします。
if the repeatindex is greater than 5 then throw "Image Not Found:", "Item not found when scrolling." // この条件文は、repeatループが5回以上反復されたかどうかを確認し、そうであれば、画像がページにない場合に無限ループを避けるために、実行を停止する例外を投げます。
end repeat
関連
- 画像とOCR検索: 他の画像検索コマンドやテキスト検索コマンドについて学びます。
- 条件文: スクリプトのオプションを制御するためにこれらの論理文を使用するさまざまな方法を見てみましょう。
- 繰り返しループ: スクリプトで使用できるさまざまなタイプの繰り返しループについて学びます。
6. RunWithNewResults コマンド
RunWithNewResults
コマンド を使用すると、スクリプト実行中に別のスクリプトを呼び出し、呼び出されたスクリプトに対して別の結果ログを作成することができます。この方法でスクリプトを呼び出す と、呼び出し元のスクリプトに結果プロパティリストが返されます。呼び出されたスクリプトが失敗しても、呼び出し元のスクリプトは自動的には失敗しません。結果プロパティリストに含まれる情報(成功/失敗のステータスなど)を使用して、次に何を行うかを決定できます。
呼び出したいスクリプトの名前とともに RunWithNewResults
を使用します。呼び出されたスクリプトに渡したい任意のパラメータ値を含めることもできます。
RunWithNewResults "SwitchSUT" -- 指定されたスクリプトを呼び出し、新しいログファイルを作成します
RunWithNewResults "FormField", Input1, Input2 -- 指定されたスクリプトを自身のログファイルとともに呼び出し、2つの変数をパラメータとして渡します
RunWithNewResults
は、Eggplant Functionalでスクリプト作成をモジュール化するための重要なコンポーネントです。個別の関数を実行するための小さなスクリプトを作成し、RunWithNewResults
を使用して主スクリプトからそれらを呼び出すことができます。結果プロパティリストの情報を条件文で使用して、呼び出されたスクリプトの成功または失敗に基づいて異なるアクションを実行することができます。また、結果の情報を使用してレポートを作成することも可能です。
以下の例はこれらの可能性をそれぞれ示しています:
set scriptList to (Install, Launch, Preferences, CheckVersion, WelcomePanel) -- 呼び出したいスクリプトのリストを格納する変数を作成します
repeat with each item myScript of scriptList -- リスト内の各項目の反復を設定します
// これらの2行は、新しいスクリプトを実行する前にすべての警告とエラーをクリアします:
set global errors to empty
set global warnings to empty
RunWithNewResults myScript -- リスト内の次のスクリプトを呼び出し、"the result"に情報を返します
set myResult to the result -- 結果プロパティリストを変数に入れます。結果の使用については、Result関数を参照してください。
if myResult's status is "Success" -- 呼び出されたスクリプトから返されたステータスを確認します
insert myScript after successes -- 後で使用するために、成功したスクリプトの名前をsuccesses変数に追加します
else
insert myScript after failures -- 失敗したスクリプトの名前をfailures変数に追加します
insert (script:myscript, errors: (global errors, myResult.ErrorMessage)) after allErrors -- スクリプト名とその他のエラー情報をallErrors変数に追加します
end if
End repeat
Run
コマンドは、RunWithNewResults
のよりシンプルなバージョンです。Run
コマンドを使用すると、呼び出されたスクリプトに新しいログファイルは作成されず、呼び出されたスクリプト内のエラーや例外は、呼び出すスクリプトを失敗させます。これは、求められる動作の場合があるでしょうから、これら両方のコマンドに精通していることが役立つでしょう。ただし、それらが異なる方法で機能することを認識しておくことも重要です。
関連
- スクリプトとAPIの呼び出し:
RunWithNewResults
、Run
、および他のテスト手法への呼び出し用の他のコマンドについての完全な情報を探します。 - テスト結果の読み取り: Eggplant Functional内でテスト結果情報を探し、レビューする方法を確認します。
- 主要なスクリプトからの実行: 主要なスクリプトで
RunWithNewResults
を使用する方法について詳しく学びます。
7. Putコマンド
Put
コマンドは、何かを他のものに入れることによって値を割り当てます。このコマンドは、SenseTalkの自然言語スタイルで変数の値を設定するのに便利です:
Put 5 into x // 数値5を持つ変数xを作成します
Put "Bob" into firstName // テキスト値Bobを持つ変数firstNameを作成します
このようにPut
コマンドを使用すると、コンテナーが持っていた可能性のある値はすべて上書きされます。つまり、前の値を新しい値で置き換えています。SenseTalkには、既存の値を更新するための他の方法が含まれています。例えば、 数値に対する数学演算子や、テキストの操作に対するチャンク表現などがあります。
Put
コマンドは値を代入せずに使用することも可能で、その場合、その値、つまりソースは出力ウィンドウ(つまり、RunウィンドウまたはScript EditorのOutputタブ)に送信されます。
Put myVar // myVarの値を出力ウィンドウに書き込みます
このようにPut
コマンドを使用すると、特にスクリプトのデバッグ中に値を追跡するのに便利です。プロダクションスクリプトで値や他の情報を出力するには、代わりにLog
コマンドを使用することを検討してみてください。
Set
コマンドはPut
に似ており、値を代入するためにも使用されます。ただし、構文は異なり、基本的にはPut
コマンドの動作とは逆の方法です:
Set x to 5
Set firstName to "Bob"
このSet
コマンドは、値を設定するためのこのパターンを使用する他のプログラミング言語にすでに慣れているスクリプターにとっては、より自然に感じられるかもしれません。
関連
- コンテナへの格納:
Put
コマンドについてのより詳しい情報と例をこのトピックで見つけることができます。 - SenseTalkのコンテナ: SenseTalkで値を割り当てて変更する方法について学びます。
- Eggplant Functionalスクリプトのデバッグ:
Put
コマンドと他のデバッグ方法を使用する方法について詳しく学びます。
8. ReadText()関数
ReadText()
関数はOCRを使用してSUT画面からテキストを読み取ります。この関数を使用して画面から値を読み取り、スクリプトで後で使用したり、関数が返す情報に基づいて異なるアクションを実行したりすることができます。
ReadText()
では、関数が読み取る領域を指定する必要があります。これは、矩形を定義することによって行います。通常、矩形を 定義する最良の方法は、左上と右下の角に画像参照を使用することです。矩形を定義する方法についての詳細は、矩形設定とコード生成ダイアログボックスを参照してください。
よく、ReadText()
はPut
(またはSet
)コマンドと一緒に使用し、画面から値を読み取り、それを変数に代入します:
Put ReadText("NotePadUpLeft", "NotePadLowRt", contrast: "on") into textVar // 指定した矩形で認識されるテキストを変数に入れます
上記の例のように、ReadText()
関数でOCRプロパティを使用してエンジンがターゲットをどのように読み取るかを改善することができます。
よく、ReadText()
はPut
(またはSet
)コマンドと一緒に使用し、画面から値を読み取り、それを変数に代入します:
log ReadText("HeaderTop", "HeaderBottom") // 指定された矩形で読み取ったテキストをログに記録します
If ReadText("NotePadUpLeft", "NotePadLowRt") is empty then // ReadText() が指定した矩形でテキストを見つけるかどうかを確認します
log "No text found." // テキストが見つからない場合、コメントをログに記録します