1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?