概要‎ > ‎

TestAssistant 仕様




機能
①Window構成の解析
GUIのテスト作成の際に困るのが、子要素の特定方法です。
テストを回帰的に実行する場合、毎回同じ方法で特定できなければなりません。
しかし、世の中には様々なウィンドウがあり(動的に生成したり、サイズが変わったり、etc)で、
「この方法なら全てのウィンドウに対して確実」というのは、中々存在しません。
そのため、Friendly、複数のウィンドウ特定方法を提供します。
このツールではウィンドウ特定のための情報を簡単に取得することができます。

②使用できる型情報の取得
Friendlyの強力な機能として、アプリケーション内部の公開されている操作を呼び出すことができます。
多くは使い慣れた.netのクラスや自分で作成したクラスとは言え、全て覚えている方はいないと思います。
TestAssistantでは、Friendlyで操作可能な型の情報を簡単に取得することができます。

③コード作成補助
①や②で取得した情報から操作用のコードを生成することができます。
ただし、インテリセンスの簡易版のようなコードです。
使うためにはC#やFriendlyのライブラリの知識が必要になります。
また、NUnitで実行するための簡単なテンプレートを作成することができます。

④確認用にスクリプトの実行
作成したコードを実行することができます。
テスト環境はVisualStudioやNUnitで作成されると思いますが、そちらにコードを移す前に一度試してみることができます。
管理者権限でも、対象アプリケーションが特殊な権限を持っている場合は接続できないことがあります。
テスト対象アプリケーションをテスト可能な権限で起動しなおしてください。

プラットフォームターゲットと.NetFrameworkバージョンと権限
最初にテスト対象アプリケーションと合わせる必要があります。

・プラットフォームターゲット
32bitOSを使用している方は特に意識しなくても結構です。
64bitOSはテスト対象が64bitアプリケーションなのかWow64上で動作する32bitアプリケーションなのかで起動するTestAssistantを選択する必要があります。
Codeer.TestAssistant_x86とCodeer.TestAssistant_x64がインストールされていると思いますので、テスト対象アプリケーションと一致する方を使用してください。

・CLRバージョン
テストプロセスではなくテスト対象アプリケーションの使用しているCLRのバージョンです。
2.0~3.5までとネイティブアプリケーションは2.0を使用します。
クライアントプロファイルはここでは指定しなくてもOKです。
現在2.0と4.0に対応しています。
(コンボボックス上では「2.0(Non,2.0-3.5)」か「4.0(4.0, 4.5)」を選択します。

・権限
対象アプリが管理者権限の場合には、TestAssistantも管理者権限で起動する必要があります。
アプリケーション起動アイコンを選択し、Shiftボタンを押しながら右クリックし、管理者権限で実行を選択してください。

メイン画面
①テスト対象プロセス選択(Ctrl+N)
接続候補のプロセスが表示されます。
選択後Enterキー押下かダブルクリックで選択できます。

②対象アプリ.NetFrameworkバージョン
テストプロセスではなくテスト対象アプリケーションの使用している.NetFrameworkのバージョンです。
2.0~3.5までとネイティブアプリケーションは2.0を使用します。
クライアントプロファイルはここでは指定しなくてもOKです。
現在2.0と4.0に対応しています。(3.0,3.5も2.0で指定できるので対応しています。)
(コンボボックス上では「Non,2.0-3.5」か「4.0」を選択します。

③トップレベルウィンドウ解析(Ctrl+Q)
対象プロセスの有効なトップレベルウィンドウを解析します。
ウィンドウ解析画面が表示されます。
ウィンドウが適正な位置にない場合、正しく画像が取得できないことがあります。
また、DPI等画面の設定がデフォルトでない場合も正しく取得できないことがあります。

④5秒後にトップレベルウィンドウを解析(Shift+Ctrl+Q)
ボタンを押してから5秒後にアクティブなウィンドウを解析します。
フォーカスを失うと消えてしまうウィンドウの解析時に使用します。
ウィンドウが適正な位置にない場合、正しく画像が取得できないことがあります。
また、DPI等画面の設定がデフォルトでない場合も正しく取得できないことがあります。

⑤タイプ取得(Ctrl+T)
対象プロセスで現在アクセス可能な型情報を表示します。
.Netのアセンブリは遅延ロードなので、対象アプリケーションが本来使用する型でも、
解析時点でロードされていなければ、表示されません。

⑥スクリプト実行(F5)(コンパイルのみはF6)
⑩の操作コード簡易確認エディタに記述したスクリプトを実行します。
スクリプトを実行せずに、コンパイル可能か確認したい場合はF6を押してください。

⑦NUnitテンプレートコード生成(F4)
NUnitのテンプレートコードを生成します。
ネームスペース、クラス名称、メソッド名称は任意で編集してください。

⑧情報(F1)

バージョン情報が表示されます。
(アセンブリバージョン : ファイルバージョン)で表示されます。
画像はβ9に梱包されているアセンブリなので0.9.9.0です。
それから、TestAssistantは今後プラグイン形式で機能が追加されていく予定です。
その際には、現在プラグインされているアセンブリの情報も表示されます。
画像のプラグインはサンプルです。

⑨region using
スクリプトで使用するusingを追加できます。
また、using画面の参照設定ボタンから参照を追加することができます。
画像はサンプルプラグインが使用されている場合のキャプチャです。


⑩簡易テストコードチェックエディタ
テストコードをチェック用に記述することができます。
C#で記述します。このスクリプト自体は.Net2.0までしか対応していません。
しかし、使用するdllは3.5まで呼び出すことができます。
また、「スクリプト実行ランタイムの変更方法」で解説する方法を使用すると4.0,4.5のdllも呼び出すことが可能です。
それから、当然NUnitなどの環境に持っていく際は、2.0以上の.NetFrameworkでコンパイル可能です。
以下の右クリックメニューがあります。


非同期実行
非同期実行オブジェクトAsyncを生成します。

次のZ座標の最前面ウィンドウの表示を待つ
WindowControlのWaitForNextZTopを呼び出します。

コンパイルチェック(F6)
現在のスクリプトをコンパイルして、コンパイルエラーがないか確認します。

・スクリプト実行ランタイムの変更方法
TestAssistantのインストールフォルダにCodeer.TestAssistant.Script_x86.exe.config及び、
Codeer.TestAssistant.Script_x64.exe.configを置くことによってスクリプトの実行ランタイムを切り替えることができます。
また、同様にCodeer.TestAssistant.exe.config、Codeer.TestAssistant_x64.exe.configを置くことで、
TestAssistant自体の実行ランタイムも切り替えることができます。
これが必要となってくるのは、スクリプトから4.0,4.5で作成したdllを呼び出したい場合です。
また、TestAssistantに関しては、プラグインするクラスを4.0,4.5で作成した場合です。
ファイルは弊社で用意いたしましたので、こちらからダウンロードしてインストールフォルダに入れてください。
また、configファイルの内容に関しましてはマイクロソフトのWebサイトを参照お願いします。
ランタイムのバージョンが変更になった場合はそちらを参照して書き換えてください。


ウィンドウ解析画面

テスト対象のウィンドウを解析します。
ここで得られる情報をもとに、子要素の特定方法を決定できます。
以下の部分に分かれます。

画像キャプチャ表示
クリック
クリック座標に位置するウィンドウが強調表示されます。
また、対応するウィンドウがウィンドウツリー上で選択状態になります。

ダブりクリック
対応する座標にある、操作情報取得画面がが表示されます。

右クリック
以下の右クリックメニューが表示されます。
取得は、選択したGUI要素によって分かれます。
以下の図は左から、トップレベルのウィンドウ、.Netのウィンドウ、ネイティブのウィンドウ、WPFのGUI要素です。
取得
Z順で最前面のウィンドウを取得
new WindowControl(app, WindowFind.ZTop)のコンストラクタを呼び出して
ウィンドウを取得するコードを生成します。
アクティブウィンドウを取得
new WindowControl(app, WindowFind.Active)のコンストラクタを呼び出して
ウィンドウを取得するコードを生成します。
.Netのフィールドで取得
トップレベルウィンドウからFrienndlyOperationを使用してフィールドを取得するコードを生成します。
取得されたフィールドはAppVarに格納され返されます。
ZIndexから取得
WindowControlのIdentifyFromZIndexを呼び出してウィンドウを取得するコードを生成します。
ダイアログIDから取得
WindowControlのIdentifyFromDialogIdを呼び出してウィンドウを取得するコードを生成します。
WindowTextから取得
WindowControlのIdentifyFromWindowTextを呼び出してウィンドウを取得するコードを生成します。
Boundsから取得
WindowContorlのIdentifyFromBoundsを呼び出してウィンドウを取得するコードを生成します。
TypeFullNameから取得
WindowContorlのIdentifyFromTypeFullNameを呼び出してAppVarを取得するコードを生成します。
WindowClassから取得
WindowContorlのIdentifyFromWindowClassを呼び出してウィンドウを取得するコードを生成します。
ロジカルツリーインデックスから取得
WindowContorlのIdentifyFromLogicalTreeIndexを呼び出してウィンドウを取得するコードを生成します。

操作
操作画面を表示します。

WindowControl
クリック(x, y)
右クリックした位置をWindowControlのSequentialMessageを使ってクリックをエミュレートするコードを記述します。
このエミュレートは、効かないコントロールも存在します。
ダブルクリック(x, y)
右クリックした位置をWindowControlのSequentialMessageを使ってダブルクリックをエミュレートするコードを記述します。
このエミュレートは、効かないコントロールも存在します。
メッセージトレース
Windowメッセージウィンドウを表示します。

画像上での選択を許可
画像上でクリックした場合にアイテムを選択できるか否かを設定します。
複数のGUIアイテムが重なりあっている場合はこれをOFFにしてツリーでのみ選択を変更すると便利です。

ウィンドウツリー
選択
選択アイテムに対応するウィンドウが画像キャプチャ表示上で強調表示されます。

ダブルクリック
Enterキー押下
操作情報取得画面が表示されます。

選択状態でクリック
F2キー
変数名を変更できます。

右クリック
以下の右クリックメニューが表示されます。
取得は、選択したGUI要素によって分かれます。
以下の図は左から、トップレベルのウィンドウ、.Netのウィンドウ、ネイティブのウィンドウ、WPFのGUI要素です。
取得
Z順で最前面のウィンドウを取得
new WindowControl(app, WindowFind.ZTop)のコンストラクタを呼び出して
ウィンドウを取得するコードを生成します。
アクティブウィンドウを取得
new WindowControl(app, WindowFind.Active)のコンストラクタを呼び出して
ウィンドウを取得するコードを生成します。
.Netのフィールドで取得
トップレベルウィンドウからFrienndlyOperationを使用してフィールドを取得するコードを生成します。
取得されたフィールドはAppVarに格納され返されます。
ZIndexから取得
WindowControlのIdentifyFromZIndexを呼び出してウィンドウを取得するコードを生成します。
ダイアログIDから取得
WindowControlのIdentifyFromDialogIdを呼び出してウィンドウを取得するコードを生成します。
WindowTextから取得
WindowControlのIdentifyFromWindowTextを呼び出してウィンドウを取得するコードを生成します。
Boundsから取得
WindowContorlのIdentifyFromBoundsを呼び出してウィンドウを取得するコードを生成します。
TypeFullNameから取得
WindowContorlのIdentifyFromTypeFullNameを呼び出してウィンドウを取得するコードを生成します。
WindowClassから取得
WindowContorlのIdentifyFromWindowClassを呼び出してウィンドウを取得するコードを生成します。
ロジカルツリーインデックスから取得
WindowContorlのIdentifyFromLogicalTreeIndexを呼び出してウィンドウを取得するコードを生成します。

操作
操作画面を表示します。

WindowControl
クリック(x, y)
右クリックした位置をWindowControlのSequentialMessageを使ってクリックをエミュレートするコードを記述します。
このエミュレートは、効かないコントロールも存在します。
ダブルクリック(x, y)
右クリックした位置をWindowControlのSequentialMessageを使ってダブルクリックをエミュレートするコードを記述します。
このエミュレートは、効かないコントロールも存在します。
メッセージトレース
Windowメッセージウィンドウを表示します。

ウィンドウ情報表示グリッド
ウィンドウの情報を表示します。
この情報はウィンドウを特定するのに使用します。
コード上ではWindowControlの対応するウィンドウ特定、取得メソッドの引数に使用します。
TestAssistantのウィンドウ取得機能を使えば、ウィンドウ特定コードを生成しできます。

Text
WindowsApiのGetWindowTextで取得される文字列です。
IdentifyFromWindowText、GetFromWindowTextで使用します。
Bounds
トップレベルウィンドウからのクライアント座標です。
IdentifyFromBounds、GetFromBoundsで使用します。
FieldPath
.Netの型のフィールドをたどって、ウィンドウを取得するためのパスです。
ウィンドウが.Netの場合これが一番お勧めです。
TypeFullName
.Netの型のフルネームです。
IdentifyFromTypeFullName、GetFromTypeFullNameで使用します。
WindowClass
ウィンドウクラス文字列です。
IdentifyeFromWindowClass、GetFromWindowClassで使用します。
DialogId
ダイアログIDです。
IdentifyFromDialogIdで使用します。
ネイティブのダイアログに関しては、お勧めです。
ZIndex
Zインデックスです。
IdentifyFromZIndexで使用します。
これも、ネイティブ、.Netともにお勧めな方法です。
LogicalTreeIndex
WPFのロジカルツリーのインデックスです。
WPFのウィンドウの場合に使用します。
IdentifyFromLogicalTreeIndexで使用します。

操作画面

操作画面です。
対象アプリケーションから操作情報を取得して、それをもとに操作コードを生成することができます。
使用中は内部的に対象アプリケーションとの通信が実施されますので、対象アプリケーションが正常動作していない場合は、
情報が取得できない場合があります。

ツリー全般操作
ツリーの操作ノードをダブルクリックするか、選択状態でEnterキーを押すかで操作コードを生成します。

①変数入力
変数名称を入力します。
出力されるコードはこの変数名を使用します。
②Window取得
ウィンドウを取得するための方法が表示されます。
③FriendlyOperationで操作可能なメソッド
オブジェクトの型のメソッド、フィールド、プロパティーが表示されます。
④FriendlyOperationで操作可能なメソッド(継承元クラス)
継承元の型のメソッド、フィールド、プロパティーが表示されます。
⑤WindowControlの操作
WindowCotnrolの操作が表示されます。
⑥生成コードプレビュー
ツリーの操作ノードを選択すると、その操作の生成コードのプレビューが表示されます。


Windowメッセージ画面

Windowのメッセージを取得することができます。
また、⑥の「メッセージ再生コード出力」でメッセージ送信コードを生成することができます。
しかし、メッセージ処理によっては、事前条件が重要だったりして、メッセージの送信だけで動作を再現できない場合があります。
Windowsメッセージに対して理解がある場合のみ使用してください。
①開始
メッセージ取得を開始します。
②終了
メッセージの取得を終了します。
③メッセージフィルタ
取得するメッセージを決定します。
④クリア
現在⑦のメッセージログ画面に表示されている内容をクリアします。
⑤変数名称
コードを生成するときのSequentialMessageを呼び出す変数の名称を設定します。
⑥メッセージ再生コードの出力
メッセージログ画面に出力されている内容からメッセージ再生コードを生成します。
しかし、メッセージ処理によっては、事前条件が重要だったりして、メッセージの送信だけで動作を再現できない場合があります。
Windowsメッセージに対して理解がある場合のみ使用してください。
⑦メッセージログ画面
取得したメッセージが表示されます。
*高度な使い方。
メッセージフィルタを追加することができます。
TestAssistantのインストールフォルダのMessageLog(デフォルトではC:\Program Files\Codeer\TestAssistant\MessageLog)フォルダに追加します。
ファイル名称を[ソート番号]_[表示名称].txtで作成し、内容は一行ごとに[最小メッセージ],[最大メッセージ]を書いてください。
デフォルトでインストールされているフィルタファイルをサンプルにしてください。
メッセージログでメッセージを文字列化できます。
TestAssistantのインストールフォルダのMessageLog\Map(デフォルトではC:\Program Files\Codeer\TestAssistant\MessageLog\Map)フォルダに追加します。
任意のテキストファイルで内容は一行ごとに[メッセージ数値][表示用文字列]を書いてください。

タイプ情報取得画面

タイプツリー
対象アプリケーション内で現在操作可能な型が表示されます。
対象プロセスで現在アクセス可能な型情報を表示します。
.Netのアセンブリは遅延ロードなので、対象アプリケーションが本来使用する型でも、
解析時点でロードされていなければ、表示されません。
型ノードを選択すると型の情報が操作情報取得パネルに表示されます。
型ノードをダブルクリックするか、選択状態でEnterキーを押すと操作情報取得画面が別途ポップアップで表示されます。

操作パネル
操作画面と同様の操作が可能です。
コードを生成すると、変数名が空でコードが生成されます。