概要‎ > ‎

TestAssistant よく使う機能

新機能ができました。こちらも良く使うことになると思います。
参照お願いします。


FriendlyをインストールするとTestAssistantが同梱されています。
詳細な仕様はこちらこちらを参照してもらうとして、ここではよく使う機能だけ入門編的に紹介させていただきます。

よく使うシーンは次のようなものです。
①GUI要素をマッピング。
②試しに操作してみる。

では使ってみます。
最初はとっつきやすい.Netの画面でやってみます。
以下は操作対象のコードです。

//プロダクトコード
using System.Windows.Forms;
using System.Drawing;
 
namespace Sample
{
    public partial class SampleForm : Form
    {
        TextBox textBox = new TextBox();
        Button button = new Button();
 
        public SampleForm()
        {
            Size = new Size(150, 100);
 
            //左上にテキストを配置します。
            Controls.Add(textBox);
 
            //その下にボタンを配置します。
            button.Top = textBox.Bottom;
            Controls.Add(button);
 
            //クリックしたら、ボタンにテキストボックスの文字列を表示します。
            button.Click += delegate
            {
                button.Text = textBox.Text;
            };
        }
    }
}


以下のような画面になります。

これでやってみます。

まず、プロダクトプロセスと同じプラットフォームターゲット(x64かx86です。)のTestAssistantを起動してください。
ここで気を付ける点があって、プロダクトプロセスと同等以上の権限で立ち上げてください。
プロダクトプロセスが管理者権限であれば、TestAssistantも管理者権限で起動してください。

TestAssistantを起動すると、「テスト対象プロセス選択」ボタンが一つだけ表示されているのでそれを押します。
リストの中から対象のアプリケーションを選んでください。


次にCLRのバージョンを選択します。
弊社では先ほどの操作対象のコードは.Net2.0でビルドしたので2.0を選択しています。
これで何を選択するかは、WindowsAppFriendのコンストラクタの引数を参照してください。

次は「トップレベルウィンドウ解析」ボタン(カメラアイコン)を押します。
すると画面が解析されます。


まずマッピングします。
ツリーのノードをクリックして右クリックメニューから取得を選択してください。
sampleFormは「Z順で最前面のウィンドウを取得」、その他は「.Netのフィールドで取得」を選択してください。


ここで、生成されるコードは左のエディタの選択位置に挿入されますので気を付けてください。
また、生成されたコードを見ると気づかれるかと思いますが、buttonとtextBoxはsampleFormから取得されますので、
先にsampleFormを取得しておくことが重要です。

では、試しに動かしてみます。
ツリー上、もしくは画面のbutton要素をダブルクリックしてください。
以下の操作画面が表示されます。


Friendlyでは対象プロセスを操作するときに、呼び出すメソッドなどを文字列で指定するため、インテリセンスが使えません。
その代用として、このウィンドウを使うことができます。
ツリーのノードからPreformClickをダブルクリックしてください。
エディタにコードが生成されたと思います。

プロダクトプロセスはボタンを押すとテキストの内容がボタンに表示されるという内容なので、テキストボックスに文字を入力します。
button["PerformClick"]();の前の行にtextBox["Text"]("abc");を付け加えてください。

最終的には次のようなコードになったと思います。


左のエディタは、簡単な動作の確認に使えます。
ここに書かれたC#のコードは「スクリプト実行」ボタンによって実行できます。
実行すると、Start関数が呼び出されます。
引数のappは接続したプロセスにアタッチした状態で渡されてきます。

では実行してみます。
プロダクトプロセスでは、テキストボックスとボタンにabcという文字が表示されたと思います。




次はネイティブのウィンドウも見てみたいと思います。
以下のようなアプリケーションを操作対象にします。


同様に対象を選択して画面を解析します。


ネイティブのウィンドウに対してはデフォルトではWindowControlが割り当てられます。
これはSetFocusやSendMessageなどはありますが、コンボボックスを操作するには若干無理があります。

そこで、ネイティブウィンドウを操作する場合は、Codeer.Friendly.Windows.NativeStandardControlsも一緒にインストールすることをお勧めします。
このライブラリはFriendlyを使ってネイティブのウィンドウを操作するものです。
また、インストールするとTestAssistantにプラグインされて、ウィンドウクラスに応じて操作クラスが割り当てられます。

このTestAssistantはCodeer.Friendly.Windows.NativeStandardControlsもインストールしてる状態です。
これでGUIをマッピングしてみます。
コントロールの取得方法は今回はZインデックスで取得します。
取得方法は複数あり、対象アプリによって最適なものを選択してください。
コツをこちらにまとめてみましたのでこれも参考にしてください。


それから変数名称なのですが、ツリーのノード上で編集可能です。
もちろんマッピングした後に、エディタ上で編集しても問題ありません。
.Netの場合は対象GUIの変数名称がそのまま使われるので、変更の必要はあまりありませんが、
ネイティブの場合はかなり適当に命名されるので通常変更します。

これらのマッピングされたクラスには通常の操作には十分なメソッドを用意しています。
これも操作ウィンドウで見ることができます。


また、これをVisualStudioにコピーするとインテリセンスが使えますので簡単に使えると思います。

では、これも試しにコンボボックスの選択変更を呼び出してみます。
ちなみに、このコンボボックスには「a」「b」「c」の要素が入っています。



コンボボックスの選択が変わりました。
Codeer.Friendly.Windows.NativeStandardControlsはシンプルなインターフェイスのクラスで構成されているので使いやすいと思います。

ところで、先ほども少し書きましたが、Friendlyで面倒なところは、プロダクトプロセスの操作呼び出しを文字列ベースで記述するので、VisualStuidoのインテリセンスが使えません。また、スペルミス等あってもコンパイルエラーにならないので、実行時までそれがわかりません。
そのため、よく使うクラスはラッピングして共通化しておくと便利です。

Codeer.Friendly.Windows.NativeStandardControlsはまさに、そのようなライブラリで、ネイティブウィンドウに対する操作を共通化しています。
また、さらに便利なのは、TestAssistantにプラグインして、対応するウィンドウクラスごとに簡単にマッピングできる点です。

実はTestAssistantへのプラグインは、お客様自身の作成したクラスでも可能です。
次項ではそれを説明します。