Appium ist ein plattformübergreifendes Framework zur Automatisierung von Tests mobiler, Web- und Desktop-Anwendungen, basierend auf dem WebDriver-Protokoll. Es ermöglicht das Schreiben von Tests in jeder Programmiersprache und deren Ausführung auf Android, iOS und Windows ohne Codeänderungen. Laut der Appium Foundation, 2025 bietet das WebDriver-Protokoll eine einheitliche Schnittstelle für die Interaktion mit Anwendungen auf verschiedenen Plattformen.
Wichtige Punkte
Appium ist ein Open-Source-Framework zur Automatisierung mobiler Anwendungstests, das auf einer Client-Server-Architektur basiert. Der Appium-Server empfängt Befehle vom Client über das WebDriver-Protokoll und delegiert sie an native Treiber: XCUITest für iOS, UiAutomator2 für Android und WinAppDriver für Windows.
Appium wurde 2013 entwickelt und hat sich seitdem zum Industriestandard für plattformübergreifendes Testen entwickelt. Das Projekt wird von der Appium Foundation verwaltet und von großen Unternehmen unterstützt: Sauce Labs, HeadSpin, Microsoft. Weltweit nutzen monatlich über 500.000 Tester Appium.
Appium unterstützt drei Arten von Anwendungen: native (iOS, Android, Windows), mobile Webbrowser (Safari, Chrome) und hybride Anwendungen (WebView innerhalb einer nativen Hülle). Jeder Typ verwendet seinen eigenen Kontext: NATIVE_APP, WEBVIEW oder CHROMIUM.
Die Appium-Architektur besteht aus vier Schichten: Client-Code → Appium Client Library → Appium Server → nativer Treiber. Die Client-Bibliothek implementiert das WebDriver-Protokoll und sendet HTTP-Anfragen an den Server. Der Server wandelt sie in native Treiberbefehle der Plattform um.
WebDriver ist ein W3C-Standard für die Browserautomatisierung, der von Appium für mobile Geräte angepasst wurde. Jede Aktion — Elementsuche, Tippen, Texteingabe — wird als HTTP-Anfrage an den Server gesendet. Beispielsweise erstellt POST /session/{id}/element eine neue Testsitzung.
Jeder Test beginnt mit der Erstellung einer Sitzung über das Desired Capabilities-Objekt. Es legt fest: platformName, deviceName, appPath, automationName und zusätzliche Parameter. Appium verwendet diese Daten, um den geeigneten nativen Treiber und die Gerätekonfiguration auszuwählen.
# Beispiel für Desired Capabilities für Android
desired_caps = {
'platformName': 'Android',
'deviceName': 'Pixel_4',
'app': '/path/to/app.apk',
'automationName': 'UiAutomator2',
'appPackage': 'com.example.app',
'appActivity': '.MainActivity'
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
Appium wird über npm installiert: npm install -g appium. Nach der Installation müssen native Treiber für jede Plattform konfiguriert werden: appium driver install xcuitest und appium driver install uiautomator2. Für iOS wird Xcode und für Android das Android SDK benötigt.
Appium Inspector ist ein grafisches Werkzeug zur Inspektion von UI-Elementen. Es verbindet sich mit einem laufenden Appium-Server und zeigt die Hierarchie der UI-Komponenten, ihre Attribute und Locators an. Mit dem Inspector kann ein Selektor vor dem Schreiben eines Tests überprüft werden.
Der Appium-Server wird mit dem Befehl appium und optionalen Parametern gestartet: Port, Adresse, Protokollierung. Standardmäßig hört der Server auf Port 4723. Für die parallele Ausführung auf mehreren Geräten werden verschiedene Ports oder Appium-Cluster verwendet.
# Appium-Server mit Protokollierung starten
appium \
--port 4723 \
--log-level debug \
--use-plugins images \
--base-path /wd/hub
Appium-Tests verwenden das Page-Object-Muster zur Codeorganisation. Jeder Anwendungsbildschirm wird durch eine separate Klasse mit Element-Locators und Interaktionsmethoden beschrieben. Das Page Object Model vereinfacht die Testwartung bei Änderungen der Benutzeroberfläche und wiederverwendet Selektoren zwischen Testszenarien.
Appium unterstützt viele Strategien zur Elementsuche: id, xpath, accessibilityId, className, androidUIAutomator und iOSClassChain. Am meisten bevorzugt werden accessibilityId und id — sie sind trotz Layoutänderungen stabil. XPath sollte nur verwendet werden, wenn andere Locators nicht verfügbar sind.
// Page Object für den Login-Bildschirm
public class LoginPage {
private AppiumDriver driver;
private MobileElement emailField =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("emailInput"));
private MobileElement passwordField =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("passwordInput"));
private MobileElement loginButton =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("loginButton"));
public void login(String email, String password) {
emailField.sendKeys(email);
passwordField.sendKeys(password);
loginButton.click();
}
}
Appium unterstützt komplexe Gesten über die TouchAction-Klasse oder die W3C Actions API: Wischen, Multitouch, langes Drücken, Scrollen zu einem Element. Die neue W3C Actions API wird für neue Projekte empfohlen, da sie standardisiert ist und plattformübergreifend stabiler funktioniert.
Appium wird oft mit Detox, XCUITest und Espresso verglichen. Der Hauptvorteil von Appium ist die Plattformunabhängigkeit: Ein Test kann ohne Änderungen auf iOS und Android ausgeführt werden. Detox bietet jedoch eine bessere Synchronisierung für React Native, und XCUITest/Espresso bieten eine schnellere Ausführung für native Tests.
Appium eignet sich für Projekte, die ein einheitliches Framework für iOS, Android und das Web benötigen. Es ist unverzichtbar in Teams, in denen Tester in Java oder Python schreiben. Für React Native-Projekte mit vielen E2E-Tests sollte man aufgrund der automatischen Synchronisierung Detox in Betracht ziehen.
| Framework | Ansatz | Geschwindigkeit | Plattformübergreifend |
|---|---|---|---|
| Appium | Black-Box | Mittel | iOS, Android, Windows |
| Detox | Gray-Box | Hoch | iOS + Android (React Native) |
| XCUITest | White-Box | Hoch | Nur iOS |
Appium Grid ist eine Erweiterung zur parallelen Ausführung von Tests auf mehreren Geräten gleichzeitig. Appium Grid basiert auf Selenium Grid und ermöglicht die Verteilung von Tests auf mehrere Appium-Server, von denen jeder seinen eigenen Satz von Geräten oder Emulatoren verwaltet. Dies ist entscheidend für große Projekte, bei denen Regressionstests auf einem einzigen Gerät Stunden dauern — Grid reduziert die Zeit proportional zur Anzahl der Knoten auf Minuten.
Die Grid-Konfiguration verwendet eine JSON-Konfigurationsdatei, die Knoten mit Geräten beschreibt. Jeder Knoten gibt an: Server-Port, Liste der Geräte mit Plattform, Betriebssystemversion und maximale Anzahl von Sitzungen. Der Hub verteilt Tests auf freie Knoten und gewährleistet so eine maximale Auslastung der Infrastruktur.
{
"capabilities": [
{
"browserName": "android",
"platformName": "Android",
"deviceName": "Pixel_4",
"platformVersion": "14.0",
"maxInstances": 2
}
],
"configuration": {
"port": 4724,
"registerCycle": 5000
}
}
Wenn keine eigene Geräteinfrastruktur verfügbar ist, gibt es Cloud-Dienste: Sauce Labs, BrowserStack, LambdaTest. Sie bieten Hunderte von realen Geräten und Emulatoren in der Cloud. Die Integration mit Appium ist minimal: Geben Sie einfach die Cloud-Hub-URL und die Anmeldeinformationen in den Desired Capabilities anstelle von localhost an.
Appium unterstützt die parallele Testausführung mit TestNG (Java) oder pytest-xdist (Python). Die Parallelisierung erfordert eindeutige Ports für jede Sitzung und isolierte Testdaten. Jeder Thread startet seine eigene Appium-Sitzung auf einem separaten Gerät oder Emulator. Bei Verwendung von Cloud-Diensten ist die Parallelisierung automatisch — die Plattform verteilt Tests auf verfügbare Geräte und gibt sie nach Abschluss frei.
Bei Problemen mit Appium besteht der erste Schritt darin, das Serverprotokoll zu überprüfen (appium --log-level debug). Typische Fehler: Port belegt (geben Sie einen anderen --port an), inkompatible Treiberversion, fehlendes Android SDK oder Xcode. Stellen Sie bei iOS sicher, dass WebKitAgent ausgeführt wird und Zugriff auf den Simulator hat.
Wenn Appium ein Element nicht findet, überprüfen Sie: ob der Kontext korrekt ist (NATIVE_APP vs WEBVIEW), ob das Element auf dem Bildschirm sichtbar ist, ob es Scrollen erfordert und ob der Locator korrekt ist. Verwenden Sie Appium Inspector für die interaktive Suche und Überprüfung von XPath-Ausdrücken, bevor Sie sie in den Test einfügen. Es ist auch hilfreich, das Warten auf die Sichtbarkeit von Elementen über WebDriverWait zu aktivieren — dies löst Synchronisierungsprobleme bei langsamem UI-Laden.
Unsachgemäße Sitzungsbeendigung ist eine häufige Ursache für Instabilität von Appium-Tests. Schließen Sie den Treiber immer in einem finally-Block oder über AutoCloseable. Bei Fehlern verwenden Sie driver.quit() erzwungenermaßen. Stellen Sie bei iOS sicher, dass WebKitAgent (WDA) zwischen den Sitzungen neu gestartet wird, da sonst ein Fehler auftreten kann. Zur Überwachung des Sitzungsstatus in CI ist es praktisch, das Appium Dashboard-Plugin zu verbinden, das den Status aller laufenden Tests in Echtzeit visualisiert.
Zur Verbesserung der Teststabilität verwenden Sie: shouldTerminateApp (App zwischen Tests beenden), noReset (Daten zwischen Sitzungen beibehalten), autoGrantPermissions (Systemdialoge automatisch zulassen). Es wird auch empfohlen, Animationen auf dem Gerät über die Entwickleroptionen zu deaktivieren.
Häufig gestellte Fragen
Appium unterstützt alle gängigen Sprachen über Client-Bibliotheken: Java, Python, JavaScript, Ruby, C#, PHP und Kotlin. Jede Bibliothek implementiert dasselbe WebDriver-Protokoll, sodass Sie plattformübergreifende Tests in jeder Sprache schreiben können.
Nein, Appium funktioniert sowohl mit echten Geräten als auch mit Emulatoren und Simulatoren. Für Android werden Android Studio-Emulatoren verwendet, für iOS Xcode-Simulatoren. Echte Geräte werden nur zum Testen von Hardwarefunktionen benötigt: Sensoren, NFC, Kamera.
Appium 2 wurde komplett mit einer modularen Architektur mit Plugins und separaten Treibern neu geschrieben. In Appium 1 waren alle Treiber in den Server integriert. Appium 2 verwendet appium driver install zum Installieren von Treibern und appium plugin install für Plugins.
Appium verwendet Suchstrategien: By.id, By.xpath, By.accessibilityId, By.className, By.androidUIAutomator und By.iOSClassChain. Aus Geschwindigkeitsgründen wird die Verwendung von accessibilityId empfohlen — es ist stabil und unabhängig von Layoutänderungen.
Ja, Appium unterstützt das Testen mobiler Browser — Safari auf iOS und Chrome auf Android. Dabei wird der Kontext WEBVIEW oder CHROMIUM verwendet. Die Tests werden im Browser über Standard-WebDriver ähnlich wie bei Selenium ausgeführt.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch