今回は、Windows Application Driver(WAD) のサンプルプログラムを Visual Studio で実行してみる方法を記載します。
本記事の前提条件
本記事では、以下を前提とした内容になっています。
- OSは、Windows 10 であること
- これは、WADが「Windows10で自動化を行うことを前提に作られたDriver」であるため
- インストール時に、VisualStudio で以下の環境が整っていること
- ワークロードで、「.Net デスクトップ開発」(C#での基本的な実装環境)がインストールされていること
- 個別のコンポーネントで、必要な「.Net Framework SDK」がインストールされていること
- inspect.exe(WindowsSDK)が存在していること
- 「C:\Program Files (x86)\Windows Kits\10\bin\”SDKのバージョン”\x64」を確認し、「inspect.exe」が存在していること
- Visual Studioをインストールしていれば、通常存在しているはずです
サンプルプログラムの試行方法
ここでは、実際にサンプル動作させる手順を記載します。
なお、以下をChromeではないブラウザを用いて行う場合、ダウンロードのボタンなどが正しく動作しないことがあるので、注意すること。
WADのインストール
- https://github.com/Microsoft/WinAppDriver/releases をChromeで開く
- インストールしたいバージョンの 「Assets」を開く
- Windows Application Driver を選択し、ダウンロードする(V1.2.1の場合は、WindowsApplicationDriver_1.2.1.msi)
- ダウンロードしたインストーラーを使用して、インストールする
サンプルプログラムの取得
- https://github.com/Microsoft/WinAppDriver をChromeで開く
- [緑色の「Code」ボタン] > [Download ZIP]ボタンを押下し、ダウンロードする(下図参照)
- ダウンロードした ZIPファイルを解凍する
【参考画像】
Windowsを開発者モードにする
- 「スタート」ボタンをクリックして、スタートメニューを開く
- スタートメニューの左上の「設定」ボタンを押下する
- 「更新とセキュリティ」を選択する
- 左カラムの「開発者向け」を選択する
- 「開発者モード」を「ON」に設定する
VisualStudioでサンプルプログラムの実行
- 「サンプルプログラムの取得」の手順3で解凍したプログラムをVisual Studioで開く
- ※開くプログラムは「”解凍したフォルダー”\Samples\C#\CalculatorTest\CalculatorTest.sln」を選択しましょう。
- 不足しているライブラリーをインストール
- [ツール] > [NuGetパッケージマネージャー] > [ソリューションのNuGetパッケージの管理] を開く
- 「復元」ボタンを押下し、必要なものを自動インストールする
- いくつかのライブラリーには「更新」が出てくるが、アップデートしないこと。アップデートした場合は、サンプルプログラムが対応していない旨のエラーメッセージが表示されるようになります。
- [ビルド] > [ソリューションのビルド]を実行する
- 左カラムにあるテストエクスプローラーで実行したいスクリプトを選択する
- 「テストエクスプローラー」が表示されていない場合は、[テスト] > [ウィンドウ] > [テストエクスプローラー]を押下する
- テストエクスプローラーにおける「青」「緑」「赤」のアイコンは「緑:成功」「青:未実行」「赤:失敗」を示す
- テストスクリプトには、以下が存在する
- Addition(加算)
- Division(除算)
- Multiplication(乗算)
- Subtraction(減算)
- Templatized(テンプレート)
- 右クリックして、「実行」を押下する
スクリプトの修正
上記手順で、スクリプトの実行はできますが、正常に計算機が動作することはありません。これには、2つの理由があります。
理由①:一部設定が不正である
理由②:スクリプトで参照している計算機のパーツが正しくない
それぞれの解決方法を記載します。
理由①の解決
- [ツール] > [オプション] > [テスト]を開く
- 「パフォーマンスを向上させるため、テスト アセンブリ フォルダーにあるか、runsettingsファイルに指定されているテスト アダプターのみを使用してください」のチェックを外す
理由②の解決
直接の原因は、指定しているボタン名が、英語版のWindows OS がベースになっていることにあります。そのため、指定しているパーツの名称が日本語版の「電卓」では指定したボタンが見つからずに失敗しています。
一例として、Addition(加算)のスクリプトで修正します。
実際のスクリプトは以下になっています。
public void Addition()
{
Find the buttons by their names and click them in sequence to perform 1 + 7 = 8
session.FindElementByName(“One”).Click();
session.FindElementByName(“Plus”).Click();
session.FindElementByName(“Seven”).Click();
session.FindElementByName(“Equals”).Click();
Assert.AreEqual(“8”, GetCalculatorResultText());
}
このスクリプトの中でパーツ名を示しているのは、「One」「Plus」「Seven」「Equals」の4つになります。これらを修正する必要があります。
日本語版のIDを調べるには、inspect.exe(前提条件に記載)もしくは「UI Recorder」を使用します。「UI Recorder」は、こちらにインストーラーがあります。「WinAppDriver UI Recorder」で検索してみて下さい。
実際には、inspect を起動して、IDを知りたい場所にマウスオーバー(マウスカーソルを持っていく)を行います。すると、以下の画像(画像では「=」)のように、その場所の情報が inspect 上に表示されます。その情報の中で、Nameの情報を拾ってくれば良いです。
以下に、上記方法で日本語版のIDに変更したスクリプトを記載します。以下のように変更してみて下さい。
public void Addition()
{
Find the buttons by their names and click them in sequence to perform 1 + 7 = 8
session.FindElementByName(“1”).Click();
session.FindElementByName(“プラス”).Click();
session.FindElementByName(“7”).Click();
session.FindElementByName(“等号”).Click();
Assert.AreEqual(“8”, GetCalculatorResultText());
}
なお、今回は、スクリプトで「FindElementByName」を使用しているため、Nameを拾っています。持ってきたい情報によって利用する情報も変わるので、注意してください。
例えば、Division(除算)のスクリプトでは、「FindElementByName」の代わりに、「FindElementByAccessibilityId」を使用しています。この場合は「AutomationID」を拾ってください。
Multiplication(乗算)とSubtraction(減算)では、「FindElementByXPath」を使用しています。この場合は「UI Recorder」を使用した方が操作が容易になると思います。取得した場合は、以下のようになります。なお、「//」でコメントとしている箇所が元のスクリプトになります。直後の一文に変更しましょう。
public void Multiplication()
{
// Find the buttons by their names using XPath and click them in sequence to perform 9 x 9 = 81
//session.FindElementByXPath(“//Button[@Name=’Nine’]”).Click();
//session.FindElementByXPath(“//Button[@Name=’Multiply by’]”).Click();
//session.FindElementByXPath(“//Button[@Name=’Nine’]”).Click();
//session.FindElementByXPath(“//Button[@Name=’Equals’]”).Click();
//Assert.AreEqual(“81”, GetCalculatorResultText());session.FindElementByXPath(“//Button[@Name=’9′]”).Click();
session.FindElementByXPath(“//Button[@Name=’乗算’]”).Click();
session.FindElementByXPath(“//Button[@Name=’9′]”).Click();
session.FindElementByXPath(“//Button[@Name=’等号’]”).Click();
Assert.AreEqual(“81”, GetCalculatorResultText());
}
これらの他にも、以下の変更が必要です。
最初に表示されているスイッチをリセットするための「Clearメソッド」、および 計算結果のテキストフィールドの結果から余計な文字列を排除する「GetCalculatorResltTextメソッド」では 以下のような変更をしてみて下さい。こちらも「//」でコメントとしている箇所が元のスクリプトになります。
public void Clear()
{
// session.FindElementByName(“Clear”).Click();session.FindElementByName(“クリア”).Click();
Assert.AreEqual(“0”, GetCalculatorResultText());
}
private string GetCalculatorResultText()
{
//return calculatorResult.Text.Replace(“Display is”, string.Empty).Trim();return calculatorResult.Text.Replace(“表示は “, string.Empty).Replace(” です”, string.Empty).Trim();
}
デバッグ(プログラムの試行/バグ修正)の手順
以下に倣って、実施してみて下さい。
- ツールバーにある「ソリューション構成」を「Debug」に設定する。(参考画像①)
- 行番号の左側をクリックして、デバッグポイントを指定する。(参考画像②)
- デバッグポイント:デバッグ時に処理を一時停止したい箇所のこと
- デバッグしたいスクリプトをビルドもしくはリビルドする。(参考画像①)
- テストエクスプローラーで実行したいスクリプトを選択する。
- 右クリックをして、「デバッグ」を押下する。
- 手順3で設定したデバッグポイントで止まったら、「F10」もしくは「F11」を押下して処理を進める
- F10:処理の途中でメソッドがあった場合、そのメソッド内の処理は止めないで処理が進む
- F11:処理の途中でメソッドがあった場合、そのメソッド内の処理も1行1行止めながら処理が進む
- 想定していない処理(動作)が行われた箇所を修正する
【参考画像①】
【参考画像②】
【参考画像③】
【補足】おすすめ設定
必須ではありませんが、ぜひ行っておきたいVisual Studio の設定を記載します。
行番号の表示
特に「デバッグ(バグの修正)を行う時」「誰かにレビュー(確認)してもらう時」などは、非常に効率が良いでしょう。どこの行のことを言っているのかが一目瞭然です。
設定手順は以下になります。
- [ツール] > [オプション] を開く
- ツリーエリアで、[テキスト エディター] > [すべての言語] > [一般] を選択する
- 「行番号」にチェックを入れる
【補足】覚えておくと良い便利技
テストスクリプトへのジャンプ
テストエクスプローラー内に表示されているテスト名(テストメソッド)をダブルクリックすると、該当のテストスクリプトにジャンプする
特定のメソッドへのジャンプ
テストスクリプトが書かれているエリアの右上(画像の赤枠)のプルダウンメニューには、使用しているメソッドの一覧が表示される。
その中でジャンプしたいメソッドを選択すると、そのメソッドにジャンプすることができる。
変数やメソッドの定義へのジャンプ
メソッド名、もしくは変数に対し、Ctrl + 左クリックを押下すると、定義している場所にジャンプすることができる。
【補足】用語集
用語 | 説明 |
inspect.exe | Windows上で動いているウィンドウ内のボタンなどのGUIコンポーネント(パーツ)の名前などを調べることができるツール。 WinAppDriverとは直接関係はないが、スクリプトを作成する際に必要不可欠なユーティリティ。Windows SDKに含まれ、C:\Program Files (x86)\Windows Kits に存在している。 デフォルトで入っている標準アプリではないが、Visual Studioと同時にインストールされる。 |
WinAppDriver | Windows10をスクリプトで自動制御するためのドライバー。 Githubにツール本体は公開されているが、オープンソース化はされていない。 公開リポジトリで管理されているのは、ドキュメントとサンプルのみ。 これらをクローンとして使用するのとは別に、リリース版バイナリのインストーラーをダウンロードしてインストールする必要がある。 |
WinAppDriver UI Recorder | ユーザーの操作を記録して、C#のソースコードを生成してくれるツール。 実際に使用する際は、生成されたスクリプトをベースに修正を加える必要がある。 |
テストスクリプト | 「ボタンをクリックする」「結果が0になっていることを確認」などの手順を記載したソースコード。 テストランナーごとに様々なプログラミング言語で記述できる。 使用する言語に基づいた繰り返し文(for文/while文)や条件分岐(if文)なども利用可能。 |
テストランナー | テストスクリプトを解釈してドライバーに制御指示を出す実行基盤。 対称がブラウザーなら「Webドライバー」、Windows制御なら「WinAppDriver」などを呼び出す。 「Selenium」や「Appium」辺りが代表格。 |
デバッグ | プログラムの誤り(=バグ)を見つけ、修正すること |
まとめ
今回は、Windows Application Driver(WAD) のサンプルプログラムを Visual Studio で実行してみる方法について記載しました。
サンプルプログラムは自由に変更することが可能なので、計算機のサンプルプログラムでは複雑な計算をさせることもできます。
自動化に「慣れる」「体験してみる」という第1歩目として、触ってみると面白いかもしれません。