テーブルの各レコードに対するアクション実行

下図のようなテーブルにおいて、各レコードのセルに対するデータ入力や、バリデーションをおこないたい場合、UIテストツールを使用し、一連の操作をテストスクリプトとして記録すると、スクリプトに同じ操作とオブジェクト情報が羅列された冗長なテストが作成されてしまいます。

Ranorexを使用して、 「テーブル内のすべてのレコードにあるチェックボタンを有効にする」といった一連の操作をテストスクリプト(レコーディングモジュール)に記録したものが下図になります。


もちろん、このテストスクリプトでも正常に動作しますが、同じ操作をレコードの数だけ行っているため、操作の内容が分かりにくくなり、またレコードの操作や、オブジェクトの修正においてメンテナンスに掛かる工数もレコードの数に比例して大きくなるといった課題がでてきます。
そこでデータソースを使用して、上記の課題を解決するテストを作成します。
はじめに、1レコードに対する操作をテストスクリプトとして記録します。
※チェックボックスを有効にした後、テーブルのスクロールバーを下げるといった操作を記録しています。

次に、リポジトリにて、レコードのリポジトリアイテムを選択後、EDIT IN SPYをクリックし、表示されるパス エディターにおいてRanoreXPathを修正します。

修正前のRanoreXPath:
/form[@controlname='RxMainFrame']/?/?/tabpage[@controlname='RxTabUIElements']/table[@controlname='dataGridView1']/?/?/cell[@accessiblename='IO 行 0']
修正後のRanoreXPath:
/form[@controlname='RxMainFrame']/?/?/tabpage[@controlname='RxTabUIElements']/table[@controlname='dataGridView1']/row[2]/cell[2]
修正箇所は、テーブル(table要素)内のレコードをrow要素と、cell要素を使用してインデックスで指定するように変更します。これにより、インデックス値を変更することで対象のセルを変えることが可能となります。
※Ranorex Spyツールを使用することで、テスト対象アプリケーションのシステム構造が把握できるため、どのような要素や属性を使用し、パスを修正すれば良いかを確認することができます。
最後に、 row要素と、cell要素のインデックスを変数化し、データソースを使用して対象のセルを動的に変更するように設定します。

変数化したRanoreXPath:
/form[@controlname='RxMainFrame']/?/?/tabpage[@controlname='RxTabUIElements']/table[@controlname='dataGridView1']/row[$row_index]/cell[$cell_index]
変数化した row要素と、cell要素のインデクス値を指定するために、データソースを設定します。


またリポジトリの各アイテム(アプリフォルダー、ルートフォルダー、リポジトリアイテム)を分かりやすい名前に変更します。

今回、ご紹介した方法で、テーブル内のすべてのレコードに対する操作だけでなく、特定のセルに対する操作にも使用することができ、また 操作の内容が分かりやすく、メンテナンス性の高いテストを作成することができるようになります。