##はじめに
仕事で自動テストが必要になったのでWindowsAppDriverを触ってみました。
microsoft公式の電卓サンプルで自動テストを行ってみます。
##環境
Windows 10 Version 1909
Visual Studio Community 2019 16.3.10
##手順
Windowsの設定から開発者モードを有効にする
GitHub のリリースページ から WindowsApplicationDriver.msi をダウンロード
リリースページ
###ダウンロードした WindowsApplicationDriver.msi を実行
###WinAppDriver.exeを実行
下記ディレクトリにWinAppDriver.exeがインストールされているので実行する
C:\Program Files (x86)\Windows Application Driver\WinAppDriver.exe
以下の画面が表示されると正常に起動されている
テスト実行時はこの画面を起動しておく
####Windows Application DriverのGithubからサンプルをダウンロード
####Visual Studioからダウンロードしたサンプルを開く(今回は電卓アプリを使用)
####ビルドを行う(ビルドによって必要なNuGetパッケージがダウンロードされる)
####ScenarioStandard.csのソースを修正
Githubのサンプルは英語に対応しているので日本語対応に修正
#####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());
session.FindElementByName("1").Click();
session.FindElementByName("プラス").Click();
session.FindElementByName("7").Click();
session.FindElementByName("等号").Click();
Assert.AreEqual("8", GetCalculatorResultText());
}
#####Multiplicationメソッド
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();
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());
}
#####Templatizedメソッド
[TestMethod]
// [DataRow("One", "Plus", "Seven", "8")]
// [DataRow("Nine", "Minus", "One", "8")]
// [DataRow("Eight", "Divide by", "Eight", "1")]
[DataRow("1", "プラス", "7", "8")]
[DataRow("9", "マイナス", "1", "8")]
[DataRow("8", "除算", "8", "1")]
public void Templatized(string input1, string operation, string input2, string expectedResult)
{
// Run sequence of button presses specified above and validate the results
session.FindElementByName(input1).Click();
session.FindElementByName(operation).Click();
session.FindElementByName(input2).Click();
// session.FindElementByName("Equals").Click();
session.FindElementByName("等号").Click();
Assert.AreEqual(expectedResult, GetCalculatorResultText());
}
#####ClassInitializeメソッド
public static void ClassInitialize(TestContext context)
//中略
// if (!header.Text.Equals("Standard", StringComparison.OrdinalIgnoreCase))
if (!header.Text.Equals("標準", StringComparison.OrdinalIgnoreCase))
{
session.FindElementByAccessibilityId("TogglePaneButton").Click();
Thread.Sleep(TimeSpan.FromSeconds(1));
var splitViewPane = session.FindElementByClassName("SplitViewPane");
splitViewPane.FindElementByName("Standard Calculator").Click();
Thread.Sleep(TimeSpan.FromSeconds(1));
Assert.IsTrue(header.Text.Equals("Standard", StringComparison.OrdinalIgnoreCase));
}
//中略
}
#####Clearメソッド
public void Clear()
{
// session.FindElementByName("Clear").Click();
session.FindElementByName("クリア").Click();
Assert.AreEqual("0", GetCalculatorResultText());
}
#####GetCalculatorResultTextメソッド
private string GetCalculatorResultText()
{
//return calculatorResult.Text.Replace("Display is", string.Empty).Trim();
return calculatorResult.Text.Replace("表示は ", string.Empty).Replace(" です", string.Empty).Trim();
}