ユーザー コード リファレンス:テーブルの各レコードに対するアクション実行
前回の記事(テーブルの各レコードに対するアクション実行)では、 Ranorexのデータソースを使用した、テーブルの各レコードのセルに対する操作方法について解説しました。しかし、この方法では「テーブルのすべてのレコードを操作したいが、テストの度にレコード数が変わる」場合にテーブルのレコード数が分からないためにデータソースを使用してデータを事前に用意することができません。
レコード数が変動しないように、あらかじめ同じレコード数になるようにデータベースにデータを設定しておくことで対応することも考えられますが、開発の都合上、個々にテストデータを用意するのが難しい場合もあります。
このようなケースにおける対応策として、ユーザー コードを使用する方法があります。今回は、ユーザコードを使用した「テーブルの各レコードに対するアクション実行」について解説します。なお、本解説では、テスト対象アプリケーションとして、Ranorexデモアプリ(UI-element test areaのテーブル)を使用します。
※本記事で紹介しているRanorex APIは、Ranorex v9.3.2にて確認をおこなっています。
※ユーザー コードの機能概要については、こちらの記事をご参照ください。
※本記事で紹介しているRanorex APIについては、API ドキュメントをご参照ください。
はじめに、1レコードに対する操作をテストスクリプトとして記録します。その後、記録した リポジトリにて、レコードのリポジトリアイテムのRanoreXpathを修正(テーブル(table要素)内のレコードをrow要素と、cell要素を使用してインデックスで指定するように変更し、インデックスを変数化します)します。
修正後のRanoreXPath:
/form[@controlname='RxMainFrame']/?/?/tabpage[@controlname='RxTabUIElements']/table[@controlname='dataGridView1']/row[$row_index]/cell[$cell_index]
※前回の記事(テーブルの各レコードに対するアクション実行)を参照し、作業をおこなってください。
つぎに、アクションテーブルのすべてのアクションを選択後、ショートカットメニューからユーザー コードにマージを選択し、1つのメソッドとしてユーザー コードに自動変換します。
ユーザー コードに自動変換すると下図のように、対象アクションがマージされてUser codeアクションに変換されます。
自動変換後のユーザー コード:
public void MergedUserCodeMethod(RepoItemInfo cellInfo, RepoItemInfo buttonInfo)
{
Report.Log(ReportLevel.Info, "Mouse", "Mouse Left Click item 'cellInfo' at 12;11.", cellInfo);
cellInfo.FindAdapter<Cell>().Click("12;11");
Report.Log(ReportLevel.Info, "Mouse", "Mouse Left Click item 'buttonInfo' at 8;6.", buttonInfo);
buttonInfo.FindAdapter<Button>().Click("8;6");
}
最後に、自動変換したユーザー コードにおいて、対象のレコードが存在する場合にアクションを実行し、レコードが存在しなくなるまでループ処理をおこなうプログラムに修正します。
コード例:
public void MergedUserCodeMethod(RepoItemInfo cellInfo, RepoItemInfo buttonInfo)
{
// レコード(RanoreXPath)の初期値の設定
int rowIndex = 2;
cell_index = "1";
row_index = "2";
// レコードが存在する間、処理をおこなう
while( cellInfo.Exists(5000) ){
// アクション実行
Report.Log(ReportLevel.Info, "Mouse", "Mouse Left Click item 'cellInfo'.", cellInfo);
cellInfo.FindAdapter<Cell>().Click();
Report.Log(ReportLevel.Info, "Mouse", "Mouse Left Click item 'buttonInfo'.", buttonInfo);
buttonInfo.FindAdapter<Button>().Click();
// レコード(RanoreXPath)の変更
rowIndex++;
row_index = rowIndex.ToString();
}
}
※コード例では、Ranorexデモアプリの動作として、テーブルの最後のレコードにあるチェックボックスを有効にすると、新規にレコードが追加されるため、1行目の空のセルをクリックするようにしています。