'Windows desktop Calculator automation test not working with MS Visual studio-WinAppDriver-Appium

I am newbie to WinAppDriver-Appium automation test. I am just trying with simple C# sharp code to auto test windows desktop calculator. Please find below code.

CalculatorSession.cs

using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium.Appium.Windows;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Appium;
using System;

namespace CalculatorTest
{
public class CalculatorSession
{
    // Note: append /wd/hub to the URL if you're directing the test at Appium
    private const string WindowsApplicationDriverUrl = "http://127.0.0.1:4723";
    private const string CalculatorAppId = 
    "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App";
    protected static WindowsDriver<WindowsElement> session;

    public static void Setup(TestContext context)
    {
        // Launch Calculator application if it is not yet launched
        if (session == null)
        {
            // Create a new session to bring up an instance of the Calculator application
            // Note: Multiple calculator windows (instances) share the same process Id
            AppiumOptions options = new AppiumOptions();
            options.AddAdditionalCapability("deviceName", "WindowsPC");
            options.AddAdditionalCapability("platformName", "Windows");
            options.AddAdditionalCapability("app", CalculatorAppId);

            session = new WindowsDriver<WindowsElement>(new Uri(WindowsApplicationDriverUrl), options);


            /* AppiumOptions appCapabilities = new DesiredCapabilities();
             appCapabilities.SetCapability("app", CalculatorAppId);
             appCapabilities.SetCapability("deviceName", "WindowsPC");
             session = new WindowsDriver<WindowsElement>(new Uri(WindowsApplicationDriverUrl), appCapabilities);*/

            Assert.IsNotNull(session);

            // Set implicit timeout to 1.5 seconds to make element search to retry every 500 ms for at most three times
            session.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(1.5);
        }
    }

    public static void TearDown()
    {
        // Close the application and delete the session
        if (session != null)
        {
            session.Quit();
            session = null;
        }
    }
}
}

ScenarioStandard.cs

   using Microsoft.VisualStudio.TestTools.UnitTesting;
   using OpenQA.Selenium.Appium.Windows;
   using System.Threading;
   using System;

   namespace CalculatorTest
   {
       [TestClass]
       public class ScenarioStandard : CalculatorSession
       {
           private static WindowsElement header;
           private static WindowsElement calculatorResult;

           [TestMethod]
           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());
           }

           [TestMethod]
           public void Division()
           {
               // Find the buttons by their accessibility ids and click them in sequence to perform 88 / 11 = 8
               session.FindElementByAccessibilityId("num8Button").Click();
               session.FindElementByAccessibilityId("num8Button").Click();
               session.FindElementByAccessibilityId("divideButton").Click();
               session.FindElementByAccessibilityId("num1Button").Click();
               session.FindElementByAccessibilityId("num1Button").Click();
               session.FindElementByAccessibilityId("equalButton").Click();
               Assert.AreEqual("8", GetCalculatorResultText());
           }

           [TestMethod]
           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());
           }

           [TestMethod]
           public void Subtraction()
           {
               // Find the buttons by their accessibility ids using XPath and click them in sequence to perform 9 - 1 = 8
                 session.FindElementByXPath("//Button[@AutomationId=\"num9Button\"]").Click();
                 session.FindElementByXPath("//Button[@AutomationId=\"minusButton\"]").Click();
                 session.FindElementByXPath("//Button[@AutomationId=\"num1Button\"]").Click();
                 session.FindElementByXPath("//Button[@AutomationId=\"equalButton\"]").Click();
                 Assert.AreEqual("8", GetCalculatorResultText());
            }

           [TestMethod]
           [DataRow("One", "Plus", "Seven", "8")]
           [DataRow("Nine", "Minus", "One", "8")]
           [DataRow("Eight", "Divide by", "Eight", "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();
               Assert.AreEqual(expectedResult, GetCalculatorResultText());
           }

           [ClassInitialize]
           public static void ClassInitialize(TestContext context)
           {
               // Create session to launch a Calculator window
               Setup(context);

               // Identify calculator mode by locating the header
               try
               {
                   header = session.FindElementByAccessibilityId("Header");
               }
               catch
               {
                   header = session.FindElementByAccessibilityId("ContentPresenter");
               }

               // Ensure that calculator is in standard mode
               if (!header.Text.Equals("Standard", 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));
               }

               // Locate the calculatorResult element
               calculatorResult = session.FindElementByAccessibilityId("CalculatorResults");
               Assert.IsNotNull(calculatorResult);
           }

           [ClassCleanup]
           public static void ClassCleanup()
           {
               TearDown();
           }

           [TestInitialize]
           public void Clear()
           {
               session.FindElementByName("Clear").Click();
               Assert.AreEqual("0", GetCalculatorResultText());
           }

           private string GetCalculatorResultText()
           {
               return calculatorResult.Text.Replace("Display is", string.Empty).Trim();
           }
       }
}

I am using MS visual studio IDE and created project using template "Unit Test App ( Universal Windows )". When I run above code it just opens empty window like below. UnitTestProject.exe

I want my code to open calculator automatically and should perform tasks mentioned in code. How to make it work. Please guide.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source