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:

Kommentare

Einen Kommentar schreiben

Bitte rechnen Sie 9 plus 6.

Wir verarbeiten Ihre personenbezogenen Daten, soweit es für die Bereitstellung des Kommentars sowie zur Sicherstellung der Integrität unserer informationstechnischen Systeme erforderlich ist. Sie sind zur Bereitstellung dieser Daten nicht verpflichtet, eine Nutzung der Kommentarfunktion ist ohne die Bereitstellung jedoch nicht möglich. Weitere Hinweise zum Datenschutz finden Sie in der Datenschutzerklärung.