メインコンテンツまでスキップ

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でも使用できます。

関連情報

  • マウスイベントと制御: DoubleClickDoubleTapRightClickなどの関連コマンドについて学びます。
  • ホットスポット: 画像のホットスポットを移動して、クリックアクションが画像の中心以外の場所、画像の外側を含む場所で行われるようにする方法を学びます。
  • 画像プロパティリスト: スクリプティングを改善するために 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の状態を知り、画面やアプリケーションの目的の部分にフォーカスを当てることが重要です。

関連情報

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検索と同様に、検索を補助するために追加のオプションを追加できます。上記のテキスト参照で示されている casesensitivesearchrectangle プロパティがその例です。

ノート

WaitFor は、任意の画像またはテキスト(OCR)検索コマンドのプロパティとしても使用できます。WaitFor コマンドと同様に、WaitFor プロパティは、指定した画像がSUT上に表示されるのをEggplant Functionalが待つ最大時間です。

例:

Click (ImageName: "Done_button", waitFor: 2 minutes)
Important

重要: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 // 画像を見つけるのにどれだけ時間がかかったかを表示する

基本的な 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 グローバルプロパティを使用して、スクリプトログに書き込まれる情報のレベルを変更できます。ただし、LogWarningLogError からの警告とエラーのカウントは、それらのコマンドのメッセージがログに書き込まれなくても常に更新されます。

関連情報

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コマンドを使用すると、呼び出されたスクリプトに新しいログファイルは作成されず、呼び出されたスクリプト内のエラーや例外は、呼び出すスクリプトを失敗させます。これは、求められる動作の場合があるでしょうから、これら両方のコマンドに精通していることが役立つでしょう。ただし、それらが異なる方法で機能することを認識しておくことも重要です。

関連

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コマンドは、値を設定するためのこのパターンを使用する他のプログラミング言語にすでに慣れているスクリプターにとっては、より自然に感じられるかもしれません。

関連

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." // テキストが見つからない場合、コメントをログに記録します
End If

関連

9. Connectコマンド

Connectコマンドは、テスト対象のリモートシステム(SUT)への接続を開きます。複数の接続が開いている場合、アクティブな接続も切り替えます。このコマンドは、SUT環境を切り替えたいときにスクリプトで使用できます。また、コマンドラインから実行するスクリプトでもConnectコマンドを使用する必要があるでしょう。

Eggplant Functionalの接続リストに保存されているSUTでConnectコマンドを使用している場合、ディスプレイ名でSUTを指定できます:

Connect "Windows10 #3" // この接続を接続リストで見つけ、保存された詳細を使用して接続を確立します

しかし、ベストプラクティスとして、SUTの詳細な接続情報を指定することを検討するべきです。これにより、コマンドとスクリプトがよりポータブルになります:

Connect serverID:"10.1.11.113", portNum: 5900, type: "VNC", Visible: "No" // 指定されたポートと他のオプションを使用して、指定されたIPアドレスにVNC接続を開きます

セキュアな接続を使用している場合のVNCとRDP接続のユーザー名とパスワード、SSH認証情報など、追加の接続オプションを含めることができます。上記の例で使用されているVisibleオプションは、Eggplant Functionalのビューアウィンドウが開くかどうかを決定します。これをNoに設定すると、コマンドラインからスクリプトを実行する場合や、他の方法でテストを無人で実行する場合に便利です。

利用可能なオプションの全リストは、Connectコマンドで説明されています。

ノート

スクリプトでDisconnectコマンドを使用して接続を閉じることができます。ただし、接続を切り替える予定の場合、接続を開いたままにしておくと、テストの実行時間を節約できます。その後、テストの終了時にすべての開いている接続を閉じます。

関連

10. スワイプコマンド

Swipeコマンドは、スワイプジェスチャーを模倣するためにモバイルデバイステストで使用されます。スワイプジェスチャーは方向性があるため、これらのコマンドは通常スワイプできるさまざまな方向を反映しています:SwipeDownSwipeLeftSwipeRightSwipeUp

コマンドには、スワイプを開始する参照点を提供できます。これは画像、テキスト(OCR)、または座標である可能性があります:

SwipeDown Launch_Chrome // 指定した画像からスワイプダウンアクションを開始します

開始点を提供しない場合、スワイプはスワイプの方向に反対の側の中心から始まります。例えば、SwipeUpの場合、スワイプは画面の下部の中心から始まり、SwipeLeftの場合、スワイプは画面の右側の中心から始まります。

repeat until imagefound (imagename:Spotify,waitFor:5) // 特定の画像が見つかるまで繰り返します。
if the repeatindex = 5 then
logerror "Spotifyが見つかりません"
exit repeat // 5回反復したら、repeatループを終了します
else
SwipeUp // 画面の下から上にスワイプします
wait 2 // スワイプ後に画面が落ち着くのを2秒待ちます
end if
end repeat

SwipeSpeedグローバルプロパティでスワイプアクションの距離を制御できます。デフォルト値は40です。早く(短く)スワイプするためにはより低い値を設定し、遅く(長く)スワイプするためにはより大きな値を設定します。テストニーズに最適な値は何かを確認するために、異なる値をテストする必要があるかもしれません。

関連