3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

第1回 Friendly勉強会に参加してきました #Friendly勉強会

Last updated at Posted at 2017-09-08

2017/08/31 Friendly勉強会 の第1回に参加しました。参加してみての感想などを簡単に書いていきます。

Friendlyとは?

テスト自動化を目的としたWindowsアプリの操作ライブラリです。ネイティブ、.NetのForm、WPFアプリケーションに対応しているようです。

何をやったか?

勉強会はハンズオン形式で参加者は説明を受けながらコードを打ち、わからなければ都度質問する、という形で進められました。今回はWPFアプリケーションを対象とし、「コントロールの特定方法」について学びました。以下、ハンズオンで記載したコードです。なお、ハンズオン資料はこちらからダウンロード可能です。

FriendlyTest.cs

// ウィンドウの特定 - バリエーション4つ
// 1. 最前面にあるウィンドウ
var main = WindowControl.FromZTop(_app);

// 2, 3. ウィンドウ情報を基に特定する - MainWindow.xamlに記載されている
main = WindowControl.IdentifyFromTypeFullName(_app, "WpfApplication.MainWindow");

main = WindowControl.IdentifyFromWindowText(_app, "Friendly Handson");

// 4. 現在操作中のアプリケーションのメインウィンドウ
var mainWindowCore = _app.Type<Application>().Current.MainWindow;
main = new WindowControl(mainWindowCore);

最初にウィンドウの特定方法について4パターン紹介して頂きました。どの方法でも操作対象アプリケーションのメインウィンドウを特定できますが、
WindowTextを使った方法が良く使われるとのことです。アプリケーションのウィンドウ名は "Friendly Handson" ではなく、"FRIENDLY HANDSON" とすべて大文字になっていますが、
これは別途使用しているライブラリの関係でそうなっているのではないかということでした。そのため、WindowTextを指定する時は WpfApplication の MainWindow.xaml にあるTitle="Friendly Handson"を参考にするのが良さそうです。

FriendlyTest.cs
// タブの特定
// logicalツリー:xamlファイルの木構造を取得する
var logicalMain = main.LogicalTree();

// AppVar => コントロールオブジェクトそのもの
// オブジェクトのポインタのようなものが入っているイメージ
AppVar tabCore = logicalMain.ByType<TabControl>().Single();
var tab = new WPFTabControl(tabCore);

// タブの操作
tab.EmulateChangeSelectedIndex(1);
tab.EmulateChangeSelectedIndex(0);

// 以下、テキストボックスの特定、コンボボックスの特定 と続いたが、ここでは省略
.
.
.

次にタブやテキストボックス、コンボボックスなど各種コントロールの特定・操作方法について紹介して頂きました。ここで、Friendly の大きな特徴である「対象プロセスのハッキング」が登場します。logicalツリーを使って MainWindow.xaml の木構造を取得した後、各コントロールを取得していきます。それを実現しているのが、AppVarクラスです。このクラスのオブジェクトには、コントロールオブジェクトのポインタのようなものが入っているイメージと説明を受けました。実際、AppVarオブジェクトの情報を基にタブを切り替えたり、テキストボックスから値を取得したり、といった各コントロールの操作や情報取得を体験することができました。

今回の勉強会では手を動かしたのはここまでで、最後に質問タイムがあって終了となりました。

所感

自分はWPFアプリケーションを触るのは今回初めてだったのですが、丁寧に教えて頂けたため楽しんでハンズオンを進めることができました。「対象プロセスのハッキング」がFriendlyの大きな特徴とおっしゃっていましたが、実際体験したことでその凄さを感じ、どうやって実現しているか興味もわいてきました。勉強会は今後も一回完結ものの形で継続的に行われるようなので、参加して理解を深めていきたいと思います。

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?