画像の検索
Eggplant Functionalは画像ベースのテストツールであり、あなたがテストを作成する際にキャプチャする画像に大いに依存しています。最も信頼性の高い画像は、画像キャプチャのベストプラクティスを使用してキャプチャしたものとなります。
このセクションでは、一般的な画像マッチング問題と、上記のベストプラクティスを使用して既にキャプチャされた画像をどのように扱うか について説明します。
最も一般的な画像マッチング問題
最も一般的な画像マッチング問題とその解決策は次の通りです:
### 問題 | ### 解決策 |
---|---|
画面の要素が、その画像がキャプチャされたときと異なる状態になっています。 | 複数の可能な状態を持つ画像を見つけるために、画像コレクションを使用します。 |
画面の要素が十分に早く表示されず、Eggplant Functionalがそれを検索した後に表示されます。 | タイミング問題を避けるためのベストプラクティスを使用します。 |
同じ画像の複数のインスタンスが画面に表示され、Eggplant Functionalが間違ったものと対話しています。 | EveryImageLocation()関数を使用するか、画面の特定の部分を検索します。これらのアプローチは、同じ画像の複数のインスタンスを扱う方法で説明されています。 |
画面の要素が、画像がキャプチャされたときと異なるサイズで表示されています。これは、モバイルアプリケーションでのクロスデバイステストのように、テストが作成時に使用したSUTと異なるSUTに対して実行されている場合、またはSUTの解像度が変更された場合などの理由で生じる可能性があります。 | Adaptive to Image検索タイプ、Image Scaling、または両方を使用して画像を検索します。 |
複数の可能な状態を持つ画像の検索
スクリプティングを行っているとき、SUT上の画像があなたがそれらをキャプチャした後も同じままであることを常に期待することはできません。たとえば、ウィンドウの閉じるボタンをクリックしたい場合、そのウィンドウがアクティブな状態であるかどうかは定かではありません。Windowsでは、ウィンドウがアクティブかどうかによって、閉じるボタンが赤く表示されるか灰色に表示されるかが変わります。
このような状況に対応するためには、画像コレクションを作成することができます。画像コレクションを使用すると、Eggplant Functionalは単一の画像検索で複数の画像を検索することができます。その後、コレクション内のどの画像が存在しているかに関係なく、同じコード行を実行することができます。これはEggplant Functionalが同じスクリプトを複数のブラウザ、プラットフォーム、デバイス間で実行することができるユニークな能力の一部です。
タイミング問題を避ける方法
スクリプトが何度も成功した後に突然、Viewerウィンドウで画像が見つからないと報告することがあります。これは、画像認識の問題ではなく、タイミングの問題であることがほとんどです。
タイミング問題かどうかを判断する簡単なテストがあります: 失敗した行を選択し、スクリプトエディターの「選択した行を実行」ボタンをクリックします。行が正常に実行された場合、Eggplant Functionalが画像が画面に表示される前に画像を検索しようとした可能性が高いです。これはタイミングの問題です。画像がまだ見つからない場合は、画像に変更がないかViewerウィンドウを確認するか、保存した画像の検索タイプを変更してみてください。
以下のヒントは、タイミング問題の防止に役立つでしょう:
WaitFor コマンド
WaitFor
コマンドは、指定した画像が見つかるまでスクリプトの次の行を実行しないようにします。これは、前のステップで新しいアプリケーションやウェブページを開くときに特に役立ちます。(すでに開いているアプリケーションの他の部分を開くときには通常必要ありません。)
例: WaitFor
コマンドの使用
Click "SaveAs"
WaitFor 5, "SaveDialog"
// SaveDialogが表示されるのを最大5秒間待ちます。
TypeText "FileName"
この例では、スクリプトはSaveダイアログが表示されるのを最大5秒間待ち、それから入力を試みます。(Saveダイアログが5秒以内に表示されない場合、スクリプトは失敗します。)
WaitFor
の時間を十分に設けることを心掛けてください。待ち時間を正確に予測しようとする必要はありません。スクリプトは画像が見つかったらすぐに進むので、成功時に時間を失うことはありません。良い経験則は、MaxWait
時間を合理的なユーザーが待つと思われる時間に設定することです。それが十分でない場合、おそらくアプリケーションの問題を見つけたということです。
WaitFor
では、searchRectangle
のような時間以外のプロパティを渡すこともできます:
WaitFor 2, {ImageName:"MyImage",searchRectangle:[0,0,1920,540]}
WaitFor vs. Wait
Wait
コマンドは、スクリプトを指定した時間だけ一時停止します:(数字だけの場合は秒を表し、minutes
やmilliseconds
といった単語も入力できます。)
Wait
コマンド中、Eggplant Functionalは何も行いません。特定のポイントでスクリプトを一時停止したいだけの場合に便利ですが、SUT上で何かが起こるのを待っている場合は、WaitFor
コマンドを使用した方が結果が信頼性があり(そして潜在的には速い)です。
WaitFor
コマンドを使用すると、指定する時間は「最大」時間であり、絶対的な時間ではありません。画像が最大時間前に表示されると、スクリプトはすぐに続行します。
例