ユーザーコード リファレンス:スクリーンショットの名前や出力場所の変更
テスト実行時のエビデンスとして取得するスクリーンショットを管理しやすくするために、スクリーンショットの名前や出力場所を変更したいといったご意見をユーザー様からよくいただきます。こちらについては、Ranorex のユーザーコード機能を使用して、コードを書くことで簡単に実現できます。今回は、スクリーンショットの名前や出力場所を変更するサンプルのユーザーコードをご紹介します。
ユーザーコードの作成
ユーザーコードコレクションによるコーディングをすることで、どのレコーディングモジュールからでも、User Code アクションでユーザーコードを呼び出すことができます。
ユーザーコードコレクションによるコーディング方法については、こちらをご参照ください。
今回、ご紹介するサンプルのユーザーコードは、以下のような処理になります。
- 対象オブジェクトのスクリーンショットの取得
- スクリーンショットの取得が実行されたときのモジュール名と日時の取得 (スクリーンショット名に使用するため)
- 任意のスクリーンショット名でイメージファイルに出力
イメージファイル出力パス + 実行時のモジュール名と日時 + 末尾のスクリーンショット名 (画像形式の拡張子も含む) - スクリーンショットをレポートファイル(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 ドキュメント をご参照ください。