Ranorex:アクションスポット
Ranorexはオブジェクトベースでテストの作成をおこないます。たとえば、クリック アクションは、見た目や座標に関係なく、常に特定のUI要素に対して実行されます。しかし、クリック アクションのアクションスポット(Action spot)には、Relative の文字に隠れて、51; 13 というような値が設定されていることが確認できます。
これはRanorexが座標ベースでテストを作成することを意味するのでしょうか? そして、この動作を変更することはできるのでしょうか?また、どのような影響があるのでしょうか?
本記事では、これらの疑問について解説していきたいと思います。
座標モード
この動作の設定は、Ranorexの 設定 -> レコーダーの初期設定 タブにある、レコーディング時の座標モード でおこなえます。この設定には、Pixel、None、Proportional の3つの値があります。
この設定では、UI要素内の正確なアクションスポットを決定する方法を定義します。
デフォルト設定は、Pixel です。Pixelは、UI要素内のクリックの正確な位置を、ピクセル座標で記録します。たとえば、テストのレコーディングにおいて、ボタンの左上隅の近くをクリックすると、左上隅の座標が常に 0; 0 であるため、5; 8 のような小さな座標値が記録されます。この座標値には、整数値を使用し、テスト実行時にも使用されます。
None は他の設定と動作が大きく異なります。この設定では、テストのレコーディング時にUI要素のどこをクリックしても、Ranorexはアクションスポットを Center(中心)として指定します。テスト実行時では、常にボタンの中心部分をクリックします。
Proportional は、.5; .6 のような形式の相対座標で記録され、整数の代わりに浮動小数点数が使用されます。これは、テストのレコーディング時において、ボタンサイズの30%の位置にあるピクセルをクリックすると、テスト実行時にも30%の位置のピクセルをクリックします。
長所と短所
これら3つの設定には、それぞれ長所と短所があります。一見すると、None が最適な設定のように見えるかもしれません。しかし、デフォルトは、Pixel が設定されています。
Pixel
この設定は、デフォルトとして設定されています。テストのレコーディング時に、UI要素の正確(=ピクセルパーフェクト)なアクションスポットを認識し、これらの座標をテスト実行時に使用します。
これには1つの大きな利点があります。テストを実行すると、Ranorexはテストのレコーディングをおこなった時とまったく同じ動作をおこないます。少なくとも、同じ画面解像度と同じ画面スケーリングで同じ画面を使用している限り、動作は変わりません。
最近のアプリケーション、特にWebアプリケーションでは、レスポンシブデザイン の重要性が高まっており、アプリケーションウィンドウのサイズ、画面、デバイスの向きなどに応じて、ボタンやテキストフィールドのサイズが大幅に変わる可能性があります。たとえば、Amazonのホームページで、検索フィールドの中心あたりをクリックしたとします。
Webブラウザを最大化モードからはるかに小さいウィンドウサイズに設定してテストを実行すると、レコーディングされた座標(たとえば、958; 17)が範囲外になるため、このクリック操作は機能しなくなります。 これはテキストボックスのサイズが縮小したことが原因です。そして、下図のような警告がレポートされます。
Pixel は、デフォルト設定には相応しくないように思えます。特にレスポンシブデザインを使用する最新のWebベースのアプリケーションでは、この設定は理想からほど遠いものです。
では、なぜ Pixel が、デフォルト設定のままであるのでしょうか?
下図のアプリケーションの要素を確認してください。
このアプリケーションでは、ラベルが付いたチェックボックスは1つの要素として認識されています。このような形でのオブジェクト認識は、レガシーなテクノロジーを使用して開発されているアプリケーションでは、しばしば発生します。また、リストやツリーのセクションを展開する際の小さな三角形(▼)やプラス記号(⧺)も、個別のボタンとして認識されないことがよくあります。
自動化テストでは、これらのボタンを正確にクリックした場合にのみ、操作が機能し、その近くのテキストをクリックしても機能しません。このため、レコーディング時とまったく同じ場所で、該当コントロールのクリック操作を実行する必要があります。
要素の中心の位置でクリックが実行される場合、この例のチェックボックスは有効になりません。
None
None は、他の設定と動作が大きく異なります。テストのレコーディング時と比較してテスト実行時の動作が大きく変わります。すべてのアクションスポットは中心(Center)に設定されます。
この設定は、特にレスポンシブデザインの場合は理にかなっているように思えるかもしれませんが、いくつかの重大な欠点があります。
たとえば、Webページで下図の見出しテキスト (Faster web test execution ~) をクリックしたいとします。
テストのレコーディング時には、このテキストをクリックすると機能します。 しかし、テスト実行時では、アクションスポットが中心になるため、クリック位置が見出しテキスト上ではなくなってしまい、機能しません。
None は、一見して最適な設定のように見えるかもしれませんが、このような問題に遭遇する可能性があります。
Pixel や None 設定でこのような問題が発生する場合、これに対応する良い方法はあるのでしょうか?
Proportional
Proportional は、Pixel と同様に、テストのレコーディング時のアクションスポットを正確に保持しようとしますが、要素のサイズに影響します。つまり、レコーディング時に、要素の左端から30%、上端から60%の位置をクリックした場合、テスト実行時に要素のサイズが変わっていても、要素の左端から30%、上端から60%の位置が常にクリックされることを意味します。
テスト実行時に要素のサイズが変わっていたことによって、Pixel 設定で発生していたようなクリック位置が要素の範囲外になってしまう問題や、Noneで発生していたような意図しない位置をクリックしてしまう問題を解決できます。しかし、Proportionalでも、Noneで発生していたような問題が発生する場合があります。
たとえば、見出しテキストの下図の位置 (赤丸の部分) を、レコーディング時にクリックしたとします。
画面サイズが少し小さくなった場合は、テスト実行時には下図の位置(赤丸)をクリックすることになります。
このように、Proportional でも、None と同じような問題が発生する場合があります。
最良の設定
どの座標 モードを選択すべきかについては、テスト対象となるアプリケーションに依存します。
Pixel がデフォルトとして設定されているのは、テストをレコーディングした後、何も変更せずにテストを実行した場合、正常に動作すると考えられているためです。
一見、None は常にうまく動作するように見えますが、Center (中心)をクリックするという動作上、特定の条件下では期待する動作となりません。Proportional も同様に、期待する動作とならない場合があることや、実行時のクリック位置の予測がしにくいという特性があります。このような理由により、Pixel をデフォルト設定としています。
これは多くの場合、テスト実行時の画面の解像度を変更しなければ問題なく機能します。None モードとProportional モードは、レスポンシブデザインのアプリケーション(主に、Webおよびモバイルデバイス)で使用できますが、意図しない問題が発生する場合があります。
3つのモードすべてにおいて、テスト実行時に、UI要素に対する目的の操作がおこなわれない場合は、アクションスポットを手動で変更する必要がある場合があります。
すべてのモードにおいて、一貫して完全な対応策はなく、各モードにおいて長所と短所があります。それぞれの設定の特性を理解し、テスト対象アプリケーションに応じた適切な設定をおこなってください。
(この記事は、開発元 Ranorex 社 Blog 「The Action Spot and its Different Settings」2019年3月23日の翻訳記事です。)