ユーザーコード リファレンス:スクリーンショットの名前や出力場所の変更

テスト実行時のエビデンスとして取得するスクリーンショットを管理しやすくするために、スクリーンショットの名前や出力場所を変更したいといったご意見をユーザー様からよくいただきます。こちらについては、Ranorex のユーザーコード機能を使用して、コードを書くことで簡単に実現できます。今回は、スクリーンショットの名前や出力場所を変更するサンプルのユーザーコードをご紹介します。

ユーザーコードの作成

ユーザーコードコレクションによるコーディングをすることで、どのレコーディングモジュールからでも、User Code アクションでユーザーコードを呼び出すことができます。
ユーザーコードコレクションによるコーディング方法については、こちらをご参照ください。

今回、ご紹介するサンプルのユーザーコードは、以下のような処理になります。

  1. 対象オブジェクトのスクリーンショットの取得
  2. スクリーンショットの取得が実行されたときのモジュール名と日時の取得 (スクリーンショット名に使用するため)
  3. 任意のスクリーンショット名でイメージファイルに出力
    イメージファイル出力パス + 実行時のモジュール名と日時 + 末尾のスクリーンショット名 (画像形式の拡張子も含む)
  4. スクリーンショットをレポートファイル(rxlog)に出力

サンプルコード

ここでご紹介するサンプルコードは、Ranorex 10.7で動作することを確認したものになります。

1. ユーザーコレクションにて、以下の2つの名前空間を定義します。

using Ranorex.Core.Repository;
using System.IO;

2. 新規メソッドを作成し、以下のコードを記載します。

public void Screenshot(RepoItemInfo repoInfo, String outputImgPath,String outputImgName)
{
//スクリーンショットの実行
Bitmap screenShot = repoInfo.FindAdapter<Unknown>().CaptureCompressedImage();

//モジュール名の取得
var curModule = TestModuleLeaf.Current;
string mdName= curModule.Name;

//テスト実行時の日時の取得
System.DateTime datetime = System.DateTime.Now;
string nowTime = datetime.ToString("yyyyMMdd_HHmm");

//スクリーンショットをイメージファイルに出力(ファイル出力パス+モジュール名+日時+スクリーンショット名)
screenShot.Save(outputImgPath + "/" + mdName + "_" + nowTime + "_" + outputImgName);

//スクリーンショットをレポートファイルに出力
Report.LogData(ReportLevel.Info, "スクリーンショット", screenShot);
}

解説

public void Screenshot(RepoItemInfo repoInfo, String outputImgPath,String outputImgName)

引数には、スクリーンショット対象のオブジェクト (RepoItemInfo repoInfo)、イメージファイルの出力パス (String outputImgPath)、末尾のスクリーンショット名 (outputImgName) を指定しています。

//スクリーンショットの実行
Bitmap screenShot = repoInfo.FindAdapter<Unknown>().CaptureCompressedImage();

Ranorex API の CaptureCompressedImage を使用して、対象のオブジェクトのスクリーンショットを取得する処理になります。
FindAdapter の種類をサンプルのように<Unknown>にすることで、アダプタのタイプ(Form、WebDocument、等)を特定せずに実装いただけます。

//モジュール名の取得
var curModule = TestModuleLeaf.Current;
string mdName= curModule.Name;

Ranorex API の TestModuleLeaf.Current curModule.Name を使用して、スクリーンショット時の実行モジュールの名前を取得します。

//テスト実行時の日時の取得
System.DateTime datetime = System.DateTime.Now;
string nowTime = datetime.ToString("yyyyMMdd_HHmm");

.NET クラスライブラリ を使用して、スクリーンショット時の年月日時間(時間+分)を取得します。

//スクリーンショットをイメージファイルに出力(ファイル出力パス+モジュール名+日時+スクリーンショット名)
screenShot.Save(outputImgPath + "/" + mdName + "_" + nowTime + "_" + outputImgName);

引数で指定したイメージファイルの出力パス(outputImgPath)に、モジュール名+日時+スクリーンショット名(outputImgName)のイメージファイルが出力されます。
例:RecordingModule1_2023825_0930_FormScreenshot1.jpg

//スクリーンショットをレポートファイルに出力 
Report.LogData(ReportLevel.Info, "スクリーンショット", screenShot);

Ranorex API の Report.LogData を使用して、レポートにスクリーンショットを出力します。

ユーザーコードアクションの追加と引数の指定

1. 対象のアクションテーブルにて、スクリーンショットを取りたい場所で右クリック > 新しいアクションの追加 > ユーザーコード(User code) > ライブラリから追加 を選択します。

2. ライブラリ画面から、作成した対象のメソッドを選択し、選択項目を追加 ボタンをクリックします。

3. 追加されたユーザーコードアクションの引数 repoInfo(RepoItemInfo) に、スクリーンショット対象のオブジェクトを指定します。
リポジトリから対象のオブジェクトを repoInfo(RepoItemInfo) にドラッグ&ドロップします。

4. 引数 outputImgPath(String) に、スクリーンショットを出力したいフォルダパスを指定します。

5. 引数 outputImgName(String) に、末尾のスクリーンショット名(拡張子も含む)を指定します。
※JPG、PNG形式で出力できます。

こちらの設定で、テスト実行することで、手順4で指定したフォルダに、対象オブジェクトのスクリーンショットが任意の名前で出力されます。

まとめ

スクリーンショット名や出力フォルダを変更することで、スクリーンショットの管理がしやすくなりますので、ぜひこちらのコードを参考にして、ご活用ください。
また、Ranorex API の詳細につきましては、Ranorex Studio のメニューバーから ヘルプ > API ドキュメント をご参照ください。