WinAppDriver - Teil 1

Testautomation mit Windows Application Driver Teil 1 - Einleitung/Vorbereitung

Für GUI-Tests von Webanwendungen hat sich Selenium WebDriver in der Entwicklerwelt etabliert. Für das Testen von Apps steht das Automations-Framework Appium zur Verfügung. Microsoft hat nun nachgezogen und seine eigene Variante eines Automationsservers entwickelt: den Windows Application Driver (WinAppDriver).

Er nutzt Microsoft UI Automation, um Windows-Anwendungen aller wesentlichen Technologien (UWP, WPF, Windows Forms, MFC sowie klassisches WinAPI) programmatisch anzusteuern.

WinAppDriver ist quelloffen und mit dem Appium-Protokoll kompatibel, d.h. es kann mithilfe des Appium Windows Driver nahtlos in eine bestehende Appium-Testumgebung integriert werden. Wegen dieser Vorteile hat Microsoft WinAppDriver als offiziellen Nachfolger der Coded-UI-Test-Technologie angekündigt.

In diesem Artikel zeige ich anhand eines einfachen Beispiels, wie Sie WinAppDriver für automatisierte GUI-Tests mit und ohne Appium einsetzen können. Dazu führe ich auf der UWP-App „Rechner“ von Windows 10 (Abb. 1) eine simple Rechenoperation aus und prüfe dann, ob das Ergebnis stimmt.

Abb. 1: GUI der Rechner-App

Einen ausführlichen Artikel zum Thema habe ich in der dotnetpro 06/2019 veröffentlicht – Sie können den Artikel auch herunterladen.

Installation

Wenn Sie Appium bereits einsetzen oder zukünftig einsetzen wollen, dann sollten Sie möglichst die WinAppDriver-Version nutzen, die mit Appium ausgeliefert wird; andernfalls bekommen Sie die aktuelle Version auf github. Für die Test-Entwicklung benötigen Sie zudem die .NET-Client-Bibliotheken für Appium, die Sie am besten per NuGet in Ihr Softwareprojekt einbinden. Legen Sie in Visual Studio ein Projekt vom Typ Komponententestprojekt (.NET Framework) an und wählen Sie Projekt | NuGet-Pakete verwalten. Von dort installieren Sie das Paket Appium.WebDriver.

Vorbereitung der zu testenden Anwendung

Das Vorgehen ist bei allen Windows-Technologien gleich – Sie müssen lediglich im Vorfeld ermitteln, wie Sie die Anwendung programmatisch starten und die GUI-Steuerelemente der Anwendung ansprechen können:

Um eine UWP-App programmatisch starten zu können, muss deren ID (Application User Model ID = AUMID) bekannt sein. Hierzu können Sie das Power Shell-Skript aus Listing 1 nutzen (mit Administratorrechten ausführen!). Das Skript listet die IDs aller installierten Apps auf, und die gesuchte ID lässt sich in der Regel am Namen erkennen.

Listing 1: PowerShell-Skript zur Ausgabe aller AUMIDs

$installedApps = get-AppxPackage -allusers
$aumidList = @()
foreach ($app in $installedApps)
{
    foreach ($id in (Get-AppxPackageManifest $app).package.applications.application.id)
    {
        $aumidList += $app.packagefamilyname + "!" + $id
    }
}
$aumidList | Sort-Object

Um ein GUI-Element in einer laufenden Anwendung ansprechen können, muss das Element eindeutig identifiziert werden. Dazu stellt WinAppDriver einige Lokator-Methoden (Selektoren) zur Verfügung (siehe Tabelle 1).

Mithilfe des Windows-SDK-Tools Inspect, das nach der Installation von Visual Studio mittels

C:\Program Files (x86)\Windows Kits\10\bin\(Version)\(Plattform)\inspect.exe

gestartet werden kann, lassen sich die konkreten Werte aus der Anwendungssitzung auslesen. Dazu müssen Sie das gewünschte GUI-Element mit der Maus in den Fokus nehmen. Daraufhin werden die Attribute des Elements angezeigt. Tabelle 1 zeigt, welche Lokator-Methode welches Attribut erkennt.

Wenn das gesuchte GUI-Element ein AutomationId-Attribut besitzt, sollte dieses möglichst zur Identifikation genutzt werden, da es speziell für solche Automationszwecke vorgesehen ist – siehe Abb. 2.

Nützlich ist auch der UIRecorder, der ähnlich wie Inspect arbeitet. Nachdem Sie ein GUI-Element der laufenden Anwendung in den Fokus genommen haben, werden in diesem Fall nicht die Attribute des Elements, sondern der Pfad zum Element im XPath-Format ausgegeben. Im Aufnahmemodus können Sie zudem C#-Code generieren, den Sie über die entsprechende Registerkarte herauskopieren können (Abb. 3). Starten Sie Inspect und UIRecorder aber nicht gleichzeitig – sie kommen sich in die Quere.

Methode Beispiel Attribut in Inspect
FindElementByAccessibilityId plusButton AutomationId
FindElementByClassName ClassName Button
FindElementById RuntimeId (dezimal) 42.656828.4.8
FindElementByTagName ControlType (Textfragment zwischen UIA_... und …ControlTypeId). (Referenz Button
FindElementByXPath (Alle) //Button[@Name='Plus']
Abb. 2: Inspect zeigt die Attribute der Rechner-App an (WindowsApplicationDriver-Abb2.png)
Abb. 3: Der UIRecorder zeigt oben einen XPath-Wert, unten C#-Code an (WindowsApplicationDriver-Abb3.png)

Wenn Sie alle benötigten Werte ermittelt haben, können Sie mit Teil 2 dieses Artikels fortfahren, um Ihre Tests zu schreiben.


Artikelserie "WinAppDriver"

Jetzt teilen:

Kommentare

Einen Kommentar schreiben

Bitte rechnen Sie 4 plus 2.

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.