読者です 読者をやめる 読者になる 読者になる

Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

Windowsアプリの自動テストはFriendlyが良さげ

winform WPF

WPFでデスクトップアプリを作りまして、画面操作のテストが非常にめんどくさい。Seleniumに該当するものが無いかを簡単に調べてみた。大きく分けてこの3つがあるようだ。

  1. UIAutomation
  2. Winium
  3. Friendly

UIAutomationというのはMSが標準で用意している画面操作のテストライブラリ。VisualStudioを起動して、そこにテストコードを書いていく。WiniumはSeleniumにインスパイアされたWindowsのデスクトップアプリを操作するライブラリで、UIAutomationのラッパーライブラリのようだ。どっちを使っても大差は無さそう。FindByXXXの呪縛からは逃れられない。

github.com

で、もう1つの選択肢がこちらのFriendly。

www.codeer.co.jp

対象プロセス(端的に言えばテスト対象のアプリのexe)を別のプロセスから操作することができ、対象プロセスが保有するすべての属性や関数にアクセスすることが出来る。なぬ? FindByXXが不要でUIテストのコードが書けるってこと?!それはしゅごい。それだけで心が動く。

APIを詳しく見ていないのですが、僕はXAMLに全然ElementNameを書いていない。MVVMではそんなもの原則不要。ボタンは全部ViewModelのコマンドにバインドしているので、バインドされているViewModelのコマンドをUIテストコードで直接キックできれば楽にテストが書ける...

え?出来ちゃうの?バインドしてるコマンドでボタンを特定してキック出来るっぽいコードが書いてある。なにそれすごい。

ishikawa-tatsuya.hatenablog.com

var app = new WindowsAppFriend(Process.Start("Target.exe"));
WindowControl main = WindowControl.FromZTop(app);

//ApplicationCommands.Closeの割り当たっているボタンを特定
var buttonClose = main.LogicalTree().ByType<Button>().ByCommand(ApplicationCommands.Close).Single();

・・・GWの連休課題で試しに動かしてみたいと思います!