ユーザー コード リファレンス:テーブルの各レコードに対するアクション実行

前回の記事(テーブルの各レコードに対するアクション実行)では、 Ranorexのデータソースを使用した、テーブルの各レコードのセルに対する操作方法について解説しました。しかし、この方法では「テーブルのすべてのレコードを操作したいが、テストの度にレコード数が変わる」場合にテーブルのレコード数が分からないためにデータソースを使用してデータを事前に用意することができません。

レコード数が変動しないように、あらかじめ同じレコード数になるようにデータベースにデータを設定しておくことで対応することも考えられますが、開発の都合上、個々にテストデータを用意するのが難しい場合もあります。

このようなケースにおける対応策として、ユーザー コードを使用する方法があります。今回は、ユーザコードを使用した「テーブルの各レコードに対するアクション実行」について解説します。なお、本解説では、テスト対象アプリケーションとして、RanorexデモアプリUI-element test areaのテーブル)を使用します。

※本記事で紹介しているRanorex APIは、Ranorex v9.3.2にて確認をおこなっています。

※ユーザー コードの機能概要については、こちらの記事をご参照ください。

※本記事で紹介しているRanorex APIについては、API ドキュメントをご参照ください。

(Ranorexデモアプリ)

はじめに、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行目の空のセルをクリックするようにしています。