高度なイメージベース テスト
前のセクションで確認したように、イメージベース テストは、テストにおける課題の解決方法となる場合があります。しかしながら、他のアプローチと同様に、正しく適用しなければ期待する動作となりません。
レコーディングされたイメージと、テスト実行中に取得されるイメージが一致しない場合、イメージベースのテストは難しいものになります。テスト実行中に、UI 要素がハイライトされている、アイコンが変更されている、などの単純な要因が原因である可能性があります。また、意図された要素の代わりに似たような別の要素が検知されてしまう誤検知も、同様に問題となる可能性があります。
このセクションでは、これらの課題を解決するための、より高度なイメージベースの設定について説明します。
イメージが見つからない場合
場合によっては、背景やフォントの色の違いなどの UI 要素の微妙な変更が、テストの失敗に繋がります。ここでの課題は、グラフィカル表現の微妙な変更とは関係なく、UI 要素を正しく識別する必要があることです。ここでは、その対応方法について説明します。
エラーとなるテストの作成
最初に、上記で説明した原因によってエラーとなるテストを作成します。その後に、以降で説明する方法で、これを修正します。
以下の手順でテストを作成します。
新しいレコーディング モジュールを作成し、レコーディングを開始し、イメージベース レコーディングを有効にします。
Ranorex Studio Demo Application のカレンダー ビューで、任意の日付をクリックし、レコーディングを停止します。
アクション テーブルで、記録されたアクションを確認します。
テストの実行
テストを実行し、テストがエラーで失敗することを確認します。
成功する場合
- 記録した日付が選択状態ではない場合、テストは成功します。
失敗する場合
- 記録した日付が選択状態の場合、テストは失敗します。
- これは、日付がクリックされたことで背景がグレーに変わっていることが原因です。
- これは、Ranorex Studio がデフォルトのイメージベース設定で要素を認識できなくなるのに十分な変化です。
レポートのエラー メッセージ
解決方法
この問題を解決するには、記録されたアクションのイメージベース プロパティを変更する必要があります。
アクションを選択し、F4 を押下してプロパティを開きます。
Image-based プロパティのドロップダウンを開きます。
以下のプロパティを変更します。
Preprocessing
- Preprocessing プロパティは、イメージに様々なフィルターを適用します。
- これらのフィルターは、色、シャープネス、輝度、などに対して、イメージの識別をより堅牢にします。
- 今回の例では、Edges, EdgesSobel, Grayscale を選択します。
Similarity
- Preprocessing プロパティは、多くのイメージ差分を除去することができますが、完全ではありません。
- Similarity プロパティによって、比較画像と実際の画像が、どの程度類似しているかという値を設定できます。デフォルトは 1.0 、つまり、完全一致です。
- 今回の例では、0.98 を指定します。
参照
プリプロセス フィルターや類似度(Similarity)については、Ranorex Studio アドバンスト > イメージベース テスト > ⇢ イメージベース プロパティ を参照してください。
テストの再実行
変更したプロパティで、テストを再実行します。
日付の背景色が変更されているカレンダー
プロパティの変更によって、UI 要素が正常に識別され、テストが成功
誤ったイメージが検出される場合
イメージベース テストでは、Ranorex Studio が、記録された UI 要素を見つけられず、代わりに、それに似た意図しないイメージが検索される場合があります。この問題を解決する方法は 2 つあります。ここでは両方について説明します。また、最適な結果を得るためには、それらを組み合わせることをおすすめします。
エラーとなるテストの作成
最初に、誤った UI 要素が検出され、エラーとなってしまうテストを作成します。その後に、以降で説明する方法で、これを修正します。
以下の手順でテストを作成します。
レコーディングを開始して、イメージベース レコーディングを有効にし、Demo Application のカレンダー ビューで、一桁の日付をクリックします。
マウス クリックをおこなうアクション位置の枠の大きさに注意してください。この枠が、イメージ検索領域になります。この枠の大きさが、イメージが誤検出される原因になります。これについて、解決方法 #1 で修正します。
レコーディングを停止し、アクション テーブルのアクションを確認します。
テストの実行
テストを実行し、テストがどのように失敗するのか確認します。
メモ
この例では、テストを実行する前に、日付として 7 が選択されたことを意図的に確認しました。これにより、日付の部分が灰色になり、レコーディングした時には異なる見た目になっています。この手順は必須ではありませんが、必ず意図しない 7 が検出され、テストが失敗するようになります。
この手順をおこなわない場合、テストで正しい 7 が検出される場合と、意図しない 7 が検出される場合とが発生してしまうため、なるべく実施してください。
June 7 は、最初にレコーディングした日付です。レコーディング時と比べると、背景色がグレーになっているため、Ranorex Studio で識別できません。
その代わりに Ranorex Studio は、カレンダー ビューの下部にある、今日の日付を表示している部分から、別の 7 を検出します。
解決方法 #1
失敗するテスト作成したときに設定した、アクション位置を覚えているでしょうか。イメージ検索に指定している範囲は非常に狭く、イメージをユニークに特定するのに十分な情報が含まれていません。これにより、他の 7 も検索されてしまっています。ビルトインのイメージ エディターを使用して、これを修正します。
デフォルトのアクション位置の枠: 要素の非常に近い位置を囲っています。これにより、似た他の要素も検索されてしまいます。
修正したアクション位置の枠: 他の情報(ここでは左右の空白)も含まれるように広げた枠。これにより、意図しない要素がマッチしにくくなっています。
イメージ エディターでの枠の編集
枠を編集するには、ビルトインの ⇢ イメージ エディター を開いてください。
アクションを選択し、参照しているイメージの横にあるボタンをクリックします。
イメージ エディター ツールバーから、イメージ検索領域の選択 ボタンをクリックし、7 の周囲の空白が含まれるようにドラッグし、イメージ検索領域を拡張します。(必要に応じて、ズームインを使用してください)
OK をクリックします。
再度テストを実行すると、正しい 7 のみを検出できるようになっているはずです。上で説明したように、これは問題を解決する 1 つ目の方法です。2 つ目の方法については、次で説明しますが、両方を組み合わせることで、より適切な結果が得られます。
解決方法 #2
2 番目の方法は、イメージ除外領域機能を使用することです。この機能により、イメージ検出で参照しない領域を指定できます。
これにより、誤って検出してしまう原因となるイメージの一部を、単純に無視できます。
⇢ イメージ エディター で、イメージ除外領域の選択 をクリックします。
今日の日付が表示されている箇所をドラッグで選択します。
テストを実行すると、指定した領域が無視され、意図しないイメージが検出されないことが確認できます。
イメージベース テストの TIPS
イメージベース テストでは、多くの実験と経験が必要になることがあります。ここではいくつかの TIPS を紹介します。
ユニーク
他にマッチする候補がないよう、可能な限り、イメージをユニークなものにしてください。イメージ除外領域も有効に活用してください。
サイズ
対象のイメージを、可能な限り小さくしつつ、必要に応じて大きくしてください。何度かの試行が必要になる場合があります。
類似度
類似度(Similarity)が 1.0 では、完全に同一なイメージのみを検出します。これはしばしば逆効果です。多くの場合、0.99 を設定するのが適切です。場合によっては、もう少し低い値を設定する必要があるかもしれませんが、0.95 以下を設定する必要は滅多にありません。0.95 以下では、イメージにはかなりの差異があるはずです。
プロプロセス フィルター
プリプロセス フィルターを使用してください。これにより、色、詳細度、明度などの変化に対して、テストをより堅牢にすることができます。例えば、入力によって色が変化する可能性があるUI要素がある場合には、Grayscale および Edge フィルターを使用できます。これにより Ranorex Studio は、UI 要素の色が変化しても、それを検出することができます。
参照
プロプロセス フィルターと類似度(Similarity)については、Ranorex Studio アドバンスト > イメージベース テスト > ⇢ イメージベース プロパティ を参照してください。