WinAppDriver - Teil 2

Testautomation mit Windows Application Driver Teil 2 - Testdesign und -ausführung

Nachdem in Teil 1 die notwendigen Vorbereitungen getroffen wurden, zeige ich nun, wie GUI-Tests mittels WinAppDriver durchgeführt werden. Dabei sind minimal die folgenden Schritte notwendig:

  1. AUMID oder Pfad zur Anwendung angeben,
  2. URL zum Automationsserver (WinAppDriver) angeben,
  3. Automationssitzung erzeugen,
  4. die zu testende Anwendung per Automation bedienen,
  5. Ergebnis ermitteln (hier: Rechenergebnis aus der Anzeige auslesen),
  6. auf das korrekte Ergebnis testen und
  7. Automationssitzung vernichten.

Zum Erzeugen der Automationssitzung müssen sogenannte Capabilities (Konfigurationsparameter) angegeben werden. Eine Liste der für WinAppDriver nutzbaren Capabilities finden Sie in Tabelle 2.

Tabelle 2: Die für WinAppDriver relevanten Capabilities

Listing 2 zeigt das komplette Beispiel in C#-Code.

Listing 2: Die wesentlichen Schritte für den Test einer UWP-App

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

namespace GUITest
{
    [TestClass]
    public class WinGUITest
    {
        private const string appID = "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App";

        // Alternatively, for non-UWP applications use path to executable file:
        // private const string appID = @"C:\...\filename.exe";

        private const string winAppDriverUrl = "http://127.0.0.1:4723"; // Default IP and port

        protected static WindowsDriver<WindowsElement> session;

        [ClassInitialize]
        public static void ClassInitialize(TestContext context)
        {
            var options = new AppiumOptions();
            options.AddAdditionalCapability("app", appID);

            if (session == null)
            {
                // Create automation session
                session = new WindowsDriver<WindowsElement>(new Uri(winAppDriverUrl), options);

                // Alternatively, if Appium is used instead of WinAppDriver:
                // options.AddAdditionalCapability("deviceName", "WindowsPC");
                // session = new WindowsDriver<WindowsElement>(new Uri(winAppDriverUri + '/wd/hub'), options);

                Assert.IsNotNull(session);

                // If the application displays a splash screen, wait until it disappears
                // and reassign the session to the correct window:
                // System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5));
                // session.SwitchTo().Window(session.WindowHandles[0]); // Select correct window here

                // Set timeout for element search
                session.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(3);
            }
        }

        [TestInitialize]
        public void TestInitialize()
        {
            // Clear the calculation display
            session.FindElementByAccessibilityId("clearButton").Click();
        }

        [TestMethod]
        public void Test2688Div64()
        {
            // Do the calculation
            session.FindElementByAccessibilityId("num2Button").Click();
            session.FindElementByAccessibilityId("num6Button").Click();
            session.FindElementByAccessibilityId("num8Button").Click();
            session.FindElementByAccessibilityId("num8Button").Click();
            session.FindElementByAccessibilityId("divideButton").Click();
            session.FindElementByAccessibilityId("num6Button").Click();
            session.FindElementByAccessibilityId("num4Button").Click();
            session.FindElementByAccessibilityId("equalButton").Click();

            string result = new System.Text.RegularExpressions.Regex(@"\d+").Match(session.FindElementByAccessibilityId("CalculatorResults").Text).Value;
            
            Assert.AreEqual("42", result);
        }

        [TestCleanup]
        public void TestCleanup()
        {
        }

        [ClassCleanup]
        public static void ClassCleanup()
        {
            if (session != null)
            {
                session.Close();
                session.Quit();
                session = null;
            }
        }
    }
}

Wenn der Test fertiggestellt ist, starten Sie WinAppDriver (C:\Program Files (x86)\Windows Application Driver\WinAppDriver.exe) mit Administratorrechten. Es öffnet sich ein Konsolenfenster, in dem der Server seine Bereitschaft signalisiert und HTTP-Aktivitäten protokolliert. Stoßen Sie den Test über Visual Studio an und schauen Sie zu, wie die Rechner-App von WinAppDriver bedient wird. Am Ende sollte der Test einen Erfolg melden.

Die grundsätzliche Funktionsweise von WinAppDriver ist damit erklärt. Im dritten Teil dieses Artikels gehe ich noch auf einige weiterführende Aspekte ein.


Jetzt teilen: