LoginSignup
0

More than 3 years have passed since last update.

WindowsAppDriverで電卓アプリを自動テストする(Visual Studioで公式サンプルを動かすまで)

Posted at

はじめに

仕事で自動テストが必要になったのでWindowsAppDriverを触ってみました。
microsoft公式電卓サンプルで自動テストを行ってみます。

環境

Windows 10 Version 1909
Visual Studio Community 2019 16.3.10

手順

Windowsの設定から開発者モードを有効にする

image.png

GitHub のリリースページ から WindowsApplicationDriver.msi をダウンロード

リリースページ 
image.png

ダウンロードした WindowsApplicationDriver.msi を実行

image.png

WinAppDriver.exeを実行

下記ディレクトリにWinAppDriver.exeがインストールされているので実行する
C:\Program Files (x86)\Windows Application Driver\WinAppDriver.exe
image.png
以下の画面が表示されると正常に起動されている
テスト実行時はこの画面を起動しておく
image.png

Windows Application DriverのGithubからサンプルをダウンロード

image.png

Visual Studioからダウンロードしたサンプルを開く(今回は電卓アプリを使用)

image.png
image.png

ビルドを行う(ビルドによって必要なNuGetパッケージがダウンロードされる)

image.png

ScenarioStandard.csのソースを修正

Githubのサンプルは英語に対応しているので日本語対応に修正

Additionメソッド
ScenarioStandard.cs
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メソッド
ScenarioStandard.cs
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メソッド
ScenarioStandard.cs
[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メソッド
ScenarioStandard.cs
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メソッド
ScenarioStandard.cs
public void Clear()
        {
            // session.FindElementByName("Clear").Click();
            session.FindElementByName("クリア").Click();
            Assert.AreEqual("0", GetCalculatorResultText());
        }
GetCalculatorResultTextメソッド
ScenarioStandard.cs
private string GetCalculatorResultText()
        {
            //return calculatorResult.Text.Replace("Display is", string.Empty).Trim();
            return calculatorResult.Text.Replace("表示は ", string.Empty).Replace(" です", string.Empty).Trim();
        }

テスト実行

WinAppDriver.exeを起動しておく
image.png

image.png
テストが実行される
ezgif-2-993f4a592af4.gif

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
0