Mobile Testing Plugin: Unterschied zwischen den Versionen

Aus expecco Wiki (Version 2.x)
Zur Navigation springen Zur Suche springen
(→‎Windows: new supplement version)
 
(140 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Deutsche Version''' | [[Mobile_Testing_Plugin/en|English Version]]

= Einleitung =
= Einleitung =
Mit dem ''Mobile Testing Plugin'' können Anwendungen auf Android- und iOS-Geräten getestet werden. Dabei ist es egal, ob reale mobile Endgeräte oder emulierte Geräte verwendet werden. Das Plugin kann (und wird üblicherweise) zusammen mit dem [[Expecco_GUI_Tests_Extension_Reference|GUI-Browser]] verwendet werden, der das Erstellen von Tests unterstützt. Zudem ist damit das Aufzeichnen von Testabläufen möglich.
Mit dem ''Mobile Testing Plugin'' können Anwendungen auf Android- und iOS-Geräten getestet werden. Dabei ist es egal, ob reale mobile Endgeräte oder emulierte Geräte verwendet werden. Das Plugin kann (und wird üblicherweise) zusammen mit dem [[Expecco_GUI_Tests_Extension_Reference|GUI-Browser]] verwendet werden, der das Erstellen von Tests unterstützt. Zudem ist damit das Aufzeichnen von Testabläufen möglich.
Zeile 4: Zeile 6:
Zur Verbindung mit den Geräten wird [http://appium.io/ Appium] verwendet. Appium ist ein freies Open-Source-Framework zum Testen und Automatisieren von mobilen Anwendungen.
Zur Verbindung mit den Geräten wird [http://appium.io/ Appium] verwendet. Appium ist ein freies Open-Source-Framework zum Testen und Automatisieren von mobilen Anwendungen.


Zur Einarbeitung in das Mobile Plugin empfehlen wir das [[#Tutorial|Tutorial]] zu bearbeiten. Dieses führt anhand eines Beispiels Schritt für Schritt durch die Erstellung eines Testfalls und erklärt die nötigen Grundlagen.
Zur Einarbeitung in das Mobile Plugin empfehlen wir das [[Mobile_Testing_Tutorial|Tutorial]] zu bearbeiten. Dieses führt anhand eines Beispiels Schritt für Schritt durch die Erstellung eines Testfalls und erklärt die nötigen Grundlagen.


= Installation und Aufbau =
= Installation und Aufbau =
Zur Verwendung des Mobile Testing Plugins müssen Sie expecco inkl. Plugins installiert haben und Sie benötigen die entsprechenden Lizenzen. expecco kommuniziert mit den Mobilgeräten über einen Appium-Server, der entweder auf demselben Rechner wie expecco läuft, oder auf einem zweiten Rechner. Dieser muss für expecco erreichbar sein.
Zur Verwendung des Mobile Testing Plugins müssen Sie expecco inkl. des Plugins Mobile Testing installiert haben und Sie benötigen die entsprechenden Lizenzen. expecco kommuniziert mit den Mobilgeräten über einen Appium-Server, der entweder auf demselben Rechner wie expecco läuft, oder auf einem zweiten Rechner. Dieser muss für expecco erreichbar sein.


'''Installationsübersicht ab expecco 18.1:'''
==Installationsübersicht==
* Appium-Server<sup>a</sup> 1.6.4 for Android
* Appium-Server<sup>b</sup> 1.8.0 for iOS
für Android-Geräte ab der Version 4.3:
* Java JDK<sup>a</sup> Version 7, 8 oder 9
* Android SDK<sup>a</sup>
für iOS-Geräte ab Version 9.3:
* Xcode 9.3.x
* Apple-Entwickler-Zertifikat mit zugehörigem privaten Schlüssel
* Provisioning Profile mit den verwendeten Mobilgeräten
(<sup>a</sup>) enthalten in Mobile Testing Supplement<br>
(<sup>b</sup>) enthalten in Mobile Testing Supplement for Mac OS


'''Installationsübersicht mit expecco 2.11:'''
'''Rechner, auf dem expecco läuft:'''
* Appium-Server<sup>ab</sup> 1.6.4
* Java JDK Version 8, 9, 10, 11 oder neuer <sup>1)</sup>
für Android-Geräte ab der Version 4.3:
'''Rechner, an dem Android-Geräte angeschlossen sind:'''
* Appium-Server'', diesen können Sie über das Mobile Testing Supplement installieren (s.u.), von dem wir regelmäßig einen neue Version zur Verfügung stellen''
* Java JDK<sup>a</sup> Version 7 oder 8
* Android SDK'', dieses erhalten Sie ebenfalls mit dem Mobile Testing Supplement''
* Android SDK<sup>a</sup>
* Java JDK Version 8, 9, 10, 11 oder neuer <sup>1)</sup>
für iOS-Geräte ab Version 9.3:
'''Rechner, an dem iOS-Geräte angeschlossen sind<sup>2)</sup>:'''
* Xcode 8.3.x
* Appium-Server'', diesen können Sie über das Mobile Testing Supplement für Mac OS installieren (s.u.), von dem wir regelmäßig einen neue Version zur Verfügung stellen''
* Apple-Entwickler-Zertifikat mit zugehörigem privaten Schlüssel
* Xcode ''in einer Version, die die verwendete iOS-Version unterstützt, erhältlich über den Apple App Store''
* Java JDK Version 8, 9, 10, 11 oder neuer <sup>1)</sup>
* Apple-Entwickler-Zertifikat mit zugehörigem privaten Schlüssel ''(zum Signieren des WebDriverAgents)''
* Provisioning Profile mit den verwendeten Mobilgeräten
* Provisioning Profile mit den verwendeten Mobilgeräten
(<sup>a</sup>) enthalten in Mobile Testing Supplement<br>
(<sup>b</sup>) enthalten in Mobile Testing Supplement for Mac OS


'''Installationsübersicht mit expecco 2.10:'''
* Appium-Server<sup>ab</sup> 1.4.16
für Android-Geräte ab der Version 2.3.3 bis Version 6.0:
* Java JDK Version<sup>a</sup> 7 oder 8
* Android SDK<sup>a</sup>
für iOS-Geräte bis Version 9.3:
* Xcode 7.3.x
* Apple-Entwickler-Zertifikat<sup>c</sup> mit zugehörigem privaten Schlüssel
* Provisioning Profile<sup>c</sup> mit den verwendeten Mobilgeräten
(<sup>a</sup>) enthalten in Mobile Testing Supplement<br>
(<sup>b</sup>) enthalten in Mobile Testing Supplement for Mac OS<br>
(<sup>c</sup>) zum Signieren der App


Je nach Aufbau können die oben genannten Rechner auch das selbe Gerät sein. expecco kann sich sowohl über das Netzwerk mit einem entfernten Appium-Server und dort angeschlossenen Mobilgeräten verbinden, als auch lokal selbst einen Appium-Server starten und diesen mit lokalen Mobilgeräten verwenden. Einige Funktionen von expecco, die die Erstellung von Testfällen erleichtern, sind jedoch nur verfügbar, wenn die Mobilgeräte am selben Rechner angeschlossen sind, auf dem auch expecco läuft. Ein möglicher Aufbau kann daher wie in folgender Abbildung aussehen:
Beachten Sie, dass aufgrund der Voraussetzungen (keine Anbindung an nicht-Apple Geräte verfügbar) iOS-Geräte nur von einem Mac aus angesteuert werden können.
expecco kann aber über das Netzwerk mit einem Appium-Server auf dem Mac kommunizieren, um auf den dort angeschlossenen iOS-Geräten zu testen. Im Folgenden wird die Installation von Appium und anderer nötiger Programme für Windows und Mac OS erklärt.


[[Datei:MobileTestingAufbau.png | 400px]]
[[Datei:MobileTestingAufbau.png | 400px]]

Im Folgenden wird die Installation von Appium und anderer nötiger Programme für Windows und Mac OS erklärt.

<sup>1)</sup>: Zum Zeitpunkt der Erstellung dieses Dokuments wurden Versionen bis 11 auf Funktion verifiziert. Neuere Versionen sollten - sofern nicht grundlegende Änderungen von Oracle vorgenommen wurden, ebenfalls funktionieren.

<sup>2)</sup>: Beachten Sie, dass aufgrund der Voraussetzungen (keine Anbindung an nicht-Apple Geräte verfügbar) iOS-Geräte nur von einem Mac aus angesteuert werden können. Sie benötigen also einen Mac als "Vermittler" (siehe auch unten: [[#Ich habe keinen Mac | "Ich habe keinen Mac"]])


== Windows ==
== Windows ==
Am einfachsten installieren Sie alles mit unserem Mobile Testing Supplement<sup>1</sup>. In neueren Versionen ist allerdings aufgrund geänderter Lizenzbedingungen seitens Oracle kein JDK mehr enthalten, sodass sie dieses zusätzlich installieren müssen. Sie können natürlich Appium auch direkt installieren, um die Version zu verwenden, die Sie möchten. Um dann einen Appium-Server mit expecco starten zu können, muss allerdings eine entsprechende Batchdatei vorhanden sein und in den [[Mobile_Testing_Plugin#Konfiguration_des_Plugins|Einstellungen]] angegeben werden. Verbindungen können aber auch zu anderen laufenden Appium-Servern aufgebaut werden.
Am einfachsten installieren Sie alles mit unserem Mobile Testing Supplement:
*'''expecco 19.1''': [http://download.exept.de/transfer/h-expecco-19.1.0/MobileTestingSupplement.exe Mobile Testing Supplement 1.8.1.0]
*'''expecco 23.2''': [https://download.exept.de/transfer/h-expecco-23.2.0/MobileTestingSupplement.exe Mobile Testing Supplement 1.13.3.2]
:Im Vergleich zum Vorgänger aktualisierte Chromedriver Versionen.
*expecco 23.1: [https://download.exept.de/transfer/h-expecco-23.1.0/MobileTestingSupplement.exe Mobile Testing Supplement 1.13.3.1]
:Gleiche Versionen wie der Vorgänger, aber der Installer erlaubt nun, Appium zum Autostart hinzuzufügen.
*expecco 22.2 und 22.1: [https://download.exept.de/transfer/h-expecco-22.2.0/MobileTestingSupplement.exe Mobile Testing Supplement 1.13.2.0]
:Appium 1.22.3*
:Node 14.17.5
:adb 1.0.41 aus platform-tools 33.0.2
:''* Wir haben Appium um die Capability'' startChromedriverTimeout ''erweitert, um schneller einen Timeout zu bekommen, wenn der Chromedriver nicht gestartet werden kann. (siehe [[#startChromedriverTimeout|Probleme und Lösungen]])''
*expecco 21.2: [https://download.exept.de/transfer/h-expecco-21.2.0/MobileTestingSupplement.exe Mobile Testing Supplement 1.12.0.0]
:Enthält die Appium-Version 1.22.0, Node ist weiterhin in der Version 12.13.1.
*expecco 20.1: [https://download.exept.de/transfer/h-expecco-20.1.0/MobileTestingSupplement.exe Mobile Testing Supplement 1.10.1.0]
:Nur kleine Änderungen im Vergleich zur vorigen Version.
*expecco 19.2: [http://download.exept.de/transfer/h-expecco-19.2.0/MobileTestingSupplement.exe Mobile Testing Supplement 1.10.0.0]
:Im Vergleich zur vorigen Version wurde Appium auf die Version 1.16.0-rc.1 aktualisiert und node 12 verwendet.
*expecco 19.1: [http://download.exept.de/transfer/h-expecco-19.1.0/MobileTestingSupplement.exe Mobile Testing Supplement 1.8.1.0]
:Dieses installiert Appium in der Version 1.12.0 und enthält nun zusätzlich build-tools der Version 28.0.3 im android-sdk. Ansonsten ist es gleich wie die vorige Version.
:Dieses installiert Appium in der Version 1.12.0 und enthält nun zusätzlich build-tools der Version 28.0.3 im android-sdk. Ansonsten ist es gleich wie die vorige Version.
*expecco 18.2: [http://download.exept.de/transfer/h-expecco-18.2.0/MobileTestingSupplement.exe Mobile Testing Supplement 1.7.3.0]
*expecco 18.2: [http://download.exept.de/transfer/h-expecco-18.2.0/MobileTestingSupplement.exe Mobile Testing Supplement 1.7.3.0]
Zeile 64: Zeile 64:
:Dieses installiert ein Java JDK der Version 8, android-sdk und Appium in der Version 1.4.16. Während der Installation wird die grafische Oberfläche von Appium gestartet, dieses Fenster können Sie sofort wieder schließen. Außerdem bietet das Supplement auch einen universellen adb-Treiber ([http://download.clockworkmod.com/test/UniversalAdbDriverSetup.msi ClockworkMod]) an. Dieser vereint Treiber für ein breites Spektrum an Android-Geräten, sodass Sie nicht für jedes Gerät einen eigenen Treiber suchen und installieren müssen.
:Dieses installiert ein Java JDK der Version 8, android-sdk und Appium in der Version 1.4.16. Während der Installation wird die grafische Oberfläche von Appium gestartet, dieses Fenster können Sie sofort wieder schließen. Außerdem bietet das Supplement auch einen universellen adb-Treiber ([http://download.clockworkmod.com/test/UniversalAdbDriverSetup.msi ClockworkMod]) an. Dieser vereint Treiber für ein breites Spektrum an Android-Geräten, sodass Sie nicht für jedes Gerät einen eigenen Treiber suchen und installieren müssen.


Wenn expecco Mobilgeräte verwenden soll, die an einem anderen Rechner angeschlossen sind, müssen Sie dort einen Appium-Server starten. Dies können Sie mit der Datei <code>appium_standalone.cmd</code> tun. Der Server wird dann mit dem Standard-Port 4723 gestartet. Falls Sie eine andere Portnummer verwenden wollen, starten Sie den Server mit
Beim Starten von Appium kann es vorkommen, dass die Windows-Firewall den Node-Server blockiert. In diesem Fall kann expecco keinen Appium-Server starten. Starten Sie daher nach der Installation am besten die Datei ''appium.cmd'' im Ordner ''appium'' des Mobile Testing Supplements. Wenn sich der Appium-Server starten lässt, sollte es auch von expecco aus funktionieren. Meldet sich hingegen die Windows-Firewall, lassen Sie den Zugriff zu.

appium_standalone.cmd -p <portnummer>

Der Server ist bereit, sobald die Zeile
<blockquote>Appium REST http interface listener started on 0.0.0.0:4723</blockquote>
angezeigt wird, wobei Sie am Ende die verwendete Portnummer ablesen können.

Beim ersten Starten von Appium – sowohl im Standalone als auch gestartet von expecco – kann es vorkommen, dass die Windows-Firewall den Node-Server blockiert. Lassen Sie den Zugriff zu, sonst kann Appium nicht gestartet werden.

<sup>1</sup>) Sie können natürlich auch die Command Line Tools (adb, sdkmanager, avdmanager etc.) einer vorhandenen Android Studio Version verwenden, sowie Appium separat installieren.
Da sich diese Tools regelmäßig ändern, und es in der Vergangenheit zu Inkompatibilitäten und Fehlern nach Releasewechseln kam, empfehlen wir zu Beginn, das mitgelieferte Paket zu verwenden. Dies ist möglicherweise nicht das aktuellste, wurde aber auf Lauffähigkeit getestet.

Falls das Android Mobilgerät an einem entfernen Rechner angeschlossen ist,
können Sie den aktuellen Bildschirminhalt z.B. mit dem [https://github.com/Genymobile/scrcpy scrcpy] tool live mitverfolgen.

== Mac OS (nicht erforderlich für Android-Tests)==
Hinweis: Wenn Sie nicht vorhaben, iOS-Geräte (iPhone, iPad, etc.) zu testen, können Sie das Folgende ignorieren. '''Der Apple-Rechner sowie das Mac-Setup werden für Android-Geräte nicht benötigt'''.

=== Xcode ===
Zur Automatisierung mit iOS-Geräten wird [https://developer.apple.com/xcode/ Xcode] benötigt. Sie erhalten dieses über den App Store. Dabei ist darauf zu achten, dass die Version zu den getesteten iOS-Versionen passt.
{| class="wikitable"
|-
|'''iOS'''&nbsp;&nbsp;
|'''Xcode'''
|'''macOS'''
|-
|10.x
|8.x
|10.12 (Sierra)
|-
|11.x
|9.x
|10.13 (High Sierra)
|-
|12.x
|10.x
|10.14 (Mojave)
|-
|13.x
|11.x
|10.15 (Catalina)
|-
|14.x
|12.x
|11.0 (Big Sur)
|-
|15.x
|13.x
|12.0 (Monterey)
|-
|16.x
|14.x
|12.5 (Monterey)
|}
Diese Tabelle gibt nur eine vereinfachte Übersicht, lesen Sie besser unter [https://xcodereleases.com/ Xcode Releases] oder [https://en.wikipedia.org/wiki/Xcode#Version_comparison_table Xcode-Versionen] welche Version Sie brauchen. Für neue iOS Minor-Versionen gibt es in der Regel auch ein Update für Xcode, z.B. brauchen Sie für iOS 10.2 mindestens Xcode 8.2, für iOS 10.3 mindestens Xcode 8.3 usw.
Wenn Sie also auf eine neuere iOS-Version wechseln, benötigen Sie in der Regel auch eine neuere Xcode-Version. Neuere Versionen von Xcode laufen möglicherweise nicht auf älteren Betriebssystemen, was wiederum eine Aktualisierung des Betriebssystems erforderlich machen kann. Falls Sie auch ältere iOS-Versionen testen wollen kann es sinnvoll sein, die entsprechenden Xcode-Versionen parallel zu installieren.

=== Appium ===
Der Appium-Server kann entweder als Kommandozeilen-Anwendung installiert werden oder über [https://github.com/appium/appium-desktop Appium Desktop] verwendet werden, welcher den Server über ein GUI zur Verfügung stellt. Mittlerweile gibt es auch Appium 2.0, was wir aber bisher noch nicht mit expecco getestet haben und daher nicht empfehlen.

==== Appium Desktop ====
Laden Sie die neueste Version von [https://github.com/appium/appium-desktop/releases/ Appium Desktop] herunter. Für den Mac nehmen Sie am besten die dmg-Datei und installieren sie in den Anwendungen. Beim Starten der Anwendung ''Appium Server GUI'' erhalten Sie wahrscheinlich eine Fehlermeldung, dass es aus Sicherheitsgründen nicht möglich ist. Öffnen Sie dann das Kontextmenü auf der Anwendungsdatei (Rechtsklick bzw. Strg + Klick) und wählen Sie dort ''Öffnen'' aus. Bestätigen Sie dann, dass Sie die Anwendung wirklich öffnen wollen. Fortan können Sie die Anwendung normal öffnen.

[[Datei:OpenAppiumServerGUI1.png|text-top]] [[Datei:OpenAppiumServerGUI2.png|text-top]]

Ab Xcode 14 gibt es Probleme beim Signieren des WebDriverAgents, den Appium zur Automatisierung auf das Gerät spielt. Dadurch ist mit der Version 1.22.3-4 von Appium Desktop kein Verbindungsaufbau möglich. Das Problem ist in neueren Versionen des WebDriverAgents behoben, es gibt aber aktuell noch keine Version von Appium Desktop, die eine solche Version enthält (Stand November 2022). Sie können aber manuell eine neue Version herunterladen (z.B. 4.10.2) und die Dateien in Appium ersetzen. Laden Sie dazu von der [https://github.com/appium/WebDriverAgent/releases/ WebDriverAgent Download-Seite] eine der beiden Archivdateien (zip oder tar.gz) mit dem Source Code herunter. Öffnen und entpacken Sie dann diese Datei. Den Inhalt des Ordners WebDriverAgent-4.10.2 müssen Sie nun nach

/Applications/Appium\ Server\ GUI.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent/

kopieren. Wenn Sie über den Finder dorthin navigieren, machen Sie auf die Anwendung ''Appium Server GUI'' einen Kontextklick (Rechtsklick bzw. Strg + Klick) und wählen Sie im Menü ''Paketinhalt anzeigen''. Ersetzen Sie alle Dateien, die bereits mit gleichem Namen enthalten sind.

==== Appium über npm installieren ====
Sie können Appium auch über npm (Node Package Manager) installieren. Dazu müsen Sie erst node/npm installieren. Das geht mit [https://github.com/nvm-sh/nvm nvm] (Node Version Manager) was Sie von Github bekommen. Falls die folgende Installationsanleitung bei Ihnen nicht funktionieren sollte, finden Sie dort ausführlichere Informationen im [https://github.com/nvm-sh/nvm#readme Readme].

Öffnen Sie ein Terminal-Fenster. Klonen Sie dann das Github-Repository von nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
und laden Sie es
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

Führen Sie danach
command -v nvm
aus, um zu testen, ob es funktioniert hat. Es sollte ''nvm'' ausgegeben werden. Kommt keine Antwort, führen Sie
touch ~/.zshrc
aus, und versuchen Sie es erneut.

Nun können Sie node mit dem folgenden Befehl installieren.
nvm install 16.15.1
Da es mit der aktuellen Version von node Probleme beim Installieren von Appium gibt, empfehlen wir diese Version.

Nachdem node installiert ist, können Sie Appium darüber installieren:
npm install -g appium

Den Appium-Server können Sie nun einfach über den Befehl
appium
starten. Die Ausgabe erfolgt dann direkt im Terminal.

Auch bei dieser Version gibt es das Problem bei der Signierung des WebDriverAgents, wie bei [[#Appium_Desktop | Appium Desktop]] beschrieben. Laden Sie also auch in diesem Fall eine neuere Version des WebDriverAgents herunter und ersetzen Sie die alten Dateien. Diese finden Sie unter
/Users/<user>/.nvm/versions/16.15.1/lib/appium/node_modules/appium-webdriveragent/

==== Mobile Testing Supplement ====
Ältere Appium-Versionen stellen wir Ihnen über das Mobile Testing Supplement für Mac OS zur Verfügung, mit dem Sie es einfach installieren können:
* '''expecco 20.2''': [https://download.exept.de/transfer/h-expecco-20.2.0/Mobile_Testing_Supplement_for_Mac_OS.tar.bz2 Mobile Testing Supplement für Mac OS (1.2.2)]
:Enthält Appium Version 1.18.3 und verwendet node 14.


* expecco 20.1: [https://download.exept.de/transfer/h-expecco-20.1.0/Mobile_Testing_Supplement_for_Mac_OS.tar.bz2 Mobile Testing Supplement für Mac OS (1.2.0)]
== Mac OS ==
:Nur wenige Änderungen im Vergleich zur vorigen Version.
=== expecco 19.1 ===
Das neue [http://download.exept.de/transfer/h-expecco-19.1.0/Mobile_Testing_Supplement_for_Mac_OS_1.1.96.tar.bz2 Mobile Testing Supplement für Mac OS (1.1.96)] enthält nun Appium 1.12.0.


* expecco 19.2: [http://download.exept.de/transfer/h-expecco-19.2.0/MobileTestingSupplement_for_MacOS.tar.bz2 Mobile Testing Supplement für Mac OS (1.1.98)]
=== expecco 18.1 ===
:Im Vergleich zur vorigen Version wurde Appium auf die Version 1.16.0-rc.1 aktualisiert und es wird node 12 verwendet.
Es gibt ein neues [http://download.exept.de/transfer/h-expecco-18.1.0/Mobile_Testing_Supplement_for_Mac_OS_1.1.94.tar.bz2 Mobile Testing Supplement für Mac OS (1.1.94)]. Dieses enthält Appium 1.8.0. Für Geräte mit iOS 11 wird außerdem Xcode 9 benötigt, mindestens in der entsprechenden Minor-Version, z.B. Xcode 9.3 für iOS 11.3. Ansonsten bleibt alles gleich wie bei expecco 2.11.


* expecco 19.1: [http://download.exept.de/transfer/h-expecco-19.1.0/Mobile_Testing_Supplement_for_Mac_OS_1.1.96.tar.bz2 Mobile Testing Supplement für Mac OS (1.1.96)]
=== expecco 2.11 ===
:Diese Version enthält Appium 1.12.0.
Auf dem verwendeten Mac sollte als Betriebssystemversion OS X 10.12 (Sierra) und Xcode 8.3 oder neuer laufen. Sie können eine aktuelle Version von Xcode über den App Store installieren. Außerdem benötigt Appium eine Java-Installation. Installieren Sie dazu ein JDK in Version 7 oder 8. Mithilfe unseres [http://download.exept.de/transfer/h-expecco-2.11.1/Mobile_Testing_Supplement_for_Mac_OS_1.0.94.tar.bz2 Mobile Testing Supplements für Mac OS (1.0.94)] können Sie nun noch Appium 1.6.4 installieren. Nachdem Sie es heruntergeladen haben, können Sie es in ein Verzeichnis Ihrer Wahl (z. B. Ihr Home-Verzeichnis) verschieben und dort entpacken. Ein geeigneter Befehl in einer Shell könnte so aussehen:


* expecco 18.1: [http://download.exept.de/transfer/h-expecco-18.1.0/Mobile_Testing_Supplement_for_Mac_OS_1.1.94.tar.bz2 Mobile Testing Supplement für Mac OS (1.1.94)]
tar -xvpf Mobile_Testing_Supplement_for_Mac_OS_1.0.94.tar.bz2
:Diese Version enthält Appium 1.8.0.


* expecco 2.11: [http://download.exept.de/transfer/h-expecco-2.11.1/Mobile_Testing_Supplement_for_Mac_OS_1.0.94.tar.bz2 Mobile Testing Supplement für Mac OS (1.0.94)]
''Hinweis: Zur Automatisierung von iOS-Geräten ab Version 10 ist grundsätzlich eine Installation von einem vergleichbar neuen Xcode 8 nötig (für iOS 10.'''2''' mind. Xcode 8.'''2''', für iOS 10.'''3''' mind. Xcode 8.'''3''', usw.), die auf älteren Betriebssystemen möglicherweise nicht läuft. Wenn Sie also auf eine neuere iOS-Version wechseln, benötigen Sie in der Regel auch eine neuere Xcode-Version, was wiederum eine Aktualisierung des Betriebssystems erforderlich machen kann (siehe auch [https://en.wikipedia.org/wiki/Xcode#Version_comparison_table Xcode-Versionen]).''
:Diese Version enthält Appium 1.6.4.

* expecco 2.10: [http://download.exept.de/transfer/h-expecco-2.10.0/Mobile_Testing_Supplement_for_Mac_OS_1.0.tar.bz2 Mobile Testing Supplement für Mac OS]
:Diese Version entält Appium 1.4.16.

Nachdem Herunterladen des Supplements, können Sie es in ein Verzeichnis Ihrer Wahl (z. B. Ihr Home-Verzeichnis) verschieben und dort entpacken. Ein geeigneter Befehl in einer Shell könnte wie folgt aussehen, passen Sie dabei die Versionsnummer entsprechend an:

tar -xvpf Mobile_Testing_Supplement_for_Mac_OS_1.1.98.tar.bz2

Wenn Sie Ihre Standard-Xcode-Installation verwenden wollen, können Sie Appium direkt über die Datei im ''bin''-Verzeichnis mit der entsprechenden Versionsnummer starten:

Mobile_Testing_Supplement/bin/start-appium-1.16.0-rc.1

Falls Sie ein anderes Xcode als das als Standard konfigurierte verwenden wollen, müssen Sie Appium den entsprechenden Pfad über die Umgebungsvariable ''DEVELOPER_DIR'' angeben.
Wenn Sie Xcode z. B. in ''/Applications/Xcode-11.3.app'' installiert haben, müssten Sie Appium so starten:

DEVELOPER_DIR="/Applications/Xcode-11.3.app/Contents/Developer" Mobile_Testing_Supplement/bin/start-appium-1.16.0-rc.1

Was als Standard-Xcode-Installation gesetzt ist, zeigt der Befehl:


Wenn Xcode 8.3 oder neuer Ihre Standard-Xcode-Installation ist, können Sie Appium direkt starten:
Mobile_Testing_Supplement/bin/start-appium-1.6.4
Falls kein ausreichend neues Xcode als Standard konfiguriert ist, müssen Sie Appium den entsprechenden Pfad über die Umgebungsvariable ''DEVELOPER_DIR'' angeben. Wenn Sie Xcode z. B. in ''/Applications/Xcode-8.3.app'' installiert haben, können Sie Appium so starten:
DEVELOPER_DIR="/Applications/Xcode-8.3.app/Contents/Developer" Mobile_Testing_Supplement/bin/start-appium-1.6.4
Was in Ihrem System als Standard-Xcode-Installation gesetzt ist, können Sie mit diesem Befehl herausfinden:
xcode-select -p
xcode-select -p

Wenn Appium Ihre Xcode-Installation nicht findet, erscheint beim Verbinden eine Fehlermeldung in der Art:
Wenn Appium Ihre Xcode-Installation nicht findet, erscheint beim Verbinden eine Fehlermeldung in der Art:
''<blockquote>org.openqa.selenium.SessionNotCreatedException - A new session could not be created. (Original error: Could not find path to Xcode, environment variable DEVELOPER_DIR set to: /Applications/Xcode.app but no Xcode found)</blockquote>''
''<blockquote>org.openqa.selenium.SessionNotCreatedException - A new session could not be created. (Original error: Could not find path to Xcode, environment variable DEVELOPER_DIR set to: /Applications/Xcode.app but no Xcode found)</blockquote>''
Starten Sie in einem solchen Fall Appium erneut unter Angabe eines gültigen ''DEVELOPER_DIR''.
Starten Sie in diesem Fall Appium erneut, unter Angabe eines gültigen ''DEVELOPER_DIR''.


==== WebDriverAgent-Signierung ====
Um eine Testverbindung mit einem Gerät aufbauen zu können, brauchen Sie einen Apple-Account. Zur Evaluierung können Sie einen kostenlosen Account verwenden. Dieser hat den Nachteil, dass erstellte Profile nur eine Woche gültig sind und danach neu erstellt werden müssen. Seien Sie auch vorsichtig, wenn Sie sich den Account teilen, da es vorkommen kann, dass Zertifikate widerrufen werden oder durch automatische Generierung ungültig werden. Als Folge können bereits signierte Apps nicht mehr verwendet werden.
Zur Automatisierung lädt Appium eine App namens WebDriverAgent auf das Gerät und muss sie dafür signieren können. Dazu brauchen Sie einen Apple-Account und ein entsprechendes Zertifikat. Zur Evaluierung können Sie einen kostenlosen Account verwenden. Dieser hat den Nachteil, dass erstellte Profile nur eine Woche gültig sind und danach neu erstellt werden müssen. Seien Sie auch vorsichtig, wenn Sie sich den Account teilen, da es vorkommen kann, dass Zertifikate widerrufen werden oder durch automatische Generierung ungültig werden. Als Folge können bereits signierte Apps nicht mehr verwendet werden.


Wenn Sie bereits ein entsprechendes Zertifikat mit dem zugehörigen privaten Schlüssel in Ihrer [https://support.apple.com/de-de/guide/keychain-access/welcome/mac Schlüsselbundverwaltung] auf dem Mac haben, können Sie den WebDriverAgent automatisch signieren lassen. Ansonsten empfiehlt es sich, die Signierung über Xcode einzustellen und zu verwalten.
Schließen Sie zuerst das Gerät, das Sie verwenden möchten, über USB an den Mac an. Starten Sie Xcode und öffnen Sie ''Preferences''. Wechseln Sie zur Seite der Accounts und legen Sie einen Eintrag mit Ihrem Account an. Anschließend können Sie auf ''Manage Certificates...'' klicken, um die Zertifikate zu sehen, die zu diesem Account gehören. Zum Ausführen von Tests benötigen Sie ein iOS-Development-Zertifikat und den dazugehörigen privaten Schlüssel. Wenn Sie noch keines besitzen, erstellen Sie eines. Wenn Sie bereits eines haben, aber es nicht in Ihrem Schlüsselbund vorhanden ist (erkennbar an dem Hinweis "Not in Keychain"), können Sie es importieren. Öffnen Sie in jedem Fall die Schlüsselbundverwaltung auf dem Mac und wählen Sie den Schlüsselbund ''Anmeldung'' aus. Wenn Sie ein Zertifikat aus einer PKCS#12-Datei (Endung typischerweise .p12) importieren wollen, geht das über das Menü ''Ablage'' > ''Objekte importieren''. Falls Sie nicht wissen, wo das Zertifikat gespeichert ist, können Sie es in Xcode auch widerrufen und in Ihrem Schlüsselbund neu anlegen. Machen Sie das jedoch nur, wenn Sie wissen, dass das alte Zertifikat nicht mehr in Verwendung ist, da es danach nicht mehr benutzt werden kann. Nun sollte der Schlüsselbund ein iOS-Development-Zertifikat enthalten. Wählen Sie im Rechtsklick-Menü den Punkt ''Informationen'' aus. Unter den Details des Zertifikats finden Sie die Team-ID, die hier als Organisationseinheit bezeichnet wird. Tragen Sie diese in den Einstellungen des Plugins im Feld ''Team-ID'' ein, siehe [[#Konfiguration_des_Plugins|Konfiguration des Plugins]].


Schließen Sie zuerst das Gerät, das Sie verwenden möchten, über USB an den Mac an. Stellen Sie sicher, dass sich der Mac und das Gerät im selben Netzwerk befinden, ansonsten kann es beim Verbindungsaufbau mit Appium zu Problemen kommen. Starten Sie Xcode und öffnen Sie ''Preferences''. Wechseln Sie zur Seite der Accounts und legen Sie einen Eintrag mit Ihrem Account an. Anschließend können Sie auf ''Manage Certificates...'' klicken, um die Zertifikate zu sehen, die zu diesem Account gehören. Zum Ausführen von Tests benötigen Sie ein iOS-Development-Zertifikat und den dazugehörigen privaten Schlüssel. Wenn Sie noch keines besitzen, erstellen Sie eines. Wenn Sie bereits eines haben, aber es nicht in Ihrem Schlüsselbund vorhanden ist (erkennbar an dem Hinweis "Not in Keychain"), können Sie es importieren. Das können Sie über die [https://support.apple.com/de-de/guide/keychain-access/welcome/mac Schlüsselbundverwaltung] auf dem Mac machen, wenn Sie es zuvor aus dem Schlüsselbund exportiert haben, in dem es sich befindet. Das Zertifikat mit dem zugehörigen Schlüssel sollte sich im Schlüsselbund ''Anmeldung'' befinden. Dort kann es als PKCS#12-Datei (Endung typischerweise .p12) exportiert werden. Um ein Zertifikat in Ihren Schlüsselbund zu importieren, wählen Sie im Menü ''Ablage'' die Option ''Objekte importieren''. Falls Sie nicht wissen, wo das Zertifikat gespeichert ist, können Sie es in Xcode auch widerrufen und in Ihrem Schlüsselbund neu anlegen. Machen Sie das jedoch nur, wenn Sie wissen, dass das alte Zertifikat nicht mehr in Verwendung ist, da es danach nicht mehr benutzt werden kann. Nun sollte Ihr Schlüsselbund ein iOS-Development-Zertifikat enthalten.
Kehren Sie zu Xcode zurück und wählen Sie im Menü ''File'' den Eintrag ''Open...'', um das WebDriverAgent-Projekt zu öffnen. Dieses befindet sich im Verzeichnis des Mobile Testing Supplements unter
<!---(Ich habe den folgenden Teil mal rausgenommen. Man braucht das nicht, wenn es in Xcode eingestellt ist.) Wählen Sie im Rechtsklick-Menü den Punkt ''Informationen'' aus. Unter den Details des Zertifikats finden Sie die Team-ID, die hier als Organisationseinheit bezeichnet wird. Tragen Sie diese in den Einstellungen des Plugins im Feld ''Team-ID'' ein, siehe [[#Konfiguration_des_Plugins|Konfiguration des Plugins]].-->
''<nowiki>Mobile_Testing_Supplement/lib/node_modules/appium-1.6.4-beta/node_modules/appium-xcuitest-driver/WebDriverAgent/WebDriverAgent.xcodeproj</nowiki>''

Öffnen Sie nun das WebDriverAgent-Projekt in Xcode. Wenn Sie das Mobile Testing Supplement installiert haben, finden Sie es in dessen Verzeichnis unter
''<nowiki>Mobile_Testing_Supplement/lib/node_modules/appium-1.16.0-rc.1/node_modules/appium-xcuitest-driver/WebDriverAgent/WebDriverAgent.xcodeproj</nowiki>''
Wenn Sie Appium Desktop installier haben, finden Sie es unter
''<nowiki>/Applications/Appium\ Server\ GUI.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj</nowiki>''
Sie können einfach im Finder zu der Xcode-Project-Datei navigieren und Sie über einen Doppelklick öffnen. Beachten Sie dabei, dass Sie dabei auf die Anwendung Appium Server GUI einen Kontextklick (Rechtsklick bzw. Strg + Klick) machen und im Menü ''Paketinhalt anzeigen'' auswählen müssen, um in deren Unterverzeichnis zu gelangen.


[[Datei:MobileTestingWebDriverAgentXcode.png]]
[[Datei:MobileTestingWebDriverAgentXcode.png]]


Wählen Sie ''WebDriverAgentLib'' und die Seite ''General'' aus. Setzen Sie dort im Abschnitt ''Signing'' die Option ''Automatically manage signing'' und wählen Sie dann ein Team aus. Wechseln Sie nun zu ''WebDriverAgentRunner'' und ebenfalls zur Seite ''General''. Setzen Sie auch hier das automatische Signieren und wählen Sie auch hier Ihr Team aus. Es sollten an dieser Stelle Fehler angezeigt werden, dass kein Provisioning Profile angelegt oder gefunden wurde. Wechseln Sie deshalb zur Seite ''Build Settings'' und suchen Sie hier im Abschnitt ''Packaging'' den Eintrag ''Product Bundle Identifier''. Ändern Sie diesen von com.facebook.WebDriverAgentRunner zu etwas, das von Xcode akzeptiert wird, indem Sie den Präfix ändern. Xcode kann nun ein passendes Provisioning Profile generieren und die Fehler auf der General-Seite sollten verschwinden. Danach können Sie Xcode beenden.
Wählen Sie ''WebDriverAgentLib'' und die Seite ''Signing & Capabilities'' aus. Setzen Sie dort im Abschnitt ''Signing'' die Option ''Automatically manage signing'' und wählen Sie dann ein Team aus. Wechseln Sie nun zu ''WebDriverAgentRunner'' und tun Sie dort dasselbe.
<!--(Das Folgende scheint nicht mehr aktuell zu sein.) Es sollten an dieser Stelle Fehler angezeigt werden, dass kein Provisioning Profile angelegt oder gefunden wurde. Wechseln Sie deshalb zur Seite ''Build Settings'' und suchen Sie hier im Abschnitt ''Packaging'' den Eintrag ''Product Bundle Identifier''. Ändern Sie diesen von com.facebook.WebDriverAgentRunner zu etwas, das von Xcode akzeptiert wird, indem Sie den Präfix ändern. Xcode kann nun ein passendes Provisioning Profile generieren und die Fehler auf der General-Seite sollten verschwinden. Danach können Sie Xcode beenden. -->
Durch das Setzen des Teams sollten die Fehler für den WebDriverAgentRunner verschwinden. Sollte Xcode kein passendes Provisioning Profile für die Bundle ID ''com.facebook.WebDriverAgentRunner'' erstellen können, können Sie diese anpassen, dass sie zu Ihrem Zertifikat passt. Danach können Sie Xcode beenden oder auch, wie weiter unten beschrieben, direkt den Build über Xcode starten, damit das Projekt bereits gebaut ist, wenn Appium es verwenden möchte.


Wenn Sie sich nun von expecco eine Verbindung zu Ihrem Gerät aufbauen, wird der WebDriverAgent darauf installiert und gestartet, um anschließend zur zu testenden App zu wechseln. Auf dem Gerät muss jedoch noch der Ausführung des WebDriverAgents vertraut werden. Öffnen Sie dazu während des Verbindungsaufbaus auf dem Gerät in die Einstellungen und dort unter ''Allgemein'' den Eintrag ''Geräteverwaltung''. Dieser Eintrag ist nur sichtbar, wenn eine Entwickler-App auf dem Gerät installiert ist. Sie müssen daher möglicherweise warten, bis der WebDriverAgent installiert ist, bevor der Eintrag erscheint. Wählen Sie dort den Eintrag Ihres Apple-Accounts und vertrauen Sie ihm. Da der WebDriverAgent wieder deinstalliert wird, wenn der Start nicht funktioniert hat, müssen Sie dies während des Verbindungsaufbaus tun. Falls Ihnen das zu hektisch ist, können Sie auch folgenden Code ausführen:
Wenn Sie sich nun von expecco eine Verbindung zu Ihrem Gerät aufbauen, wird der WebDriverAgent darauf installiert und gestartet, um anschließend zur zu testenden App zu wechseln. Eventuell muss auf dem Gerät muss der Ausführung des WebDriverAgents vertraut noch werden. Ein Anzeichnen dafür kann sein, dass die App WebDriverAgent zwar auf dem Gerät erscheint und zu starten versucht, danach aber wieder deinstalliert wird. Öffnen Sie dazu während des Verbindungsaufbaus auf dem Gerät in die Einstellungen und dort unter ''Allgemein'' den Eintrag ''Geräteverwaltung''. Dieser Eintrag ist nur sichtbar, wenn eine Entwickler-App auf dem Gerät installiert ist. Sie müssen daher möglicherweise warten, bis der WebDriverAgent installiert ist, bevor der Eintrag erscheint. Wählen Sie dort den Eintrag Ihres Apple-Accounts und vertrauen Sie ihm. Da der WebDriverAgent wieder deinstalliert wird, wenn der Start nicht funktioniert hat, müssen Sie dies während des Verbindungsaufbaus tun. Falls Ihnen das zu hektisch ist, können Sie auch folgenden Code ausführen:


''<nowiki>xcodebuild -project Mobile_Testing_Supplement/lib/node_modules/appium-1.6.4-beta/node_modules/appium-xcuitest-driver/WebDriverAgent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=<udid>' test</nowiki>''
<nowiki>xcodebuild -project Mobile_Testing_Supplement/lib/node_modules/appium-1.16.0-rc.1/node_modules/appium-xcuitest-driver/WebDriverAgent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=<udid>' test</nowiki>
bzw.
xcodebuild -project /Applications/Appium\ Server\ GUI.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=<udid>' test


Damit wird der WebDriverAgent auf dem Gerät installiert ohne dass er wieder gelöscht wird. In der [https://support.apple.com/en-us/HT204460 Dokumentation von Apple] finden Sie nähere Informationen zum Installieren und Vertrauen solcher Apps.
Damit wird der WebDriverAgent auf dem Gerät installiert ohne dass er wieder gelöscht wird.


Wenn es Probleme beim Installieren des WebDriverAgents gibt, können Sie auch versuchen, den Build über Xcode zu starten. Stellen Sie sicher, dass das richtige Target ''WebDriverAgent'' ausgewählt ist. Fehlermeldungen in Xcode zeigen vielleicht einfacher, wo das Problem liegt. Manchmal hilft es auch, es ein zweites Mal zu versuchen, weil es möglicherweise beim ersten Mal zu lange gedauert hat und abgebrochen wurde. Es kann sein, dass Sie während des Builds mehrmals aufgefordert werden, das Passwort für Ihren Schlüsselbund anzugeben.
=== expecco 2.10 ===

Auf dem verwendeten Mac sollte als Betriebssystemversion OS X 10.11.5 (El Capitan) oder neuer laufen. Zur Automatisierung mit iOS-Geräten bis Version 9.3 ist eine Installation von Xcode 7.3 nötig, die auf älteren Betriebssystemen nicht läuft (siehe auch [https://en.wikipedia.org/wiki/Xcode#Version_comparison_table Xcode-Versionen]). Installieren Sie Xcode aus dem App Store. Außerdem benötigt Appium eine Java-Installation. Installieren Sie dazu ein JDK in Version 7 oder 8. Mithilfe unseres [http://download.exept.de/transfer/h-expecco-2.10.0/Mobile_Testing_Supplement_for_Mac_OS_1.0.tar.bz2 Mobile Testing Supplements für Mac OS] können Sie nun noch Appium 1.4.16 installieren. Nachdem Sie es heruntergeladen haben, können Sie es in ein Verzeichnis Ihrer Wahl (z. B. Ihr Home-Verzeichnis) verschieben und dort entpacken. Ein geeigneter Befehl in einer Shell könnte so aussehen:
[[Datei:WebDriverAgentCodesign.png]]
tar -xvpf Mobile_Testing_Supplement_for_Mac_OS_1.0.tar.bz2

Wenn Xcode 7.3 Ihre Standard-Xcode-Installation ist, können Sie Appium direkt starten:
Lesen Sie auch die Dokumentation von Appium zum [https://github.com/appium/appium-xcuitest-driver/blob/master/docs/real-device-config.md Aufsetzen von Tests mit iOS-Geräten]. In der [https://support.apple.com/en-us/HT204460 Dokumentation von Apple] finden Sie nähere Informationen zum Installieren und Vertrauen von Apps.
Mobile_Testing_Supplement/bin/start-appium-1.4.16

Falls Xcode 7.3 nicht als Standard-Xcode konfiguriert ist, müssen Sie Appium den entsprechenden Pfad über die Umgebungsvariable ''DEVELOPER_DIR'' angeben. Wenn Sie Xcode z. B. in ''/Applications/Xcode-7.3.app'' installiert haben, können Sie Appium so starten:
Ist der WebDriverAgent einmal auf dem Gerät installiert, wird er für spätere Verbindungen wieder verwendet und der Verbindungsaufbau sollte schneller funktionieren. Ebenso liegt dann die signierte Version bereits auf Ihrem Mac und muss nicht erneut gebaut werden, was die Verbindung zu weiteren Geräten ebenfalls beschleunigt. Wenn Sie wissen, dass bei Ihrem Verbindungsaufbau der WebDriverAgent erst noch signiert und gebaut werden muss, ist es ratsam, die Capability ''wdaLaunchTimeout'' zu setzen. Dieser Timeout, wie lange auf den Start der WebDriverAgents auf dem Gerät gewartet werden soll, liegt standardmäßig bei 60000$nbsp;ms. Der Build dauert aber häufig über eine Minute, sodass der Versuch zum Verbindungsaufbau dann abgebrochen wird. Ein Wert von 120000 hat sich hier als besser erwiesen.
DEVELOPER_DIR="/Applications/Xcode-7.3.app/Contents/Developer" Mobile_Testing_Supplement/bin/start-appium-1.4.16
Was in Ihrem System als Standard-Xcode-Installation gesetzt ist, können Sie mit diesem Befehl herausfinden:
xcode-select -p
Wenn Appium Ihre Xcode-Installation nicht findet, erscheint beim Verbinden eine Fehlermeldung in der Art:
''<blockquote>org.openqa.selenium.SessionNotCreatedException - A new session could not be created. (Original error: Could not find path to Xcode, environment variable DEVELOPER_DIR set to: /Applications/Xcode.app but no Xcode found)</blockquote>''
Starten Sie in einem solchen Fall Appium erneut unter Angabe eines gültigen ''DEVELOPER_DIR''.


== Konfiguration des Plugins ==
== Konfiguration des Plugins ==
Bevor Sie loslegen, sollten Sie die Einstellungen des Mobile Testing Plugins überprüfen und ggf. anpassen.
Bevor Sie loslegen, sollten Sie die Einstellungen des Mobile Testing Plugins überprüfen und ggf. anpassen. Öffnen Sie im Menü den Punkt "''Extras''" > "''Einstellungen'"' und dort unter "''Erweiterungen''" den Eintrag "''Mobile Testing''" (s. Abb.). Standardmäßig werden diese Pfade automatisch gefunden (1). Um einen Pfad manuell anzupassen, deaktivieren Sie den entsprechenden Haken rechts davon. Sie erhalten in einer Drop-down-Liste einige Pfade zur Auswahl. Ist ein eingetragener Pfad falsch oder kann er nicht gefunden werden, wird das Feld rot markiert und es erscheint ein diesbezüglicher Hinweis. Stellen Sie sicher, dass alle Pfade richtig angegeben sind.

Öffnen Sie im Menü den Punkt "''Extras''" &#8594; "''Einstellungen''" und dort unter "''Erweiterungen''" den Eintrag "''Mobile Testing''" (s. Abb.). Standardmäßig werden diese Pfade automatisch gefunden (1). Um einen Pfad manuell anzupassen, deaktivieren Sie den entsprechenden Haken rechts davon. Sie erhalten in einer Drop-down-Liste einige Pfade zur Auswahl. Ist ein eingetragener Pfad falsch oder kann er nicht gefunden werden, wird das Feld rot markiert und es erscheint ein diesbezüglicher Hinweis. Stellen Sie sicher, dass alle Pfade richtig angegeben sind.


[[Datei:MobileTestingEinstellungen.png | thumb | 400px | Konfiguration des Plugins]]
[[Datei:MobileTestingEinstellungen.png | thumb | 400px | Konfiguration des Plugins]]
Zeile 135: Zeile 261:
[[Datei:MobileTestingJavaBridgeEinstellungen.png | thumb | 400px | Konfiguration des JDKs]]
[[Datei:MobileTestingJavaBridgeEinstellungen.png | thumb | 400px | Konfiguration des JDKs]]


Ab expecco 2.11 gibt es das Feld ''Team-ID''. Wenn Sie iOS-Tests ausführen, tragen Sie hier die Team-ID Ihres Zertifikats ein. Diese wird für jede iOS-Verbindung verwendet, außer Sie setzen den Wert im Einzelfall in den Verbindungseinstellungen um. Wie Sie die Team-ID erhalten, lesen Sie im Abschnitt zur [[#expecco_2.11|Installation auf Mac OS mit expecco 2.11]]. Mit expecco 2.10 können Sie die Team-ID nur für jede Verbindungseinstellung extra als Capability eintragen. Dazu müssen Sie jedoch die [[#Erweiterte_Ansicht|erweiterte Ansicht]] verwenden. Geben Sie hier die Capability ''xcodeOrgId'' an und setzen Sie als Wert die Team-ID des Zertifikats.
Ab expecco 2.11 gibt es das Feld ''Team-ID''. Wenn Sie iOS-Tests ausführen, tragen Sie hier die Team-ID Ihres Zertifikats ein. Diese wird für jede iOS-Verbindung verwendet, außer Sie setzen den Wert im Einzelfall in den Verbindungseinstellungen um. Wie Sie die Team-ID erhalten, lesen Sie im Abschnitt zur [[#Signierung|Signierung]] ber der Installation auf Mac OS. Mit expecco 2.10 können Sie die Team-ID nur für jede Verbindungseinstellung extra als Capability eintragen. Dazu müssen Sie jedoch die [[#Erweiterte_Ansicht|erweiterte Ansicht]] verwenden. Geben Sie hier die Capability ''xcodeOrgId'' an und setzen Sie als Wert die Team-ID des Zertifikats.


Die Einstellung zur Serveradresse unten auf der Seite bezieht sich auf das Verhalten des Verbindungseditors. Dieser prüft am Ende, ob die Serveradresse auf ''/wd/hub'' endet, da dies die übliche Form ist. Falls nicht, wird in einem Dialog gefragt, wie darauf reagiert werden soll. Das festgelegte Verhalten kann hier eingesehen und verändert werden.
Die Einstellung zur Serveradresse unten auf der Seite bezieht sich auf das Verhalten des Verbindungseditors. Dieser prüft am Ende, ob die Serveradresse auf ''/wd/hub'' endet, da dies die übliche Form ist. Falls nicht, wird in einem Dialog gefragt, wie darauf reagiert werden soll. Das festgelegte Verhalten kann hier eingesehen und verändert werden.
Zeile 146: Zeile 272:
Wenn Sie ein Android-Gerät unter Windows anschließen benötigen Sie möglicherweise noch einen adb-Treiber für das Gerät. Einen passenden Treiber finden Sie üblicherweise auf der jeweiligen Webseite des Herstellers. Haben Sie den Universal-Treiber aus dem Mobile Testing Supplement installiert, sollte für die meisten Geräte bereits alles funktionieren. In einigen Fällen versucht auch Windows automatisch einen Treiber zu installieren, wenn Sie das Gerät zum ersten mal anschließen.
Wenn Sie ein Android-Gerät unter Windows anschließen benötigen Sie möglicherweise noch einen adb-Treiber für das Gerät. Einen passenden Treiber finden Sie üblicherweise auf der jeweiligen Webseite des Herstellers. Haben Sie den Universal-Treiber aus dem Mobile Testing Supplement installiert, sollte für die meisten Geräte bereits alles funktionieren. In einigen Fällen versucht auch Windows automatisch einen Treiber zu installieren, wenn Sie das Gerät zum ersten mal anschließen.
<br>
<br>
===USB-Debugging Einschalten===
'''Achtung:'''
'''Achtung:'''
Bevor Sie ein Mobilgerät mit dem Appium-Plugin ansteuern können, müssen Sie für dieses Debugging erlauben!
Bevor Sie ein Mobilgerät mit dem Appium-Plugin ansteuern können, müssen Sie für dieses Debugging erlauben!


Für Android-Geräte finden Sie diese Option in den Einstellungen unter ''[https://www.droidwiki.org/wiki/Entwickleroptionen Entwickleroptionen]'' mit dem Namen ''[https://www.droidwiki.org/USB-Debugging USB-Debugging]''. Falls die Entwickleroptionen nicht angezeigt werden, können Sie diese freischalten, indem Sie unter "''Über das Telefon''" siebenmal auf "''Build-Nummer''" tippen.


===Wach bleiben Aktivieren===
Für Android-Geräte finden Sie diese Option in den Einstellungen unter ''[https://www.droidwiki.org/wiki/Entwickleroptionen Entwickleroptionen]'' mit dem Namen ''[https://www.droidwiki.org/USB-Debugging USB-Debugging]''. Falls die Entwickleroptionen nicht angezeigt werden, können Sie diese freischalten, indem Sie unter ''Über das Telefon'' siebenmal auf ''Build-Nummer'' tippen.


Aktivieren Sie auch die Funktion ''Wach bleiben'', damit das Gerät nicht während der Testerstellung oder -ausführung den Bildschirm abschaltet.
Aktivieren Sie auch die Funktion ''Wach bleiben'', damit das Gerät nicht während der Testerstellung oder -ausführung den Bildschirm abschaltet.



Aus Sicherheitsgründen muss USB-Debugging für jeden Computer einzeln zugelassen werden. Beim Verbinden des Geräts mit dem PC über USB müssen Sie dabei am Gerät der Verbindung zustimmen. Falls Sie dies für Ihren Computer noch nicht getan haben, aber auf dem Gerät kein entsprechender Dialog erscheint, kann es helfen, das Gerät aus- und wieder einzustecken. Das kann insbesondere dann passieren, wenn Sie den ADB-Treiber installiert haben während das Gerät bereits über USB angeschlossen war. Falls auch das nicht hilft, öffnen Sie die Benachrichtigungen, indem Sie sie vom oberen Bildschirmrand herunter ziehen. Dort finden Sie die USB-Verbindung und Sie können die Optionen dazu öffnen. Wählen Sie einen anderen Verbindungstypen aus; in der Regel sollten MTP oder PTP funktionieren.
Aus Sicherheitsgründen muss USB-Debugging für jeden Computer einzeln zugelassen werden. Beim Verbinden des Geräts mit dem PC über USB müssen Sie dabei am Gerät der Verbindung zustimmen. Falls Sie dies für Ihren Computer noch nicht getan haben, aber auf dem Gerät kein entsprechender Dialog erscheint, kann es helfen, das Gerät aus- und wieder einzustecken. Das kann insbesondere dann passieren, wenn Sie den ADB-Treiber installiert haben während das Gerät bereits über USB angeschlossen war. Falls auch das nicht hilft, öffnen Sie die Benachrichtigungen, indem Sie sie vom oberen Bildschirmrand herunter ziehen. Dort finden Sie die USB-Verbindung und Sie können die Optionen dazu öffnen. Wählen Sie einen anderen Verbindungstypen aus; in der Regel sollten MTP oder PTP funktionieren.


Sie können auch auf einem Emulator testen. Dieser muss nicht mehr gesondert vorbereitet werden, da er bereits für USB-Debugging ausgelegt ist. Es ist sogar möglich, einen Emulator bei Testbeginn zu starten.
Sie können auch auf einem Emulator testen. Dieser muss nicht gesondert vorbereitet werden, da er bereits für USB-Debugging ausgelegt ist. Es ist sogar möglich, einen Emulator bei Testbeginn zu starten.


Um zu überprüfen, ob ein Gerät, das Sie an Ihren Rechner angeschlossen haben, verwendet werden kann, öffnen Sie den [[#Verbindungseditor|Verbindungseditor]]. Das Gerät sollte dort angezeigt werden.
Um zu überprüfen, ob ein Gerät, das Sie an Ihren Rechner angeschlossen haben, verwendet werden kann, öffnen Sie den [[#Verbindungseditor|Verbindungseditor]]. Das Gerät sollte dort angezeigt werden.


=== Verbindung über WLAN ===
=== Verbindung über WLAN ===
Es ist auch möglich, Android-Geräte über WLAN zu verbinden. Dazu müssen Sie zunächst das Gerät über USB mit dem Rechner verbinden. Öffnen Sie dann die Eingabeaufforderung und geben Sie dir eint:
Es ist auch möglich, Android-Geräte über WLAN zu verbinden. Für Geräte mit Android 11 oder neuer ist dies direkt über WLAN möglich, im anderen Fall müssen Sie das Gerät zuerst über USB verbinden. Ab expecco 22.1 können Sie eine WLAN-Verbindung über den [[Mobile Testing Plugin#Verbindungseditor|Verbindungseditor]] aufbauen. Ansonsten ist es auch über die Eingabeaufforderung möglich.
==== Drahtlos verbinden über die Eingabeaufforderung mit expecco Versionen vor 22.1 (ab Android 11) ====
Mit expecco ab Version 22.1 funktioniert das einfacher über den Verbindungseditor.

Erlauben Sie in den Entwickleroptionen des Geräts Debugging über WLAN und öffnen Sie dessen Optionen. Sie müssen zuerst das Gerät mit dem Rechner koppeln. Wählen Sie dazu "''Gerät mit einem Kopplungscode koppeln''", um einen Kopplungscode und eine IP-Adresse mit Port zu erhalten. Öffnen Sie dann auf dem Rechner die Eingabeaufforderung und geben Sie dort ein:
<nowiki>adb pair <IP-Adresse des Geräts>:<Kopplungsport></nowiki>
wobei Sie <tt><IP-Adresse des Geräts>:<Kopplungsport></tt> durch die auf dem Gerät angezeigte IP-Adresse & Port ersetzen. Danach werden Sie aufgefordert, den Kopplungscode einzugeben. Wenn alles geklappt hat, sollte sich das Popup auf dem Gerät schließen und der Rechner als gekoppeltes Gerät angezeigt werden. Geben Sie dann in der Eingabeaufforderung ein:
<nowiki>adb connect <IP-Adresse des Geräts>:<Debug-Port></nowiki>
Die IP-Adresse ist hier noch die gleiche wie beim Koppeln, aber der Port ist ein anderer. Beides wird als IP-Adresse & Port auf dem Gerät angezeigt. Damit sollte das Gerät nun über WLAN verbunden sein und kann genauso verwendet werden, wie mit USB-Verbindung. Sie können dies überprüfen, indem Sie entweder <tt>adb devices -l</tt> eingeben oder in expecco den Verbindungsdialog öffnen. In der Liste taucht das Gerät mit seiner IP-Adresse und dem Port auf. Bedenken Sie, dass die WLAN-Verbindung nicht mehr besteht, wenn der ADB-Server oder das Gerät neu gestartet werden. Häufig wird beim Neustart des Geräts auch die Erlaubnis für das Debugging über WLAN wieder zurückgesetzt und der verwendete Port ändert sich. Die Kopplung bleibt aber bestehen und muss beim nächsten Verbinden nicht noch einmal durchgeführt werden.

==== WLAN Verbindung über USB starten (Android 10 und früher) ====
Verbinden Sie zunächst das Gerät über USB mit dem Rechner. Öffnen Sie dann die Eingabeaufforderung und geben Sie dort ein:
<nowiki>adb tcpip 5555</nowiki>
<nowiki>adb tcpip 5555</nowiki>
Damit lauscht das Gerät auf eine TCP/IP-Verbindung an Port 5555. Sollten Sie mehrere Geräte angeschlossen oder Emulatoren laufen haben, müssen Sie genauer angeben, welches Gerät Sie meinen. Geben Sie in diesem Fall ein:
Damit lauscht das Gerät auf eine TCP/IP-Verbindung an Port 5555. Sollten Sie mehrere Geräte angeschlossen oder Emulatoren laufen haben, müssen Sie genauer angeben, welches Gerät Sie meinen. Geben Sie in diesem Fall ein:
Zeile 172: Zeile 308:
<nowiki>adb connect <IP-Adresse des Geräts></nowiki>
<nowiki>adb connect <IP-Adresse des Geräts></nowiki>
Damit sollte das Gerät nun über WLAN verbunden sein und kann genauso verwendet werden, wie mit USB-Verbindung. Sie können dies überprüfen, indem Sie wieder <tt>adb devices -l</tt> eingeben oder in expecco den Verbindungsdialog öffnen. In der Liste taucht das Gerät mit seiner IP-Adresse und dem Port auf. Bedenken Sie, dass die WLAN-Verbindung nicht mehr besteht, wenn der ADB-Server oder das Gerät neu gestartet werden.
Damit sollte das Gerät nun über WLAN verbunden sein und kann genauso verwendet werden, wie mit USB-Verbindung. Sie können dies überprüfen, indem Sie wieder <tt>adb devices -l</tt> eingeben oder in expecco den Verbindungsdialog öffnen. In der Liste taucht das Gerät mit seiner IP-Adresse und dem Port auf. Bedenken Sie, dass die WLAN-Verbindung nicht mehr besteht, wenn der ADB-Server oder das Gerät neu gestartet werden.

=== Verbindung zu einem Emulator ===
Sie benötigen dazu den Emulator selbst, sowie mindestens ein AVD (Android Virtual Device). Hinweise zu Installation finden Sie in der [https://developer.android.com/studio/run/emulator Android Studio Dokumentation].

Wenn Sie Android Studio bereits mit den Defaulteinstellungen installiert haben <sup>1)</sup>, sollte der Emulator bereits mitinstalliert sein. Falls nicht, wählen Sie in Android Studio "''Configure''" - "''SDK Manager''" - "''Android SDK''" - "''SDK Tools''" - ''Android Emulator''", sowie dort die "''Platform Tools''".
Alternativ geht das auch über die Kommandzeile mit dem "sdkmanager" Kommando.

Als nächstes benötigen Sie mindestens ein AVD; auch dies geht am einfachsten über den Dialog in Android Studio:
wählen sie "''Configure''" - "''AVD Manager''" und folgen den Anweisungen (Deviceauswahl, Platform und Android Version).

Auch wenn Sie den Emulator automatisieren benötigen sie Appium; installieren Sie dieses entweder mit dem Mobile Testing Supplement, oder direkt von der Appium homepage (https://github.com/appium/appium-desktop/releases).

<sup>1)</sup>Android Studio selbst wird nicht von expecco benötigt; es bietet aber kompfortable Dialoge zum Installieren von Paketen und AVDs.


== iOS-Gerät und App vorbereiten ==
== iOS-Gerät und App vorbereiten ==
Zeile 182: Zeile 331:


=== expecco 2.11 und später ===
=== expecco 2.11 und später ===
Sie können beliebige Apps testen, die auf dem verwendeten Gerät lauffähig oder bereits installiert sind. Wenn die App als Development-Build vorliegt, muss die UDID des Geräts in der App hinterlegt sein. In jedem Fall muss der WebDriverAgent für das Gerät signiert werden. Lesen Sie dazu den Abschnitt zur [[#expecco_2.11|Vorbereitung unter Mac OS]].
Sie können beliebige Apps testen, die auf dem verwendeten Gerät lauffähig oder bereits installiert sind. Wenn die App als Development-Build vorliegt, muss die UDID des Geräts in der App hinterlegt sein. In jedem Fall muss der WebDriverAgent für das Gerät signiert werden. Lesen Sie dazu den Abschnitt zur [[#Signierung|Signierung]] unter Mac OS.


Falls Sie in einem Test den Home-Button verwenden wollen, müssen Sie auf dem Gerät AssistiveTouch aktivieren. Sie finden diese Option in den Einstellungen unter ''Allgemein'' > ''Bedienungshilfen'' > ''AssistiveTouch''. Platzieren Sie dann das Menü in der Mitte des oberen Bildschirmrands. Sie können das Drücken des Home-Buttons dann mit dem entsprechenden Menüeintrag im Recorder aufzeichnen oder direkt den Baustein ''Press Home Button'' benutzen.
Falls Sie in einem Test den Home-Button verwenden wollen, müssen Sie auf dem Gerät AssistiveTouch aktivieren. Sie finden diese Option in den Einstellungen unter ''Allgemein'' > ''Bedienungshilfen'' > ''AssistiveTouch''. Platzieren Sie dann das Menü in der Mitte des oberen Bildschirmrands. Sie können das Drücken des Home-Buttons dann mit dem entsprechenden Menüeintrag im Recorder aufzeichnen oder direkt den Baustein ''Press Home Button'' benutzen.
Zeile 282: Zeile 431:


= Beispiele =
= Beispiele =
Bei den Demo-Testsuiten für expecco finden Sie auch Beispiele für Tests mit dem Mobile Testing Plugin. Wählen Sie dazu auf dem Startbildschirm die Option ''Beispiel aus Datei'' und öffnen Sie den Ordner ''mobile''.
Bei den Demo-Testsuiten für expecco finden Sie auch Beispiele für Tests mit dem Mobile Testing Plugin. Wählen Sie dazu auf dem Startbildschirm die Option "''Beispiel aus Datei''" und öffnen Sie den Ordner "''mobile''".


==<span id="TestsuiteMobileTestingDemo"><!-- Referenced by m01_MobileTestingDemo.ets --></span> ''m01_MobileTestingDemo.ets'' ==
==<span id="TestsuiteMobileTestingDemo"><!-- Referenced by m01_MobileTestingDemo.ets --></span> ''m01_MobileTestingDemo.ets'' ==
Zeile 297: Zeile 446:


= Tutorial =
= Tutorial =
Dieses Tutorial beschreibt das grundsätzliche Vorgehen zur Erstellung von Tests mit dem Mobile Testing Plugin. Grundlage dafür ist ein mitgeliefertes Beispiel, bestehend aus einer einfachen App und einer expecco-Testsuite.
Es gibt ein Tutorial, das das grundsätzliche Vorgehen zur Erstellung von Tests mit dem Mobile Testing Plugin beschreibt. Grundlage dafür ist ein mitgeliefertes Beispiel, bestehend aus einer einfachen App und einer expecco-Testsuite.


Sie finden es auf der Seite [[Mobile_Testing_Tutorial|Mobile Testing Tutorial]] in zwei Versionen für Android und für iOS.
Die App ''expecco Mobile Demo'' berechnet und überprüft verschiedene alltägliche Codes: die IBAN aus dem europäischen Zahlungsverkehr, die internationalen GTIN-13-Produktcodes, wie man sie bei Strichcodes im Einzelhandel findet, und die Seriennummern auf Euro-Banknoten.
* <span id="FirstStepsAndroid"><!-- Referenced by m02_expeccoMobileDemo.ets --></span>[[Mobile_Testing_Tutorial#Erste_Schritte_mit_Android|Erste Schritte mit Android]]

* <span id="FirstStepsIOS"><!-- Referenced by m03_expeccoMobileDemoIOS.ets --></span>[[Mobile_Testing_Tutorial#Erste_Schritte_mit_iOS|Erste Schritte mit iOS]]
Die Testsuite enthält Testfälle für einzelne Funktionen der App. Dabei sind noch nicht alle Funktionen abgedeckt, sondern werden im Laufe des Tutorials ergänzt.

Es gibt zwei Versionen dieses Tutorials:
*'''[[#Erste_Schritte_mit_Android|Erste Schritte mit Android]]'''
*'''[[#Erste_Schritte_mit_iOS|Erste Schritte mit iOS]]'''

Das Vorgehen ist in beiden Versionen nahezu identisch, lediglich die Verbindungskonfigurationen werden unterschiedlich erzeugt. Die fertigen Tests unterscheiden sich dann im Wesentlichen in den Pfaden zur Adressierung der benutzten Elemente, da diese technologieabhängig sind.

==<span id="FirstStepsAndroid"><!-- Referenced by m02_expeccoMobileDemo.ets --></span> Erste Schritte mit Android ==
Es wird vorausgesetzt, dass Sie das Kapitel [[#Installation_und_Aufbau|Installation und Aufbau]] bereits gelesen und die nötigen Vorbereitungen für die Verwendung von Android-Geräten unter Windows abgeschlossen haben.

=== Schritt 1: Demo ausführen ===
Starten Sie expecco und öffnen Sie die Testsuite ''m02_expeccoMobileDemo.ets'' über die Schaltfläche ''Beispiel aus Datei'' (Abb. 1). Ab expecco 2.11 befindet sich diese im Unterordner ''mobile''. In dieser Testsuite befindet sich bereits ein vorgefertigter Testplan mit einigen Testfällen für diese App.

[[Datei:MobileTestingBeispielÖffnen.png | frame | left | Abb. 1: Beispiel-Testsuite öffnen]]
<br clear="all">
In der Testsuite ist das Paket der Demo-App als Anhang enthalten (''expeccoMobileDemo-debug.apk''). Mithilfe des bereitgestellten Bausteins ''Export Demo App'' können Sie die Datei an einen beliebigen Ort auf Ihrem Rechner exportieren. Wählen Sie dazu den Baustein aus (1) und klicken Sie auf den grünen Play-Knopf (2) um den Baustein auszuführen (Abb. 2). Der Baustein öffnet einen Dateidialog, in dem Sie angeben, wo das Paket gespeichert werden soll.

[[Datei:MobileTestingExportApp.png | frame | left | Abb. 2: App exportieren]]
<br clear="all">
Bevor wir uns mit dem weiteren Inhalt der Testsuite beschäftigen, konfigurieren Sie zuerst die Verbindung und welches Gerät Sie benutzen wollen. Schließen Sie dazu ein Gerät über USB an Ihren Rechner an oder starten Sie einen Emulator.

[[Datei:MobileTestingVerbinden.png | frame | left | Abb. 3: Verbindungseditor öffnen]]
<br clear="all">
Öffnen Sie nun den GUI-Browser (1) und wählen Sie unter ''Verbinden'' (2) den Eintrag ''Mobile Testing'' (3) (Abb. 3), um den Verbindungsdialog zu öffnen.

Sie sehen eine Liste aller angeschlossenen Android-Geräte (1) (Abb. 3). Sollte Ihr Gerät nicht in der Liste auftauchen, stellen Sie sicher, dass es eingeschaltet und über USB verbunden ist. Lesen Sie ansonsten den Abschnitt [[#Android-Ger.C3.A4t_vorbereiten|Android-Gerät vorbereiten]]

[[Datei:MobileTestingGerätAuswählen.png | frame | left | Abb. 4: Gerät im Verbindungsdialog auswählen]]
<br clear="all">
Haben Sie Ihr Gerät in der Liste gefunden, wählen Sie es aus und klicken Sie auf ''Weiter'' (2).

Als nächstes geben Sie an, welche App Sie verwenden wollen (Abb. 5). Dabei können Sie wählen, ob Sie eine App starten möchten, die bereits auf dem Gerät installiert ist (''App auf dem Gerät'') oder ob eine App installiert und gestartet werden soll (''App installieren''). Für den Fall, dass Sie eine bereits installierte App benutzen wollen, erhalten Sie eine Liste aller auf dem Gerät installierten Pakete (1), die in Systempakete und Fremdpakete (2) unterteilt sind, sowie deren Activities (3). Diese können Sie dann einfach in den jeweiligen Feldern auswählen.

[[Datei:MobileTestingAppAuswählen.png | frame | left | Abb. 5: Auf dem Gerät installierte App angeben]]
<br clear="all">
Für dieses Tutorial soll die App installiert werden, die Sie eben aus der Testsuite exportiert haben. Wählen Sie also ''App installieren'' aus und tragen Sie bei App (1) den entsprechenden Pfad ein (Abb. 6). Sie können den Knopf links benutzen (2), um einen Dateidialog zu öffnen, mit dem Sie zu der Datei navigieren können, um sie einzugeben. Das Paket (3) und die Activity (4) der App werden automatisch eingetragen. Sollte die App mehrere Activities besitzen, können Sie die gewünschte auswählen. Klicken Sie nun auf ''Weiter'' (5).

[[Datei:MobileTestingAppInstallieren.png | frame | left | Abb. 6: App angeben, die auf dem Gerät installiert werden soll]]
<br clear="all">
Auf der letzten Seite sehen Sie eine Übersicht aller bisherigen Angaben (1) (Abb. 7). Darunter können Sie einen Namen für die Verbindung angeben, unter dem sie im GUI-Browser angezeigt wird (2). Außerdem lässt sich eine Verbindung über diesen Namen identifizieren und in Bausteinen verwenden; der Name muss daher eindeutig sein. Falls Sie keinen Namen angeben, wird generisch einer erzeugt. Geben Sie als Namen ''expeccoMobileDemo'' ein. Im Feld darunter ist die Adresse zum Appium-Server einzutragen (3). Appium ist die Schnittstelle, über die die angeschlossenen Geräte gesteuert werden. Für dieses Tutorial wird die Verwaltung der Instanzen des Appium-Servers von expecco übernommen. Tragen Sie dafür ist die lokale Standard-Adresse ''<nowiki>http://localhost:4723/wd/hub</nowiki>'' ein. Diese ist immer der unterste Eintrag der Vorschlagsliste. Außerdem ist die Option ''Bei Bedarf starten'' aktiviert (4). expecco überprüft dann, ob an der Adresse bereits ein Appium-Server läuft und startet und beendet ihn bei Bedarf automatisch. Wenn der Port ''4723'' bereits belegt ist oder wenn Sie einmal mehrere Verbindungen parallel betreiben wollen, verwenden Sie an dieser Stelle entsprechend einen anderen Port. Es ist dabei üblich die ungeraden Portnummern oberhalb von ''4723'' zu verwenden, also ''4725'', ''4727'' usw. Natürlich können Sie auch entfernte Server verwenden, das automatische Starten und Beenden eines Servers kann expecco aber nur lokal für Sie übernehmen.

[[Datei:MobileTestingServerkonfiguration.png | frame | left | Abb. 7: Verbindungsnamen und Appium-Server konfigurieren]]
<br clear="all">
Klicken Sie nun auf ''Speichern'' (5) um die Einstellungen für die Testausführung zu speichern. Einstellungen können als Anhang einer Testsuite oder in eine externe Datei gespeichert werden (Abb. 8). Falls Sie mehrere Projekte gleichzeitig offen haben, können Sie in der Liste das Projekt auswählen, in dem der Anhang angelegt werden soll. Klicken Sie auf ''Speichern'' im Bereich ''Einstellungen im Anhang speichern'' und geben Sie als Name ''expeccoMobileDemo'' an. Klicken Sie nun auf ''Server starten und verbinden'' (6) um mit der angegebenen Konfiguration eine Verbindung herzustellen.

[[Datei:MobileTestingEinstellungenSpeichern.png | frame | left | Abb. 8: Einstellungen speichern]]
<br clear="all">
Der Verbindungsaufbau kann eine Weile dauern. Warten Sie bis die Verbindung aufgebaut ist und im GUI-Browser angezeigt wird. Sie sehen, dass die App auf dem Gerät gestartet wird. Nun wissen Sie, dass die Konfiguration funktioniert. Die gespeicherten Einstellungen sollen nun für den Test verwendet werden, der dann die gleiche Verbindung aufbaut. Wählen Sie die Verbindung im GUI-Browser aus, machen Sie einen Rechtsklick und wählen Sie im Kontextmenü ''Verbindung abbauen'', damit es zu keinem Konflikt kommt. Wechseln Sie dann zurück zum Reiter der Testsuite.

In der Testsuite wurden die Einstellungen als Anhang ''expeccoMobileDemo'' angelegt (Abb 9). Wählen Sie den Baustein ''Connect'' (1) aus und wechseln Sie rechts zur Ansicht ''Netzwerk'' (2). Ziehen Sie per Drag-and-drop die Einstellungen in das Netzwerk des Bausteins (3). Verbinden Sie den Ausgangspin ''pathName'' mit dem Eingangspin ''stringOrFilename[1]'' des Bausteins ''Connect from File'' (4). Mit ''Übernehmen'' (5) bestätigen Sie die Änderungen. Dieser Baustein wird zu Beginn des Tests die Verbindung zur App herstellen.

[[Datei:MobileTestingConnectblock.png | frame | left | Abb. 9: Verbindungsbaustein editieren]]
<br clear="all">
Wechseln Sie nun zum Testplan ''Demo-Test'' (1) (Abb. 10). Dieser Testplan enthält bereits einige fertige Testfälle. Vor und nach der Ausführung (2) ist außerdem jeweils ein Baustein eingetragen: Der eben bearbeitete Baustein ''Connect'' für den Aufbau und der Baustein ''Disconnect'' für den Verbindungsabbau. Durch das Eintragen der beiden Bausteine an dieser Stelle geschieht der Verbindungsabbau insbesondere auch dann, wenn der Test vorzeitig abgebrochen wird, z. B. weil einer der Testfälle fehlschlägt.

[[Datei:MobileTestingTestplan.png | frame | left | Abb. 10: Testplanausführung]]
<br clear="all">
Jetzt können Sie den Testplan ''Demo-Test'' starten, indem Sie auf den grünen Play-Knopf (3) klicken. Der Testplan sollte ohne Fehler durchlaufen.

=== Schritt 2: Einen Baustein mit dem Recorder erstellen ===
Mit Hilfe des integrierten Recorders lassen sich einfach Ausführungssequenzen aufnehmen und in einem Baustein speichern. Dafür muss eine Verbindung zu einem Testgerät bestehen, mit dessen Hilfe der Test erstellt wird.

Um eine Verbindung aufzubauen, wechseln Sie zurück zum GUI-Browser. In diesem ist noch die Verbindung eingetragen, die Sie zuvor angelegt haben. Da für die Verbindung im Testlauf derselbe Name verwendet wurde, wurden die Einstellungen damit überschrieben (In unserem Fall waren die Einstellungen ohnehin identisch). Die Verbindung ist zur Zeit nicht aktiv, da sie am Ende der Ausführung abgebaut wurde. Die Einstellungen sind dort aber noch eingetragen. Um die Verbindung mit dieser Konfiguration wieder aufzubauen, wählen Sie sie aus, gefolgt von einem Rechtsklick und ''Verbinden''.

Warten Sie, bis die Verbindung aufgebaut ist (1) und drücken Sie dann den Aufnahme-Knopf (2), um eine Aufzeichnung zu starten (Abb. 11).

[[Datei:MobileTestingRecorderStarten.png | frame | left | Abb. 11: Recorder starten]]
<br clear="all">
Es öffnet sich ein Fenster mit dem Mobile Testing Recorder (Abb. 12). Dieser zeigt einen Screenshot des verbundenen Geräts. Über diese Anzeige können Sie das Gerät fernsteuern. Dabei wird jede Aktion, die Sie ausführen, im Hintergrund aufgezeichnet.

In der oberen Menüleiste können Sie das Werkzeug auswählen (1), mit dem Sie eine Aktion eingeben möchten. Als Voreinstellung ist das Werkzeug ''Auto'' ausgewählt. Sie können damit bestimmte Aktionen aufzeichnen, indem Sie mit dem Mauszeiger entsprechende Gesten auf der Anzeige ausführen. Wenn Sie zum Beispiel mit der linken Maustaste lange klicken, entspricht das einem langen Antippen des Elements an dieser Stelle. Anstatt die gewünschte Aktion mit der entsprechenden Geste zu bestimmen, können Sie diese alternativ auch manuell auswählen.

Es soll nun ein neuer Test für das Erkennen korrekter GTIN-13-Codes aufgenommen werden. Klicken Sie zunächst in der Anzeige kurz auf den Button ''GTIN-13 (EAN-13)'' (2) der App um einen entsprechenden Klick auf dem Gerät auszulösen. Während der Ausführung dieser Aktion wird der Rahmen des Recorders kurzzeitig rot. Falls der Recorder danach nicht die aktuelle Ansicht der App darstellen sollte, klicken Sie im Recorder auf das Aktualisierungssymbol (3).

[[Datei:MobileTestingRecorder1.png | frame | left | Abb. 12: Über Recorder zur GTIN-13-Activity wechseln]]
<br clear="all">
Anschließend soll im Eingabefeld der neuen Seite eine korrekte GTIN-13 eingegeben werden. Führen Sie dazu einen Rechtsklick auf dem Eingabefeld (1) aus und wählen Sie im Kontextmenü die Aktion ''Text setzen'' (2) (Abb. 13). Geben Sie in den sich daraufhin öffnenden Dialog eine beliebige gültige Artikelnummer im GTIN-13-Format ein, bspw. ''4006381333986'' (3). Dieser Text wird nun in der App gesetzt.

[[Datei:MobileTestingRecorder2.png | frame | left | Abb. 13: GTIN-13-Code über Recorder eingeben]]
<br clear="all">
Klicken Sie nun auf ''Verify'' (1) (Abb. 14). In der App erscheint nun als Ergebnis ''OK'' (2). Der Test soll feststellen, ob tatsächlich dieses Ergebnis angezeigt wird. Nach einem Rechtsklick darauf können Sie im Kontextmenü die Aktion ''Attribut zusichern'' (3) auswählen. Wählen Sie im Dialog, der sich daraufhin öffnet, die Eigenschaft ''text'' (4) aus und bestätigen Sie mit ''OK'' (5). Dieses Mal wird keine Aktion auf dem Gerät ausgelöst, sondern nur ein Baustein aufgezeichnet, der fehlschlägt, sollte das Ergebnis vom erwarteten Wert ''OK'' abweichen.

[[Datei:MobileTestingRecorder3.png | frame | left | Abb. 14: Antwort der App über Recorder auslesen]]
<br clear="all">
Schließen Sie nun den Recorder. Im ''Arbeitsbereich'' des GUI-Browsers sehen Sie, dass für jede der aufgenommenen Aktionen ein Baustein angelegt wurde (Abb. 15). Sie können nun testen, ob sich das Aufgenommene wieder abspielen lässt. Dazu müssen Sie zunächst die App auf Ihrem Gerät in den Anfangszustand zurückbringen, indem Sie auf dem Gerät die Schaltfläche ''HOME'' oben rechts benutzen. Klicken Sie dann in expecco auf den grünen Play-Knopf (1). Wird alles grün, war die Ausführung erfolgreich. Erstellen Sie nun daraus einen neuen Baustein in der Testsuite, indem Sie auf das Bausteinsymbol (2) in der rechten oberen Ecke klicken. Geben Sie ihm den Namen ''GTIN_Verify_OK'' (3) und bestätigen Sie (4).

[[Datei:MobileTestingArbeitsbereich.png | frame | left | Abb. 15: Neuen Baustein aus Arbeitsbereich exportieren]]
<br clear="all">
Bauen Sie nun die Verbindung ab, indem Sie die Verbindung auswählen, rechtsklicken und im Kontextmenü ''Verbindung abbauen'' auswählen.

Wechseln Sie zurück zum Reiter der Testsuite. Dort wurde der neue Baustein angelegt. Wählen Sie wieder den Testplan ''Demo-Test'' aus und fügen Sie den aufgenommenen Testfall ''GTIN_Verify_OK'' per Drag-and-drop am Ende des Testplans hinzu. Übernehmen Sie die Änderung und starten Sie erneut. Der Testplan sollte wieder ohne Fehler durchlaufen.

=== Schritt 3: XPath anpassen mithilfe des GUI-Browsers ===
Ihr neuer Baustein funktioniert auf anderen Geräten möglicherweise nicht. Die verwendeten Elemente werden über einen XPath adressiert und dieser kann auf anderen Geräten nicht stimmen. Lesen Sie dazu den Abschnitt [[#XPath_anpassen_mithilfe_des_GUI-Browsers|XPath anpassen mithilfe des GUI-Browsers]]. Falls Ihnen ein weiteres Gerät zur Verfügung steht, können Sie nun versuchen, die Pfade in Ihren erstellten Bausteinen zu verallgemeinern. Sie können diesen Schritt aber auch überspringen.

Wenn es Ihnen schwerfällt, verkürzte Pfade zu finden, orientieren Sie sich dabei an den Pfaden der bereits vorhandenen Bausteine. Starten Sie den Test erneut. Sollte der Test jetzt fehlschlagen, überprüfen Sie die Pfade noch einmal im GUI-Browser.
Um den Test nun auf einem zweiten Gerät auszuführen, öffnen Sie im Menü ''Erweiterungen'' > ''Mobile Testing'' > ''Verbindungseinstellungen erstellen''. Sie erhalten einen Dialog ähnlich zum Verbindungsdialog. Allerdings können Sie hier nur Einstellungen erstellen und speichern aber keine Verbindung herstellen. Sie haben jedoch die Möglichkeit, einzelne Aspekte der Einstellungen zu speichern wie bspw. nur das Gerät. Wählen Sie das neue Gerät aus und klicken Sie länger auf das Symbol zum Speichern im Anhang bis sich das verzögerte Menü öffnet (Abb. 16). Wählen Sie hier ''Geräte-Einstellungen speichern''. Benennen Sie den Anhang am besten nach dem Gerät. Danach können Sie den Dialog wieder schließen.

[[Datei:MobileTestingGerätSpeichern.png | frame | left | Abb. 16: Einstellungen für ein Gerät speichern]]
<br clear="all">
Wählen Sie den Baustein ''Connect'' aus und ziehen Sie die Einstellungen für das neue Gerät in dessen Netzwerk. Verbinden Sie nun dessen Ausgangspin ''pathName'' mit dem Eingangspin ''stringOrFilename[2]'' des Bausteins ''Connect from File''. Der Baustein Connect from File liest die Angaben an den Eingangspins von oben nach unten ein, mehrfache Eigenschaften werden dabei ersetzt. In diesem Fall werden also die Einstellungen zum verwendeten Gerät ersetzt, während die übrigen Einstellungen gleich bleiben. Wenn Sie die Pfade geschickt gewählt haben, wird der Test nun auch auf dem anderen Gerät erfolgreich ablaufen.

=== Schritt 4: Noch einen Baustein erstellen ===
Falls sich gleiche Abläufe im Test wiederholen, können Sie dafür bereits erstellte Bausteine wiederverwenden oder abwandeln. Der in Schritt 2 erstellte Baustein prüft die Erkennung korrekter GTIN-13-Codes. Es fehlt noch ein Test, der umgekehrt das Erkennen eines falschen GTIN-13-Codes prüft. Die Struktur der beiden Tests ist identisch, sie unterscheiden sich lediglich in ihren Parametern. Kopieren Sie daher den Baustein ''GTIN_Verify_OK'' und benennen Sie die Kopie in ''GTIN_Verify_NOT_OK'' um. Ändern Sie die Eingabe der GTIN-13 in einen falschen Code zum Beispiel durch Ändern der letzten Ziffer (''4006381333987'') und setzen Sie den Überprüfungswert der Ausgabe auf ''NOT OK'' (Abb. 17).

[[Datei:MobileTestingGTIN_Verify_NOT_OK.png | frame | left | Abb. 17: Baustein editieren]]
<br clear="all">
Fügen Sie diesen neuen Test ebenfalls zum Testplan Demo-Test hinzu und setzen Sie ihn ans Ende. Führen Sie den Testplan aus, aber vergessen Sie nicht, vorher die Verbindung im GUI-Browser abzubauen.

Der neue Test wird fehlschlagen, weil Ihr aufgenommener Baustein nicht wieder zur Startseite der App zurückkehrt, die Tests aber jeweils von dort aus starten. In den anderen Bausteinen ist dies bereits berücksichtigt; sie führen abschließend immer den Baustein ''Back to main menu'' aus. Sie sehen das, indem Sie einen der anderen Bausteine, z. B. ''GTIN_Calculate'', auswählen und auf seine Schema-Ansicht wechseln. Dort steht der Baustein ''Back to main menu'' im Feld ''Nach Ausführung'' (Abb. 18). Wie beim entsprechenden Feld beim Testplan wird auch dieser Baustein immer am Ende ausgeführt, unabhängig davon, ob der Test erfolgreich verläuft oder abbricht. Ergänzen Sie diesen Eintrag nun in Ihren Bausteinen ''GTIN_Verify_OK'' und ''GTIN_Verify_NOT_OK''. Wählen Sie dazu den Baustein aus und ziehen Sie in der Schema-Ansicht den Baustein ''Back to main menu'' einfach auf das Eingabefeld ''Nach Ausführung''. Nun können Sie den Testplan starten und alle Tests sollten wieder problemlos ausgeführt werden.

[[Datei:AppiumDemo Nach Ausführung.png | frame | left | Abb. 18: Nach-Ausführungs-Baustein setzen]]
<br clear="all">

=== Schritt 5: Test vervollständigen ===
Für die Activity IBAN sind bereits alle Antwortmöglichkeiten der App mit Testfällen abgedeckt. In der GTIN-13-Activity werden ein korrekter und ein fehlerhafter Code getestet und eine Prüfziffer berechnet, das Verhalten der App bei Eingaben falscher Länge wird aber bisher nicht getestet (Bei Verify '''Input must be exactly 13 digits''. und ''…12 digits''. bei Calculate). Die Activity zum Prüfen der Seriennummern von Eurobanknoten wird noch gar nicht getestet. Wie bei der IBAN können hier drei Fälle auftreten: eine korrekte Seriennummer wurde eingegeben (Antwort: ''OK''), eine falsche Seriennummer wurde eingegeben (Antwort: ''NOT OK'') oder die Angabe entspricht nicht dem Format (Antwort: ''A serial number consists of 12 characters with the first one or two being capital letters (A-Z).''). Sie können die Testabdeckung jetzt noch erweitern, indem Sie entsprechende Testfälle erstellen. Die Bausteine dafür können Sie wie in Schritt 2 mit dem Recorder erstellen und die XPaths bei Bedarf verallgemeinern. Wenn Sie mit dem grundsätzlichen Umgang mit expecco vertraut sind, können Sie Bausteine natürlich auch ohne Recorder erstellen, indem Sie sie manuell aus vorhandenen Bausteinen der Bibliothek zusammensetzen. Sie können auch beide Vorgehensweisen nach Belieben kombinieren.

Beachten Sie, dass die hier vorgestellten Testfälle jeweils nur einzelne Eingaben prüfen. Wenn Sie Testfälle für Ihre eigenen Apps schreiben, wollen Sie vermutlich engmaschiger testen, indem Sie noch weitere unterschiedliche Werte eingeben, die insbesondere auch Randfälle enthalten.

==<span id="FirstStepsIOS"><!-- Referenced by m03_expeccoMobileDemoIOS.ets --></span> Erste Schritte mit iOS ==
Es wird vorausgesetzt, dass Sie das Kapitel [[#Installation_und_Aufbau|Installation und Aufbau]] bereits gelesen und die nötigen Vorbereitungen für die Verwendung von iOS-Geräten unter Mac OS abgeschlossen haben. Schließen Sie das Gerät, das Sie verwenden wollen, an den Mac an. Laden Sie die iOS-Version der [http://download.exept.de/transfer/h-expecco-2.11.0-pre/expeccoMobileDemo.ipa expeccoMobileDemo-App] auf den Mac herunter. Da es sich bei der App um einen Debug-Build handelt, müssen Sie sie noch für Ihr Gerät signieren (siehe [[#iOS-Ger.C3.A4t_und_App_vorbereiten|iOS-Gerät und App vorbereiten]]). Starten Sie nun einen Appium-Server auf dem Mac.

=== Schritt 1: Demo ausführen ===
Starten Sie expecco und öffnen Sie die Testsuite ''m03_expeccoMobileDemoIOS.ets'' über die Schaltfläche ''Beispiel aus Datei'' (Abb. 1). Ab expecco 2.11 befindet sich diese im Unterordner ''mobile''. Ansonsten laden Sie die Testsuite [http://download.exept.de/transfer/h-expecco-2.10.0/m03_expeccoMobileDemoIOS.ets m03_expeccoMobileDemoIOS.ets] auf den Rechner, auf dem sich Ihre expecco-Installation befindet, und öffnen diese. In dieser Testsuite befindet sich bereits ein vorgefertigter Testplan mit einigen Testfällen für diese App.

[[Datei:MobileTestingIOSBeispielÖffnen.png | frame | left | Abb. 1: Beispiel-Testsuite öffnen]]
<br clear="all">
Bevor wir uns mit dem weiteren Inhalt der Testsuite beschäftigen, konfigurieren Sie zuerst die Verbindung und welches Gerät Sie benutzen wollen. Öffnen Sie nun den GUI-Browser (1) und wählen Sie unter ''Verbinden'' (2) den Eintrag ''Mobile Testing'' (3) (Abb. 2), um den Verbindungsdialog zu öffnen.
[[Datei:MobileTestingVerbinden.png | frame | left | Abb. 2: Verbindungseditor öffnen]]
<br clear="all">

Hier können Sie ein iOS-Gerät nur von Hand eintragen. Wählen Sie dazu ''iOS-Gerät eingeben'' (Abb. 3). Den Namen und die iOS-Version des Geräts können Sie dessen Eigenschaften entnehmen. Um die Gerätekennung des Geräts zu erfahren, öffnen Sie auf dem Mac in Xcode das Fenster Devices (Command-Shift-2). Dort werden alle angeschlossenen Geräte sowie die zur Verfügung stehenden Simulatoren angezeigt. Hier sehen Sie auch die Gerätekennung (udid) Ihres Geräts und welche Apps installiert wurden. Nachdem Sie das Gerät im Verbindungseditor eingegeben haben, wählen Sie es in der Liste aus und klicken Sie dann auf Weiter.

[[Datei:MobileTestingIOSGerät.png | frame | left | Abb. 3: Hinzufügen eines iOS-Geräts]]
<br clear="all">

Als nächstes geben Sie an, welche App Sie verwenden wollen. Dabei können Sie wählen, ob Sie eine App starten möchten, die bereits auf dem Gerät installiert ist (''App auf dem Gerät'') oder ob eine App installiert und gestartet werden soll (''App installieren''). Für den Fall, dass Sie eine bereits installierte App benutzen wollen, müssen Sie deren Bundle-ID angeben. Diese erfahren Sie ebenfalls im Devices-Fenster von Xcode. Für die Demo-App lautet sie beispielsweise ''de.exept.expeccoMobileDemo''.

Für dieses Tutorial soll die Demo-App erst installiert werden. Wählen Sie also ''App installieren'' aus und tragen Sie bei App den Pfad zu der Datei auf dem Mac ein (Abb. 4). Wenn Sie expecco 2.11 verwenden, können Sie auf dieser Seite auch die Team-ID angeben, die für iOS-Verbindungen angibt, welches Zertifiat verwendet werden soll. Falls Sie bereits in den [[#Konfiguration_des_Plugins|Plugin-Einstellungen]] eine ID angegeben haben, wird diese verwendet. Sie wird hier grau dargestellt, solange Sie keinen anderen Wert angeben. Klicken Sie nun auf ''Weiter''.

[[Datei:MobileTestingIOSAppInstallieren.png | frame | left | Abb. 4: App angeben, die auf dem Gerät installiert werden soll]]
<br clear="all">

Auf der letzten Seite sehen Sie eine Übersicht aller bisherigen Angaben (1) (Abb. 5). Unterhalb der Capabilityliste können Sie einen Namen für die Verbindung angeben, unter dem sie im GUI-Browser angezeigt wird (2). Außerdem lässt sich eine Verbindung über diesen Namen identifizieren und in Bausteinen verwenden; der Name muss daher eindeutig sein. Falls Sie keinen Namen angeben, wird generisch einer erzeugt. Geben Sie als Namen ''expeccoMobileDemo'' ein. Im Feld darunter ist die Adresse zum Appium-Server einzutragen (3). Wenn Sie den Appium-Server mit Standardeinstellungen gestartet haben, müssen Sie dazu nur in der Standardadresse (unterster Eintrag der Vorschlagsliste) ''localhost'' durch die IP-Adresse des Macs ersetzen (im Bild ''172.23.1.49''). Um sicher zu gehen, auf welchem Port der Appium-Server lauscht, sehen Sie in dessen Ausgabe. Dort finden am Anfang die Zeile
<nowiki>info: Appium REST http interface listener started on 0.0.0.0:4723</nowiki>
Steht hier am Ende nicht der Standardport ''4723'' ändern Sie diese Angabe entsprechend ebenfalls in der Konfiguration.

Wenn die Option ''Bei Bedarf starten'' (4) aktiviert ist, überprüft expecco, ob an der Adresse bereits ein Appium-Server läuft, und startet und beendet ihn bei Bedarf automatisch. Das ist allerdings nur für lokale Serveradressen möglich, schalten Sie diese Option daher ab.

[[Datei:MobileTestingServerkonfigurationIOS.png | frame | left | Abb. 5: Verbindungsnamen und Appium-Server konfigurieren]]
<br clear="all">

Klicken Sie nun auf ''Speichern'' (5) um die Einstellungen für die Testausführung zu speichern. Einstellungen können als Anhang einer Testsuite oder in eine externe Datei gespeichert werden (Abb. 6). Falls Sie mehrere Projekte gleichzeitig offen haben, können Sie in der Liste das Projekt auswählen, in dem der Anhang angelegt werden soll. Klicken Sie auf ''Speichern'' im Bereich ''Einstellungen im Anhang speichern'' und geben Sie als Name ''expeccoMobileDemo'' an. Klicken Sie nun auf ''Verbinden'' (6) um mit der angegebenen Konfiguration eine Verbindung herzustellen.

[[Datei:MobileTestingEinstellungenSpeichern.png | frame | left | Abb. 6: Einstellungen speichern]]
<br clear="all">

Der Verbindungsaufbau kann eine Weile dauern. Wenn Sie die Server-Adresse korrekt angegeben haben, sollten Sie in der Ausgabe des Appium-Servers den Verbindungsversuch erkennen. Auf Ihrem iOS-Gerät sollte dabei die App gestartet werden. Passiert nichts auf dem Gerät, kann es daran liegen, dass entweder das Gerät oder die App nicht gefunden wird. Versucht Appium hingegen, die App zu starten und dies schlägt fehl, ist wahrscheinlich die App falsch signiert. Deinstallieren Sie in diesem Fall die App, damit sie mit einer neuen Signatur wieder installiert werden kann.

Warten Sie bis die Verbindung aufgebaut ist und im GUI-Browser angezeigt wird. Nun wissen Sie, dass die Konfiguration funktioniert. Die gespeicherten Einstellungen sollen nun für den Test verwendet werden, der dann die gleiche Verbindung aufbaut. Wählen Sie die Verbindung im GUI-Browser aus, machen Sie einen Rechtsklick und wählen Sie im Kontextmenü ''Verbindung abbauen'', damit es zu keinem Konflikt kommt. Wechseln Sie dann zurück zum Reiter der Testsuite.

In der Testsuite wurden die Einstellungen als Anhang ''expeccoMobileDemo'' angelegt (Abb 7). Wählen Sie den Baustein ''Connect'' (1) aus und wechseln Sie rechts zur Ansicht ''Netzwerk'' (2). Ziehen Sie per Drag-and-drop die Einstellungen in das Netzwerk des Bausteins (3). Verbinden Sie den Ausgangspin ''pathName'' mit dem Eingangspin ''stringOrFilename[1]'' des Bausteins ''Connect from File'' (4). Mit ''Übernehmen'' (5) bestätigen Sie die Änderungen. Dieser Baustein wird zu Beginn des Tests die Verbindung zur App herstellen.

[[Datei:MobileTestingConnectblock.png | frame | left | Abb. 7: Verbindungsbaustein editieren]]
<br clear="all">

Wechseln Sie nun zum Testplan ''Demo-Test'' (1) (Abb. 8). Dieser Testplan enthält bereits einige fertige Testfälle. Vor und nach der Ausführung (2) ist außerdem jeweils ein Baustein eingetragen: Der eben bearbeitete Baustein ''Connect'' für den Aufbau und der Baustein ''Disconnect'' für den Verbindungsabbau. Durch das Eintragen der beiden Bausteine an dieser Stelle geschieht der Verbindungsabbau insbesondere auch dann, wenn der Test vorzeitig abgebrochen wird, z. B. weil einer der Testfälle fehlschlägt.

[[Datei:MobileTestingTestplan.png | frame | left | Abb. 8: Testplanausführung]]
<br clear="all">
Jetzt können Sie den Testplan ''Demo-Test'' starten, indem Sie auf den grünen Play-Knopf (3) klicken. Der Testplan sollte ohne Fehler durchlaufen.

=== Schritt 2: Einen Baustein mit dem Recorder erstellen ===
Mit Hilfe des integrierten Recorders lassen sich einfach Ausführungssequenzen aufnehmen und in einem Baustein speichern. Dafür muss eine Verbindung zu einem Testgerät bestehen, mit dessen Hilfe der Test erstellt wird.

Um eine Verbindung aufzubauen, wechseln Sie zurück zum GUI-Browser. In diesem ist noch die Verbindung eingetragen, die Sie zuvor angelegt haben. Da für die Verbindung im Testlauf derselbe Name verwendet wurde, wurden die Einstellungen damit überschrieben (In unserem Fall waren die Einstellungen ohnehin identisch). Die Verbindung ist zur Zeit nicht aktiv, da sie am Ende der Ausführung abgebaut wurde. Die Einstellungen sind dort aber noch eingetragen. Um die Verbindung mit dieser Konfiguration wieder aufzubauen, wählen Sie sie aus, gefolgt von einem Rechtsklick und ''Verbinden''.

Warten Sie, bis die Verbindung aufgebaut ist (1) und drücken Sie dann den Aufnahme-Knopf (2), um eine Aufzeichnung zu starten (Abb. 9).

[[Datei:MobileTestingRecorderStarten.png | frame | left | Abb. 9: Recorder starten]]
<br clear="all">
Es öffnet sich ein Fenster mit dem Mobile Testing Recorder (Abb. 10). Dieser zeigt einen Screenshot des verbundenen Geräts. Über diese Anzeige können Sie das Gerät fernsteuern. Dabei wird jede Aktion, die Sie ausführen, im Hintergrund aufgezeichnet.

In der oberen Menüleiste können Sie das Werkzeug auswählen (1), mit dem Sie eine Aktion eingeben möchten. Als Voreinstellung ist das Werkzeug ''Auto'' ausgewählt. Sie können damit bestimmte Aktionen aufzeichnen, indem Sie mit dem Mauszeiger entsprechende Gesten auf der Anzeige ausführen. Wenn Sie zum Beispiel mit der linken Maustaste lange klicken, entspricht das einem langen Antippen des Elements an dieser Stelle. Anstatt die gewünschte Aktion mit der entsprechenden Geste zu bestimmen, können Sie diese alternativ auch manuell auswählen.

Es soll nun ein neuer Test für das Erkennen korrekter GTIN-13-Codes aufgenommen werden. Klicken Sie zunächst in der Anzeige kurz auf den Button ''GTIN-13 (EAN-13)'' (2) der App um einen entsprechenden Klick auf dem Gerät auszulösen. Während der Ausführung dieser Aktion wird der Rahmen des Recorders kurzzeitig rot. Falls der Recorder danach nicht die aktuelle Ansicht der App darstellen sollte, klicken Sie im Recorder auf das Aktualisierungssymbol (3).

[[Datei:MobileTestingRecorder1iOS.png | frame | left | Abb. 10: Über Recorder zur GTIN-13-Activity wechseln]]
<br clear="all">
Anschließend soll im Eingabefeld der neuen Seite eine korrekte GTIN-13 eingegeben werden. Führen Sie dazu einen Rechtsklick auf dem Eingabefeld (1) aus und wählen Sie im Kontextmenü die Aktion ''Text setzen'' (2) (Abb. 11). Geben Sie in den sich daraufhin öffnenden Dialog eine beliebige gültige Artikelnummer im GTIN-13-Format ein, bspw. ''4006381333986'' (3). Dieser Text wird nun in der App gesetzt.

[[Datei:MobileTestingRecorder2iOS.png | frame | left | Abb. 11: GTIN-13-Code über Recorder eingeben]]
<br clear="all">
Klicken Sie nun auf ''Verify'' (1) (Abb. 12). In der App erscheint nun als Ergebnis ''OK'' (2). Der Test soll feststellen, ob tatsächlich dieses Ergebnis angezeigt wird. Nach einem Rechtsklick darauf können Sie im Kontextmenü die Aktion ''Attribut zusichern'' (3) auswählen. Wählen Sie im Dialog, der sich daraufhin öffnet, die Eigenschaft ''value'' (4) aus und bestätigen Sie mit ''OK'' (5). Dieses Mal wird keine Aktion auf dem Gerät ausgelöst, sondern nur ein Baustein aufgezeichnet, der fehlschlägt, sollte das Ergebnis vom erwarteten Wert ''OK'' abweichen.

[[Datei:MobileTestingRecorder3iOS.png | frame | left | Abb. 12: Antwort der App über Recorder auslesen]]
<br clear="all">
Schließen Sie nun den Recorder. Im ''Arbeitsbereich'' des GUI-Browsers sehen Sie, dass für jede der aufgenommenen Aktionen ein Baustein angelegt wurde (Abb. 13). Sie können nun testen, ob sich das Aufgenommene wieder abspielen lässt. Dazu müssen Sie zunächst die App auf Ihrem Gerät in den Anfangszustand zurückbringen, indem Sie auf dem Gerät die Schaltfläche ''Home'' oben links benutzen. Klicken Sie dann in expecco auf den grünen Play-Knopf (1). Wird alles grün, war die Ausführung erfolgreich. Erstellen Sie nun daraus einen neuen Baustein in der Testsuite, indem Sie auf das Bausteinsymbol (2) in der rechten oberen Ecke klicken. Geben Sie ihm den Namen ''GTIN_Verify_OK'' (3) und bestätigen Sie (4).

[[Datei:MobileTestingArbeitsbereich.png | frame | left | Abb. 13: Neuen Baustein aus Arbeitsbereich exportieren]]
<br clear="all">
Bauen Sie nun die Verbindung ab, indem Sie die Verbindung auswählen, rechtsklicken und im Kontextmenü ''Verbindung abbauen'' auswählen.

Wechseln Sie zurück zum Reiter der Testsuite. Dort wurde der neue Baustein angelegt. Wählen Sie wieder den Testplan ''Demo-Test'' aus und fügen Sie den aufgenommenen Testfall ''GTIN_Verify_OK'' per Drag-and-drop am Ende des Testplans hinzu. Übernehmen Sie die Änderung und starten Sie erneut. Der Testplan sollte wieder ohne Fehler durchlaufen.

=== Schritt 3: XPath anpassen mithilfe des GUI-Browsers ===
Ihr neuer Baustein funktioniert auf anderen Geräten möglicherweise nicht. Die verwendeten Elemente werden über einen XPath adressiert und dieser kann auf anderen Geräten nicht stimmen. Lesen Sie dazu den Abschnitt [[#XPath_anpassen_mithilfe_des_GUI-Browsers|XPath anpassen mithilfe des GUI-Browsers]]. Falls Ihnen ein weiteres Gerät zur Verfügung steht, können Sie nun versuchen, die Pfade in Ihren erstellten Bausteinen zu verallgemeinern. Sie können diesen Schritt aber auch überspringen.

Wenn es Ihnen schwerfällt, verkürzte Pfade zu finden, orientieren Sie sich dabei an den Pfaden der bereits vorhandenen Bausteine. Starten Sie den Test erneut. Sollte der Test jetzt fehlschlagen, überprüfen Sie die Pfade noch einmal im GUI-Browser.
Um den Test nun auf einem zweiten Gerät auszuführen, öffnen Sie im Menü ''Erweiterungen'' > ''Mobile Testing'' > ''Verbindungseinstellungen erstellen''. Sie erhalten einen Dialog ähnlich zum Verbindungsdialog. Allerdings können Sie hier nur Einstellungen erstellen und speichern aber keine Verbindung herstellen. Sie haben jedoch die Möglichkeit, einzelne Aspekte der Einstellungen zu speichern wie bspw. nur das Gerät. Geben Sie das neue Gerät ein und wählen Sie es aus. Klicken Sie länger auf das Symbol zum Speichern im Anhang bis sich das verzögerte Menü öffnet und wählen Sie hier ''Geräte-Einstellungen speichern'' (Abb. 14). Benennen Sie den Anhang am besten nach dem Gerät. Danach können Sie den Dialog wieder schließen.

[[Datei:MobileTestingGerätSpeichern.png | frame | left | Abb. 14: Einstellungen für ein Gerät speichern]]
<br clear="all">
Wählen Sie den Baustein ''Connect'' aus und ziehen Sie die Einstellungen für das neue Gerät in dessen Netzwerk. Verbinden Sie nun dessen Ausgangspin ''pathName'' mit dem Eingangspin ''stringOrFilename[2]'' des Bausteins ''Connect from File''. Der Baustein Connect from File liest die Angaben an den Eingangspins von oben nach unten ein, mehrfache Eigenschaften werden dabei ersetzt. In diesem Fall werden also die Einstellungen zum verwendeten Gerät ersetzt, während die übrigen Einstellungen gleich bleiben. Wenn Sie die Pfade geschickt gewählt haben, wird der Test nun auch auf dem anderen Gerät erfolgreich ablaufen.

=== Schritt 4: Noch einen Baustein erstellen ===
Falls sich gleiche Abläufe im Test wiederholen, können Sie dafür bereits erstellte Bausteine wieder-verwenden oder abwandeln. Der in Schritt 2 erstellte Baustein prüft die Erkennung korrekter GTIN-13-Codes. Es fehlt noch ein Test, der umgekehrt das Erkennen eines falschen GTIN-13-Codes prüft. Die Struktur der beiden Tests ist identisch, sie unterscheiden sich lediglich in ihren Parametern. Kopieren Sie daher den Baustein ''GTIN_Verify_OK'' und benennen Sie die Kopie in ''GTIN_Verify_NOT_OK'' um. Ändern Sie die Eingabe der GTIN-13 in einen falschen Code zum Beispiel durch Ändern der letzten Ziffer (''4006381333987'') und setzen Sie den Überprüfungswert der Ausgabe auf ''NOT OK'' (Abb. 15).

[[Datei:MobileTestingGTIN_Verify_NOT_OK_iOS.png | frame | left | Abb. 15: Baustein editieren]]
<br clear="all">
Fügen Sie diesen neuen Test ebenfalls zum Testplan Demo-Test hinzu und setzen Sie ihn ans Ende. Führen Sie den Testplan aus, aber vergessen Sie nicht, vorher die Verbindung im GUI-Browser abzubauen.

Der neue Test wird fehlschlagen, weil Ihr aufgenommener Baustein nicht wieder zur Startseite der App zurückkehrt, die Tests aber jeweils von dort aus starten. In den anderen Bausteinen ist dies bereits berücksichtigt; sie führen abschließend immer den Baustein ''Back to main menu'' aus. Sie sehen das, indem Sie einen der anderen Bausteine, z. B. ''GTIN_Calculate'', auswählen und auf seine Schema-Ansicht wechseln. Dort steht der Baustein ''Back to main menu'' im Feld ''Nach Ausführung'' (Abb. 16). Wie beim entsprechenden Feld beim Testplan wird auch dieser Baustein immer am Ende ausgeführt, unabhängig davon, ob der Test erfolgreich verläuft oder abbricht. Ergänzen Sie diesen Eintrag nun in Ihren Bausteinen ''GTIN_Verify_OK'' und ''GTIN_Verify_NOT_OK''. Wählen Sie dazu den Baustein aus und ziehen Sie in der Schema-Ansicht den Baustein ''Back to main menu'' einfach auf das Eingabefeld ''Nach Ausführung''. Nun können Sie den Testplan starten und alle Tests sollten wieder problemlos ausgeführt werden.

[[Datei:AppiumDemo Nach Ausführung.png | frame | left | Abb. 16: Nach-Ausführungs-Baustein setzen]]
<br clear="all">

=== Schritt 5: Test vervollständigen ===
Für die Activity IBAN sind bereits alle Antwortmöglichkeiten der App mit Testfällen abgedeckt. In der GTIN-13-Activity werden ein korrekter und ein fehlerhafter Code getestet und eine Prüfziffer berechnet, das Verhalten der App bei Eingaben falscher Länge wird aber bisher nicht getestet (Bei Verify '''Input must be exactly 13 digits''. und ''…12 digits''. bei Calculate). Die Activity zum Prüfen der Seriennummern von Eurobanknoten wird noch gar nicht getestet. Wie bei der IBAN können hier drei Fälle auftreten: eine korrekte Seriennummer wurde eingegeben (Antwort: ''OK''), eine falsche Seriennummer wurde eingegeben (Antwort: ''NOT OK'') oder die Angabe entspricht nicht dem Format (Antwort: ''A serial number consists of 12 characters with the first one or two being capital letters (A-Z).''). Sie können die Testabdeckung jetzt noch erweitern, indem Sie entsprechende Testfälle erstellen. Die Bausteine dafür können Sie wie in Schritt 2 mit dem Recorder erstellen und die XPaths bei Bedarf verallgemeinern. Wenn Sie mit dem grundsätzlichen Umgang mit expecco vertraut sind, können Sie Bausteine natürlich auch ohne Recorder erstellen, indem Sie sie manuell aus vorhandenen Bausteinen der Bibliothek zusammensetzen. Sie können auch beide Vorgehensweisen nach Belieben kombinieren.

Beachten Sie, dass die hier vorgestellten Testfälle jeweils nur einzelne Eingaben prüfen. Wenn Sie Testfälle für Ihre eigenen Apps schreiben, wollen Sie vermutlich engmaschiger testen, indem Sie noch weitere unterschiedliche Werte eingeben, die insbesondere auch Randfälle enthalten.


= Dialoge des Mobile Testing Plugins =
= Dialoge des Mobile Testing Plugins =
== Verbindungseditor ==
== Verbindungseditor ==
Mithilfe des Verbindungseditors können Sie schnell Verbindungen definieren, ändern oder aufbauen. Je nach Aufgabe weist der Dialog kleine Unterschiede auf und wird unterschiedlich geöffnet:
Mithilfe des Verbindungseditors können Sie schnell Verbindungen definieren, ändern oder aufbauen. Je nach Aufgabe weist der Dialog kleine Unterschiede auf und wird unterschiedlich geöffnet:
*Wenn Sie eine Verbindung aufbauen wollen, erreichen Sie den Dialog im GUI-Browser, indem Sie auf ''Verbinden'' klicken und dann ''Mobile Testing'' auswählen.
*Um eine Verbindung aufzubauen, klicken Sie im GUI-Browser auf "''Verbinden'"' klicken und wählen dann "''Mobile Testing''".
*Um eine bestehende Verbindung im GUI-Browser zu ändern oder zu kopieren, wählen Sie diese aus, machen einen Rechtsklick und wählen im Kontextmenü entsprechend ''Verbindung bearbeiten'' oder ''Verbindung kopieren'' aus.
*Um eine bestehende Verbindung im GUI-Browser zu ändern oder zu kopieren, wählen Sie diese aus, machen einen Rechtsklick und wählen im Kontextmenü "''Verbindung bearbeiten''" oder "''Verbindung kopieren''" aus.
*Wollen Sie Verbindungseinstellungen nicht für den GUI-Browser sondern zur Verwendung in einem Test erstellen, wählen Sie im Menü des Mobile Testing Plugins den Punkt ''Verbindungseinstellungen erstellen...''. Darüber können nur die Einstellungen für eine Verbindung erstellt werden, ohne dass eine Verbindung im GUI-Browser angelegt wird.
*Wollen Sie Verbindungseinstellungen nicht für den GUI-Browser sondern zur Verwendung in einem Test erstellen, wählen Sie im Menü des Mobile Testing Plugins den Punkt "''Verbindungseinstellungen erstellen...''". Darüber können nur die Einstellungen für eine Verbindung erstellt werden, ohne dass eine Verbindung tatsächlich angelegt wird.


Das Menü des Verbindungseditors weist verschiedenen Schaltflächen auf, von denen manche nur beim Erstellen von Verbindungseinstellungen sichtbar sind:
Einige der Schaltflächen sind nur beim Erstellen von Verbindungseinstellungen sichtbar:
[[Datei:MobileTestingVerbindungseditorMenu.png]]
[[Datei:MobileTestingVerbindungseditorMenu.png]]
#''Einstellungen löschen'': Setzt alle Einträge zurück. (Nur beim Erstellen von Einstellungen sichtbar.)
#"''Einstellungen löschen''": Setzt alle Einträge zurück. (Nur beim Erstellen von Einstellungen sichtbar.)
#''Einstellungen aus Datei laden'': Erlaubt das Öffnen einer gespeicherten Einstellungsdatei (*.csf). Deren Einstellungen werden in den Dialog übernommen. Bereits getätigte Eingaben ohne Konflikt bleiben dabei erhalten.
#"''Einstellungen aus Datei laden''": Erlaubt das Öffnen einer gespeicherten Einstellungsdatei (*.csf). Deren Einstellungen werden in den Dialog übernommen. Bereits getätigte Eingaben ohne Konflikt bleiben dabei erhalten.
#''Einstellungen aus Anhang laden'': Erlaubt das Öffnen eines Anhangs mit Verbindungseinstellungen aus einem geöffneten Projekt. Diese Einstellungen werden in den Dialog übernommen. Bereits getätigte Eingaben ohne Konflikt bleiben dabei erhalten.
#"''Einstellungen aus Anhang laden''": Erlaubt das Öffnen eines Anhangs mit Verbindungseinstellungen aus einem geöffneten Projekt. Diese Einstellungen werden in den Dialog übernommen. Bereits getätigte Eingaben ohne Konflikt bleiben dabei erhalten.
#''Einstellungen in Datei speichern'' und
#"''Einstellungen in Datei speichern''" sowie
#''Einstellungen in Anhang speichern'': Hier können Sie die eingetragenen Einstellungen in eine Datei (*.csf) speichern oder als Anhang in einem geöffneten Projekt anlegen. Beide Optionen besitzen ein verzögertes Menü, in dem Sie auswählen können, nur einen bestimmten Teil der Einstellungen zu speichern. (Nur beim Erstellen von Einstellungen sichtbar.)
#"''Einstellungen in Anhang speichern''": Hier können Sie die eingetragenen Einstellungen in eine Datei (*.csf) speichern oder als Anhang in einem geöffneten Projekt anlegen. Beide Optionen besitzen ein verzögertes Menü, in dem Sie auswählen können, nur einen bestimmten Teil der Einstellungen zu speichern. (Nur beim Erstellen von Einstellungen sichtbar.)
#''Erweiterte Ansicht'': Damit können Sie in die erweiterte Ansicht wechseln, um zusätzliche Einstellungen vorzunehmen. Lesen Sie dazu mehr am Ende des Kapitels. (Nur beim Erstellen von Einstellungen sichtbar.)
#"''Erweiterte Ansicht''": Damit können Sie in die erweiterte Ansicht wechseln, um zusätzliche Einstellungen vorzunehmen. Lesen Sie dazu mehr am Ende des Kapitels. (Nur beim Erstellen von Einstellungen sichtbar.)
#''Hilfe'': An der rechten Seite wird ein Hilfetext zum jeweiligen Schritt ein- oder ausgeblendet.
#"''Hilfe''": An der rechten Seite wird ein Hilfetext zum jeweiligen Schritt ein- oder ausgeblendet.




Zeile 555: Zeile 473:


===<span id="AppiumConnectionEditorStep1"><!-- Referenced by AppiumConnectionEditor in Mobile Testing Plugin --></span>Schritt 1: Gerät auswählen===
===<span id="AppiumConnectionEditorStep1"><!-- Referenced by AppiumConnectionEditor in Mobile Testing Plugin --></span>Schritt 1: Gerät auswählen===
Im oberen Teil erhalten Sie eine Liste aller angeschlossenen Appium-Geräte, die erkannt werden. Mit der Checkbox darunter können Sie die Geräte ausblenden, die zwar erkannt werden, aber nicht bereit sind. Falls Sie ein Gerät eintragen wollen, das nicht angeschlossen ist, können Sie dies mit dem entsprechenden Knopf ''Android-Gerät eingeben'' bzw. ''iOS-Gerät eingeben'' anlegen. Dazu müssen Sie jedoch die benötigten Eigenschaften Ihres Geräts kennen. Das Gerät wird dann in einer zweiten Geräteliste angelegt und kann dort ausgewählt werden. Wenn keine Liste mit angeschlossenen Elementen angezeigt werden kann, werden stattdessen verschiedene Meldungen angezeigt:
Im oberen Teil erhalten Sie eine Liste aller angeschlossenen Appium-Geräte, die erkannt werden. Mit der Checkbox darunter können Sie die Geräte ausblenden, die zwar erkannt werden, aber nicht bereit sind. Falls Sie ein Gerät eintragen wollen, das nicht angeschlossen ist, können Sie dies mit dem entsprechenden Knopf "''Android-Gerät eingeben''" bzw. "''iOS-Gerät eingeben''" anlegen. Dazu müssen Sie jedoch die benötigten Eigenschaften Ihres Geräts kennen. Das Gerät wird dann in einer zweiten Geräteliste angelegt und kann dort ausgewählt werden. Wenn keine Liste mit angeschlossenen Elementen angezeigt werden kann, werden stattdessen verschiedene Meldungen angezeigt:
*Keine Geräte gefunden
*Keine Geräte gefunden
*:expecco konnte kein Android-Geräte finden.
*:expecco konnte kein Android-Geräte finden.
Zeile 581: Zeile 499:
*:expecco startet den adb-Server. Dies kann einige Sekunden dauern.
*:expecco startet den adb-Server. Dies kann einige Sekunden dauern.


<!--Bei ''Automatisierung durch'' können Sie angeben, welche Automation-Engine verwendet werden soll. Lassen Sie die Einstellung auf ''(Default)'' wird die entsprechende Capability gar nicht gesetzt. Ansonsten stehen Appium, Selendroid und ab expecco 2.11 XCUITest zur Verfügung. In der Regel wird Selendroid nur für Android-Geräte vor Version 4.1 gebraucht.-->Mit ''Weiter'' gelangen Sie zum nächsten Schritt. Wenn Sie Einstellungen für den GUI-Browser eingeben, ist das erst möglich, wenn ein Gerät ausgewählt wurde.
<!--Bei "''Automatisierung durch''" können Sie angeben, welche Automation-Engine verwendet werden soll. Lassen Sie die Einstellung auf "''(Default)''" wird die entsprechende Capability gar nicht gesetzt. Ansonsten stehen Appium, Selendroid und ab expecco 2.11 XCUITest zur Verfügung. In der Regel wird Selendroid nur für Android-Geräte vor Version 4.1 gebraucht.-->Mit "''Weiter''" gelangen Sie zum nächsten Schritt. Wenn Sie Einstellungen für den GUI-Browser eingeben, ist das erst möglich, wenn ein Gerät ausgewählt wurde.


<span id="UnlockingDeveloperOptions">Anmerkung zum Freischalten</span>: In jüngeren Android Versionen werden die Entwickleroptionen zunächst nicht mehr in den Einstellungen angeboten. Falls ihr Android Gerät in den Einstellungen keinen Eintrag zu "''Entwickleroptionen''" zeigt, wählen Sie zunächst den Eintrag "''Telefoninfo''", dann "''SoftwareVersionsInfo''" und klicken darin mehrfach auf den Eintrag "''BuildVersion''".
<span id="UnlockingDeveloperOptions">Anmerkung zum Freischalten</span>: In jüngeren Android Versionen werden die Entwickleroptionen zunächst nicht mehr in den Einstellungen angeboten. Falls ihr Android Gerät in den Einstellungen keinen Eintrag zu "''Entwickleroptionen''" zeigt, wählen Sie zunächst den Eintrag "''Telefoninfo''", dann "''SoftwareVersionsInfo''" und klicken darin mehrfach auf den Eintrag "''BuildVersion''".

==== Chromedriver verwalten ====
Wenn die App, die Sie bedienen wollen, WebViews mit Chrome benutzt, benötigt Appium Zugriff auf einen passenden Chromedriver. Wenn Sie ein Gerät in der Liste auswählen, können Sie über "''Chromedriver verwalten''" sehen, welche Chrome-Versionen auf dem Gerät vorhanden sind und welche Chromedriver-Versionen durch expecco zur Verfügung stehen. Über diesen Dialog können Sie auch benötigte Chromedriver-Versionen herunterladen. Beachten Sie, dass auf dem Gerät verschiedene Chrome-Versionen vorhanden sein können, da die Apps in ihren WebViews nicht die gleiche Chrome-Version verwenden müssen, wie die als Browser installierte. Damit alles funktioniert, sollte der verwendete Chromedriver zur entsprechenden App passen. Sie können den Pfad zum Chromedriver auch am Ende des Verbindungsdialogs in den erstellten Capabilities ändern.

==== WLAN-Android-Geräte verbinden ====
Sie können sich auch über WLAN zu Android-Geräten verbinden. Dazu muss das Gerät zunächst mit adb verbunden werden, siehe [[Mobile_Testing_Plugin#Verbindung_.C3.BCber_WLAN|Verbindung über WLAN]]. Ab expecco 22.1 bietet der Verbindungseditor hierfür einen Dialog, der Ihnen dabei hilft und den Sie anstatt der Eingabeaufforderung verwenden können. Für Geräte mit Android 11 oder höher können Sie hier das Gerät mit dem Rechner zu koppeln, indem Sie die entsprechenden Parameter angeben und anschließend die Verbindung unter Angabe von IP-Adresse und Port aufbauen. Sie können damit auch für Geräte, die über USB verbunden sind, eine WLAN-Verbindung aufbauen. Wenn Sie das entsprechende Gerät in der Liste auswählen, werden die benötigten Angaben automatisch ausgelesen.

Beachten Sie, dass der Aufbau einer WLAN-Verbindung nicht Teil der Verbindungseinstellungen ist. Wenn Sie mit den erzeugten Einstellungen eine neue Verbindung aufbauen wollen, müssen Sie sicherstellen, dass das Gerät über mit der angegebenen IP-Adresse und dem Port mit adb verbunden ist, damit es gefunden wird. Die ADB-Verbindung geht verloren, wenn der ADB-Server oder das Gerät neu gestartet werden. Die Erlaubnis für das WLAN-Debugging wird beim Neustart des Geräts auch häufig zurückgesetzt und der Debug-Port kann dann wechseln. Daher muss eine WLAN-Verbindung immer manuell hergestellt werden.


===<span id="AppiumConnectionEditorStep2"><!-- Referenced by AppiumConnectionEditor in Mobile Testing Plugin --></span>Schritt 2: App auswählen===
===<span id="AppiumConnectionEditorStep2"><!-- Referenced by AppiumConnectionEditor in Mobile Testing Plugin --></span>Schritt 2: App auswählen===
Zeile 592: Zeile 518:
**:Wenn Sie im ersten Schritt ein angeschlossenes Gerät ausgewählt haben, werden die Pakete aller installierten Apps automatisch abgerufen und Sie können die Auswahl aus den Drop-down-Listen treffen. Die installierten Apps sind in Fremdpakete und Systempakete unterteilt; wählen Sie die entsprechende Paketliste aus. Diese Auswahl gehört nicht zu den Einstellungen, sondern stellt nur die entsprechende Paketliste zur Verfügung. Sie können den Filter benutzen, um die Liste weiter einzuschränken und dann das gewünschte Paket auswählen. Die Activities des ausgwählten Pakets werden ebenfalls automatisch abgerufen und als Drop-down-Liste zur Verfügung gestellt. Wählen Sie die Activity aus, die gestartet werden soll. In der Regel wird automatisch eine Activity aus der Liste eingetragen. Falls Sie kein verbundenes Gerät verwenden, müssen Sie die Eingabe des Pakets und der Activity von Hand vornehmen.
**:Wenn Sie im ersten Schritt ein angeschlossenes Gerät ausgewählt haben, werden die Pakete aller installierten Apps automatisch abgerufen und Sie können die Auswahl aus den Drop-down-Listen treffen. Die installierten Apps sind in Fremdpakete und Systempakete unterteilt; wählen Sie die entsprechende Paketliste aus. Diese Auswahl gehört nicht zu den Einstellungen, sondern stellt nur die entsprechende Paketliste zur Verfügung. Sie können den Filter benutzen, um die Liste weiter einzuschränken und dann das gewünschte Paket auswählen. Die Activities des ausgwählten Pakets werden ebenfalls automatisch abgerufen und als Drop-down-Liste zur Verfügung gestellt. Wählen Sie die Activity aus, die gestartet werden soll. In der Regel wird automatisch eine Activity aus der Liste eingetragen. Falls Sie kein verbundenes Gerät verwenden, müssen Sie die Eingabe des Pakets und der Activity von Hand vornehmen.
**''App installieren''
**''App installieren''
**:Geben Sie bei ''App'' den Pfad zu einer App an. Der Pfad muss für den Appium-Server gültig sein, der verwendet wird. Sie können auch eine URL angeben. Benutzen Sie einen lokalen Appium-Server, können Sie den rechten Butten benutzen, um zu der Installationsdatei der App zu navigieren und diesen Pfad einzutragen. Wenn möglich werden dabei auch das entsprechende Paket und die Activity in den Feldern darunter eingetragen. Diese Angabe ist aber nicht notwendig.
**:Geben Sie bei "''App''" den Pfad zu einer App an. Der Pfad muss für den Appium-Server gültig sein, der verwendet wird. Sie können auch eine URL angeben. Benutzen Sie einen lokalen Appium-Server, können Sie den rechten Butten benutzen, um zu der Installationsdatei der App zu navigieren und diesen Pfad einzutragen. Wenn möglich werden dabei auch das entsprechende Paket und die Activity in den Feldern darunter eingetragen. Diese Angabe ist aber nicht notwendig.


*'''iOS'''
*'''iOS'''
**''App auf dem Gerät''
**''App auf dem Gerät''
**:Geben Sie die Bundle-ID einer installierten App an. Sie können die IDs der installierten Apps bspw. mithilfe von Xcode erfahren. Starten Sie dazu Xcode und wählen Sie in der Menüleiste am oberen Bildschirmrand im Menü ''Window'' den Eintrag ''Devices''. Es öffnet sich ein Fenster, in dem eine Liste der angeschlossenen Geräte angezeigt wird. Wenn Sie Ihr Gerät auswählen, sehen Sie in der Übersicht eine Auflistung der von Ihnen installierten Apps.
**:Geben Sie die Bundle-ID einer installierten App an. Sie können die IDs der installierten Apps bspw. mithilfe von Xcode erfahren. Starten Sie dazu Xcode und wählen Sie in der Menüleiste am oberen Bildschirmrand im Menü "''Window''" den Eintrag "''Devices''". Es öffnet sich ein Fenster, in dem eine Liste der angeschlossenen Geräte angezeigt wird. Wenn Sie Ihr Gerät auswählen, sehen Sie in der Übersicht eine Auflistung der von Ihnen installierten Apps.
**''App installieren''
**''App installieren''
**:Geben Sie bei ''App'' den Pfad zu einer App an. Der Pfad muss für den Appium-Server gültig sein, der verwendet wird. Sie können auch eine URL angeben. Zu den Vorraussetzungen an Apps für reale Geräte lesen Sie bitte den Abschnitt [[#iOS-Ger.C3.A4t_und_App_vorbereiten|iOS-Geräte und App vorbereiten]].
**:Geben Sie bei "''App''" den Pfad zu einer App an. Der Pfad muss für den Appium-Server gültig sein, der verwendet wird. Sie können auch eine URL angeben. Zu den Vorraussetzungen an Apps für reale Geräte lesen Sie bitte den Abschnitt [[#iOS-Ger.C3.A4t_und_App_vorbereiten|iOS-Geräte und App vorbereiten]].


Im unteren Teil können Sie festlegen, ob die App beim Verbindungsabbau zurückgesetzt bzw. deinstalliert werden soll, und ob sie initial zurückgesetzt werden soll. Auch hier wird die entsprechende Capability gar nicht gesetzt, wenn Sie ''(Default)'' auswählen. Mit ''Weiter'' gelangen Sie zum nächsten Schritt.
Im unteren Teil können Sie festlegen, ob die App beim Verbindungsabbau zurückgesetzt bzw. deinstalliert werden soll, und ob sie initial zurückgesetzt werden soll. Auch hier wird die entsprechende Capability gar nicht gesetzt, wenn Sie "''(Default)''" auswählen. Mit "''Weiter''" gelangen Sie zum nächsten Schritt.


===<span id="AppiumConnectionEditorStep3"><!-- Referenced by AppiumConnectionEditor in Mobile Testing Plugin --></span>Schritt 3: Servereinstellungen===
===<span id="AppiumConnectionEditorStep3"><!-- Referenced by AppiumConnectionEditor in Mobile Testing Plugin --></span>Schritt 3: Servereinstellungen===
Im letzten Schritt befindet sich zunächst im oberen Teil eine Liste aller Capabilities, die sich aus Ihren Angaben der vorigen Schritte ergeben. Wenn Sie sich mit Appium auskennen und noch zusätzliche Capabilities setzen möchten, die der Verbindungseditor nicht abdeckt, können Sie durch Klicken auf ''Bearbeiten'' in die erweiterte Ansicht gelangen. Lesen Sie dazu den Abschnitt weiter unten.
Im letzten Schritt befindet sich zunächst im oberen Teil eine Liste aller Capabilities, die sich aus Ihren Angaben der vorigen Schritte ergeben. Wenn Sie sich mit Appium auskennen und noch zusätzliche Capabilities setzen möchten, die der Verbindungseditor nicht abdeckt, können Sie durch Klicken auf "''Bearbeiten''" in die erweiterte Ansicht gelangen. Lesen Sie dazu den Abschnitt weiter unten.


Wenn Sie Einstellungen für den GUI-Browser eingeben, können Sie den ''Verbindungsnamen'' eintragen, mit dem die Verbindung angezeigt wird. Dies ist auch der Name unter dem Bausteine diese Verbindung verwenden können, wenn sie aufgebaut ist. Wenn Sie das Feld frei lassen, wird ein Name generiert. Um die Adresse für den Appium-Server anzugeben, erhalten Sie die lokale Standard-Adresse und bereits verwendete Adressen zur Auswahl. Wenn Sie den Haken für ''Bei Bedarf starten'' setzen, versucht expecco beim Verbinden einen Appium-Server an der angegebenen Adresse zu starten, wenn dort noch keiner läuft. Dieser Server wird dann beim Beenden der Verbindung ebenfalls heruntergefahren. Dies funktioniert nur für lokale Adressen. Achten Sie darauf, nur Portnummern zu verwenden, die auch frei sind. Verwenden Sie am besten nur ungerade Portnummern ab dem Standardport 4723. Beim Verbindungsaufbau wird ebenfalls die folgende Portnummer verwendet, wodurch es sonst zu Konflikten kommen könnte.
Wenn Sie Einstellungen für den GUI-Browser eingeben, können Sie den ''Verbindungsnamen'' eintragen, mit dem die Verbindung angezeigt wird. Dies ist auch der Name unter dem Bausteine diese Verbindung verwenden können, wenn sie aufgebaut ist. Wenn Sie das Feld frei lassen, wird ein Name generiert. Wenn der Haken für "''Von expecco gesteuert''" gesetzt ist, wird expecco einen lokalen Appium-Server an einem freien Port starten, oder einen bereits gestarteten freien Server verwenden. Um einen eigenen Server zu verwenden, schalten Sie diese Funktion ab und geben Sie die entsprechende Adresse ein. Sie erhalten die lokale Standard-Adresse und bereits verwendete Adressen zur Auswahl.

In älteren expecco-Versionen ist der Haken mit "''Bei Bedarf starten''" beschriftet. In diesem Fall müssen Sie auch eine Adresse angeben, wenn expecco den Server starten soll. expecco versucht dann beim Verbinden einen Appium-Server an der angegebenen Adresse zu starten, wenn dort noch keiner läuft. Dieser Server wird dann beim Beenden der Verbindung ebenfalls heruntergefahren. Dies funktioniert nur für lokale Adressen. Achten Sie darauf, nur Portnummern zu verwenden, die auch frei sind. Verwenden Sie am besten nur ungerade Portnummern ab dem Standardport 4723. Beim Verbindungsaufbau wird ebenfalls die folgende Portnummer verwendet, wodurch es sonst zu Konflikten kommen könnte.


Je nachdem, wie Sie den Dialog geöffnet haben, gibt es nun verschiedene Schaltflächen um ihn abzuschließen. In jedem Fall haben Sie die Option zu speichern. Dabei öffnet sich ein Dialog, indem Sie entweder ein geöffnet Projekt auswählen können, um die Einstellungen dort als Anhang zu speichern, oder auswählen es in einer Datei zu speichern, die Sie anschließend angeben können. Durch das Speichern wird der Dialog nicht beendet, wodurch Sie anschließend noch eine andere Option auswählen könnten.
Je nachdem, wie Sie den Dialog geöffnet haben, gibt es nun verschiedene Schaltflächen um ihn abzuschließen. In jedem Fall haben Sie die Option zu speichern. Dabei öffnet sich ein Dialog, indem Sie entweder ein geöffnet Projekt auswählen können, um die Einstellungen dort als Anhang zu speichern, oder auswählen es in einer Datei zu speichern, die Sie anschließend angeben können. Durch das Speichern wird der Dialog nicht beendet, wodurch Sie anschließend noch eine andere Option auswählen könnten.


Wenn Sie den Editor zum Verbindungsaufbau geöffnet haben, können Sie abschließend auf ''Verbinden'' oder ''Server starten und verbinden'' klicken, je nachdem, ob der Haken für den Serverstart gesetzt ist. Für das Ändern oder Kopieren einer Verbindung im GUI-Brower heißt diese Option ''Übernehmen'', da in diesem Fall nur der Verbindungseintrag geändert bzw. neu angelegt wird, der Verbindungsaufbau aber nicht gestartet wird. Das können Sie bei Bedarf anschließend über das Kontextmenü tun. Falls Sie Capabilities einer bestehenden Verbindung geändert haben, fordert Sie anschließend ein Dialog auf zu entscheiden, ob diese Änderungen direkt übernommen werden sollen, indem die Verbindung abgebaut und mit den neuen Verbindungen aufgebaut wird, oder nicht. In diesem Fall werden die Änderungen erst wirksam, nachdem Sie die Verbindung neu aufbauen.
Wenn Sie den Editor zum Verbindungsaufbau geöffnet haben, können Sie abschließend auf "''Verbinden''" oder "''Server starten und verbinden''" klicken, je nachdem, ob der Haken für den Serverstart gesetzt ist. Für das Ändern oder Kopieren einer Verbindung im GUI-Brower heißt diese Option "''Übernehmen''", da in diesem Fall nur der Verbindungseintrag geändert bzw. neu angelegt wird, der Verbindungsaufbau aber nicht gestartet wird. Das können Sie bei Bedarf anschließend über das Kontextmenü tun. Falls Sie Capabilities einer bestehenden Verbindung geändert haben, fordert Sie anschließend ein Dialog auf zu entscheiden, ob diese Änderungen direkt übernommen werden sollen, indem die Verbindung abgebaut und mit den neuen Verbindungen aufgebaut wird, oder nicht. In diesem Fall werden die Änderungen erst wirksam, nachdem Sie die Verbindung neu aufbauen.


Zur Verwendung des Verbindungseditors lesen Sie auch den entsprechenden Abschnitt im jeweiligen Tutorial in Schritt 1 (Android: [[#Schritt_1:_Demo_ausf.C3.BChren|Demo ausführen]], iOS: [[#Schritt_1:_Demo_ausf.C3.BChren_2|Demo ausführen]]).
Zur Verwendung des Verbindungseditors lesen Sie auch den entsprechenden Abschnitt im jeweiligen Tutorial in Schritt 1 (Android: [[Mobile_Testing_Tutorial#Schritt_1:_Demo_ausf.C3.BChren|Demo ausführen]], iOS: [[Mobile_Testing_Tutorial#Schritt_1:_Demo_ausf.C3.BChren_.28iOS.29|Demo ausführen (iOS)]]).


===Erweiterte Ansicht===
===Erweiterte Ansicht===
Die erweiterte Ansicht des Verbindungseditors erhalten Sie entweder durch Klicken auf ''Bearbeiten'' im dritten Schritt oder jederzeit über den entsprechenden Menüeintrag, wenn Sie den Editor über das Plugin-Menü gestartet haben. In dieser Ansicht erhalten Sie eine Liste aller eingestellten Appium-Capabilities. Zu dieser können Sie weitere hinzufügen, Einträge ändern oder entfernen. Um eine Capability hinzuzufügen, wählen Sie diese aus der Drop-down-Liste des Eingabefelds aus. In dieser befinden sich alle bekannten Capabilities sortiert in die Kategorien ''Common'', ''Android'' und ''iOS''. Haben Sie eine Capability ausgewählt, wird ein kurzer Informationstext dazu angezeigt. Sie können in das Feld auch von Hand eine Capability eingeben. Klicken Sie dann auf ''Hinzufügen'', um die Capabilitiy in die Liste einzutragen. Dort können Sie in der rechten Spalte den Wert setzen. Um einen Entrag zu löschen, wählen Sie diesen aus und klicken Sie auf ''Entfernen''. Mit ''Zurück'' verlassen Sie die erweiterte Ansicht.
Die erweiterte Ansicht des Verbindungseditors erhalten Sie entweder durch Klicken auf "''Bearbeiten''" im dritten Schritt oder jederzeit über den entsprechenden Menüeintrag, wenn Sie den Editor über das Plugin-Menü gestartet haben. In dieser Ansicht erhalten Sie eine Liste aller eingestellten Appium-Capabilities. Zu dieser können Sie weitere hinzufügen, Einträge ändern oder entfernen. Um eine Capability hinzuzufügen, wählen Sie diese aus der Drop-down-Liste des Eingabefelds aus. In dieser befinden sich alle bekannten Capabilities sortiert in die Kategorien ''Common'', ''Android'' und ''iOS''. Haben Sie eine Capability ausgewählt, wird ein kurzer Informationstext dazu angezeigt. Sie können in das Feld auch von Hand eine Capability eingeben. Klicken Sie dann auf "''Hinzufügen''", um die Capabilitiy in die Liste einzutragen. Dort können Sie in der rechten Spalte den Wert setzen. Um einen Entrag zu löschen, wählen Sie diesen aus und klicken Sie auf "''Entfernen''". Mit "''Zurück''" verlassen Sie die erweiterte Ansicht.


[[Datei:MobileTestingErweiterteAnsicht.png]]
[[Datei:MobileTestingErweiterteAnsicht.png]]


== Laufende Appium-Server ==
== Laufende Appium-Server ==
Im Menü des Mobile Testing Plugins finden Sie den Eintrag ''Appium-Server...''. Mit diesem öffnen Sie ein Fenster mit einer Übersicht aller Appium-Server, die von expecco gestartet wurden und auf welchem Port diese laufen. Durch Klicken auf das Icon in der Spalte ''Log anzeigen'' können Sie das Logfile des entsprechenden Servers anschauen. Dieses wird beim Beenden des Servers wieder gelöscht. Mit den icons in der Spalte ''Beenden'' kann der entsprechenden Server beendet werden. Allerdings wird dies verhindert, wenn expecco über diesen Server noch eine offene Verbindung hat.
Im Menü des Mobile Testing Plugins finden Sie den Eintrag "''Appium-Server...''". Mit diesem öffnen Sie ein Fenster mit einer Übersicht aller Appium-Server, die von expecco gestartet wurden und auf welchem Port diese laufen. Durch Klicken auf das Icon in der Spalte "''Log anzeigen''" können Sie das Logfile des entsprechenden Servers anschauen. Dieses wird beim Beenden des Servers wieder gelöscht. Mit den Icons in der Spalte "''Beenden''" kann der entsprechenden Server beendet werden. Allerdings wird dies verhindert, wenn expecco über diesen Server noch eine offene Verbindung hat. Für welche Verbindung ein Server verwendet wird, sehen Sie in der rechten Spalte. Steht dort ''<idle>'' wird er zur Zeit nicht von expecco verwendet.

Außerdem können Sie hier auch Server starten. Verwenden Sie die Eingabefelder zur Konfiguration der Serveradresse. Sie können die Felder auch frei lassen, um die Standardwerte zu verwenden. Bitte beachten Sie, dass Server nur lokal gestartet werden können und der gewählte Port nicht belegt sein darf. Typischerweise werden die ungeraden Portnummern ab 4723 verwendet. Die folgende Portnummer wird beim Verbinden mit einem Gerät ebenfalls benötigt, wodurch es mit den geraden Nummern zu Konflikten kommen könnte.


[[Datei:MobileTestingAppiumServer.png]]
[[Datei:MobileTestingAppiumServer.png]]


Beim Öffnen des Editors um eine Appium-Verbindung aufzubauen, wird direkt ein Appium-Server gestartet, um den folgenden Verbindungsaufbau zu beschleunigen. Zu diesem Zweck hält sich expecco auch immer einen freien Appium-Server offen. Weitere laufende Server, die nicht mehr verwendet werden, werden jedoch nach einiger Zeit automatisch beendet.
Im Menü des Mobile Testing Plugins finden Sie auch den Eintrag ''Alle Verbindungen und Server beenden''. Dies ist für den Fall gedacht, dass Verbindungen oder Server auf andere Weise nicht beendet werden können. Beenden Sie Verbindungen wenn möglich immer im GUI-Browser oder durch Ausführen eines entsprechenden Bausteins. Server, die Sie in der Server-Übersicht gestartet haben, beenden Sie dort; Server, die mit einer Verbindung gestartet wurden, werden automatisch mit dieser beendet.

Im Menü des Mobile Testing Plugins finden Sie auch den Eintrag "''Alle Verbindungen und Server beenden''". Dies ist für den Fall gedacht, dass Verbindungen oder Server auf andere Weise nicht beendet werden können. Beenden Sie Verbindungen wenn möglich immer im GUI-Browser oder durch Ausführen eines entsprechenden Bausteins. Server, die Sie in der Server-Übersicht gestartet haben, beenden Sie dort; Server, die mit einer Verbindung gestartet wurden, werden automatisch mit dieser beendet.


Beachten Sie, dass in der Übersicht nur Server aufgelistet sind, die von expecco gestartet und verwaltet werden. Mögliche andere Appium-Server, die auf andere Art gestartet wurden, werden nicht erkannt.
Beachten Sie, dass in der Übersicht nur Server aufgelistet sind, die von expecco gestartet und verwaltet werden. Mögliche andere Appium-Server, die auf andere Art gestartet wurden, werden nicht erkannt.
Zeile 634: Zeile 562:
[[Datei:MobileTestingRecorder.png|caption|]]
[[Datei:MobileTestingRecorder.png|caption|]]


;Komponenten des Recorderfensters
====Komponenten des Recorderfensters====
#'''Aufnahme fortsetzen/pausieren''': Über das rechte Symbol können Sie die Aufnahme pausieren. Sie sehen dann ein großes Pause-Symbol in der Anzeige. Alle Aktionen, die Sie währenddessen im Recorder machen werden zwar ausgeführt, es werden aber keine Bausteine aufgezeichnet. Über das linke Symbol können Sie dann wieder in den normalen Aufnahmemodus wechseln.
#'''Aktualisieren''': Holt das aktuelle Bild und den aktuellen Elementbaum vom Gerät. Dies wird nötig, wenn das Gerät zur Ausführung einer Aktion länger braucht oder sich etwas ohne das Anstoßen durch den Recorder ändert.
#'''Aufnahme stoppen''': Stoppt die Aufnahme und schließt das Recorderfenster.
#'''Aktualisieren''': Holt das aktuelle Bild und den aktuellen Elementbaum vom Gerät. Dies wird nötig, wenn das Gerät zur Ausführung einer Aktion länger braucht oder sich etwas ohne das Anstoßen durch den Recorder ändert. Seit expecco 21.2 gibt es hier zusätzlich ein Untermenü, mit dem automatisches Aktualisieren angeschaltet werden kann, indem im Hintergrund auf Änderungen geprüft wird (siehe auch ''Automatisches Aktualisieren'' weiter unten).
#'''Follow-Mouse''': Das Element unter dem Mauszeiger wird im GUI-Browser ausgewählt.
#'''Follow-Mouse''': Das Element unter dem Mauszeiger wird im GUI-Browser ausgewählt.
#'''Element-Highlighting''': Das Elements unter dem Mauszeiger wird rot umrandet.
#'''Element-Highlighting''': Das Element unter dem Mauszeiger wird rot umrandet.
#'''Elemente einzeichnen''': Die Rahmen aller Elemente der Ansicht werden angezeigt.
#'''Elemente einzeichnen''': Die Rahmen aller Elemente der Ansicht werden angezeigt.
#'''Werkzeuge''': Auswahl, mit welchem Werkzeug aufgenommen werden soll. Die gewählte Aktion wird bei einem Klick auf die Anzeige ausgelöst. Dabei stehen folgende Aktionen zur Verfügung:
#'''Werkzeuge''': Auswahl, mit welchem Werkzeug aufgenommen werden soll. Die gewählte Aktion wird bei einem Klick auf die Anzeige ausgelöst. Dabei stehen folgende Aktionen zur Verfügung:
#*Aktionen auf Elemente:
#*Aktionen auf Elemente:
#**Klicken: Kurzer Klick auf das Element über dem der Cursor steht. Zur genaueren Bestimmung, welches Element verwendet wird, benutzen Sie die Funktion Follow-Mouse oder Highlight-Selected.
#**Klicken: Kurzer Klick auf das Element, über dem der Cursor steht. Zur genaueren Bestimmung, welches Element verwendet wird, benutzen Sie die Funktion Follow-Mouse oder Element-Highlighting.
#**Element antippen: Ähnlich zum Klicken, nur dass zusätzlich die Dauer des Klicks aufgezeichnet wird. Dadurch sind auch längere Klicks möglich.
#**Antippen mit Dauer (Element): Ähnlich zum Klicken, nur dass zusätzlich die Dauer des Klicks aufgezeichnet wird. Dadurch sind auch längere Klicks möglich.
#**Antippen mit Position (Element): Ähnlich zum Klicken, aber zusätzlich wird die Position innerhalb des Elements aufgenommen. Die Position kann relativ zur Größe des Elements aufgenommen werden oder, wenn Sie dabei Strg gedrückt halten, absolut zur linken oberen Ecke des Elements.
#**Text setzen: Ermöglicht das Setzen eines Textes in Eingabefelder.
#**Text setzen: Ermöglicht das Setzen eines Textes in Eingabefelder.
#**Text löschen: Löscht den Text eines Eingabefelds.
#**Text löschen: Löscht den Text eines Eingabefelds.
#*Aktionen auf das Gerät:
#*Aktionen auf das Gerät:
#**Antippen: Löst einen Klick auf die Bildschirmposition aus, bei dem auch die Dauer berücksichtigt wird.
#**Antippen (Bildschirm): Löst einen Klick auf die Bildschirmposition aus.
#**Antippen mit Dauer (Bildschirm): Löst einen Klick auf die Bildschirmposition aus, bei dem auch die Dauer berücksichtigt wird.
#**Wischen: Wischen in einer geraden Linie vom Punkt des Drückens des Mausknopfes bis zum Loslassen. Die Dauer wird ebenfalls aufgezeichnet.
#**Wischen: Wischen in einer geraden Linie vom Punkt des Drückens des Mausknopfes bis zum Loslassen. Die Dauer wird ebenfalls aufgezeichnet.
#:Beachten Sie bei diesen Aktionen, dass das Ergebnis sich auf verschiedenen Geräten unterscheiden kann, bspw. bei verschiedenen Bildschirmauflösungen.
#:Beachten Sie bei diesen Aktionen, dass das Ergebnis sich auf verschiedenen Geräten unterscheiden kann, bspw. bei verschiedenen Bildschirmauflösungen.
Zeile 652: Zeile 584:
#**Attribut prüfen: Vergleicht den Wert eines festgelegten Attributs des Elements mit einem vorgegebenen Wert. Das Ergebnis triggert den entsprechenden Ausgang.
#**Attribut prüfen: Vergleicht den Wert eines festgelegten Attributs des Elements mit einem vorgegebenen Wert. Das Ergebnis triggert den entsprechenden Ausgang.
#**Attribut zusichern: Vergleicht den Wert eines festgelegten Attributs des Elements mit einem vorgegebenen Wert. Bei Ungleichheit schlägt der Test fehl.
#**Attribut zusichern: Vergleicht den Wert eines festgelegten Attributs des Elements mit einem vorgegebenen Wert. Bei Ungleichheit schlägt der Test fehl.
#**Attribut holen: Liest den aktuellen Wert eines Attributs aus.
#*Auto
#*Automatisch
#:Ist das Auto-Werkzeug ausgewählt, können alle Aktionen durch spezifische Eingabeweise benutzt werden: ''Klicken'', ''Element antippen'' und ''Wischen'' funktionieren weiterhin durch Klicken, wobei sie anhand der Dauer und der Bewegung des Cursors unterschieden werden. Um ein ''Antippen'' auszulösen, halten Sie beim Klicken Strg gedrückt. Die übrigen Aktionen erhalten Sie durch einen Rechtsklick auf das Element in einem Kontextmenü.
#:Ist das Auto-Werkzeug ausgewählt, können alle Aktionen durch spezifische Eingabeweise benutzt werden: ''Klicken'', ''Element antippen'' und ''Wischen'' funktionieren weiterhin durch Klicken, wobei sie anhand der Dauer und der Bewegung des Cursors unterschieden werden. Um ein ''Antippen'' auszulösen, halten Sie beim Klicken Strg gedrückt. Die übrigen Aktionen erhalten Sie durch einen Rechtsklick auf das Element in einem Kontextmenü.
#'''Kontext-Aktionen''': Hier können Sie Aktionen aufzeichnen, die Kontexte betreffen:
#*Zu Kontext wechseln: Bietet eine Liste der aktuell verfügbaren Kontexte und Sie können auswählen, zu welchem gewechselt werden soll.
#*Aktuellen Kontext holen: Holt den Handle des aktuellen Kontexts.
#*Kontext-Handles holen: Holt eine Liste aller aktuell verfügbaren Kontext-Handles.
#'''Softkeys''': Nur unter Android. Simuliert das Drücken der Knöpfe Zurück, Home, Fensterliste und Power.
#'''Softkeys''': Nur unter Android. Simuliert das Drücken der Knöpfe Zurück, Home, Fensterliste und Power.
#'''Home-Button''': Nur unter iOS ab expecco 2.11. Ermöglicht das Drücken des Home-Buttons. Funktioniert nur, wenn AssistiveTouch aktiviert ist und sich das Menü in der Mitte des oberen Bildschirmrands befindet.
#'''Home-Button''': Nur unter iOS ab expecco 2.11. Ermöglicht das Drücken des Home-Buttons. Vor expecco 19.2 funktioniert es nur, wenn AssistiveTouch aktiviert ist und sich das Menü in der Mitte des oberen Bildschirmrands befindet. Ab expecco 19.2 verwendet die Funktion kein AssistiveTouch mehr.
#'''Hilfe''': Öffnet diese Online-Dokumentation auf der allgemeinen Seite zu [[GuiBrowser_Recorder|GUI-Browser Recordern]].
#'''Anzeige''': Zeigt einen Screenshot des Geräts. Aktionen werden mit der Maus je nach Werkzeug ausgelöst. Wenn eine neue Aktion eingegeben werden kann, hat das Fenster einen grünen Rahmen, sonst ist er rot.
#'''Anzeige''': Zeigt einen Screenshot des Geräts. Aktionen werden mit der Maus je nach Werkzeug ausgelöst. Wenn eine neue Aktion eingegeben werden kann, hat das Fenster einen grünen Rahmen, sonst ist er rot.
#'''Fenster an Bild anpassen''': Ändert die Größe des Fensters so, dass der Screenshot vollständig angezeigt werden kann.
#'''Fenster an Bild anpassen''': Ändert die Größe des Fensters so, dass der Screenshot vollständig angezeigt werden kann.
#'''Bild an Fenster anpassen''': Skaliert den Screenshot auf eine Größe, mit der er die volle Größe des Fensters ausnutzt.
#'''Bild an Fenster anpassen''': Skaliert den Screenshot auf eine Größe, mit der er die volle Größe des Fensters ausnutzt.
#'''Ansicht anpassen''': Öffnet einen Dialog um die Ansicht anzupassen, falls expecco das Bild nicht richtig darstellt. Sie können die Skalierung anpassen oder das Bild um 90° drehen.
#'''Ausrichtung anpassen''': Korrigiert das Bild, falls dieses auf dem Kopf stehen sollte. Über den Pfeil rechts daneben kann das Bild auch um 90° gedreht werden, falls dies einmal nötig sein sollte. Die Ausrichtung des Bildes ist für die Funktion des Recorders unerheblich, dieser arbeitet ausschließlich auf den erhaltenen Elementen.
#'''Ausrichtung anpassen''': Korrigiert das Bild, falls dieses auf dem Kopf stehen sollte. Über den Pfeil rechts daneben kann das Bild auch um 90° gedreht werden, falls dies einmal nötig sein sollte. Ab expecco 19.1 finden Sie diese Funktion in ''Ansicht anpassen''. Die Ausrichtung des Bildes ist für die Funktion des Recorders unerheblich, dieser arbeitet ausschließlich auf den erhaltenen Elementen.
#'''Skalierung''': Ändert die Skalierung des Screenshots. Kann auch über den Schieberegler rechts daneben angepasst werden.
#'''Kontrollleuchte''': Zeigt den Zustand des Recorders an
#'''Skalierung''': Ändert die Skalierung des Screenshots.
#'''Meldungen''': Zeigt den Pfad des ausgewählten Elements oder andere Meldungen an. Es gibt ein Kontextmenü, um eine Liste der vorigen Meldungen zu sehen.
#:''grün'': Der Recorder ist bereit
#:''rot'': Der Recorder ist blockiert, weil die Anzeige und die Elementliste aktualisiert werden
#:''grau'': Der Recorder kann nicht mehr verwendet werden, da die Verbindung zum Gerät verloren gegangen ist


;Verwendung
====Verwendung====
Mit jedem Klick im Fenster wird eine Aktion ausgelöst und im Arbeitsbereich des GUI-Browsers aufgezeichnet. Dort können Sie das Aufgenommene abspielen, editieren oder daraus einen neuen Baustein erstellen. Zur Verwendung des Recorders lesen Sie auch Schritt 2 im Tutorial ([[#Schritt_2:_Einen_Baustein_mit_dem_Recorder_erstellen|Android]] bzw. [[#Schritt_2:_Einen_Baustein_mit_dem_Recorder_erstellen_2|iOS]]).
Mit jedem Klick im Fenster wird eine Aktion ausgelöst und im Arbeitsbereich des GUI-Browsers aufgezeichnet. Dort können Sie das Aufgenommene abspielen, editieren oder daraus einen neuen Baustein erstellen.
Aktionen zum Auslösen von Sofkeys finden Sie direkt in der Menüleiste (s.o.). Um Aktionen auf Elemente aufzuzeichen, ändern Sie entweder die Auswahl des Werkzeugs in der Menüleiste (s.o.) und klicken dann auf das Element oder wählen Sie die entsprechende Aktion aus dem Kontextmenü durch einen Rechtsklick auf das entsprechende Element aus. Für Texteingabe ist es zudem möglich, den Cursor über dem Element zu platzieren und den Text einzugeben. Dabei öffnet sich der Eingabedialog für diese Aktion.
Zur Verwendung des Recorders lesen Sie auch Schritt 2 im Tutorial ([[Mobile_Testing_Tutorial#Schritt_2:_Einen_Baustein_mit_dem_Recorder_erstellen|Android]] bzw. [[Mobile_Testing_Tutorial#Schritt_2:_Einen_Baustein_mit_dem_Recorder_erstellen_.28iOS.29|iOS]]).

====Elemente verbergen====
Ab expecco 21.2 gibt es im Kontextmenü außerdem die Möglichkeit, das ausgewählte Element im Recorder zu verbergen. Das bedeutet, dass dieses Element fortan nicht mehr ausgewählt werden kann. Diese Funktion eignet sich dazu, Elemente zu ignorieren, die im Vordergrund liegen, um auf Elemente darunter zugreifen zu können. Um diesen Zustand wieder rückgängig zu machen, müssen Sie das entsprechende Element im Baum des GUI-Browsers finden, dort gibt es im Kontextmenü ebenfalls einen solchen Eintrag.

====Automatisches Aktualisieren====
Der Recorder zeigt kein Livebild des Geräts sondern nur eine Momentaufnahme. Um mit der Anzeige auf dem Gerät übereinzustimmen muss daher nach Änderungen aktualisiert werden. Der Recorder aktualisiert sich automatisch, nachdem er eine Aktion ausgeführt hat. Ab expecco 20.2 sind zudem weitere automatische Updates möglich. Sie können Sie im Menü ''Fenster'' aktivieren.

Zum einen kann kurze Zeit nach dem Ausführen einer Aktion überprüft werden, ob es noch Änderungen nach der ersten Aktualisierung gegeben hat, damit in diesem Fall eine zweite Aktualisierung stattfinden kann. Dies soll das Problem beheben, dass der Recorder nach einer Aktion nicht aktuell ist, weil die Aktualisierung zu früh stattgefunden hat.

Zum anderen kann eine periodische Aktualisierung eingeschaltet werden. Nach einem einstellbaren Interval wird der Recorder automatisch aktualisiert, sollte es Änderungen geben. Dadurch ist die Anzeige im Recorder immer weitgehend aktuell, allerdings entsteht dadurch auch ein Mehraufwand was die Kommunikation mit dem Gerät betrifft.


== AVD Manager und SDK Manager ==
== AVD Manager und SDK Manager ==
AVD Manager und SDK Manager sind beides Anwendungen von Android. Im Menü des Mobile Testing Plugins bietet expecco die Möglichkeit, diese zu starten. Ansonsten finden Sie diese Programme bei Ihrer Android-Installation. Mit dem AVD Manager können Sie AVDs, also Konfigurationen für Emulatoren, erstellen, bearbeiten und starten. Mit dem SDK Manager erhalten Sie einen Überblick über Ihre Android-Installation und können diese bei Bedarf erweitern.
AVD Manager und SDK Manager sind beides Anwendungen von Android. Im Menü des Mobile Testing Plugins bietet expecco die Möglichkeit, diese zu starten. Ansonsten finden Sie diese Programme bei Ihrer Android-Installation. Mit dem AVD Manager können Sie AVDs, also Konfigurationen für Emulatoren, erstellen, bearbeiten und starten. Mit dem SDK Manager erhalten Sie einen Überblick über Ihre Android-Installation und können diese bei Bedarf erweitern.

= Hybrid-Apps und WebViews =

'''!!! WICHTIGER HINWEIS - Wenn Sie Probleme haben, auf den Webview zu wechseln, geben Sie bitte unter den Android Einstellungen - Apps -Standard Apps "Chrome" als "Browser-App" an !!!
'''

Hybrid-Apps enthalten neben den Plattform-nativen Elementen weitere Elemente, die in einen WebView eingebunden sind. Diese Elemente können ebenfalls bedient werden, allerdings muss zuvor in den entsprechenden Kontext gewechselt werden. Mit dem Baustein "''Get Current Context''" erhalten Sie den aktuellen Kontext. Zu Beginn ist dies "''NATIVE_APP''", also der Kontext der nativen Elemente. Mit dem Baustein "''Get Context Handles''" bekommen Sie eine Collection aller vorhandenen Kontexte. Gibt es einen WebView-Kontext, so heißt dieser "''WEBVIEW_1''" oder "''WEBVIEW_<package>''" mit dem Paket des WebViews. Es kann auch mehrere WebView-Kontexte geben. Zu jedem WebView-Kontext gibt es im nativen Kontext ein entsprechendes WebView-Element. Mit dem Baustein "''Switch to Context''" können Sie in einen solchen Kontext wechseln und haben fortan nur Zugriff auf die Elemente in diesem Kontext.

Im GUI-Browser werden zum einen oben im Baum die vorhandenen Kontexte angezeigt, zum anderen wird der Baum eines Kontexts unterhalb des entsprechenden WebView-Elements eingefügt.


= XPath anpassen mithilfe des GUI-Browsers =
= XPath anpassen mithilfe des GUI-Browsers =
Bausteine, die auf einem Gerät fehlerfrei funktionieren, tun dies auf anderen Geräten möglicherweise nicht. Auch können kleine Änderungen der App dazu führen, dass ein Baustein nicht mehr den gewünschten Effekt hat. Man sollte einen Baustein daher so robust formulieren, dass er für eine Vielzahl von Geräten verwendet werden kann und kleine Anpassungen an der App verkraftet. Dazu muss man das grundlegende Funktionsprinzip der Adressierung verstehen. Dies wird im Folgenden am Beispiel der App aus dem Tutorial erläutert.
Bausteine, die auf einem Gerät fehlerfrei funktionieren, tun dies auf anderen Geräten möglicherweise nicht. Auch können kleine Änderungen der App dazu führen, dass ein Baustein nicht mehr den gewünschten Effekt hat. Man sollte einen Baustein daher so robust formulieren, dass er für eine Vielzahl von Geräten verwendet werden kann und kleine Anpassungen an der App verkraftet. Dazu muss man das grundlegende Funktionsprinzip der Adressierung verstehen. Dies wird im Folgenden am Beispiel der App aus dem Tutorial erläutert.


Die Ansicht der App setzt sich aus einzelnen Elementen zusammen. Dazu gehören die Schaltflächen ''GTIN-13 (EAN-13)'' und ''Verify'', das Eingabefeld der Zahl ''4006381333986'' und das Ergebnisfeld, in dem OK erscheint, wie auch alle anderen auf der Anzeige sichtbaren Dinge. Diese sichtbaren Elemente sind in unsichtbare Strukturelemente eingebettet. Alle Elemente zusammen sind in einer zusammenhängenden Hierarchie, dem Elementbaum, organisiert.
Die Ansicht der App setzt sich aus einzelnen Elementen zusammen. Dazu gehören die Schaltflächen "''GTIN-13 (EAN-13)''" und "''Verify''", das Eingabefeld der Zahl "''4006381333986''" und das Ergebnisfeld, in dem OK erscheint, wie auch alle anderen auf der Anzeige sichtbaren Dinge. Diese sichtbaren Elemente sind in unsichtbare Strukturelemente eingebettet. Alle Elemente zusammen sind in einer zusammenhängenden Hierarchie, dem Elementbaum, organisiert.


[[Datei:MobileTestingGUIBrowser.png | frame | left | Abb. 1: Funktionen des GUI-Browsers]]
[[Datei:MobileTestingGUIBrowser.png | frame | left | Abb. 1: Funktionen des GUI-Browsers]]
Zeile 689: Zeile 646:
Man könnte natürlich für jedes Gerät einen eigenen Testfall schreiben. Das brächte aber unverhältnismäßigen Aufwand bei Testerstellung und -wartung mit sich. Das Problem lässt sich auch anders lösen, da ein jeweiliges Element nicht nur durch genau einen XPath beschrieben wird. Vielmehr erlaubt der Standard mithilfe verschiedener Merkmale unterschiedliche Beschreibungen für ein und dasselbe Element zu formulieren. Das Ziel ist daher, einen Pfad zu finden, der auf allen für den Test verwendeten Geräten funktioniert und überall eindeutig zum richtigen Element führt.
Man könnte natürlich für jedes Gerät einen eigenen Testfall schreiben. Das brächte aber unverhältnismäßigen Aufwand bei Testerstellung und -wartung mit sich. Das Problem lässt sich auch anders lösen, da ein jeweiliges Element nicht nur durch genau einen XPath beschrieben wird. Vielmehr erlaubt der Standard mithilfe verschiedener Merkmale unterschiedliche Beschreibungen für ein und dasselbe Element zu formulieren. Das Ziel ist daher, einen Pfad zu finden, der auf allen für den Test verwendeten Geräten funktioniert und überall eindeutig zum richtigen Element führt.


Im Beispiel besteht die Verbindung zur Android-App aus dem Tutorial und der Eintrag des GTIN-13-Buttons ist ausgewählt (5). Dessen automatisch generierter XPath (2) kann beispielsweise so aussehen:
Im Beispiel besteht die Verbindung zur Android-App aus dem Tutorial und der Eintrag des "''GTIN-13''"-Buttons ist ausgewählt (5). Dessen automatisch generierter XPath (2) kann beispielsweise so aussehen:


<blockquote>//hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[@resource id='android:id/content']/android.widget.RelativeLayout/android.widget.Button[@resource-id='de.exept.expeccomobiledemo:id/gtin_13']</blockquote>
<blockquote>//hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[@resource id='android:id/content']/android.widget.RelativeLayout/android.widget.Button[@resource-id='de.exept.expeccomobiledemo:id/gtin_13']</blockquote>
Zeile 711: Zeile 668:
geschrieben werden.
geschrieben werden.


Sie können den Pfad entsprechend im GUI-Browser ändern und durch ''Pfad überprüfen'' (6) feststellen, ob er weiterhin auf das ausgewählte Element zeigt, was expecco mit ''Verify Path: OK'' (7) bestätigen sollte. Der erste, sehr viel längere Pfad, beschreibt den gesamten Weg vom obersten Element des Baumes bis hin zum gesuchten Button. Der zweite Pfad hingegen wählt mit * zunächst sämtliche Elemente des Baumes und schränkt die Auswahl dann auf genau die Elemente ein, die ein ''text''- bzw. ''name''-Attribut mit dem Wert ''GTIN-13 (EAN-13)'' besitzen, in unserem Fall also genau der eine Button, den wir suchen.
Sie können den Pfad entsprechend im GUI-Browser ändern und durch "''Pfad überprüfen''" (6) feststellen, ob er weiterhin auf das ausgewählte Element zeigt, was expecco mit "''Verify Path: OK''" (7) bestätigen sollte. Der erste, sehr viel längere Pfad, beschreibt den gesamten Weg vom obersten Element des Baumes bis hin zum gesuchten Button. Der zweite Pfad hingegen wählt mit "*" zunächst sämtliche Elemente des Baumes und schränkt die Auswahl dann auf genau die Elemente ein, die ein ''text''- bzw. ''name''-Attribut mit dem Wert "''GTIN-13 (EAN-13)''" besitzen, in unserem Fall also genau der eine Button, den wir suchen.


Im folgenden werden Android-ähnliche Pfade zur Veranschaulichung verwendet. Die Elemente in iOS-Apps heißen zwar anders, wodurch andere Pfade entstehen; das Prinzip ist jedoch das gleiche.
Im folgenden werden Android-ähnliche Pfade zur Veranschaulichung verwendet. Die Elemente in iOS-Apps heißen zwar anders, wodurch andere Pfade entstehen; das Prinzip ist jedoch das gleiche.
Zeile 723: Zeile 680:
<blockquote>//hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.TextView</blockquote>
<blockquote>//hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.TextView</blockquote>


Die Elemente sind mit Schrägstrichen voneinander getrennt. Es fällt auf, dass der Name des ersten Elements nicht mit dem im Baum übereinstimmt. Das oberste Element in der Hierarchie heißt immer ''hierarchy'' (für iOS wäre es ''AppiumAUT''), expecco zeigt im Baum stattdessen den Namen der Verbindung an, damit man mehrere Verbindungen voneinander unterscheiden kann. Die weiteren Elemente tragen jeweils das Präfix ''android.widget.'', das im Baum zur besseren Übersicht nicht angezeigt wird. Bei IOS gibt es kein Präfix, das durch einen Punkt abgetrennt wäre, expecco 2.11 blendet aber entsprechend ''XCUIElementType'' am Anfang aus. Mit jedem Schrägstrich führt der Pfad über eine Eltern-Kind-Beziehung in eine tiefere Hierarchie-Ebene, d. h. ''FrameLayout'' ist ein Kindelement von ''hierarchy'', ''LinearLayout'' ist ein Kind von ''FrameLayout'' usw. Die in eckigen Klammern geschriebenen Wörter dienen nur als Orientierungshilfe im Baum. Sie gehören nicht zum Typ.
Die Elemente sind mit Schrägstrichen voneinander getrennt. Es fällt auf, dass der Name des ersten Elements nicht mit dem im Baum übereinstimmt. Das oberste Element in der Hierarchie heißt immer "''hierarchy''" (für iOS wäre es "''AppiumAUT''"), expecco zeigt im Baum stattdessen den Namen der Verbindung an, damit man mehrere Verbindungen voneinander unterscheiden kann. Die weiteren Elemente tragen jeweils das Präfix "''android.widget.''", das im Baum zur besseren Übersicht nicht angezeigt wird. Bei IOS gibt es kein Präfix, das durch einen Punkt abgetrennt wäre, expecco 2.11 blendet aber entsprechend "''XCUIElementType''" am Anfang aus. Mit jedem Schrägstrich führt der Pfad über eine Eltern-Kind-Beziehung in eine tiefere Hierarchie-Ebene, d. h. "''FrameLayout''" ist ein Kindelement von "''hierarchy''", "''LinearLayout''" ist ein Kind von "''FrameLayout''" usw. Die in eckigen Klammern geschriebenen Wörter dienen nur als Orientierungshilfe im Baum. Sie gehören nicht zum Typ.


Ein Pfad muss nicht beim Element ''hierarchy'' beginnen. Man kann den Pfad beginnend mit einem beliebigen Element des Baumes bilden. Man kann also verkürzt auch
Ein Pfad muss nicht beim Element "''hierarchy''" beginnen. Man kann den Pfad beginnend mit einem beliebigen Element des Baumes bilden. Man kann also verkürzt auch


<blockquote>//android.widget.TextView</blockquote>
<blockquote>//android.widget.TextView</blockquote>


schreiben. Der Pfad führt zum selben ''TextView''-Element, da es nur ein Element dieses Typs gibt. Anders verhält es sich bei dem Pfad
schreiben. Der Pfad führt zum selben "''TextView''"-Element, da es nur ein Element dieses Typs gibt. Anders verhält es sich bei dem Pfad


<blockquote>//android.widget.Button.</blockquote>
<blockquote>//android.widget.Button.</blockquote>


Da es zwei Elemente vom Typ ''Button'' gibt, passt dieser Pfad auf zwei Elemente, nämlich den Button, der mit "''An''" markiert ist, und den ''Button'', der mit "''Aus''" markiert ist. Es würde an dieser Stelle aber auch nicht helfen den langen Pfad von ''hierarchy'' aus beginnend anzugeben. Um einen mehrdeutigen Pfad weiter zu differenzieren, kann man explizit ein Element aus einer Menge wählen, indem man den numerischen Index in eckigen Klammern dahinter schreibt. Der Pfad aus dem obigen Beispiel lässt sich damit so anpassen, dass er eindeutig auf den ''Button'' mit der Markierung "''Aus''" weist:
Da es zwei Elemente vom Typ "''Button''" gibt, passt dieser Pfad auf zwei Elemente, nämlich den Button, der mit "''An''" markiert ist, und den ''Button'', der mit "''Aus''" markiert ist. Es würde an dieser Stelle aber auch nicht helfen den langen Pfad von ''hierarchy'' aus beginnend anzugeben. Um einen mehrdeutigen Pfad weiter zu differenzieren, kann man explizit ein Element aus einer Menge wählen, indem man den numerischen Index in eckigen Klammern dahinter schreibt. Der Pfad aus dem obigen Beispiel lässt sich damit so anpassen, dass er eindeutig auf den ''Button'' mit der Markierung "''Aus''" weist:


<blockquote>//android.widget.Button[1].</blockquote>
<blockquote>//android.widget.Button[1].</blockquote>
Zeile 741: Zeile 698:
Dieser Ansatz, einen expliziten Index zu verwenden, hat zwei Nachteile: Zum einen lässt sich an dem Pfad nur schwer ablesen welches Element gemeint ist, zum andern ist der Pfad sehr empfindlich schon gegenüber kleinsten Änderungen, wie zum Beispiel dem Vertauschen der beiden ''Button''-Elemente oder dem Einfügen eines weiteren ''Button''-Elements in der App.
Dieser Ansatz, einen expliziten Index zu verwenden, hat zwei Nachteile: Zum einen lässt sich an dem Pfad nur schwer ablesen welches Element gemeint ist, zum andern ist der Pfad sehr empfindlich schon gegenüber kleinsten Änderungen, wie zum Beispiel dem Vertauschen der beiden ''Button''-Elemente oder dem Einfügen eines weiteren ''Button''-Elements in der App.


Es wäre daher wünschenswert, das gemeinte Element über eine ihm charakteristische Eigenschaft wie einen Attributwert, zu adressieren. Für Android-Apps eignet sich hierfür häufig das Attribut ''resource-id''. Im Idealfall muss bei der Entwicklung der App darauf geachtet werden, dass jedes Element eine eindeutige Id erhält. Die ''resource-id'' hat den großen Vorteil, dass sie unabhängig vom Text des Elements oder der Spracheinstellung des Geräts ist. Für iOS-Apps kann entsprechend das Attribut ''name'' verwendet werden, wenn es von der App sinnvoll gesetzt wird. Der XPath-Standard erlaubt solche Auswahlbedingungen zu einem Element anzugeben. Angenommen, der ''Button'' mit der Markierung "''Aus''" hat die Eigenschaft ''resource-id'' mit dem Wert ''off'' und der ''Button'' mit der Markierung "''An''" hat als ''resource-id'' den Wert ''on'', dann kann man als eindeutigen Pfad für den "Aus"-''Button''
Es wäre daher wünschenswert, das gemeinte Element über eine ihm charakteristische Eigenschaft wie einen Attributwert, zu adressieren. Für Android-Apps eignet sich hierfür häufig das Attribut "''resource-id''". Im Idealfall muss bei der Entwicklung der App darauf geachtet werden, dass jedes Element eine eindeutige Id erhält. Die ''resource-id'' hat den großen Vorteil, dass sie unabhängig vom Text des Elements oder der Spracheinstellung des Geräts ist. Für iOS-Apps kann entsprechend das Attribut "''name''" verwendet werden, wenn es von der App sinnvoll gesetzt wird. Der XPath-Standard erlaubt solche Auswahlbedingungen zu einem Element anzugeben. Angenommen, der ''Button'' mit der Markierung "''Aus''" hat die Eigenschaft ''resource-id'' mit dem Wert ''off'' und der ''Button'' mit der Markierung "''An''" hat als ''resource-id'' den Wert ''on'', dann kann man als eindeutigen Pfad für den "Aus"-''Button''


<blockquote>//android.widget.Button[@resource-id='off']</blockquote>
<blockquote>//android.widget.Button[@resource-id='off']</blockquote>


formulieren. Wie an dem Beispiel zu sehen werden solche Bedingungen wie ein Index in eckigen Klammern an den Elementtyp angehängt. Der Name eines Attributes wird mit einem @ eingeleitet und der Wert mit einem = in Anführungszeichen angehängt. Ist der Attributwert global eindeutig, kann man den vorausgehenden Pfad sogar durch den globalen Platzhalter * ersetzen, der auf jedes Element passt. Das obige Beispiel mit dem GTIN-13-''Button'' war ein solcher Fall.
formulieren. Wie an dem Beispiel zu sehen werden solche Bedingungen wie ein Index in eckigen Klammern an den Elementtyp angehängt. Der Name eines Attributes wird mit einem "@" eingeleitet und der Wert mit einem "=" in Anführungszeichen angehängt. Ist der Attributwert global eindeutig, kann man den vorausgehenden Pfad sogar durch den globalen Platzhalter * ersetzen, der auf jedes Element passt. Das obige Beispiel mit dem GTIN-13-''Button'' war ein solcher Fall.


[[Datei:MobileTestingBaum2.png | frame | Abb. 3: Elementbaum einer fiktiven App mit Erweiterungen]]
[[Datei:MobileTestingBaum2.png | frame | Abb. 3: Elementbaum einer fiktiven App mit Erweiterungen]]
Zeile 759: Zeile 716:
Eine universelle Strategie zum Erstellen guter XPaths gibt es nicht, da sie von den Testanforderungen abhängt. In der Regel ist es sinnvoll, den XPath kurz und dennoch eindeutig zu halten. Häufig lassen sich Elemente über Eigenschaften identifizieren wie beispielsweise ihren Text. Will man aber gerade den Text eines Elements auslesen, kann dieser natürlich nicht im Pfad verwendet werden, da er vorher nicht bekannt ist. Ebenso wird der Text variieren, wenn die App mit verschiedenen Sprachen gestartet wird.
Eine universelle Strategie zum Erstellen guter XPaths gibt es nicht, da sie von den Testanforderungen abhängt. In der Regel ist es sinnvoll, den XPath kurz und dennoch eindeutig zu halten. Häufig lassen sich Elemente über Eigenschaften identifizieren wie beispielsweise ihren Text. Will man aber gerade den Text eines Elements auslesen, kann dieser natürlich nicht im Pfad verwendet werden, da er vorher nicht bekannt ist. Ebenso wird der Text variieren, wenn die App mit verschiedenen Sprachen gestartet wird.


Jeder Baustein, der auf einem Element arbeitet, hat einen Eingangspin für den XPath. Im GUI-Browser finden Sie in der Mitte oben eine Liste von Bausteinen mit Aktionen, die Sie auf das ausgewählte Element anwenden können. Suchen Sie den Baustein ''Click'' (8) im Ordner Elements und wählen Sie ihn aus (Abb. 1). Er wird im rechten Teil unter ''Test'' eingefügt, der Pin für den XPath ist mit dem automatisch generierten Pfad des Elements vorbelegt (9). Sie können den Baustein hier auch ausführen. Die Ansicht wechselt dann auf ''Lauf''. Ändert sich durch die Aktion der Zustand Ihrer App, müssen Sie den Baum anschließend aktualisieren (10).
Jeder Baustein, der auf einem Element arbeitet, hat einen Eingangspin für den XPath. Im GUI-Browser finden Sie in der Mitte oben eine Liste von Bausteinen mit Aktionen, die Sie auf das ausgewählte Element anwenden können. Suchen Sie den Baustein ''Click'' (8) im Ordner Elements und wählen Sie ihn aus (Abb. 1). Er wird im rechten Teil unter "''Test''" eingefügt, der Pin für den XPath ist mit dem automatisch generierten Pfad des Elements vorbelegt (9). Sie können den Baustein hier auch ausführen. Die Ansicht wechselt dann auf "''Lauf''". Ändert sich durch die Aktion der Zustand Ihrer App, müssen Sie den Baum anschließend aktualisieren (10).


Wenn Sie in der unteren Liste eine Eigenschaft auswählen, wechselt die Anzeige der Bausteine zu ''Eigenschaften'', wo Sie die eigenschaftsbezogenen Bausteine finden. Wie bei den Aktionen können Sie auch hier einen Baustein auswählen, der dann rechts in Test mit dem Pfad des Elements und der ausgewählten Eigenschaft eingetragen wird, sodass Sie ihn direkt ausführen können.
Wenn Sie in der unteren Liste eine Eigenschaft auswählen, wechselt die Anzeige der Bausteine zu "''Eigenschaften''", wo Sie die eigenschaftsbezogenen Bausteine finden. Wie bei den Aktionen können Sie auch hier einen Baustein auswählen, der dann rechts in Test mit dem Pfad des Elements und der ausgewählten Eigenschaft eingetragen wird, sodass Sie ihn direkt ausführen können.

== Weitere Locator-Strategien ==
Appium bietet neben XPath noch weitere Strategien zur Adressierung von Elementen an. Einige davon stehen Ihnen '''ab Version 20.1''' ebenfalls mit expecco zur Verfügung. Diese sind nicht ganz so mächtig wie XPath, dafür aber häufig schneller bei der Auflösung auf dem Gerät. Insbesondere bei der Verwendung mit iPhones, wo die Hierarchie bei jeder XPath-Auflösung erst aufgebaut werden muss, bieten alternative Strategien einen Vorteil für die Laufzeit.

XPath ist weiterhin der Standard, das heißt alle Locator ohne besondere Angabe werden als XPath interpretiert. Um eine der anderen Strategien zu verwenden, schreiben Sie diese mit einem Gleichzeichen vor den gewünschten Locator. Diese Technik können Sie sowohl an den Blöcken verwenden, als auch im GUI-Browser testen.

{|
|-
| style="vertical-align:top" | AccessibilityId || style="padding-bottom:0.5em" | Verwendet den Wert des Elements, der dazu dient, die App barrierefrei zu machen. Für iOS ist das das Attribut '''Accessibility-id''', für Android das Attribut '''content-descr'''. ''Beispiel: accessibilityId=Löschen''
|-
| style="vertical-align:top" | className || style="padding-bottom:0.5em" | Verwendet den Namen der Klasse des Elements. ''Beispiel: className=android.widget.FrameLayout''
|-
| style="vertical-align:top" | id || style="padding-bottom:0.5em" | Verwendet die Kennung des Elements. Für iOS ist das das Attribut '''name''', für Android das Attribut '''resource-id'''. ''Beispiel: id=android:id/text1''
|-
| style="vertical-align:top" | iOSClassChain<sup>1</sup> || style="padding-bottom:0.5em" | Verwendet die Hierarchie der Elemente ähnlich wie bei XPath. Eine Erklärung zum Aufbau finden Sie [https://github.com/facebookarchive/WebDriverAgent/wiki/Class-Chain-Queries-Construction-Rules hier]. ''Beispiel: iOSClassChain=XCUIElementTypeWindow/XCUIElementTypeButton[`label == "Ok"`]''
|-
| style="vertical-align:top; padding-right:1em" | iOSNsPredicateString<sup>1</sup> || style="padding-bottom:0.5em" | Verwendet einfache Kriterien, wie Attribute, die auch kombiniert werden können. ''Beispiel: iOSNsPredicateString=type == 'XCUIElementTypeButton' AND name == 'Weiter'''
|-
| style="vertical-align:top" | name<sup>1</sup> || style="padding-bottom:0.5em" | Verwendet den Namen des Elements. ''Beispiel: name=Bestätigen''
|-
|}

:<sup>1</sup> ''nur für iOS''

Um eine direkte Beschleunigung mit iOS zu erzielen, ohne dass Sie Ihre bisherigen Pfade anpassen müssen, wandelt expecco zudem Pfade, die nur aus einem Element mit Klasse und name-Attribut bestehen, zur Laufzeit automatisch in einen entsprechenden Locator der Strategie iOSNsPredicateString um. Wenn Sie einen Pfad explizit als XPath markieren, wird diese Anpassung nicht vorgenommen.


=<span id="troubleshooting"><!-- Referenced by error dialog on connection error --></span>Probleme und Lösungen=
=<span id="troubleshooting"><!-- Referenced by error dialog on connection error --></span>Probleme und Lösungen=
== Locator sind versionsabhängig oder variabel ==
==Allgemeine Hinweise==
Dann sollten Sie die Locator (xPath) entweder in einer Variablen halten oder ein Locator-Mapping in einem Screenplay Anhang definieren. Es ist auch möglich, lediglich Teile des Locators (z.B. Locator-Pfad eines Elternelements oder Attributwert) in einer Variable zu halten und im Freezevalue des Locator-Pins mit "''$(varName)''" einzufügen.
*Wenn ein über USB angeschlossenes Android-Gerät nicht im Verbindungsdialog auftaucht, versuchen Sie, den USB-Verbindungstyp zu ändern. In der Regel sollten MTP oder PTP funktionieren. Siehe auch [[#Android-Ger.C3.A4t_vorbereiten|Android-Gerät vorbereiten]].
*In manchen Fällen erscheint beim Verbinden eines iOS-Geräts über USB der Hinweis, das verwendete Kabel sei nicht zertifiziert. In diesem Fall hilft es nur, das entsprechende Kabel auszutauschen.
*Beachten Sie, dass im [[#Recorder|Recorder]] auch Elemente berücksichtigt werden, die Sie auf dem Bildschirm nicht sehen. Schalten Sie daher das Element-Highlighting an oder nutzen Sie Follow-Mouse-Funktion und den Elementbaum im GUI-Browser, um festzustellen, ob das richtige Element verwendet wird.
*Stellen Sie sicher, dass beim Verbindungsaufbau mit einem iOS-Gerät keine Alerts geöffnet sind. Der Aufbau schlägt sonst fehl, da die App nicht in den Vordergrund kommen kann. Siehe auch [[#iOS-Ger.C3.A4t_und_App_vorbereiten|iOS-Gerät und App vorbereiten]].
*Um einen iOS-Simulator zu verwenden müssen Sie keine udid angeben. In Xcode erhalten Sie die Namen der verfügbaren Simulatoren. Starten Sie dazu Xcode und wählen Sie in der Menüleiste am oberen Bildschirmrand im Menü ''Window'' den Eintrag ''Devices''. Hier sind neben den angeschlossenen Geräten auch die verfügbaren Simulatoren aufgelistet. Beachten Sie dabei, dass auf Simulatoren keine ''.ipa''-Dateien sondern nur ''.app''-Dateien installiert werden können.
*Bei Android-Geräten, die Softkeys automatisch ein- und ausblenden, kann es vorkommen, dass der Recorder im unteren Bereich Elemente abschneidet, die durch die Softkeys verdeckt würden, auch wenn sie zu diesem Zeitpunkt gar nicht angezeigt werden. In diesem Fall hift es, die Softkeys so einzustellen, dass sie permanent angezeigt werden.


==Unsichtbare UI-Elemente==
==Verbindungsaufbau schlägt fehl==
Beachten Sie, dass im [[#Recorder|Recorder]] auch Elemente berücksichtigt werden, die Sie auf dem Bildschirm nicht sehen. Schalten Sie daher das Element-Highlighting an oder nutzen Sie die Follow-Mouse-Funktion und den Elementbaum im GUI-Browser, um festzustellen, ob das richtige Element verwendet wird. Es kann vorkommen, dass unsichtbare Elemente vor anderen Elementen liegen und diese verdecken, so dass die gewünschten Elemente im Recorder nicht ausgewählt werden können. Lesen Sie dazu den Abschnitt [[#Elemente_verbergen|Elemente verbergen]].
Schlägt der Verbindungsaufbau mit dem Appium-Server fehl, erhalten Sie in expecco eine Fehlermeldung ähnlicher der unten abgebildeten.


==iOS: Kabel nicht zertifiziert==
Falls der Fehler nicht durch eine der unten gelisteten Ursachen bedingt ist,
In manchen Fällen erscheint beim Verbinden eines iOS-Geräts über USB der Hinweis, das verwendete Kabel sei nicht zertifiziert. In diesem Fall hilft es nur, das entsprechende Kabel auszutauschen.
kann es sein, daß die auf dem Gerät befindliche UI-Automator Anwendung nicht mehr richtig funktioniert
==iOS: Alerts beim Verbindungsaufbau==
(Anm. dies tritt auf einigen Geräten sporadisch auf - die Ursache dafür ist uns z.Z. noch nicht bekannt).
Stellen Sie sicher, dass beim Verbindungsaufbau mit einem iOS-Gerät keine Alerts geöffnet sind. Der Aufbau schlägt sonst fehl, da die App nicht in den Vordergrund kommen kann. Siehe auch [[#iOS-Ger.C3.A4t_und_App_vorbereiten|iOS-Gerät und App vorbereiten]].
Hier hilft es, die UI-Automator Anwendungen im Mobilgerät zu deinstallieren.
Expecco wird diese dann mit dem nächsten Verbindungsaufbau selbst wieder installieren.


==iOS: .ipa installieren nicht möglich==
Zur Deinstallation navigieren Sie auf dem Gerät zu: "''Einstellungen''" - "''Anwendungen''",
Beachten Sie, dass auf iOS-Simulatoren keine ''.ipa''-Dateien sondern nur ''.app''-Dateien installiert werden können.
und suchen in der Liste nach folgenden Einträgen:
Appium Settings
io.appium.uiautomator2.server
io.appium.uiautomator2.server.test
klicken Sie auf die jeweilige Anwendung und dann auf "''Deinstallieren''".


==iOS: Erster Verbindungsaufbau funktioniert nicht==
Falls die nicht hilft, kann eventuell der Appium-Server log weiter helfen (diesen erreichen Sie über das "''Erweiterungen''" - "''Mobile Testing''" Menü von expecco)
Wenn auf Ihrem Mac noch kein signierter Build des WebDriverAgents liegt, muss dieser beim ersten Verbindungsaufbau erst erzeugt werden. Das kann in der Regel etwas länger als eine Minute dauern. Standardmäßig verwendet Appium aber einen Timeout von 60000&nbsp;ms um zu warten bis der WebDriverAgent auf dem Gerät startet, so dass der Aufbau in diesen Fällen abgebrochen wird. Sie können den Timeout mit der Capability ''wdaLaunchTimeout'' setzen, z.B. auf ''120000''.

Außerdem müssen die Einstellungen für die Signierung passen. Am zuverlässigsten funktioniert das nach unserer Erfahrung, wenn man im Xcode-Projekt des WebDriverAgents auf automatische Signierung stellt und das Team setzt. Siehe dazu die Erklärung im Abschnitt [[#WebDriverAgent-Signierung|WebDriverAgent-Signierung]]. In diesem Fall sollten Sie die Capabilities ''xcodeConfigFile'' bzw. ''xcodeOrgId'' und ''xcodeSigningId'' '''nicht''' verwenden, da es sonst zu Konflikten kommen kann. Achtung: Wenn Sie eine Team-ID in den Mobile-Testing-Einstellungen gesetzt haben, setzt expecco diese automatisch als ''xcodeOrgId''!

Achten Sie beim ersten Verbindungsaufbau außerdem auf Ihr Gerät, da Sie dort möglicherweise der Installation per Passwort zustimmen müssen. Auf dem Mac kann die Eingabe des Passworts zur Freigabe des Schlüsselbunds für die Signierung nötig werden, häufig auch mehrmals.

==Android: Gerät nicht im Verbindungsdialog==
Wenn ein über USB angeschlossenes Android-Gerät nicht im Verbindungsdialog auftaucht, versuchen Sie, den USB-Verbindungstyp zu ändern. In der Regel sollten MTP oder PTP funktionieren. Prüfen Sie nochmal, ob "USB Debugging" in den Entwicklereinstellungen des Geräts aktiviert ist (diese Einstellungen sind bei manchen Geräten zunächst unsichtbar, und müssen durch einen Trick zugänglich gemacht werden). Siehe auch [[#Android-Ger.C3.A4t_vorbereiten|Android-Gerät vorbereiten]].

==Android: Abgeschnittene Elemente unten==
Bei Android-Geräten, die die Steuerungsleiste bzw. Softkeys automatisch ein- und ausblenden, kann es vorkommen, dass der Recorder im unteren Bereich Elemente abschneidet, die durch die Softkeys verdeckt würden, auch wenn sie zu diesem Zeitpunkt gar nicht angezeigt werden. In diesem Fall hift es, die Softkeys so einzustellen, dass sie in einer permanenten Leiste angezeigt werden.

Bei neueren Android-Versionen gibt es eine solche Einstellung in der Regel nicht. Auch wenn die Steuerelemente permanent eingeblendet sind, liegen sie auf keiner extra Leiste, sondern vor dem Inhalt der App. Es gibt dann im unteren Teil einen Bereich, der nicht bedient werden kann, weil er nicht zum aktiven Bereich der App gezählt wird, weshalb die Elemente von Appium abgeschnitten werden. Dieser Bereich kann auch größer sein als von den Steuerungselementen beansprucht. Bekannt ist dies für Samsung-Geräte mit Android 11. Da die Information über die Größe des App-Bereichs bereits auf Android-Ebene so geliefert wird, können wir hierfür keine Lösung anbieten, sondern können nur hoffen, dass das Problem vom Hersteller behoben wird. Sie können versuchen, ob Sie mit der Einstellung von Gestensteuerung bessere Ergebnisse bekommen, allerdings gibt es hier das gleiche Problem.

==<span id="waitForIdleTimeout"><!-- Referenced by expecco--></span> Android: Test hängt beim Suchen eines Elements==
Der Baustein ''Find Element by XPath'' und alle Element-Bausteine warten bis ein Element zum angegebenen Pfad auftaucht. Den Timeout dafür kann man entweder am Baustein direkt oder in den Umgebungsvariablen ändern. Wenn das Element aber bereits da sein sollte und es dennoch sehr lange dauert, bis der Test weitergeht, kann das am UIAutomator/UIAutomator2 liegen. Dieser wartet, bis die App in den Idle-Zustand geht, bevor er überhaupt nach Elementen sucht. Dies kann länger dauern, wenn die App z.B. im Hintergrund noch Animationen abspielt oder andere Aktionen ausführt. Auch das Holen des Page-Sources z.B. beim Aktualisieren im GUI-Browser oder im Recorder kann dadurch länger dauern. Standardmäßig gibt es hierfür einen Timeout von 10 Sekunden, nach dem nicht weiter auf den Idle-Zustand gewartet wird. Dieser Timeout lässt sich durch eine Einstellung in Appium anpassen (waitForIdleTimeout). Falls Sie einen anderen Wert für diesen Timeout setzen möchten, ist dies ab expecco 21.2 möglich, indem Sie vor dem Test den Smalltalk-Code <code>AppiumTestRunner::TestRunConnection waitForIdleTimeout:2000</code> ausführen. Der Timeout wird in Millisekunden angegeben, das Beispiel setzt ihn also auf 2 Sekunden.

==<span id="startChromedriverTimeout/>Android: Aktualisieren des Trees oder Wechseln zum Webview-Kontext braucht zu lange==
Speziell mit älteren Geräten kann es vorkommen, dass neuere Chromedriver nicht initialisiert werden können. Das führt dann dazu, dass nicht in den Webview-Kontext gewechselt werden kann. Dies wird von Appium allerdings nur über einen Timeout festgestellt, der standardmäßig bei 4 Minuten liegt. Da expecco auch beim Aufbauen des Trees im GUI-Browser versucht in den Webview-Kontext zu wechseln, kann das zu sehr langen Ladezeiten führen. Da es in Appium keine Möglichkeit gibt, diesen Timeout herunter zu setzen, haben wir die Version, die wir im MobileTestingSupplement bereitstellen, um eine entsprechende Capability erweitert. Ab der Version 1.13.1.0 des [[#Windows|MobileTestingSupplements]] kann mit ''chromedriverStartTimeout'' der Timeout in Millisekunden gesetzt werden. Der Wechsel funktioniert dadurch zwar trotzdem nicht, aber expecco braucht dann nicht mehr so lange beim Aktualisieren des Trees und der Baustein zum Wechseln des Kontextes schlägt schneller fehl. Der Verbindungsdialog fügt diese Capability ab expecco 22.1 automatisch hinzu.

==Keine Aktion bei Klick==
Der Baustein zum Klicken auf ein Element ist erfolgreich, aber auf dem Gerät wurde keine Aktion ausgeführt.
:Dies kann vorkommen, wenn das Element von einem anderen Element verdeckt ist und ein Klick auf das Element deshalb nicht möglich ist. In diesem Fall wird von Appium kein Fehler geworfen, sondern es passiert einfach nichts. Wenn Sie dennoch einen Klick an der Position des Elements machen möchten, auch wenn es verdeckt ist, benutzen Sie stattdessen den Baustein ''Tap'' und übergeben Sie diesem die Position des Elements (''Get Location''). Wenn Sie stattdessen vor einem Klick prüfen möchten, ob das Element zu diesem Zeitpunkt verdeckt ist, versuchen Sie, ob Ihnen die Eigenschaften ''Is Displayed'' oder ''Is Enabled'' weiterhelfen.

==Kein Update nach Aktion==
Über den Recorder wurde eine Aktion ausgeführt, für die auch ein Baustein aufgezeichnet wurde, der Recorder zeigt aber immer noch das alte Bild.
:Der Recorder zeigt kein Livebild des Geräts, sondern immer nur eine Momentaufnahme. Nachdem eine Aktion ausgeführt wurde, aktualisiert sich der Recorder automatisch. Es kann aber vorkommen, dass das Bild schon aktualisiert wurde, bevor die Auswirkungen der Aktion auf dem Gerät vollständig abgeschlossen sind. In diesem Fall sollten Sie den Recorder von Hand aktualisieren über das Symbol mit den blauen Pfeilen. Ab expecco 20.2 können Sie für diesen Fall auch automatisches Aktualisieren einstellen. Siehe auch Beschreibung zum [[#Recorder|Recorder]].

=="clickable" Attribut falsch==
Ein Element hat im "''clickable''" Attribut/Property den Wert "''false''", ist aber dennoch anklickbar.
:Das "''clickable''" Attribute muss explizit vom App-Programmierer gesetzt werden, und hat tatsächlich keine Relevanz für das tatsächliche Verhalten der App. Sie sollten dieses Attribut i.A. in Ihren Tests nicht beachten.<br>Leider existieren viele Apps, bei denen der Programmierer hier "lazy" war.

==Verbindungsaufbau schlägt fehl==
Schlägt der Verbindungsaufbau mit dem Appium-Server fehl, erhalten Sie in expecco eine Fehlermeldung ähnlicher der unten abgebildeten.


[[Datei:MobileTestingVerbindungsfehler.png]]
[[Datei:MobileTestingVerbindungsfehler.png]]
Zeile 800: Zeile 806:
::Entweder ist das Gerät nicht richtig angeschlossen oder die udid stimmt nicht.
::Entweder ist das Gerät nicht richtig angeschlossen oder die udid stimmt nicht.
:*''Unable to launch WebDriverAgent because of xcodebuild failure: xcodebuild failed with code 65''
:*''Unable to launch WebDriverAgent because of xcodebuild failure: xcodebuild failed with code 65''
::Dieser Fehler kann verschiedene Ursachen haben. Entweder konnte tatsächlich der WebDriverAgent nicht gebaut werden, weil die Signierungseinstellungen falsch sind oder das passende Provisioning Profile fehlt. Lesen Sie dazu den Abschnitt zur Verbereitung unter [[#expecco_2.11|Mac OS mit expecco 2.11]]. Es kann auch sein, dass der WebDriverAgent auf dem Gerät nicht gestartet werden kann, weil sich beispielsweise ein Alert im Vordergrund befindet oder Sie dem Entwickler nicht vertraut haben.
::Dieser Fehler kann verschiedene Ursachen haben. Entweder konnte tatsächlich der WebDriverAgent nicht gebaut werden, weil die Signierungseinstellungen falsch sind oder das passende Provisioning Profile fehlt. Lesen Sie dazu den Abschnitt zur [[#Signierung|Signierung]]. Es kann auch sein, dass der WebDriverAgent auf dem Gerät nicht gestartet werden kann, weil sich beispielsweise ein Alert im Vordergrund befindet oder Sie dem Entwickler nicht vertraut haben.
:*''Could not install app: 'Command 'ios-deploy [...] exited with code 253'''
:*''Could not install app: 'Command 'ios-deploy [...] exited with code 253'''
::Die angegebene App kann nicht auf dem iOS-Gerät installiert werden, weil es nicht im Provisioning Profile der App eingetragen ist.
::Die angegebene App kann nicht auf dem iOS-Gerät installiert werden, weil es nicht im Provisioning Profile der App eingetragen ist.
Zeile 808: Zeile 814:
::Die angegebene ''apk''-Datei ist vermutlich kaputt.
::Die angegebene ''apk''-Datei ist vermutlich kaputt.
:*''Could not find app apk at [...]''
:*''Could not find app apk at [...]''
::Der Pfad zur App ist falsch. Stellen Sie sicher, dass sich die ''apk''-Datei m angegebenen Pfad befindet.
::Der Pfad zur App ist falsch. Stellen Sie sicher, dass sich die ''apk''-Datei am angegebenen Pfad befindet.


Falls der Fehler nicht durch eine der oben gelisteten Ursachen bedingt ist, kann es sein, dass die auf dem Gerät befindlichen Automation-Anwendungen nicht mehr richtig funktionieren. Hier hilft es, diese vom Mobilgerät zu deinstallieren. Beim nächsten Verbindungsaufbau werden sie dann automatisch neu installiert.

*Für iOS-Geräte ist das der WebDriverAgent, den Sie einfach vom Home-Screen deinstallieren können. Dies behebt in der Regel Probleme durch den Wechsel des verwendeten Macs oder der Xcode-Version.

*Für Android-Geräte ist es der UIAutomator2; hier tritt auf einigen Geräten sporadisch ein Problem auf, die Ursache dafür ist uns z.Z. noch nicht bekannt. Zur Deinstallation navigieren Sie auf dem Gerät zu "''Einstellungen''" > "''Anwendungen''"<sup>*</sup> und suchen in der Liste nach folgenden Einträgen:
Appium Settings
io.appium.uiautomator2.server
io.appium.uiautomator2.server.test
:Klicken Sie auf die jeweilige Anwendung und dann auf "''Deinstallieren''".
<sup>*</sup>''Der entsprechende Eintrag heißt auf manchen Geräten möglicherweise etwas anders.''


Falls dies nicht hilft, kann eventuell die Ausgabe des Appium-Servers weiterhelfen. Für einen von expecco gestarteten Server finden Sie das Log in der Liste der [[#Laufende_Appium-Server|laufenden Appium-Server]].

==Ich habe keinen Mac==
Vielleicht hilft Ihnen diese Webseite weiter: [https://www.howtogeek.com/289594/how-to-install-macos-sierra-in-virtualbox-on-windows-10 https://www.howtogeek.com/289594/how-to-install-macos-sierra-in-virtualbox-on-windows-10]

Aktuelle Version vom 22. Dezember 2023, 10:37 Uhr

Deutsche Version | English Version

Inhaltsverzeichnis

Einleitung[Bearbeiten]

Mit dem Mobile Testing Plugin können Anwendungen auf Android- und iOS-Geräten getestet werden. Dabei ist es egal, ob reale mobile Endgeräte oder emulierte Geräte verwendet werden. Das Plugin kann (und wird üblicherweise) zusammen mit dem GUI-Browser verwendet werden, der das Erstellen von Tests unterstützt. Zudem ist damit das Aufzeichnen von Testabläufen möglich.

Zur Verbindung mit den Geräten wird Appium verwendet. Appium ist ein freies Open-Source-Framework zum Testen und Automatisieren von mobilen Anwendungen.

Zur Einarbeitung in das Mobile Plugin empfehlen wir das Tutorial zu bearbeiten. Dieses führt anhand eines Beispiels Schritt für Schritt durch die Erstellung eines Testfalls und erklärt die nötigen Grundlagen.

Installation und Aufbau[Bearbeiten]

Zur Verwendung des Mobile Testing Plugins müssen Sie expecco inkl. des Plugins Mobile Testing installiert haben und Sie benötigen die entsprechenden Lizenzen. expecco kommuniziert mit den Mobilgeräten über einen Appium-Server, der entweder auf demselben Rechner wie expecco läuft, oder auf einem zweiten Rechner. Dieser muss für expecco erreichbar sein.

Installationsübersicht[Bearbeiten]

Rechner, auf dem expecco läuft:

  • Java JDK Version 8, 9, 10, 11 oder neuer 1)

Rechner, an dem Android-Geräte angeschlossen sind:

  • Appium-Server, diesen können Sie über das Mobile Testing Supplement installieren (s.u.), von dem wir regelmäßig einen neue Version zur Verfügung stellen
  • Android SDK, dieses erhalten Sie ebenfalls mit dem Mobile Testing Supplement
  • Java JDK Version 8, 9, 10, 11 oder neuer 1)

Rechner, an dem iOS-Geräte angeschlossen sind2):

  • Appium-Server, diesen können Sie über das Mobile Testing Supplement für Mac OS installieren (s.u.), von dem wir regelmäßig einen neue Version zur Verfügung stellen
  • Xcode in einer Version, die die verwendete iOS-Version unterstützt, erhältlich über den Apple App Store
  • Java JDK Version 8, 9, 10, 11 oder neuer 1)
  • Apple-Entwickler-Zertifikat mit zugehörigem privaten Schlüssel (zum Signieren des WebDriverAgents)
  • Provisioning Profile mit den verwendeten Mobilgeräten


Je nach Aufbau können die oben genannten Rechner auch das selbe Gerät sein. expecco kann sich sowohl über das Netzwerk mit einem entfernten Appium-Server und dort angeschlossenen Mobilgeräten verbinden, als auch lokal selbst einen Appium-Server starten und diesen mit lokalen Mobilgeräten verwenden. Einige Funktionen von expecco, die die Erstellung von Testfällen erleichtern, sind jedoch nur verfügbar, wenn die Mobilgeräte am selben Rechner angeschlossen sind, auf dem auch expecco läuft. Ein möglicher Aufbau kann daher wie in folgender Abbildung aussehen:

MobileTestingAufbau.png

Im Folgenden wird die Installation von Appium und anderer nötiger Programme für Windows und Mac OS erklärt.

1): Zum Zeitpunkt der Erstellung dieses Dokuments wurden Versionen bis 11 auf Funktion verifiziert. Neuere Versionen sollten - sofern nicht grundlegende Änderungen von Oracle vorgenommen wurden, ebenfalls funktionieren.

2): Beachten Sie, dass aufgrund der Voraussetzungen (keine Anbindung an nicht-Apple Geräte verfügbar) iOS-Geräte nur von einem Mac aus angesteuert werden können. Sie benötigen also einen Mac als "Vermittler" (siehe auch unten: "Ich habe keinen Mac")

Windows[Bearbeiten]

Am einfachsten installieren Sie alles mit unserem Mobile Testing Supplement1. In neueren Versionen ist allerdings aufgrund geänderter Lizenzbedingungen seitens Oracle kein JDK mehr enthalten, sodass sie dieses zusätzlich installieren müssen. Sie können natürlich Appium auch direkt installieren, um die Version zu verwenden, die Sie möchten. Um dann einen Appium-Server mit expecco starten zu können, muss allerdings eine entsprechende Batchdatei vorhanden sein und in den Einstellungen angegeben werden. Verbindungen können aber auch zu anderen laufenden Appium-Servern aufgebaut werden.

Im Vergleich zum Vorgänger aktualisierte Chromedriver Versionen.
Gleiche Versionen wie der Vorgänger, aber der Installer erlaubt nun, Appium zum Autostart hinzuzufügen.
Appium 1.22.3*
Node 14.17.5
adb 1.0.41 aus platform-tools 33.0.2
* Wir haben Appium um die Capability startChromedriverTimeout erweitert, um schneller einen Timeout zu bekommen, wenn der Chromedriver nicht gestartet werden kann. (siehe Probleme und Lösungen)
Enthält die Appium-Version 1.22.0, Node ist weiterhin in der Version 12.13.1.
Nur kleine Änderungen im Vergleich zur vorigen Version.
Im Vergleich zur vorigen Version wurde Appium auf die Version 1.16.0-rc.1 aktualisiert und node 12 verwendet.
Dieses installiert Appium in der Version 1.12.0 und enthält nun zusätzlich build-tools der Version 28.0.3 im android-sdk. Ansonsten ist es gleich wie die vorige Version.
Dieses installiert Appium in der Version 1.8.1. Außerdem bietet das Supplement auch an, Android Debug Bridge und Google USB Driver (adb-setup-1.4.3) zu installieren. Damit sind Treiber für ein breites Spektrum an Android-Geräten abgedeckt, sodass Sie nicht für jedes Gerät einen eigenen Treiber suchen und installieren müssen. Ein JDK ist (aufgrund geänderter Lizenzbedingungen seitens Oracle) nicht mehr enthalten, dieses müssen Sie selbst herunterladen, z.B. von Oracle.
Dieses installiert ein Java JDK der Version 8, android-sdk und Appium in der Version 1.6.4. Außerdem bietet das Supplement auch einen universellen adb-Treiber (ClockworkMod) an. Dieser vereint Treiber für ein breites Spektrum an Android-Geräten, sodass Sie nicht für jedes Gerät einen eigenen Treiber suchen und installieren müssen.
Dieses installiert ein Java JDK der Version 8, android-sdk und Appium in der Version 1.4.16. Während der Installation wird die grafische Oberfläche von Appium gestartet, dieses Fenster können Sie sofort wieder schließen. Außerdem bietet das Supplement auch einen universellen adb-Treiber (ClockworkMod) an. Dieser vereint Treiber für ein breites Spektrum an Android-Geräten, sodass Sie nicht für jedes Gerät einen eigenen Treiber suchen und installieren müssen.

Wenn expecco Mobilgeräte verwenden soll, die an einem anderen Rechner angeschlossen sind, müssen Sie dort einen Appium-Server starten. Dies können Sie mit der Datei appium_standalone.cmd tun. Der Server wird dann mit dem Standard-Port 4723 gestartet. Falls Sie eine andere Portnummer verwenden wollen, starten Sie den Server mit

appium_standalone.cmd -p <portnummer>

Der Server ist bereit, sobald die Zeile

Appium REST http interface listener started on 0.0.0.0:4723

angezeigt wird, wobei Sie am Ende die verwendete Portnummer ablesen können.

Beim ersten Starten von Appium – sowohl im Standalone als auch gestartet von expecco – kann es vorkommen, dass die Windows-Firewall den Node-Server blockiert. Lassen Sie den Zugriff zu, sonst kann Appium nicht gestartet werden.

1) Sie können natürlich auch die Command Line Tools (adb, sdkmanager, avdmanager etc.) einer vorhandenen Android Studio Version verwenden, sowie Appium separat installieren. Da sich diese Tools regelmäßig ändern, und es in der Vergangenheit zu Inkompatibilitäten und Fehlern nach Releasewechseln kam, empfehlen wir zu Beginn, das mitgelieferte Paket zu verwenden. Dies ist möglicherweise nicht das aktuellste, wurde aber auf Lauffähigkeit getestet.

Falls das Android Mobilgerät an einem entfernen Rechner angeschlossen ist, können Sie den aktuellen Bildschirminhalt z.B. mit dem scrcpy tool live mitverfolgen.

Mac OS (nicht erforderlich für Android-Tests)[Bearbeiten]

Hinweis: Wenn Sie nicht vorhaben, iOS-Geräte (iPhone, iPad, etc.) zu testen, können Sie das Folgende ignorieren. Der Apple-Rechner sowie das Mac-Setup werden für Android-Geräte nicht benötigt.

Xcode[Bearbeiten]

Zur Automatisierung mit iOS-Geräten wird Xcode benötigt. Sie erhalten dieses über den App Store. Dabei ist darauf zu achten, dass die Version zu den getesteten iOS-Versionen passt.

iOS   Xcode macOS
10.x 8.x 10.12 (Sierra)
11.x 9.x 10.13 (High Sierra)
12.x 10.x 10.14 (Mojave)
13.x 11.x 10.15 (Catalina)
14.x 12.x 11.0 (Big Sur)
15.x 13.x 12.0 (Monterey)
16.x 14.x 12.5 (Monterey)

Diese Tabelle gibt nur eine vereinfachte Übersicht, lesen Sie besser unter Xcode Releases oder Xcode-Versionen welche Version Sie brauchen. Für neue iOS Minor-Versionen gibt es in der Regel auch ein Update für Xcode, z.B. brauchen Sie für iOS 10.2 mindestens Xcode 8.2, für iOS 10.3 mindestens Xcode 8.3 usw. Wenn Sie also auf eine neuere iOS-Version wechseln, benötigen Sie in der Regel auch eine neuere Xcode-Version. Neuere Versionen von Xcode laufen möglicherweise nicht auf älteren Betriebssystemen, was wiederum eine Aktualisierung des Betriebssystems erforderlich machen kann. Falls Sie auch ältere iOS-Versionen testen wollen kann es sinnvoll sein, die entsprechenden Xcode-Versionen parallel zu installieren.

Appium[Bearbeiten]

Der Appium-Server kann entweder als Kommandozeilen-Anwendung installiert werden oder über Appium Desktop verwendet werden, welcher den Server über ein GUI zur Verfügung stellt. Mittlerweile gibt es auch Appium 2.0, was wir aber bisher noch nicht mit expecco getestet haben und daher nicht empfehlen.

Appium Desktop[Bearbeiten]

Laden Sie die neueste Version von Appium Desktop herunter. Für den Mac nehmen Sie am besten die dmg-Datei und installieren sie in den Anwendungen. Beim Starten der Anwendung Appium Server GUI erhalten Sie wahrscheinlich eine Fehlermeldung, dass es aus Sicherheitsgründen nicht möglich ist. Öffnen Sie dann das Kontextmenü auf der Anwendungsdatei (Rechtsklick bzw. Strg + Klick) und wählen Sie dort Öffnen aus. Bestätigen Sie dann, dass Sie die Anwendung wirklich öffnen wollen. Fortan können Sie die Anwendung normal öffnen.

OpenAppiumServerGUI1.png OpenAppiumServerGUI2.png

Ab Xcode 14 gibt es Probleme beim Signieren des WebDriverAgents, den Appium zur Automatisierung auf das Gerät spielt. Dadurch ist mit der Version 1.22.3-4 von Appium Desktop kein Verbindungsaufbau möglich. Das Problem ist in neueren Versionen des WebDriverAgents behoben, es gibt aber aktuell noch keine Version von Appium Desktop, die eine solche Version enthält (Stand November 2022). Sie können aber manuell eine neue Version herunterladen (z.B. 4.10.2) und die Dateien in Appium ersetzen. Laden Sie dazu von der WebDriverAgent Download-Seite eine der beiden Archivdateien (zip oder tar.gz) mit dem Source Code herunter. Öffnen und entpacken Sie dann diese Datei. Den Inhalt des Ordners WebDriverAgent-4.10.2 müssen Sie nun nach

/Applications/Appium\ Server\ GUI.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent/

kopieren. Wenn Sie über den Finder dorthin navigieren, machen Sie auf die Anwendung Appium Server GUI einen Kontextklick (Rechtsklick bzw. Strg + Klick) und wählen Sie im Menü Paketinhalt anzeigen. Ersetzen Sie alle Dateien, die bereits mit gleichem Namen enthalten sind.

Appium über npm installieren[Bearbeiten]

Sie können Appium auch über npm (Node Package Manager) installieren. Dazu müsen Sie erst node/npm installieren. Das geht mit nvm (Node Version Manager) was Sie von Github bekommen. Falls die folgende Installationsanleitung bei Ihnen nicht funktionieren sollte, finden Sie dort ausführlichere Informationen im Readme.

Öffnen Sie ein Terminal-Fenster. Klonen Sie dann das Github-Repository von nvm

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash

und laden Sie es

export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

Führen Sie danach

command -v nvm

aus, um zu testen, ob es funktioniert hat. Es sollte nvm ausgegeben werden. Kommt keine Antwort, führen Sie

touch ~/.zshrc

aus, und versuchen Sie es erneut.

Nun können Sie node mit dem folgenden Befehl installieren.

nvm install 16.15.1

Da es mit der aktuellen Version von node Probleme beim Installieren von Appium gibt, empfehlen wir diese Version.

Nachdem node installiert ist, können Sie Appium darüber installieren:

npm install -g appium

Den Appium-Server können Sie nun einfach über den Befehl

appium

starten. Die Ausgabe erfolgt dann direkt im Terminal.

Auch bei dieser Version gibt es das Problem bei der Signierung des WebDriverAgents, wie bei Appium Desktop beschrieben. Laden Sie also auch in diesem Fall eine neuere Version des WebDriverAgents herunter und ersetzen Sie die alten Dateien. Diese finden Sie unter

/Users/<user>/.nvm/versions/16.15.1/lib/appium/node_modules/appium-webdriveragent/

Mobile Testing Supplement[Bearbeiten]

Ältere Appium-Versionen stellen wir Ihnen über das Mobile Testing Supplement für Mac OS zur Verfügung, mit dem Sie es einfach installieren können:

Enthält Appium Version 1.18.3 und verwendet node 14.
Nur wenige Änderungen im Vergleich zur vorigen Version.
Im Vergleich zur vorigen Version wurde Appium auf die Version 1.16.0-rc.1 aktualisiert und es wird node 12 verwendet.
Diese Version enthält Appium 1.12.0.
Diese Version enthält Appium 1.8.0.
Diese Version enthält Appium 1.6.4.
Diese Version entält Appium 1.4.16.

Nachdem Herunterladen des Supplements, können Sie es in ein Verzeichnis Ihrer Wahl (z. B. Ihr Home-Verzeichnis) verschieben und dort entpacken. Ein geeigneter Befehl in einer Shell könnte wie folgt aussehen, passen Sie dabei die Versionsnummer entsprechend an:

tar -xvpf Mobile_Testing_Supplement_for_Mac_OS_1.1.98.tar.bz2

Wenn Sie Ihre Standard-Xcode-Installation verwenden wollen, können Sie Appium direkt über die Datei im bin-Verzeichnis mit der entsprechenden Versionsnummer starten:

Mobile_Testing_Supplement/bin/start-appium-1.16.0-rc.1

Falls Sie ein anderes Xcode als das als Standard konfigurierte verwenden wollen, müssen Sie Appium den entsprechenden Pfad über die Umgebungsvariable DEVELOPER_DIR angeben. Wenn Sie Xcode z. B. in /Applications/Xcode-11.3.app installiert haben, müssten Sie Appium so starten:

DEVELOPER_DIR="/Applications/Xcode-11.3.app/Contents/Developer" Mobile_Testing_Supplement/bin/start-appium-1.16.0-rc.1

Was als Standard-Xcode-Installation gesetzt ist, zeigt der Befehl:

xcode-select -p

Wenn Appium Ihre Xcode-Installation nicht findet, erscheint beim Verbinden eine Fehlermeldung in der Art:

org.openqa.selenium.SessionNotCreatedException - A new session could not be created. (Original error: Could not find path to Xcode, environment variable DEVELOPER_DIR set to: /Applications/Xcode.app but no Xcode found)

Starten Sie in diesem Fall Appium erneut, unter Angabe eines gültigen DEVELOPER_DIR.

WebDriverAgent-Signierung[Bearbeiten]

Zur Automatisierung lädt Appium eine App namens WebDriverAgent auf das Gerät und muss sie dafür signieren können. Dazu brauchen Sie einen Apple-Account und ein entsprechendes Zertifikat. Zur Evaluierung können Sie einen kostenlosen Account verwenden. Dieser hat den Nachteil, dass erstellte Profile nur eine Woche gültig sind und danach neu erstellt werden müssen. Seien Sie auch vorsichtig, wenn Sie sich den Account teilen, da es vorkommen kann, dass Zertifikate widerrufen werden oder durch automatische Generierung ungültig werden. Als Folge können bereits signierte Apps nicht mehr verwendet werden.

Wenn Sie bereits ein entsprechendes Zertifikat mit dem zugehörigen privaten Schlüssel in Ihrer Schlüsselbundverwaltung auf dem Mac haben, können Sie den WebDriverAgent automatisch signieren lassen. Ansonsten empfiehlt es sich, die Signierung über Xcode einzustellen und zu verwalten.

Schließen Sie zuerst das Gerät, das Sie verwenden möchten, über USB an den Mac an. Stellen Sie sicher, dass sich der Mac und das Gerät im selben Netzwerk befinden, ansonsten kann es beim Verbindungsaufbau mit Appium zu Problemen kommen. Starten Sie Xcode und öffnen Sie Preferences. Wechseln Sie zur Seite der Accounts und legen Sie einen Eintrag mit Ihrem Account an. Anschließend können Sie auf Manage Certificates... klicken, um die Zertifikate zu sehen, die zu diesem Account gehören. Zum Ausführen von Tests benötigen Sie ein iOS-Development-Zertifikat und den dazugehörigen privaten Schlüssel. Wenn Sie noch keines besitzen, erstellen Sie eines. Wenn Sie bereits eines haben, aber es nicht in Ihrem Schlüsselbund vorhanden ist (erkennbar an dem Hinweis "Not in Keychain"), können Sie es importieren. Das können Sie über die Schlüsselbundverwaltung auf dem Mac machen, wenn Sie es zuvor aus dem Schlüsselbund exportiert haben, in dem es sich befindet. Das Zertifikat mit dem zugehörigen Schlüssel sollte sich im Schlüsselbund Anmeldung befinden. Dort kann es als PKCS#12-Datei (Endung typischerweise .p12) exportiert werden. Um ein Zertifikat in Ihren Schlüsselbund zu importieren, wählen Sie im Menü Ablage die Option Objekte importieren. Falls Sie nicht wissen, wo das Zertifikat gespeichert ist, können Sie es in Xcode auch widerrufen und in Ihrem Schlüsselbund neu anlegen. Machen Sie das jedoch nur, wenn Sie wissen, dass das alte Zertifikat nicht mehr in Verwendung ist, da es danach nicht mehr benutzt werden kann. Nun sollte Ihr Schlüsselbund ein iOS-Development-Zertifikat enthalten.

Öffnen Sie nun das WebDriverAgent-Projekt in Xcode. Wenn Sie das Mobile Testing Supplement installiert haben, finden Sie es in dessen Verzeichnis unter

Mobile_Testing_Supplement/lib/node_modules/appium-1.16.0-rc.1/node_modules/appium-xcuitest-driver/WebDriverAgent/WebDriverAgent.xcodeproj

Wenn Sie Appium Desktop installier haben, finden Sie es unter

/Applications/Appium\ Server\ GUI.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj

Sie können einfach im Finder zu der Xcode-Project-Datei navigieren und Sie über einen Doppelklick öffnen. Beachten Sie dabei, dass Sie dabei auf die Anwendung Appium Server GUI einen Kontextklick (Rechtsklick bzw. Strg + Klick) machen und im Menü Paketinhalt anzeigen auswählen müssen, um in deren Unterverzeichnis zu gelangen.

MobileTestingWebDriverAgentXcode.png

Wählen Sie WebDriverAgentLib und die Seite Signing & Capabilities aus. Setzen Sie dort im Abschnitt Signing die Option Automatically manage signing und wählen Sie dann ein Team aus. Wechseln Sie nun zu WebDriverAgentRunner und tun Sie dort dasselbe. Durch das Setzen des Teams sollten die Fehler für den WebDriverAgentRunner verschwinden. Sollte Xcode kein passendes Provisioning Profile für die Bundle ID com.facebook.WebDriverAgentRunner erstellen können, können Sie diese anpassen, dass sie zu Ihrem Zertifikat passt. Danach können Sie Xcode beenden oder auch, wie weiter unten beschrieben, direkt den Build über Xcode starten, damit das Projekt bereits gebaut ist, wenn Appium es verwenden möchte.

Wenn Sie sich nun von expecco eine Verbindung zu Ihrem Gerät aufbauen, wird der WebDriverAgent darauf installiert und gestartet, um anschließend zur zu testenden App zu wechseln. Eventuell muss auf dem Gerät muss der Ausführung des WebDriverAgents vertraut noch werden. Ein Anzeichnen dafür kann sein, dass die App WebDriverAgent zwar auf dem Gerät erscheint und zu starten versucht, danach aber wieder deinstalliert wird. Öffnen Sie dazu während des Verbindungsaufbaus auf dem Gerät in die Einstellungen und dort unter Allgemein den Eintrag Geräteverwaltung. Dieser Eintrag ist nur sichtbar, wenn eine Entwickler-App auf dem Gerät installiert ist. Sie müssen daher möglicherweise warten, bis der WebDriverAgent installiert ist, bevor der Eintrag erscheint. Wählen Sie dort den Eintrag Ihres Apple-Accounts und vertrauen Sie ihm. Da der WebDriverAgent wieder deinstalliert wird, wenn der Start nicht funktioniert hat, müssen Sie dies während des Verbindungsaufbaus tun. Falls Ihnen das zu hektisch ist, können Sie auch folgenden Code ausführen:

xcodebuild -project Mobile_Testing_Supplement/lib/node_modules/appium-1.16.0-rc.1/node_modules/appium-xcuitest-driver/WebDriverAgent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=<udid>' test

bzw.

 xcodebuild -project /Applications/Appium\ Server\ GUI.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=<udid>' test

Damit wird der WebDriverAgent auf dem Gerät installiert ohne dass er wieder gelöscht wird.

Wenn es Probleme beim Installieren des WebDriverAgents gibt, können Sie auch versuchen, den Build über Xcode zu starten. Stellen Sie sicher, dass das richtige Target WebDriverAgent ausgewählt ist. Fehlermeldungen in Xcode zeigen vielleicht einfacher, wo das Problem liegt. Manchmal hilft es auch, es ein zweites Mal zu versuchen, weil es möglicherweise beim ersten Mal zu lange gedauert hat und abgebrochen wurde. Es kann sein, dass Sie während des Builds mehrmals aufgefordert werden, das Passwort für Ihren Schlüsselbund anzugeben.

WebDriverAgentCodesign.png

Lesen Sie auch die Dokumentation von Appium zum Aufsetzen von Tests mit iOS-Geräten. In der Dokumentation von Apple finden Sie nähere Informationen zum Installieren und Vertrauen von Apps.

Ist der WebDriverAgent einmal auf dem Gerät installiert, wird er für spätere Verbindungen wieder verwendet und der Verbindungsaufbau sollte schneller funktionieren. Ebenso liegt dann die signierte Version bereits auf Ihrem Mac und muss nicht erneut gebaut werden, was die Verbindung zu weiteren Geräten ebenfalls beschleunigt. Wenn Sie wissen, dass bei Ihrem Verbindungsaufbau der WebDriverAgent erst noch signiert und gebaut werden muss, ist es ratsam, die Capability wdaLaunchTimeout zu setzen. Dieser Timeout, wie lange auf den Start der WebDriverAgents auf dem Gerät gewartet werden soll, liegt standardmäßig bei 60000$nbsp;ms. Der Build dauert aber häufig über eine Minute, sodass der Versuch zum Verbindungsaufbau dann abgebrochen wird. Ein Wert von 120000 hat sich hier als besser erwiesen.

Konfiguration des Plugins[Bearbeiten]

Bevor Sie loslegen, sollten Sie die Einstellungen des Mobile Testing Plugins überprüfen und ggf. anpassen.

Öffnen Sie im Menü den Punkt "Extras" → "Einstellungen" und dort unter "Erweiterungen" den Eintrag "Mobile Testing" (s. Abb.). Standardmäßig werden diese Pfade automatisch gefunden (1). Um einen Pfad manuell anzupassen, deaktivieren Sie den entsprechenden Haken rechts davon. Sie erhalten in einer Drop-down-Liste einige Pfade zur Auswahl. Ist ein eingetragener Pfad falsch oder kann er nicht gefunden werden, wird das Feld rot markiert und es erscheint ein diesbezüglicher Hinweis. Stellen Sie sicher, dass alle Pfade richtig angegeben sind.

Konfiguration des Plugins
  • appium: Geben Sie hier den Pfad zur ausführbaren Datei an mit der Appium in der Kommandozeile gestartet werden kann. Unter Windows wird diese Datei in der Regel "appium.cmd" heißen. Dieser Pfad wird benutzt, wenn expecco einen Appium-Server startet.
  • node: Geben Sie hier den Pfad zur ausführbaren Datei an, die Node (auch "Node.js") startet. Dieser Pfad wird beim Starten eines Servers an Appium weitergegeben, damit Appium ihn unabhängig von der PATH-Variablen findet. Unter Windows heißt diese Datei in der Regel "node.exe".
  • JAVA_HOME: Geben Sie hier den Pfad zu einem JDK an. Dieser Pfad wird an jeden Appium-Server weitergegeben. Lassen Sie das Feld frei, um den Wert aus der Umgebungsvariablen zu verwenden. Um einzustellen, welches Java von expecco verwendet werden soll, setzen Sie diesen Pfad in den Einstellungen für die Java Bridge.
  • ANDROID_HOME: Geben Sie hier den Pfad zu einem SDK von Android an. Dieser Pfad wird an jeden Appium-Server weitergegeben. Lassen Sie das Feld frei, um den Wert aus der Umgebungsvariablen zu verwenden.
  • adb: Hier steht der Pfad zum adb-Befehl. Unter Windows heißt die Datei adb.exe. Diese wird von expecco beispielsweise verwendet, um die Liste der angeschlossenen Geräte zu erhalten. Diesen Pfad sollten Sie automatisch wählen lassen, da dann der Befehl im ANDROID_HOME-Verzeichnis verwendet wird. Dieser wird auch von Appium verwendet. Falls expecco und Appium jedoch verschiedene Versionen von adb verwenden kann es zu Konflikten kommen.
  • android.bat: Diese Datei wird nur benötigt, um damit den AVD und den SDK Manager zu starten. Automatisch wird hier die Datei im ANDROID_HOME-Verzeichnis gesucht.
  • aapt: Geben Sie hier den Pfad zum aapt-Befehl an. Unter Windows heißt diese Datei aapt.exe. expecco verwendet aapt nur im Verbindungseditor, um das Paket und die Activities einer apk-Datei zu lesen. Automatisch wird hier die Datei im ANDROID_HOME-Verzeichnis gesucht.
Konfiguration des JDKs

Ab expecco 2.11 gibt es das Feld Team-ID. Wenn Sie iOS-Tests ausführen, tragen Sie hier die Team-ID Ihres Zertifikats ein. Diese wird für jede iOS-Verbindung verwendet, außer Sie setzen den Wert im Einzelfall in den Verbindungseinstellungen um. Wie Sie die Team-ID erhalten, lesen Sie im Abschnitt zur Signierung ber der Installation auf Mac OS. Mit expecco 2.10 können Sie die Team-ID nur für jede Verbindungseinstellung extra als Capability eintragen. Dazu müssen Sie jedoch die erweiterte Ansicht verwenden. Geben Sie hier die Capability xcodeOrgId an und setzen Sie als Wert die Team-ID des Zertifikats.

Die Einstellung zur Serveradresse unten auf der Seite bezieht sich auf das Verhalten des Verbindungseditors. Dieser prüft am Ende, ob die Serveradresse auf /wd/hub endet, da dies die übliche Form ist. Falls nicht, wird in einem Dialog gefragt, wie darauf reagiert werden soll. Das festgelegte Verhalten kann hier eingesehen und verändert werden.

Wechseln Sie ebenfalls zum Eintrag Java Bridge (s. Abb.). Hier muss der Pfad zu Ihrer Java-Installation angegeben werden, die von expecco benutzt wird. Tragen Sie hier ein JDK ein. Falls Sie unter Windows das aus dem Mobile Testing Supplement verwenden möchten, lautet der Pfad

C:\Program Files (x86)\exept\Mobile Testing Supplement\jdk

Sie können auch die Systemeinstellungen verwenden.

Android-Gerät vorbereiten[Bearbeiten]

Wenn Sie ein Android-Gerät unter Windows anschließen benötigen Sie möglicherweise noch einen adb-Treiber für das Gerät. Einen passenden Treiber finden Sie üblicherweise auf der jeweiligen Webseite des Herstellers. Haben Sie den Universal-Treiber aus dem Mobile Testing Supplement installiert, sollte für die meisten Geräte bereits alles funktionieren. In einigen Fällen versucht auch Windows automatisch einen Treiber zu installieren, wenn Sie das Gerät zum ersten mal anschließen.

USB-Debugging Einschalten[Bearbeiten]

Achtung: Bevor Sie ein Mobilgerät mit dem Appium-Plugin ansteuern können, müssen Sie für dieses Debugging erlauben!

Für Android-Geräte finden Sie diese Option in den Einstellungen unter Entwickleroptionen mit dem Namen USB-Debugging. Falls die Entwickleroptionen nicht angezeigt werden, können Sie diese freischalten, indem Sie unter "Über das Telefon" siebenmal auf "Build-Nummer" tippen.

Wach bleiben Aktivieren[Bearbeiten]

Aktivieren Sie auch die Funktion Wach bleiben, damit das Gerät nicht während der Testerstellung oder -ausführung den Bildschirm abschaltet.

Aus Sicherheitsgründen muss USB-Debugging für jeden Computer einzeln zugelassen werden. Beim Verbinden des Geräts mit dem PC über USB müssen Sie dabei am Gerät der Verbindung zustimmen. Falls Sie dies für Ihren Computer noch nicht getan haben, aber auf dem Gerät kein entsprechender Dialog erscheint, kann es helfen, das Gerät aus- und wieder einzustecken. Das kann insbesondere dann passieren, wenn Sie den ADB-Treiber installiert haben während das Gerät bereits über USB angeschlossen war. Falls auch das nicht hilft, öffnen Sie die Benachrichtigungen, indem Sie sie vom oberen Bildschirmrand herunter ziehen. Dort finden Sie die USB-Verbindung und Sie können die Optionen dazu öffnen. Wählen Sie einen anderen Verbindungstypen aus; in der Regel sollten MTP oder PTP funktionieren.

Sie können auch auf einem Emulator testen. Dieser muss nicht gesondert vorbereitet werden, da er bereits für USB-Debugging ausgelegt ist. Es ist sogar möglich, einen Emulator bei Testbeginn zu starten.

Um zu überprüfen, ob ein Gerät, das Sie an Ihren Rechner angeschlossen haben, verwendet werden kann, öffnen Sie den Verbindungseditor. Das Gerät sollte dort angezeigt werden.

Verbindung über WLAN[Bearbeiten]

Es ist auch möglich, Android-Geräte über WLAN zu verbinden. Für Geräte mit Android 11 oder neuer ist dies direkt über WLAN möglich, im anderen Fall müssen Sie das Gerät zuerst über USB verbinden. Ab expecco 22.1 können Sie eine WLAN-Verbindung über den Verbindungseditor aufbauen. Ansonsten ist es auch über die Eingabeaufforderung möglich.

Drahtlos verbinden über die Eingabeaufforderung mit expecco Versionen vor 22.1 (ab Android 11)[Bearbeiten]

Mit expecco ab Version 22.1 funktioniert das einfacher über den Verbindungseditor.

Erlauben Sie in den Entwickleroptionen des Geräts Debugging über WLAN und öffnen Sie dessen Optionen. Sie müssen zuerst das Gerät mit dem Rechner koppeln. Wählen Sie dazu "Gerät mit einem Kopplungscode koppeln", um einen Kopplungscode und eine IP-Adresse mit Port zu erhalten. Öffnen Sie dann auf dem Rechner die Eingabeaufforderung und geben Sie dort ein:

adb pair <IP-Adresse des Geräts>:<Kopplungsport>

wobei Sie <IP-Adresse des Geräts>:<Kopplungsport> durch die auf dem Gerät angezeigte IP-Adresse & Port ersetzen. Danach werden Sie aufgefordert, den Kopplungscode einzugeben. Wenn alles geklappt hat, sollte sich das Popup auf dem Gerät schließen und der Rechner als gekoppeltes Gerät angezeigt werden. Geben Sie dann in der Eingabeaufforderung ein:

adb connect <IP-Adresse des Geräts>:<Debug-Port>

Die IP-Adresse ist hier noch die gleiche wie beim Koppeln, aber der Port ist ein anderer. Beides wird als IP-Adresse & Port auf dem Gerät angezeigt. Damit sollte das Gerät nun über WLAN verbunden sein und kann genauso verwendet werden, wie mit USB-Verbindung. Sie können dies überprüfen, indem Sie entweder adb devices -l eingeben oder in expecco den Verbindungsdialog öffnen. In der Liste taucht das Gerät mit seiner IP-Adresse und dem Port auf. Bedenken Sie, dass die WLAN-Verbindung nicht mehr besteht, wenn der ADB-Server oder das Gerät neu gestartet werden. Häufig wird beim Neustart des Geräts auch die Erlaubnis für das Debugging über WLAN wieder zurückgesetzt und der verwendete Port ändert sich. Die Kopplung bleibt aber bestehen und muss beim nächsten Verbinden nicht noch einmal durchgeführt werden.

WLAN Verbindung über USB starten (Android 10 und früher)[Bearbeiten]

Verbinden Sie zunächst das Gerät über USB mit dem Rechner. Öffnen Sie dann die Eingabeaufforderung und geben Sie dort ein:

adb tcpip 5555

Damit lauscht das Gerät auf eine TCP/IP-Verbindung an Port 5555. Sollten Sie mehrere Geräte angeschlossen oder Emulatoren laufen haben, müssen Sie genauer angeben, welches Gerät Sie meinen. Geben Sie in diesem Fall ein:

adb devices -l

Sie erhalten eine Liste aller Geräte, wobei die erste Spalte deren Kennung ist. Schreiben Sie dann stattdessen

adb -s <Gerätekennung> tcpip 5555

mit der Gerätekennung des gewünschten Geräts. Sie können die USB-Verbindung nun trennen. Jetzt müssen Sie die IP-Adresse Ihres Gerätes in Erfahrung bringen. Sie finden diese üblicherweise irgendwo in den Einstellungen des Geräts, beispielsweise beim Status oder in den WLAN-Einstellungen. Geben Sie dann ein:

adb connect <IP-Adresse des Geräts>

Damit sollte das Gerät nun über WLAN verbunden sein und kann genauso verwendet werden, wie mit USB-Verbindung. Sie können dies überprüfen, indem Sie wieder adb devices -l eingeben oder in expecco den Verbindungsdialog öffnen. In der Liste taucht das Gerät mit seiner IP-Adresse und dem Port auf. Bedenken Sie, dass die WLAN-Verbindung nicht mehr besteht, wenn der ADB-Server oder das Gerät neu gestartet werden.

Verbindung zu einem Emulator[Bearbeiten]

Sie benötigen dazu den Emulator selbst, sowie mindestens ein AVD (Android Virtual Device). Hinweise zu Installation finden Sie in der Android Studio Dokumentation.

Wenn Sie Android Studio bereits mit den Defaulteinstellungen installiert haben 1), sollte der Emulator bereits mitinstalliert sein. Falls nicht, wählen Sie in Android Studio "Configure" - "SDK Manager" - "Android SDK" - "SDK Tools" - Android Emulator", sowie dort die "Platform Tools". Alternativ geht das auch über die Kommandzeile mit dem "sdkmanager" Kommando.

Als nächstes benötigen Sie mindestens ein AVD; auch dies geht am einfachsten über den Dialog in Android Studio: wählen sie "Configure" - "AVD Manager" und folgen den Anweisungen (Deviceauswahl, Platform und Android Version).

Auch wenn Sie den Emulator automatisieren benötigen sie Appium; installieren Sie dieses entweder mit dem Mobile Testing Supplement, oder direkt von der Appium homepage (https://github.com/appium/appium-desktop/releases).

1)Android Studio selbst wird nicht von expecco benötigt; es bietet aber kompfortable Dialoge zum Installieren von Paketen und AVDs.

iOS-Gerät und App vorbereiten[Bearbeiten]

Das Ansteuern von iOS-Geräten ist nur über einen Mac möglich. Lesen Sie daher auch den Abschnitt zur Installation unter Mac OS.

Bevor Sie ein Mobilgerät mit dem Mobile Testing Plugin ansteuern können, müssen Sie für iOS-Geräte ab iOS 8 Debugging erlauben. Aktivieren Sie dazu die Option Enable UI Automation unter dem Menüpunkt Entwickler in den Einstellungen des Geräts. Falls Sie den Eintrag Entwickler in den Einstellungen nicht finden, gehen Sie wie folgt vor: Schließen Sie das Gerät über USB an den Mac an. Dabei müssen Sie ggf. am Gerät noch der Verbindung zustimmen. Starten Sie Xcode und wählen Sie dann in der Menüleiste am oberen Bildschirmrand im Menü Window den Eintrag Devices. Es öffnet sich ein Fenster, in dem eine Liste der angeschlossenen Geräte angezeigt wird. Wählen Sie dort Ihr Gerät aus. Danach sollte der Eintrag Entwickler in den Einstellungen auf dem Gerät auftauchen. Dazu müssen Sie möglicherweise die Einstellungen beenden und neu starten.

Beispiel für einen Alert unter iOS

Ein Verbindungsaufbau zu dem Gerät ist nicht möglich solange es bestimmte Alerts zeigt. Ein solcher Alert kann z. B. erscheinen wenn FaceTime aktiviert ist, indem ein Hinweis auf anfallende SMS-Gebühren angezeigt wird (siehe Screenshot). Achten Sie darauf, das Gerät so zu konfigurieren, dass es im Leerlauf keine solchen Alerts zeigt.

expecco 2.11 und später[Bearbeiten]

Sie können beliebige Apps testen, die auf dem verwendeten Gerät lauffähig oder bereits installiert sind. Wenn die App als Development-Build vorliegt, muss die UDID des Geräts in der App hinterlegt sein. In jedem Fall muss der WebDriverAgent für das Gerät signiert werden. Lesen Sie dazu den Abschnitt zur Signierung unter Mac OS.

Falls Sie in einem Test den Home-Button verwenden wollen, müssen Sie auf dem Gerät AssistiveTouch aktivieren. Sie finden diese Option in den Einstellungen unter Allgemein > Bedienungshilfen > AssistiveTouch. Platzieren Sie dann das Menü in der Mitte des oberen Bildschirmrands. Sie können das Drücken des Home-Buttons dann mit dem entsprechenden Menüeintrag im Recorder aufzeichnen oder direkt den Baustein Press Home Button benutzen.

expecco 2.10[Bearbeiten]

Die App, die Sie verwenden wollen, muss als Development-Build vorliegen. Außerdem muss die UDID des Geräts in der App hinterlegt sein.

Development-Build signieren[Bearbeiten]

Ein Development-Build einer App ist nur für eine begrenzte Zahl von Geräten zugelassen und kann auf anderen Geräten nicht gestartet werden. Es ist aber möglich, das Zertifikat und die verwendbaren Geräte in einem Development-Build auszutauschen.

  • Evaluierung mit Demo-App von eXept:
Gerne stellen wir Ihnen eine Demo-App zur Verfügung, die als Development-Build vorliegt und die wir für Ihr Gerät signieren können. Senden Sie dazu bitte Ihrem eXept-Ansprechpartner die UDID Ihres Gerätes zu. Wie Sie die UDID Ihres Gerätes ermitteln können, ist im folgenden Abschnitt beschrieben.
  • Eigene App für Ihr Testgerät verwenden:
Wenn Sie von den App-Entwicklern einen Development-Build (IPA-Datei) erhalten, der für Ihr Testgerät zugelassen ist, können Sie diesen direkt verwenden. Dazu müssen Sie den Entwicklern die UDID Ihres Geräts mitteilen, damit sie diese eintragen können. Sie können die UDID eines Gerätes mithilfe von Xcode auslesen. Starten Sie dazu Xcode und wählen Sie in der Menüleiste am oberen Bildschirmrand im Menü Window den Eintrag Devices. Es öffnet sich ein Fenster, in dem eine Liste der angeschlossenen Geräte angezeigt wird. Wählen Sie Ihr Gerät aus und suchen Sie in Eigenschaften den Eintrag Identifier. Die UDID ist eine 40-stellige Hexadezimalzahl.
  • Extern entwickelte App für Ihr Testgerät umsignieren:
Es können auch Apps umsigniert werden, damit Sie auf anderen Geräten lauffähig sind. Dieser Vorgang ist jedoch kompliziert und setzt insbesondere einen Zugang zu einem Apple-Developer-Account voraus. Eine Dokumentation zur Vorgehensweise ist derzeit in Vorbereitung.
Für die Evaluierung unterstützen wir Sie gerne beim Umsignieren Ihrer App.

Weitere Informationen zur Verwendung von iOS-Geräten finden Sie auch in der Dokumentation von Appium.

Native iOS-Apps[Bearbeiten]

Sie können auch Apps verwenden, die bereits nativ auf dem Gerät vorhanden sind. Dazu müssen Sie deren Bundle-ID kennen und diese dann in die Verbindungseinstellungen eintragen. Hier eine kleine Auswahl gängiger Apps:

App Bundle-ID
App Store com.apple.AppStore
Calculator com.apple.calculator
Calendar com.apple.mobilecal
Camera com.apple.camera
Contacts com.apple.MobileAddressBook
iTunes Store com.apple.MobileStore
Mail com.apple.mobilemail
Maps com.apple.Maps
Messages com.apple.MobileSMS
Phone com.apple.mobilephone
Photos com.apple.mobileslideshow
Settings com.apple.Preferences

Weitere Bundle-IDs finden Sie hier.

Beispiele[Bearbeiten]

Bei den Demo-Testsuiten für expecco finden Sie auch Beispiele für Tests mit dem Mobile Testing Plugin. Wählen Sie dazu auf dem Startbildschirm die Option "Beispiel aus Datei" und öffnen Sie den Ordner "mobile".

m01_MobileTestingDemo.ets[Bearbeiten]

Die Testsuite enthält zwei einfache Testpläne: "Simple CalculatorTest" und "Complex Calculator and Messaging Test". Beide Tests verwenden einen Android-Emulator, den Sie vor Beginn starten müssen. Die Apps, die im Test verwendet werden, gehören zur Grundausstattung des Emulators und müssen daher nicht mehr installiert werden. Da sich die Apps unter jeder Android-Version unterscheiden können, ist es wichtig, dass Ihr Emulator unter Android 6.0 läuft. Außerdem muss die Sprache auf Englisch gestellt sein.

Simple CalculatorTest
Dieser Test verbindet sich mit dem Taschenrechner und gibt die Formel 2+3 ein. Das Ergebnis des Rechners wird mit dem erwarteten Wert 5 verglichen.
Complex Calculator and Messaging Test
Dieser Test verbindet sich mit dem Taschenrechner und öffnet anschließend den Nachrichtendienst. Dort wartet er auf eine einkommende Nachricht von der Nummer 15555215556, in der eine zu berechnende Formel gesendet wird. Die Nachricht wird zuvor über einen Socket beim Emulator erzeugt. Nach dem Eintreffen der Nachricht wird diese vom Test geöffnet und deren Inhalt gelesen. Danach wird wieder der Taschenrechner geöffnet, die erhaltene Formel eingegeben und das Ergebnis gelesen. Anschließend wechselt der Test wieder zum Nachrichtendienst und sendet das Ergebnis als Antwort.

m02_expeccoMobileDemo.ets und m03_expeccoMobileDemoIOS.ets[Bearbeiten]

Diese sind Bestandteil des Tutorials zum Mobile Testing Plugin. Der jeweils enthaltene Testfall ist unvollständig und wird im Zuge des Tutorials ergänzt. Lesen Sie dazu den Abschnitt Tutorial.

Tutorial[Bearbeiten]

Es gibt ein Tutorial, das das grundsätzliche Vorgehen zur Erstellung von Tests mit dem Mobile Testing Plugin beschreibt. Grundlage dafür ist ein mitgeliefertes Beispiel, bestehend aus einer einfachen App und einer expecco-Testsuite.

Sie finden es auf der Seite Mobile Testing Tutorial in zwei Versionen für Android und für iOS.

Dialoge des Mobile Testing Plugins[Bearbeiten]

Verbindungseditor[Bearbeiten]

Mithilfe des Verbindungseditors können Sie schnell Verbindungen definieren, ändern oder aufbauen. Je nach Aufgabe weist der Dialog kleine Unterschiede auf und wird unterschiedlich geöffnet:

  • Um eine Verbindung aufzubauen, klicken Sie im GUI-Browser auf "Verbinden'"' klicken und wählen dann "Mobile Testing".
  • Um eine bestehende Verbindung im GUI-Browser zu ändern oder zu kopieren, wählen Sie diese aus, machen einen Rechtsklick und wählen im Kontextmenü "Verbindung bearbeiten" oder "Verbindung kopieren" aus.
  • Wollen Sie Verbindungseinstellungen nicht für den GUI-Browser sondern zur Verwendung in einem Test erstellen, wählen Sie im Menü des Mobile Testing Plugins den Punkt "Verbindungseinstellungen erstellen...". Darüber können nur die Einstellungen für eine Verbindung erstellt werden, ohne dass eine Verbindung tatsächlich angelegt wird.

Einige der Schaltflächen sind nur beim Erstellen von Verbindungseinstellungen sichtbar: MobileTestingVerbindungseditorMenu.png

  1. "Einstellungen löschen": Setzt alle Einträge zurück. (Nur beim Erstellen von Einstellungen sichtbar.)
  2. "Einstellungen aus Datei laden": Erlaubt das Öffnen einer gespeicherten Einstellungsdatei (*.csf). Deren Einstellungen werden in den Dialog übernommen. Bereits getätigte Eingaben ohne Konflikt bleiben dabei erhalten.
  3. "Einstellungen aus Anhang laden": Erlaubt das Öffnen eines Anhangs mit Verbindungseinstellungen aus einem geöffneten Projekt. Diese Einstellungen werden in den Dialog übernommen. Bereits getätigte Eingaben ohne Konflikt bleiben dabei erhalten.
  4. "Einstellungen in Datei speichern" sowie
  5. "Einstellungen in Anhang speichern": Hier können Sie die eingetragenen Einstellungen in eine Datei (*.csf) speichern oder als Anhang in einem geöffneten Projekt anlegen. Beide Optionen besitzen ein verzögertes Menü, in dem Sie auswählen können, nur einen bestimmten Teil der Einstellungen zu speichern. (Nur beim Erstellen von Einstellungen sichtbar.)
  6. "Erweiterte Ansicht": Damit können Sie in die erweiterte Ansicht wechseln, um zusätzliche Einstellungen vorzunehmen. Lesen Sie dazu mehr am Ende des Kapitels. (Nur beim Erstellen von Einstellungen sichtbar.)
  7. "Hilfe": An der rechten Seite wird ein Hilfetext zum jeweiligen Schritt ein- oder ausgeblendet.


Der Dialog ist in drei Schritte unterteilt. Im ersten Schritt wählen Sie das Gerät, das Sie verwenden möchten, im zweiten Schritt wählen Sie aus, welche App verwendet werden soll und im letzten Schritt erfolgen die Einstellungen zum Appium-Server.

Schritt 1: Gerät auswählen[Bearbeiten]

Im oberen Teil erhalten Sie eine Liste aller angeschlossenen Appium-Geräte, die erkannt werden. Mit der Checkbox darunter können Sie die Geräte ausblenden, die zwar erkannt werden, aber nicht bereit sind. Falls Sie ein Gerät eintragen wollen, das nicht angeschlossen ist, können Sie dies mit dem entsprechenden Knopf "Android-Gerät eingeben" bzw. "iOS-Gerät eingeben" anlegen. Dazu müssen Sie jedoch die benötigten Eigenschaften Ihres Geräts kennen. Das Gerät wird dann in einer zweiten Geräteliste angelegt und kann dort ausgewählt werden. Wenn keine Liste mit angeschlossenen Elementen angezeigt werden kann, werden stattdessen verschiedene Meldungen angezeigt:

  • Keine Geräte gefunden
    expecco konnte kein Android-Geräte finden.
    Um eine Verbindung zu einem Gerät automatisch zu konfigurieren, stellen Sie sicher, dass es
    • angeschlossen ist
    • eingeschaltet ist
    • einen passenden adb-Treiber installiert hat
    • für Debugging freigeschaltet ist (siehe unten).
  • Keine verfügbaren Geräte gefunden
    expecco konnte keine verfügbaren Android-Geräte finden. Es wurden aber nicht verfügbare gefunden, z.B. mit dem Status "unauthorized".
    Um eine Verbindung zu einem Gerät automatisch zu konfigurieren, stellen Sie sicher, dass es
    • angeschlossen ist
    • eingeschaltet ist
    • einen passenden adb-Treiber installiert hat
    • für Debugging freigeschaltet ist (siehe unten).
    Um nicht verfügbare Geräte anzuzeigen, aktivieren Sie unten diese Option.
  • Verbindung verloren
    expecco hat die Verbindung zum adb-Server verloren. Versuchen Sie die Verbindung wieder herzustellen, indem Sie auf den Button klicken.
  • Verbindung fehlgeschlagen
    expecco konnte sich nicht mit dem adb-Server verbinden. Möglicherweise läuft er nicht oder der angegebene Pfad stimmt nicht.
    Überprüfen Sie die adb-Konfiguration in den Einstellungen und versuchen Sie den adb-Server zu starten und eine Verbindung herzustellen indem Sie auf den Knopf klicken.
  • Verbinden ...
    expecco verbindet sich mit dem adb-Server. Dies kann einige Sekunden dauern.
  • adb-Server starten ...
    expecco startet den adb-Server. Dies kann einige Sekunden dauern.

Mit "Weiter" gelangen Sie zum nächsten Schritt. Wenn Sie Einstellungen für den GUI-Browser eingeben, ist das erst möglich, wenn ein Gerät ausgewählt wurde.

Anmerkung zum Freischalten: In jüngeren Android Versionen werden die Entwickleroptionen zunächst nicht mehr in den Einstellungen angeboten. Falls ihr Android Gerät in den Einstellungen keinen Eintrag zu "Entwickleroptionen" zeigt, wählen Sie zunächst den Eintrag "Telefoninfo", dann "SoftwareVersionsInfo" und klicken darin mehrfach auf den Eintrag "BuildVersion".

Chromedriver verwalten[Bearbeiten]

Wenn die App, die Sie bedienen wollen, WebViews mit Chrome benutzt, benötigt Appium Zugriff auf einen passenden Chromedriver. Wenn Sie ein Gerät in der Liste auswählen, können Sie über "Chromedriver verwalten" sehen, welche Chrome-Versionen auf dem Gerät vorhanden sind und welche Chromedriver-Versionen durch expecco zur Verfügung stehen. Über diesen Dialog können Sie auch benötigte Chromedriver-Versionen herunterladen. Beachten Sie, dass auf dem Gerät verschiedene Chrome-Versionen vorhanden sein können, da die Apps in ihren WebViews nicht die gleiche Chrome-Version verwenden müssen, wie die als Browser installierte. Damit alles funktioniert, sollte der verwendete Chromedriver zur entsprechenden App passen. Sie können den Pfad zum Chromedriver auch am Ende des Verbindungsdialogs in den erstellten Capabilities ändern.

WLAN-Android-Geräte verbinden[Bearbeiten]

Sie können sich auch über WLAN zu Android-Geräten verbinden. Dazu muss das Gerät zunächst mit adb verbunden werden, siehe Verbindung über WLAN. Ab expecco 22.1 bietet der Verbindungseditor hierfür einen Dialog, der Ihnen dabei hilft und den Sie anstatt der Eingabeaufforderung verwenden können. Für Geräte mit Android 11 oder höher können Sie hier das Gerät mit dem Rechner zu koppeln, indem Sie die entsprechenden Parameter angeben und anschließend die Verbindung unter Angabe von IP-Adresse und Port aufbauen. Sie können damit auch für Geräte, die über USB verbunden sind, eine WLAN-Verbindung aufbauen. Wenn Sie das entsprechende Gerät in der Liste auswählen, werden die benötigten Angaben automatisch ausgelesen.

Beachten Sie, dass der Aufbau einer WLAN-Verbindung nicht Teil der Verbindungseinstellungen ist. Wenn Sie mit den erzeugten Einstellungen eine neue Verbindung aufbauen wollen, müssen Sie sicherstellen, dass das Gerät über mit der angegebenen IP-Adresse und dem Port mit adb verbunden ist, damit es gefunden wird. Die ADB-Verbindung geht verloren, wenn der ADB-Server oder das Gerät neu gestartet werden. Die Erlaubnis für das WLAN-Debugging wird beim Neustart des Geräts auch häufig zurückgesetzt und der Debug-Port kann dann wechseln. Daher muss eine WLAN-Verbindung immer manuell hergestellt werden.

Schritt 2: App auswählen[Bearbeiten]

Hier können Sie Angaben zur App machen, die getestet werden soll. Dabei können Sie entscheiden, ob Sie eine App verwenden wollen, die bereits auf dem Gerät installiert ist, oder ob für den Test eine App installiert werden soll. Wählen Sie oben den entsprechenden Reiter aus. Je nachdem, ob Sie im vorigen Schritt ein Android- oder ein iOS-Gerät ausgewählt haben, ändert sich die erforderte Eingabe.

  • Android
    • App auf dem Gerät
      Wenn Sie im ersten Schritt ein angeschlossenes Gerät ausgewählt haben, werden die Pakete aller installierten Apps automatisch abgerufen und Sie können die Auswahl aus den Drop-down-Listen treffen. Die installierten Apps sind in Fremdpakete und Systempakete unterteilt; wählen Sie die entsprechende Paketliste aus. Diese Auswahl gehört nicht zu den Einstellungen, sondern stellt nur die entsprechende Paketliste zur Verfügung. Sie können den Filter benutzen, um die Liste weiter einzuschränken und dann das gewünschte Paket auswählen. Die Activities des ausgwählten Pakets werden ebenfalls automatisch abgerufen und als Drop-down-Liste zur Verfügung gestellt. Wählen Sie die Activity aus, die gestartet werden soll. In der Regel wird automatisch eine Activity aus der Liste eingetragen. Falls Sie kein verbundenes Gerät verwenden, müssen Sie die Eingabe des Pakets und der Activity von Hand vornehmen.
    • App installieren
      Geben Sie bei "App" den Pfad zu einer App an. Der Pfad muss für den Appium-Server gültig sein, der verwendet wird. Sie können auch eine URL angeben. Benutzen Sie einen lokalen Appium-Server, können Sie den rechten Butten benutzen, um zu der Installationsdatei der App zu navigieren und diesen Pfad einzutragen. Wenn möglich werden dabei auch das entsprechende Paket und die Activity in den Feldern darunter eingetragen. Diese Angabe ist aber nicht notwendig.
  • iOS
    • App auf dem Gerät
      Geben Sie die Bundle-ID einer installierten App an. Sie können die IDs der installierten Apps bspw. mithilfe von Xcode erfahren. Starten Sie dazu Xcode und wählen Sie in der Menüleiste am oberen Bildschirmrand im Menü "Window" den Eintrag "Devices". Es öffnet sich ein Fenster, in dem eine Liste der angeschlossenen Geräte angezeigt wird. Wenn Sie Ihr Gerät auswählen, sehen Sie in der Übersicht eine Auflistung der von Ihnen installierten Apps.
    • App installieren
      Geben Sie bei "App" den Pfad zu einer App an. Der Pfad muss für den Appium-Server gültig sein, der verwendet wird. Sie können auch eine URL angeben. Zu den Vorraussetzungen an Apps für reale Geräte lesen Sie bitte den Abschnitt iOS-Geräte und App vorbereiten.

Im unteren Teil können Sie festlegen, ob die App beim Verbindungsabbau zurückgesetzt bzw. deinstalliert werden soll, und ob sie initial zurückgesetzt werden soll. Auch hier wird die entsprechende Capability gar nicht gesetzt, wenn Sie "(Default)" auswählen. Mit "Weiter" gelangen Sie zum nächsten Schritt.

Schritt 3: Servereinstellungen[Bearbeiten]

Im letzten Schritt befindet sich zunächst im oberen Teil eine Liste aller Capabilities, die sich aus Ihren Angaben der vorigen Schritte ergeben. Wenn Sie sich mit Appium auskennen und noch zusätzliche Capabilities setzen möchten, die der Verbindungseditor nicht abdeckt, können Sie durch Klicken auf "Bearbeiten" in die erweiterte Ansicht gelangen. Lesen Sie dazu den Abschnitt weiter unten.

Wenn Sie Einstellungen für den GUI-Browser eingeben, können Sie den Verbindungsnamen eintragen, mit dem die Verbindung angezeigt wird. Dies ist auch der Name unter dem Bausteine diese Verbindung verwenden können, wenn sie aufgebaut ist. Wenn Sie das Feld frei lassen, wird ein Name generiert. Wenn der Haken für "Von expecco gesteuert" gesetzt ist, wird expecco einen lokalen Appium-Server an einem freien Port starten, oder einen bereits gestarteten freien Server verwenden. Um einen eigenen Server zu verwenden, schalten Sie diese Funktion ab und geben Sie die entsprechende Adresse ein. Sie erhalten die lokale Standard-Adresse und bereits verwendete Adressen zur Auswahl.

In älteren expecco-Versionen ist der Haken mit "Bei Bedarf starten" beschriftet. In diesem Fall müssen Sie auch eine Adresse angeben, wenn expecco den Server starten soll. expecco versucht dann beim Verbinden einen Appium-Server an der angegebenen Adresse zu starten, wenn dort noch keiner läuft. Dieser Server wird dann beim Beenden der Verbindung ebenfalls heruntergefahren. Dies funktioniert nur für lokale Adressen. Achten Sie darauf, nur Portnummern zu verwenden, die auch frei sind. Verwenden Sie am besten nur ungerade Portnummern ab dem Standardport 4723. Beim Verbindungsaufbau wird ebenfalls die folgende Portnummer verwendet, wodurch es sonst zu Konflikten kommen könnte.

Je nachdem, wie Sie den Dialog geöffnet haben, gibt es nun verschiedene Schaltflächen um ihn abzuschließen. In jedem Fall haben Sie die Option zu speichern. Dabei öffnet sich ein Dialog, indem Sie entweder ein geöffnet Projekt auswählen können, um die Einstellungen dort als Anhang zu speichern, oder auswählen es in einer Datei zu speichern, die Sie anschließend angeben können. Durch das Speichern wird der Dialog nicht beendet, wodurch Sie anschließend noch eine andere Option auswählen könnten.

Wenn Sie den Editor zum Verbindungsaufbau geöffnet haben, können Sie abschließend auf "Verbinden" oder "Server starten und verbinden" klicken, je nachdem, ob der Haken für den Serverstart gesetzt ist. Für das Ändern oder Kopieren einer Verbindung im GUI-Brower heißt diese Option "Übernehmen", da in diesem Fall nur der Verbindungseintrag geändert bzw. neu angelegt wird, der Verbindungsaufbau aber nicht gestartet wird. Das können Sie bei Bedarf anschließend über das Kontextmenü tun. Falls Sie Capabilities einer bestehenden Verbindung geändert haben, fordert Sie anschließend ein Dialog auf zu entscheiden, ob diese Änderungen direkt übernommen werden sollen, indem die Verbindung abgebaut und mit den neuen Verbindungen aufgebaut wird, oder nicht. In diesem Fall werden die Änderungen erst wirksam, nachdem Sie die Verbindung neu aufbauen.

Zur Verwendung des Verbindungseditors lesen Sie auch den entsprechenden Abschnitt im jeweiligen Tutorial in Schritt 1 (Android: Demo ausführen, iOS: Demo ausführen (iOS)).

Erweiterte Ansicht[Bearbeiten]

Die erweiterte Ansicht des Verbindungseditors erhalten Sie entweder durch Klicken auf "Bearbeiten" im dritten Schritt oder jederzeit über den entsprechenden Menüeintrag, wenn Sie den Editor über das Plugin-Menü gestartet haben. In dieser Ansicht erhalten Sie eine Liste aller eingestellten Appium-Capabilities. Zu dieser können Sie weitere hinzufügen, Einträge ändern oder entfernen. Um eine Capability hinzuzufügen, wählen Sie diese aus der Drop-down-Liste des Eingabefelds aus. In dieser befinden sich alle bekannten Capabilities sortiert in die Kategorien Common, Android und iOS. Haben Sie eine Capability ausgewählt, wird ein kurzer Informationstext dazu angezeigt. Sie können in das Feld auch von Hand eine Capability eingeben. Klicken Sie dann auf "Hinzufügen", um die Capabilitiy in die Liste einzutragen. Dort können Sie in der rechten Spalte den Wert setzen. Um einen Entrag zu löschen, wählen Sie diesen aus und klicken Sie auf "Entfernen". Mit "Zurück" verlassen Sie die erweiterte Ansicht.

MobileTestingErweiterteAnsicht.png

Laufende Appium-Server[Bearbeiten]

Im Menü des Mobile Testing Plugins finden Sie den Eintrag "Appium-Server...". Mit diesem öffnen Sie ein Fenster mit einer Übersicht aller Appium-Server, die von expecco gestartet wurden und auf welchem Port diese laufen. Durch Klicken auf das Icon in der Spalte "Log anzeigen" können Sie das Logfile des entsprechenden Servers anschauen. Dieses wird beim Beenden des Servers wieder gelöscht. Mit den Icons in der Spalte "Beenden" kann der entsprechenden Server beendet werden. Allerdings wird dies verhindert, wenn expecco über diesen Server noch eine offene Verbindung hat. Für welche Verbindung ein Server verwendet wird, sehen Sie in der rechten Spalte. Steht dort <idle> wird er zur Zeit nicht von expecco verwendet.

MobileTestingAppiumServer.png

Beim Öffnen des Editors um eine Appium-Verbindung aufzubauen, wird direkt ein Appium-Server gestartet, um den folgenden Verbindungsaufbau zu beschleunigen. Zu diesem Zweck hält sich expecco auch immer einen freien Appium-Server offen. Weitere laufende Server, die nicht mehr verwendet werden, werden jedoch nach einiger Zeit automatisch beendet.

Im Menü des Mobile Testing Plugins finden Sie auch den Eintrag "Alle Verbindungen und Server beenden". Dies ist für den Fall gedacht, dass Verbindungen oder Server auf andere Weise nicht beendet werden können. Beenden Sie Verbindungen wenn möglich immer im GUI-Browser oder durch Ausführen eines entsprechenden Bausteins. Server, die Sie in der Server-Übersicht gestartet haben, beenden Sie dort; Server, die mit einer Verbindung gestartet wurden, werden automatisch mit dieser beendet.

Beachten Sie, dass in der Übersicht nur Server aufgelistet sind, die von expecco gestartet und verwaltet werden. Mögliche andere Appium-Server, die auf andere Art gestartet wurden, werden nicht erkannt.

Recorder[Bearbeiten]

Besteht im GUI-Browser eine Verbindung zu einem Gerät, kann der integrierte Recorder verwendet werden, um mit diesem Gerät einen Testabschnitt aufzunehmen. Sie starten den Recorder, indem Sie im GUI-Browser die entsprechende Verbindung auswählen und dann auf den Aufnahme-Knopf klicken. Für den Recorder öffnet sich ein neues Fenster. Die aufgezeichneten Aktionen werden im Arbeitsbereich des GUI-Browsers angelegt. Daher ist es möglich, das Aufgenommene parallel zu editieren.

MobileTestingRecorder.png

Komponenten des Recorderfensters[Bearbeiten]

  1. Aufnahme fortsetzen/pausieren: Über das rechte Symbol können Sie die Aufnahme pausieren. Sie sehen dann ein großes Pause-Symbol in der Anzeige. Alle Aktionen, die Sie währenddessen im Recorder machen werden zwar ausgeführt, es werden aber keine Bausteine aufgezeichnet. Über das linke Symbol können Sie dann wieder in den normalen Aufnahmemodus wechseln.
  2. Aufnahme stoppen: Stoppt die Aufnahme und schließt das Recorderfenster.
  3. Aktualisieren: Holt das aktuelle Bild und den aktuellen Elementbaum vom Gerät. Dies wird nötig, wenn das Gerät zur Ausführung einer Aktion länger braucht oder sich etwas ohne das Anstoßen durch den Recorder ändert. Seit expecco 21.2 gibt es hier zusätzlich ein Untermenü, mit dem automatisches Aktualisieren angeschaltet werden kann, indem im Hintergrund auf Änderungen geprüft wird (siehe auch Automatisches Aktualisieren weiter unten).
  4. Follow-Mouse: Das Element unter dem Mauszeiger wird im GUI-Browser ausgewählt.
  5. Element-Highlighting: Das Element unter dem Mauszeiger wird rot umrandet.
  6. Elemente einzeichnen: Die Rahmen aller Elemente der Ansicht werden angezeigt.
  7. Werkzeuge: Auswahl, mit welchem Werkzeug aufgenommen werden soll. Die gewählte Aktion wird bei einem Klick auf die Anzeige ausgelöst. Dabei stehen folgende Aktionen zur Verfügung:
    • Aktionen auf Elemente:
      • Klicken: Kurzer Klick auf das Element, über dem der Cursor steht. Zur genaueren Bestimmung, welches Element verwendet wird, benutzen Sie die Funktion Follow-Mouse oder Element-Highlighting.
      • Antippen mit Dauer (Element): Ähnlich zum Klicken, nur dass zusätzlich die Dauer des Klicks aufgezeichnet wird. Dadurch sind auch längere Klicks möglich.
      • Antippen mit Position (Element): Ähnlich zum Klicken, aber zusätzlich wird die Position innerhalb des Elements aufgenommen. Die Position kann relativ zur Größe des Elements aufgenommen werden oder, wenn Sie dabei Strg gedrückt halten, absolut zur linken oberen Ecke des Elements.
      • Text setzen: Ermöglicht das Setzen eines Textes in Eingabefelder.
      • Text löschen: Löscht den Text eines Eingabefelds.
    • Aktionen auf das Gerät:
      • Antippen (Bildschirm): Löst einen Klick auf die Bildschirmposition aus.
      • Antippen mit Dauer (Bildschirm): Löst einen Klick auf die Bildschirmposition aus, bei dem auch die Dauer berücksichtigt wird.
      • Wischen: Wischen in einer geraden Linie vom Punkt des Drückens des Mausknopfes bis zum Loslassen. Die Dauer wird ebenfalls aufgezeichnet.
    Beachten Sie bei diesen Aktionen, dass das Ergebnis sich auf verschiedenen Geräten unterscheiden kann, bspw. bei verschiedenen Bildschirmauflösungen.
    • Erstellen von Testablauf-Bausteinen
      • Attribut prüfen: Vergleicht den Wert eines festgelegten Attributs des Elements mit einem vorgegebenen Wert. Das Ergebnis triggert den entsprechenden Ausgang.
      • Attribut zusichern: Vergleicht den Wert eines festgelegten Attributs des Elements mit einem vorgegebenen Wert. Bei Ungleichheit schlägt der Test fehl.
      • Attribut holen: Liest den aktuellen Wert eines Attributs aus.
    • Automatisch
    Ist das Auto-Werkzeug ausgewählt, können alle Aktionen durch spezifische Eingabeweise benutzt werden: Klicken, Element antippen und Wischen funktionieren weiterhin durch Klicken, wobei sie anhand der Dauer und der Bewegung des Cursors unterschieden werden. Um ein Antippen auszulösen, halten Sie beim Klicken Strg gedrückt. Die übrigen Aktionen erhalten Sie durch einen Rechtsklick auf das Element in einem Kontextmenü.
  8. Kontext-Aktionen: Hier können Sie Aktionen aufzeichnen, die Kontexte betreffen:
    • Zu Kontext wechseln: Bietet eine Liste der aktuell verfügbaren Kontexte und Sie können auswählen, zu welchem gewechselt werden soll.
    • Aktuellen Kontext holen: Holt den Handle des aktuellen Kontexts.
    • Kontext-Handles holen: Holt eine Liste aller aktuell verfügbaren Kontext-Handles.
  9. Softkeys: Nur unter Android. Simuliert das Drücken der Knöpfe Zurück, Home, Fensterliste und Power.
  10. Home-Button: Nur unter iOS ab expecco 2.11. Ermöglicht das Drücken des Home-Buttons. Vor expecco 19.2 funktioniert es nur, wenn AssistiveTouch aktiviert ist und sich das Menü in der Mitte des oberen Bildschirmrands befindet. Ab expecco 19.2 verwendet die Funktion kein AssistiveTouch mehr.
  11. Hilfe: Öffnet diese Online-Dokumentation auf der allgemeinen Seite zu GUI-Browser Recordern.
  12. Anzeige: Zeigt einen Screenshot des Geräts. Aktionen werden mit der Maus je nach Werkzeug ausgelöst. Wenn eine neue Aktion eingegeben werden kann, hat das Fenster einen grünen Rahmen, sonst ist er rot.
  13. Fenster an Bild anpassen: Ändert die Größe des Fensters so, dass der Screenshot vollständig angezeigt werden kann.
  14. Bild an Fenster anpassen: Skaliert den Screenshot auf eine Größe, mit der er die volle Größe des Fensters ausnutzt.
  15. Ansicht anpassen: Öffnet einen Dialog um die Ansicht anzupassen, falls expecco das Bild nicht richtig darstellt. Sie können die Skalierung anpassen oder das Bild um 90° drehen.
  16. Ausrichtung anpassen: Korrigiert das Bild, falls dieses auf dem Kopf stehen sollte. Über den Pfeil rechts daneben kann das Bild auch um 90° gedreht werden, falls dies einmal nötig sein sollte. Ab expecco 19.1 finden Sie diese Funktion in Ansicht anpassen. Die Ausrichtung des Bildes ist für die Funktion des Recorders unerheblich, dieser arbeitet ausschließlich auf den erhaltenen Elementen.
  17. Skalierung: Ändert die Skalierung des Screenshots.
  18. Meldungen: Zeigt den Pfad des ausgewählten Elements oder andere Meldungen an. Es gibt ein Kontextmenü, um eine Liste der vorigen Meldungen zu sehen.

Verwendung[Bearbeiten]

Mit jedem Klick im Fenster wird eine Aktion ausgelöst und im Arbeitsbereich des GUI-Browsers aufgezeichnet. Dort können Sie das Aufgenommene abspielen, editieren oder daraus einen neuen Baustein erstellen. Aktionen zum Auslösen von Sofkeys finden Sie direkt in der Menüleiste (s.o.). Um Aktionen auf Elemente aufzuzeichen, ändern Sie entweder die Auswahl des Werkzeugs in der Menüleiste (s.o.) und klicken dann auf das Element oder wählen Sie die entsprechende Aktion aus dem Kontextmenü durch einen Rechtsklick auf das entsprechende Element aus. Für Texteingabe ist es zudem möglich, den Cursor über dem Element zu platzieren und den Text einzugeben. Dabei öffnet sich der Eingabedialog für diese Aktion. Zur Verwendung des Recorders lesen Sie auch Schritt 2 im Tutorial (Android bzw. iOS).

Elemente verbergen[Bearbeiten]

Ab expecco 21.2 gibt es im Kontextmenü außerdem die Möglichkeit, das ausgewählte Element im Recorder zu verbergen. Das bedeutet, dass dieses Element fortan nicht mehr ausgewählt werden kann. Diese Funktion eignet sich dazu, Elemente zu ignorieren, die im Vordergrund liegen, um auf Elemente darunter zugreifen zu können. Um diesen Zustand wieder rückgängig zu machen, müssen Sie das entsprechende Element im Baum des GUI-Browsers finden, dort gibt es im Kontextmenü ebenfalls einen solchen Eintrag.

Automatisches Aktualisieren[Bearbeiten]

Der Recorder zeigt kein Livebild des Geräts sondern nur eine Momentaufnahme. Um mit der Anzeige auf dem Gerät übereinzustimmen muss daher nach Änderungen aktualisiert werden. Der Recorder aktualisiert sich automatisch, nachdem er eine Aktion ausgeführt hat. Ab expecco 20.2 sind zudem weitere automatische Updates möglich. Sie können Sie im Menü Fenster aktivieren.

Zum einen kann kurze Zeit nach dem Ausführen einer Aktion überprüft werden, ob es noch Änderungen nach der ersten Aktualisierung gegeben hat, damit in diesem Fall eine zweite Aktualisierung stattfinden kann. Dies soll das Problem beheben, dass der Recorder nach einer Aktion nicht aktuell ist, weil die Aktualisierung zu früh stattgefunden hat.

Zum anderen kann eine periodische Aktualisierung eingeschaltet werden. Nach einem einstellbaren Interval wird der Recorder automatisch aktualisiert, sollte es Änderungen geben. Dadurch ist die Anzeige im Recorder immer weitgehend aktuell, allerdings entsteht dadurch auch ein Mehraufwand was die Kommunikation mit dem Gerät betrifft.

AVD Manager und SDK Manager[Bearbeiten]

AVD Manager und SDK Manager sind beides Anwendungen von Android. Im Menü des Mobile Testing Plugins bietet expecco die Möglichkeit, diese zu starten. Ansonsten finden Sie diese Programme bei Ihrer Android-Installation. Mit dem AVD Manager können Sie AVDs, also Konfigurationen für Emulatoren, erstellen, bearbeiten und starten. Mit dem SDK Manager erhalten Sie einen Überblick über Ihre Android-Installation und können diese bei Bedarf erweitern.

Hybrid-Apps und WebViews[Bearbeiten]

!!! WICHTIGER HINWEIS - Wenn Sie Probleme haben, auf den Webview zu wechseln, geben Sie bitte unter den Android Einstellungen - Apps -Standard Apps "Chrome" als "Browser-App" an !!!

Hybrid-Apps enthalten neben den Plattform-nativen Elementen weitere Elemente, die in einen WebView eingebunden sind. Diese Elemente können ebenfalls bedient werden, allerdings muss zuvor in den entsprechenden Kontext gewechselt werden. Mit dem Baustein "Get Current Context" erhalten Sie den aktuellen Kontext. Zu Beginn ist dies "NATIVE_APP", also der Kontext der nativen Elemente. Mit dem Baustein "Get Context Handles" bekommen Sie eine Collection aller vorhandenen Kontexte. Gibt es einen WebView-Kontext, so heißt dieser "WEBVIEW_1" oder "WEBVIEW_<package>" mit dem Paket des WebViews. Es kann auch mehrere WebView-Kontexte geben. Zu jedem WebView-Kontext gibt es im nativen Kontext ein entsprechendes WebView-Element. Mit dem Baustein "Switch to Context" können Sie in einen solchen Kontext wechseln und haben fortan nur Zugriff auf die Elemente in diesem Kontext.

Im GUI-Browser werden zum einen oben im Baum die vorhandenen Kontexte angezeigt, zum anderen wird der Baum eines Kontexts unterhalb des entsprechenden WebView-Elements eingefügt.

XPath anpassen mithilfe des GUI-Browsers[Bearbeiten]

Bausteine, die auf einem Gerät fehlerfrei funktionieren, tun dies auf anderen Geräten möglicherweise nicht. Auch können kleine Änderungen der App dazu führen, dass ein Baustein nicht mehr den gewünschten Effekt hat. Man sollte einen Baustein daher so robust formulieren, dass er für eine Vielzahl von Geräten verwendet werden kann und kleine Anpassungen an der App verkraftet. Dazu muss man das grundlegende Funktionsprinzip der Adressierung verstehen. Dies wird im Folgenden am Beispiel der App aus dem Tutorial erläutert.

Die Ansicht der App setzt sich aus einzelnen Elementen zusammen. Dazu gehören die Schaltflächen "GTIN-13 (EAN-13)" und "Verify", das Eingabefeld der Zahl "4006381333986" und das Ergebnisfeld, in dem OK erscheint, wie auch alle anderen auf der Anzeige sichtbaren Dinge. Diese sichtbaren Elemente sind in unsichtbare Strukturelemente eingebettet. Alle Elemente zusammen sind in einer zusammenhängenden Hierarchie, dem Elementbaum, organisiert.

Abb. 1: Funktionen des GUI-Browsers


Sie können sich diesen Baum im GUI-Browser ansehen. Wechseln Sie dazu in den GUI-Browser (Abb. 1) und starten Sie eine beliebige Verbindung. Sobald die Verbindung aufgebaut ist, können Sie den gesamten Baum aufklappen (1) (Klick bei gedrückter Strg-Taste). Er enthält alle Elemente der aktuellen Seite der App.

Ein Baustein, der nun ein bestimmtes Element verwendet, muss dieses eindeutig angeben, indem er dessen Position im Elementbaum mit einem Pfad im XPath-Format beschreibt. Dieses Format ist ein verbreiteter Web-Standard für XML-Dokumente und -Datenbanken, eignet sich aber genauso für Pfade im Elementbaum.

Wenn Sie ein Element im Baum auswählen, wird unten der von expecco automatisch generierte XPath (2) für das Element angezeigt, der auch beim Aufzeichnen verwendet wird. Oberhalb davon in der Mitte des Fensters befindet sich eine Liste der Eigenschaften (3) des ausgewählten Elements. Man nennt diese Eigenschaften auch Attribute. Sie beschreiben das Element näher wie beispielsweise seinen Typ, seinen Text oder andere Informationen zu seinem Zustand. Links unten können Sie zur besseren Orientierung im Baum die Vorschau (4) aktivieren, um sich den Bildausschnitt des Elements anzeigen zu lassen.

Der Elementbaum für gleiche Ansicht einer App kann sich je nach Gerät unterscheiden. Es sind diese Unterschiede, die verhindern, eine Aufnahme von einem Gerät unverändert auch auf allen anderen Geräten abzuspielen: Ein XPath, der im einen Elementbaum ein bestimmtes Element identifiziert, beschreibt nicht unbedingt das gleiche Element im Elementbaum auf einem anderen Gerät. Es kann stattdessen passieren, dass der XPath auf kein Element, auf ein falsches Element oder auf mehrere Elemente passt. Dann schlägt der Test fehl oder er verhält sich unerwartet.

Man könnte natürlich für jedes Gerät einen eigenen Testfall schreiben. Das brächte aber unverhältnismäßigen Aufwand bei Testerstellung und -wartung mit sich. Das Problem lässt sich auch anders lösen, da ein jeweiliges Element nicht nur durch genau einen XPath beschrieben wird. Vielmehr erlaubt der Standard mithilfe verschiedener Merkmale unterschiedliche Beschreibungen für ein und dasselbe Element zu formulieren. Das Ziel ist daher, einen Pfad zu finden, der auf allen für den Test verwendeten Geräten funktioniert und überall eindeutig zum richtigen Element führt.

Im Beispiel besteht die Verbindung zur Android-App aus dem Tutorial und der Eintrag des "GTIN-13"-Buttons ist ausgewählt (5). Dessen automatisch generierter XPath (2) kann beispielsweise so aussehen:

//hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[@resource id='android:id/content']/android.widget.RelativeLayout/android.widget.Button[@resource-id='de.exept.expeccomobiledemo:id/gtin_13']

Er ist offensichtlich lang und unübersichtlich. Der sehr viel kürzere Pfad

//*[@text='GTIN-13 (EAN-13)']

führt zum selben Element.

Für die iOS-App lautet der automatisch generierte XPath für diesen Button beispielsweise

//AppiumAUT/XCUIElementTypeApplication/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeButton[2]

bzw.

//AppiumAUT/UIAApplication/UIAWindow[1]/UIAButton[2]

und kann kürzer als

//*[@name='GTIN-13 (EAN-13)']

geschrieben werden.

Sie können den Pfad entsprechend im GUI-Browser ändern und durch "Pfad überprüfen" (6) feststellen, ob er weiterhin auf das ausgewählte Element zeigt, was expecco mit "Verify Path: OK" (7) bestätigen sollte. Der erste, sehr viel längere Pfad, beschreibt den gesamten Weg vom obersten Element des Baumes bis hin zum gesuchten Button. Der zweite Pfad hingegen wählt mit "*" zunächst sämtliche Elemente des Baumes und schränkt die Auswahl dann auf genau die Elemente ein, die ein text- bzw. name-Attribut mit dem Wert "GTIN-13 (EAN-13)" besitzen, in unserem Fall also genau der eine Button, den wir suchen.

Im folgenden werden Android-ähnliche Pfade zur Veranschaulichung verwendet. Die Elemente in iOS-Apps heißen zwar anders, wodurch andere Pfade entstehen; das Prinzip ist jedoch das gleiche.

Abb. 2: Elementbaum einer fiktiven App

Sie können solche Pfade mit Hilfe weniger Regeln selbst formulieren. Sehen Sie sich den einfachen Baum einer fiktiven Android-App in Abb. 2 an: Die Einrückungen innerhalb des Baumes geben die Hierarchie der Elemente wieder. Ein Element ist ein Kind eines anderen Elementes, wenn jenes andere Element das nächsthöhere Element mit einem um eins geringeren Einzug ist. Jenes Element ist das Elternelement des Kindes. Sind mehrere untereinander stehende Elemente gleich eingerückt, so sind sie also alle Kinder desselben Elternelements.

Ein Pfad durch alle Ebenen der Hierarchie zum TextView-Element ist nun:

//hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.TextView

Die Elemente sind mit Schrägstrichen voneinander getrennt. Es fällt auf, dass der Name des ersten Elements nicht mit dem im Baum übereinstimmt. Das oberste Element in der Hierarchie heißt immer "hierarchy" (für iOS wäre es "AppiumAUT"), expecco zeigt im Baum stattdessen den Namen der Verbindung an, damit man mehrere Verbindungen voneinander unterscheiden kann. Die weiteren Elemente tragen jeweils das Präfix "android.widget.", das im Baum zur besseren Übersicht nicht angezeigt wird. Bei IOS gibt es kein Präfix, das durch einen Punkt abgetrennt wäre, expecco 2.11 blendet aber entsprechend "XCUIElementType" am Anfang aus. Mit jedem Schrägstrich führt der Pfad über eine Eltern-Kind-Beziehung in eine tiefere Hierarchie-Ebene, d. h. "FrameLayout" ist ein Kindelement von "hierarchy", "LinearLayout" ist ein Kind von "FrameLayout" usw. Die in eckigen Klammern geschriebenen Wörter dienen nur als Orientierungshilfe im Baum. Sie gehören nicht zum Typ.

Ein Pfad muss nicht beim Element "hierarchy" beginnen. Man kann den Pfad beginnend mit einem beliebigen Element des Baumes bilden. Man kann also verkürzt auch

//android.widget.TextView

schreiben. Der Pfad führt zum selben "TextView"-Element, da es nur ein Element dieses Typs gibt. Anders verhält es sich bei dem Pfad

//android.widget.Button.

Da es zwei Elemente vom Typ "Button" gibt, passt dieser Pfad auf zwei Elemente, nämlich den Button, der mit "An" markiert ist, und den Button, der mit "Aus" markiert ist. Es würde an dieser Stelle aber auch nicht helfen den langen Pfad von hierarchy aus beginnend anzugeben. Um einen mehrdeutigen Pfad weiter zu differenzieren, kann man explizit ein Element aus einer Menge wählen, indem man den numerischen Index in eckigen Klammern dahinter schreibt. Der Pfad aus dem obigen Beispiel lässt sich damit so anpassen, dass er eindeutig auf den Button mit der Markierung "Aus" weist:

//android.widget.Button[1].

Ihnen fällt sicher auf, dass der Index eine 1 ist obwohl das zweite Element gemeint ist. Das kommt daher, dass die Zählung bei 0 beginnt. Der Button mit der Markierung "An" hat also die Nummer 0 und der Button mit der Markierung "Aus" hat die Nummer 1.

Dieser Ansatz, einen expliziten Index zu verwenden, hat zwei Nachteile: Zum einen lässt sich an dem Pfad nur schwer ablesen welches Element gemeint ist, zum andern ist der Pfad sehr empfindlich schon gegenüber kleinsten Änderungen, wie zum Beispiel dem Vertauschen der beiden Button-Elemente oder dem Einfügen eines weiteren Button-Elements in der App.

Es wäre daher wünschenswert, das gemeinte Element über eine ihm charakteristische Eigenschaft wie einen Attributwert, zu adressieren. Für Android-Apps eignet sich hierfür häufig das Attribut "resource-id". Im Idealfall muss bei der Entwicklung der App darauf geachtet werden, dass jedes Element eine eindeutige Id erhält. Die resource-id hat den großen Vorteil, dass sie unabhängig vom Text des Elements oder der Spracheinstellung des Geräts ist. Für iOS-Apps kann entsprechend das Attribut "name" verwendet werden, wenn es von der App sinnvoll gesetzt wird. Der XPath-Standard erlaubt solche Auswahlbedingungen zu einem Element anzugeben. Angenommen, der Button mit der Markierung "Aus" hat die Eigenschaft resource-id mit dem Wert off und der Button mit der Markierung "An" hat als resource-id den Wert on, dann kann man als eindeutigen Pfad für den "Aus"-Button

//android.widget.Button[@resource-id='off']

formulieren. Wie an dem Beispiel zu sehen werden solche Bedingungen wie ein Index in eckigen Klammern an den Elementtyp angehängt. Der Name eines Attributes wird mit einem "@" eingeleitet und der Wert mit einem "=" in Anführungszeichen angehängt. Ist der Attributwert global eindeutig, kann man den vorausgehenden Pfad sogar durch den globalen Platzhalter * ersetzen, der auf jedes Element passt. Das obige Beispiel mit dem GTIN-13-Button war ein solcher Fall.

Abb. 3: Elementbaum einer fiktiven App mit Erweiterungen

Abb. 3 zeigt eine Erweiterung des Beispiels aus Abb. 2. Die App hat nun ein weiteres, nahezu identisches LinearLayout bekommen. Die Buttons sind in ihren Attributen jeweils ununterscheidbar. Deshalb funktioniert der vorige Ansatz nicht, einen eindeutigen Pfad nur mithilfe eines Attributwerts zu formulieren. Offensichtlich unterscheiden sich aber ihre benachbarten TextViews. Es ist möglich die jeweilige TextView in den Pfad mit aufzunehmen, um einen Button dennoch eindeutig zu adressieren. Ein Pfad zum Button mit der Markierung "An" unterhalb der TextView mit der Markierung "Druckschalter" kann dabei wie folgt aussehen:

//android.widget.TextView[@resource-id='push']/../android.widget.Button[@resource-id='on']

Der erste Teil beschreibt den Pfad zu der TextView mit der Markierung "Druckschalter" und der resource-id mit dem Wert push. Danach folgt ein Schrägstrich gefolgt von zwei Punkten. Die zwei Punkte sind eine spezielle Elementbezeichnung, die nicht ein Kindelement benennt, sondern zum Elternelement wechselt, in diesem Fall also das LinearLayout, in dem die TextView eingebettet ist. Im Kontext dieses LinearLayout ist der restliche Pfad, nämlich der Button mit der resource-id mit dem Wert on, eindeutig.

Der XPath-Standard bietet noch sehr viel mehr Ausdrucksmittel. Mit der hier knapp vorgestellten Auswahl ist es aber bereits möglich für die meisten praktischen Testfälle gute Pfade zu formulieren. Eine vollständige Einführung in XPath ginge über den Umfang dieser Einführung weit hinaus. Sie finden zahlreiche weiterführende Dokumentationen im Web und in Büchern.

Eine universelle Strategie zum Erstellen guter XPaths gibt es nicht, da sie von den Testanforderungen abhängt. In der Regel ist es sinnvoll, den XPath kurz und dennoch eindeutig zu halten. Häufig lassen sich Elemente über Eigenschaften identifizieren wie beispielsweise ihren Text. Will man aber gerade den Text eines Elements auslesen, kann dieser natürlich nicht im Pfad verwendet werden, da er vorher nicht bekannt ist. Ebenso wird der Text variieren, wenn die App mit verschiedenen Sprachen gestartet wird.

Jeder Baustein, der auf einem Element arbeitet, hat einen Eingangspin für den XPath. Im GUI-Browser finden Sie in der Mitte oben eine Liste von Bausteinen mit Aktionen, die Sie auf das ausgewählte Element anwenden können. Suchen Sie den Baustein Click (8) im Ordner Elements und wählen Sie ihn aus (Abb. 1). Er wird im rechten Teil unter "Test" eingefügt, der Pin für den XPath ist mit dem automatisch generierten Pfad des Elements vorbelegt (9). Sie können den Baustein hier auch ausführen. Die Ansicht wechselt dann auf "Lauf". Ändert sich durch die Aktion der Zustand Ihrer App, müssen Sie den Baum anschließend aktualisieren (10).

Wenn Sie in der unteren Liste eine Eigenschaft auswählen, wechselt die Anzeige der Bausteine zu "Eigenschaften", wo Sie die eigenschaftsbezogenen Bausteine finden. Wie bei den Aktionen können Sie auch hier einen Baustein auswählen, der dann rechts in Test mit dem Pfad des Elements und der ausgewählten Eigenschaft eingetragen wird, sodass Sie ihn direkt ausführen können.

Weitere Locator-Strategien[Bearbeiten]

Appium bietet neben XPath noch weitere Strategien zur Adressierung von Elementen an. Einige davon stehen Ihnen ab Version 20.1 ebenfalls mit expecco zur Verfügung. Diese sind nicht ganz so mächtig wie XPath, dafür aber häufig schneller bei der Auflösung auf dem Gerät. Insbesondere bei der Verwendung mit iPhones, wo die Hierarchie bei jeder XPath-Auflösung erst aufgebaut werden muss, bieten alternative Strategien einen Vorteil für die Laufzeit.

XPath ist weiterhin der Standard, das heißt alle Locator ohne besondere Angabe werden als XPath interpretiert. Um eine der anderen Strategien zu verwenden, schreiben Sie diese mit einem Gleichzeichen vor den gewünschten Locator. Diese Technik können Sie sowohl an den Blöcken verwenden, als auch im GUI-Browser testen.

AccessibilityId Verwendet den Wert des Elements, der dazu dient, die App barrierefrei zu machen. Für iOS ist das das Attribut Accessibility-id, für Android das Attribut content-descr. Beispiel: accessibilityId=Löschen
className Verwendet den Namen der Klasse des Elements. Beispiel: className=android.widget.FrameLayout
id Verwendet die Kennung des Elements. Für iOS ist das das Attribut name, für Android das Attribut resource-id. Beispiel: id=android:id/text1
iOSClassChain1 Verwendet die Hierarchie der Elemente ähnlich wie bei XPath. Eine Erklärung zum Aufbau finden Sie hier. Beispiel: iOSClassChain=XCUIElementTypeWindow/XCUIElementTypeButton[`label == "Ok"`]
iOSNsPredicateString1 Verwendet einfache Kriterien, wie Attribute, die auch kombiniert werden können. Beispiel: iOSNsPredicateString=type == 'XCUIElementTypeButton' AND name == 'Weiter'
name1 Verwendet den Namen des Elements. Beispiel: name=Bestätigen
1 nur für iOS

Um eine direkte Beschleunigung mit iOS zu erzielen, ohne dass Sie Ihre bisherigen Pfade anpassen müssen, wandelt expecco zudem Pfade, die nur aus einem Element mit Klasse und name-Attribut bestehen, zur Laufzeit automatisch in einen entsprechenden Locator der Strategie iOSNsPredicateString um. Wenn Sie einen Pfad explizit als XPath markieren, wird diese Anpassung nicht vorgenommen.

Probleme und Lösungen[Bearbeiten]

Locator sind versionsabhängig oder variabel[Bearbeiten]

Dann sollten Sie die Locator (xPath) entweder in einer Variablen halten oder ein Locator-Mapping in einem Screenplay Anhang definieren. Es ist auch möglich, lediglich Teile des Locators (z.B. Locator-Pfad eines Elternelements oder Attributwert) in einer Variable zu halten und im Freezevalue des Locator-Pins mit "$(varName)" einzufügen.

Unsichtbare UI-Elemente[Bearbeiten]

Beachten Sie, dass im Recorder auch Elemente berücksichtigt werden, die Sie auf dem Bildschirm nicht sehen. Schalten Sie daher das Element-Highlighting an oder nutzen Sie die Follow-Mouse-Funktion und den Elementbaum im GUI-Browser, um festzustellen, ob das richtige Element verwendet wird. Es kann vorkommen, dass unsichtbare Elemente vor anderen Elementen liegen und diese verdecken, so dass die gewünschten Elemente im Recorder nicht ausgewählt werden können. Lesen Sie dazu den Abschnitt Elemente verbergen.

iOS: Kabel nicht zertifiziert[Bearbeiten]

In manchen Fällen erscheint beim Verbinden eines iOS-Geräts über USB der Hinweis, das verwendete Kabel sei nicht zertifiziert. In diesem Fall hilft es nur, das entsprechende Kabel auszutauschen.

iOS: Alerts beim Verbindungsaufbau[Bearbeiten]

Stellen Sie sicher, dass beim Verbindungsaufbau mit einem iOS-Gerät keine Alerts geöffnet sind. Der Aufbau schlägt sonst fehl, da die App nicht in den Vordergrund kommen kann. Siehe auch iOS-Gerät und App vorbereiten.

iOS: .ipa installieren nicht möglich[Bearbeiten]

Beachten Sie, dass auf iOS-Simulatoren keine .ipa-Dateien sondern nur .app-Dateien installiert werden können.

iOS: Erster Verbindungsaufbau funktioniert nicht[Bearbeiten]

Wenn auf Ihrem Mac noch kein signierter Build des WebDriverAgents liegt, muss dieser beim ersten Verbindungsaufbau erst erzeugt werden. Das kann in der Regel etwas länger als eine Minute dauern. Standardmäßig verwendet Appium aber einen Timeout von 60000 ms um zu warten bis der WebDriverAgent auf dem Gerät startet, so dass der Aufbau in diesen Fällen abgebrochen wird. Sie können den Timeout mit der Capability wdaLaunchTimeout setzen, z.B. auf 120000.

Außerdem müssen die Einstellungen für die Signierung passen. Am zuverlässigsten funktioniert das nach unserer Erfahrung, wenn man im Xcode-Projekt des WebDriverAgents auf automatische Signierung stellt und das Team setzt. Siehe dazu die Erklärung im Abschnitt WebDriverAgent-Signierung. In diesem Fall sollten Sie die Capabilities xcodeConfigFile bzw. xcodeOrgId und xcodeSigningId nicht verwenden, da es sonst zu Konflikten kommen kann. Achtung: Wenn Sie eine Team-ID in den Mobile-Testing-Einstellungen gesetzt haben, setzt expecco diese automatisch als xcodeOrgId!

Achten Sie beim ersten Verbindungsaufbau außerdem auf Ihr Gerät, da Sie dort möglicherweise der Installation per Passwort zustimmen müssen. Auf dem Mac kann die Eingabe des Passworts zur Freigabe des Schlüsselbunds für die Signierung nötig werden, häufig auch mehrmals.

Android: Gerät nicht im Verbindungsdialog[Bearbeiten]

Wenn ein über USB angeschlossenes Android-Gerät nicht im Verbindungsdialog auftaucht, versuchen Sie, den USB-Verbindungstyp zu ändern. In der Regel sollten MTP oder PTP funktionieren. Prüfen Sie nochmal, ob "USB Debugging" in den Entwicklereinstellungen des Geräts aktiviert ist (diese Einstellungen sind bei manchen Geräten zunächst unsichtbar, und müssen durch einen Trick zugänglich gemacht werden). Siehe auch Android-Gerät vorbereiten.

Android: Abgeschnittene Elemente unten[Bearbeiten]

Bei Android-Geräten, die die Steuerungsleiste bzw. Softkeys automatisch ein- und ausblenden, kann es vorkommen, dass der Recorder im unteren Bereich Elemente abschneidet, die durch die Softkeys verdeckt würden, auch wenn sie zu diesem Zeitpunkt gar nicht angezeigt werden. In diesem Fall hift es, die Softkeys so einzustellen, dass sie in einer permanenten Leiste angezeigt werden.

Bei neueren Android-Versionen gibt es eine solche Einstellung in der Regel nicht. Auch wenn die Steuerelemente permanent eingeblendet sind, liegen sie auf keiner extra Leiste, sondern vor dem Inhalt der App. Es gibt dann im unteren Teil einen Bereich, der nicht bedient werden kann, weil er nicht zum aktiven Bereich der App gezählt wird, weshalb die Elemente von Appium abgeschnitten werden. Dieser Bereich kann auch größer sein als von den Steuerungselementen beansprucht. Bekannt ist dies für Samsung-Geräte mit Android 11. Da die Information über die Größe des App-Bereichs bereits auf Android-Ebene so geliefert wird, können wir hierfür keine Lösung anbieten, sondern können nur hoffen, dass das Problem vom Hersteller behoben wird. Sie können versuchen, ob Sie mit der Einstellung von Gestensteuerung bessere Ergebnisse bekommen, allerdings gibt es hier das gleiche Problem.

Android: Test hängt beim Suchen eines Elements[Bearbeiten]

Der Baustein Find Element by XPath und alle Element-Bausteine warten bis ein Element zum angegebenen Pfad auftaucht. Den Timeout dafür kann man entweder am Baustein direkt oder in den Umgebungsvariablen ändern. Wenn das Element aber bereits da sein sollte und es dennoch sehr lange dauert, bis der Test weitergeht, kann das am UIAutomator/UIAutomator2 liegen. Dieser wartet, bis die App in den Idle-Zustand geht, bevor er überhaupt nach Elementen sucht. Dies kann länger dauern, wenn die App z.B. im Hintergrund noch Animationen abspielt oder andere Aktionen ausführt. Auch das Holen des Page-Sources z.B. beim Aktualisieren im GUI-Browser oder im Recorder kann dadurch länger dauern. Standardmäßig gibt es hierfür einen Timeout von 10 Sekunden, nach dem nicht weiter auf den Idle-Zustand gewartet wird. Dieser Timeout lässt sich durch eine Einstellung in Appium anpassen (waitForIdleTimeout). Falls Sie einen anderen Wert für diesen Timeout setzen möchten, ist dies ab expecco 21.2 möglich, indem Sie vor dem Test den Smalltalk-Code AppiumTestRunner::TestRunConnection waitForIdleTimeout:2000 ausführen. Der Timeout wird in Millisekunden angegeben, das Beispiel setzt ihn also auf 2 Sekunden.

Android: Aktualisieren des Trees oder Wechseln zum Webview-Kontext braucht zu lange[Bearbeiten]

Speziell mit älteren Geräten kann es vorkommen, dass neuere Chromedriver nicht initialisiert werden können. Das führt dann dazu, dass nicht in den Webview-Kontext gewechselt werden kann. Dies wird von Appium allerdings nur über einen Timeout festgestellt, der standardmäßig bei 4 Minuten liegt. Da expecco auch beim Aufbauen des Trees im GUI-Browser versucht in den Webview-Kontext zu wechseln, kann das zu sehr langen Ladezeiten führen. Da es in Appium keine Möglichkeit gibt, diesen Timeout herunter zu setzen, haben wir die Version, die wir im MobileTestingSupplement bereitstellen, um eine entsprechende Capability erweitert. Ab der Version 1.13.1.0 des MobileTestingSupplements kann mit chromedriverStartTimeout der Timeout in Millisekunden gesetzt werden. Der Wechsel funktioniert dadurch zwar trotzdem nicht, aber expecco braucht dann nicht mehr so lange beim Aktualisieren des Trees und der Baustein zum Wechseln des Kontextes schlägt schneller fehl. Der Verbindungsdialog fügt diese Capability ab expecco 22.1 automatisch hinzu.

Keine Aktion bei Klick[Bearbeiten]

Der Baustein zum Klicken auf ein Element ist erfolgreich, aber auf dem Gerät wurde keine Aktion ausgeführt.

Dies kann vorkommen, wenn das Element von einem anderen Element verdeckt ist und ein Klick auf das Element deshalb nicht möglich ist. In diesem Fall wird von Appium kein Fehler geworfen, sondern es passiert einfach nichts. Wenn Sie dennoch einen Klick an der Position des Elements machen möchten, auch wenn es verdeckt ist, benutzen Sie stattdessen den Baustein Tap und übergeben Sie diesem die Position des Elements (Get Location). Wenn Sie stattdessen vor einem Klick prüfen möchten, ob das Element zu diesem Zeitpunkt verdeckt ist, versuchen Sie, ob Ihnen die Eigenschaften Is Displayed oder Is Enabled weiterhelfen.

Kein Update nach Aktion[Bearbeiten]

Über den Recorder wurde eine Aktion ausgeführt, für die auch ein Baustein aufgezeichnet wurde, der Recorder zeigt aber immer noch das alte Bild.

Der Recorder zeigt kein Livebild des Geräts, sondern immer nur eine Momentaufnahme. Nachdem eine Aktion ausgeführt wurde, aktualisiert sich der Recorder automatisch. Es kann aber vorkommen, dass das Bild schon aktualisiert wurde, bevor die Auswirkungen der Aktion auf dem Gerät vollständig abgeschlossen sind. In diesem Fall sollten Sie den Recorder von Hand aktualisieren über das Symbol mit den blauen Pfeilen. Ab expecco 20.2 können Sie für diesen Fall auch automatisches Aktualisieren einstellen. Siehe auch Beschreibung zum Recorder.

"clickable" Attribut falsch[Bearbeiten]

Ein Element hat im "clickable" Attribut/Property den Wert "false", ist aber dennoch anklickbar.

Das "clickable" Attribute muss explizit vom App-Programmierer gesetzt werden, und hat tatsächlich keine Relevanz für das tatsächliche Verhalten der App. Sie sollten dieses Attribut i.A. in Ihren Tests nicht beachten.
Leider existieren viele Apps, bei denen der Programmierer hier "lazy" war.

Verbindungsaufbau schlägt fehl[Bearbeiten]

Schlägt der Verbindungsaufbau mit dem Appium-Server fehl, erhalten Sie in expecco eine Fehlermeldung ähnlicher der unten abgebildeten.

MobileTestingVerbindungsfehler.png

Hier sehen Sie die Art des aufgetretenen Fehlers. Klicken Sie auf "Details" um nähere Informationen zu erhalten. Mögliche Fehler sind:

  • org.openqa.selenium.remote.UnreachableBrowserException
Der angegebene Server läuft nicht oder ist nicht erreichbar. Überprüfen Sie die Serveradresse.
  • org.openqa.selenium.WebDriverException
Lesen Sie in den Details in der ersten Zeile die Meldung hinter Original Error:
  • Unknown device or simulator UDID
Entweder ist das Gerät nicht richtig angeschlossen oder die udid stimmt nicht.
  • Unable to launch WebDriverAgent because of xcodebuild failure: xcodebuild failed with code 65
Dieser Fehler kann verschiedene Ursachen haben. Entweder konnte tatsächlich der WebDriverAgent nicht gebaut werden, weil die Signierungseinstellungen falsch sind oder das passende Provisioning Profile fehlt. Lesen Sie dazu den Abschnitt zur Signierung. Es kann auch sein, dass der WebDriverAgent auf dem Gerät nicht gestartet werden kann, weil sich beispielsweise ein Alert im Vordergrund befindet oder Sie dem Entwickler nicht vertraut haben.
  • Could not install app: 'Command 'ios-deploy [...] exited with code 253'
Die angegebene App kann nicht auf dem iOS-Gerät installiert werden, weil es nicht im Provisioning Profile der App eingetragen ist.
  • Bad app: [...] App paths need to be absolute, or relative to the appium server install dir, or a URL to compressed file, or a special app name.'
Der Pfad zur App ist falsch. Stellen Sie sicher, dass sich die Datei unter dem angegebenen Pfad auf dem Mac befindet.
  • packageAndLaunchActivityFromManifest failed.
Die angegebene apk-Datei ist vermutlich kaputt.
  • Could not find app apk at [...]
Der Pfad zur App ist falsch. Stellen Sie sicher, dass sich die apk-Datei am angegebenen Pfad befindet.


Falls der Fehler nicht durch eine der oben gelisteten Ursachen bedingt ist, kann es sein, dass die auf dem Gerät befindlichen Automation-Anwendungen nicht mehr richtig funktionieren. Hier hilft es, diese vom Mobilgerät zu deinstallieren. Beim nächsten Verbindungsaufbau werden sie dann automatisch neu installiert.

  • Für iOS-Geräte ist das der WebDriverAgent, den Sie einfach vom Home-Screen deinstallieren können. Dies behebt in der Regel Probleme durch den Wechsel des verwendeten Macs oder der Xcode-Version.
  • Für Android-Geräte ist es der UIAutomator2; hier tritt auf einigen Geräten sporadisch ein Problem auf, die Ursache dafür ist uns z.Z. noch nicht bekannt. Zur Deinstallation navigieren Sie auf dem Gerät zu "Einstellungen" > "Anwendungen"* und suchen in der Liste nach folgenden Einträgen:
   Appium Settings
   io.appium.uiautomator2.server
   io.appium.uiautomator2.server.test
Klicken Sie auf die jeweilige Anwendung und dann auf "Deinstallieren".

*Der entsprechende Eintrag heißt auf manchen Geräten möglicherweise etwas anders.


Falls dies nicht hilft, kann eventuell die Ausgabe des Appium-Servers weiterhelfen. Für einen von expecco gestarteten Server finden Sie das Log in der Liste der laufenden Appium-Server.

Ich habe keinen Mac[Bearbeiten]

Vielleicht hilft Ihnen diese Webseite weiter: https://www.howtogeek.com/289594/how-to-install-macos-sierra-in-virtualbox-on-windows-10



Copyright © 2014-2024 eXept Software AG