WinAppDriver
WindowsアプリのUIテストを自動化する場合、WinAppDriverを使うかと思います。
サンプルプログラムや紹介サイト等があるので敷居はそれほど高くはありません。
しかしチュートリアルを完了させて、いざ自分の開発しているアプリに適用するとうまくいかない人もいるでしょう(私もそのひとりです)。
本記事では、私がハマった問題と解決策を紹介します。
そもそもサンプルプログラム動かへんやんけ問題
これはそれほど難しい問題ではありません。
こちらの記事を参考にすれば難なく動かせるでしょう。
WinAppDriverのサンプルを動かすまで
重要なのは次の部分
ボタン名などが英語版Windows前提で書かれており、日本語の「電卓」では指定されたボタンが見当たらないということのようです。
FindElementByNameでは言語によって書き換える必要があります。
FindElementByAccessibilityIdは言語影響を受けないので、実装時にはこちらを優先した方がよいかと。
新規クラスにサンプルプログラムをコピペしたら動かへんやんけ問題
そのままコピペすると想定外の引数やんけと怒られます。
原因はAppiumのバージョンが4系なのに3系の書き方をしているから。
サンプルプログラムや多くの紹介記事では、3系の書き方をしています。なのでここは少し手間取りました。
4系の書き方に変更すればエラーを解消できます。
AppiumOptionsoptions=newAppiumOptions();options.AddAdditionalCapability("deviceName","WindowsPC");options.AddAdditionalCapability("platformName","Windows");options.AddAdditionalCapability("app",CalculatorAppId);session=newWindowsDriver<WindowsElement>(newUri(WindowsApplicationDriverUrl),options);
ウィンドウが複数開くアプリでElement取得できへんやんけ問題
これは私が半泣きになったやつです。
私が自動化したかったアプリは、起動時にプログレスバーウィンドウをいくつか表示させて消してを繰り返します。
その後にメインのウィンドウが起動します。
メインのウィンドウのElementを取得したいのですが、サンプルプログラムのやり方だと最初のプログレスバーウィンドウが閉じた時点でセッションが切れていまい、うまく取得できません。
その場合は最初にデスクトップ操作のオブジェクトを作ってあげて、都度操作したいウィンドウのセッションオブジェクトを生成してあげれば解決します。
options.AddAdditionalCapability("app","root");