Dies sind die Java-Sprachbindungen zum Schreiben von Appium-Tests, die dem WebDriver-Protokoll entsprechen
Seit v9 unterstützt der Client nur noch Java 11 und höher. Befolgen Sie den Migrationsleitfaden von v8 auf v9, um den Migrationsprozess zu optimieren.
Seit Version 8 gab es beim Appium Java Client mehrere große Änderungen, die möglicherweise eine Aktualisierung Ihres Client-Codes erforderlich machen. Befolgen Sie unbedingt den Migrationsleitfaden von v7 auf v8, um den Migrationsprozess zu optimieren.
Fügen Sie Folgendes zu pom.xml hinzu:
< dependency >
< groupId >io.appium groupId >
< artifactId >java-client artifactId >
< version >${version.you.require} version >
< scope >test scope >
dependency >
Fügen Sie build.gradle Folgendes hinzu:
dependencies {
testImplementation ' io.appium:java-client:${version.you.require} '
}
Das Java-Client-Projekt kann bereits verwendet werden, bevor es offiziell in Maven Central veröffentlicht wird. Siehe jitpack.io
Fügen Sie Folgendes zu pom.xml hinzu:
< repositories >
< repository >
< id >jitpack.io id >
< url >https://jitpack.io url >
repository >
repositories >
Fügen Sie die Abhängigkeit hinzu:
< dependency >
< groupId >com.github.appium groupId >
< artifactId >java-client artifactId >
< version >latest commit ID from master branch version >
dependency >
Fügen Sie das JitPack-Repository zu Ihrer Build-Datei hinzu. Fügen Sie es zu Ihrem Root-build.gradle am Ende der Repositorys hinzu:
allprojects {
repositories {
// ...
maven { url ' https://jitpack.io ' }
}
}
Fügen Sie die Abhängigkeit hinzu:
dependencies {
implementation ' com.github.appium:java-client:latest commit id from master branch '
}
Appium Java-Client | Selenium-Client |
---|---|
9.2.1 (bekannte Probleme: #2145, #2146), 9.2.2 , 9.2.3 , 9.3.0 | 4.19.0 , 4.19.1 , 4.20.0 , 4.21.0 , 4.22.0 , 4.23.0 |
9.1.0 , 9.2.0 | 4.17.0 , 4.18.0 , 4.18.1 |
9.0.0 | 4.14.1 , 4.15.0 , 4.16.0 (teilweise beschädigt), 4.16.1 |
N / A | 4.14.0 |
8.5.0 , 8.5.1 , 8.6.0 | 4.9.1 , 4.10.0 , 4.11.0 , 4.12.0 , 4.12.1 (bekanntes Problem: #2004), 4.13.0 |
8.4.0 | 4.8.2 , 4.8.3 , 4.9.0 |
8.3.0 | 4.7.0 , 4.7.1 , 4.7.2 , 4.8.0 , 4.8.1 |
8.2.1 | 4.5.0 , 4.5.1 , 4.5.2 , 4.5.3 , 4.6.0 |
Der Selenium-Client folgt nicht der semantischen Versionierung, sodass möglicherweise auch in Patches wichtige Änderungen eingeführt werden, was erfordert, dass das Appium-Team als Reaktion darauf den Java-Client aktualisiert.
Der Appium Java Client deklariert Selenium-Abhängigkeiten mithilfe eines offenen Versionsbereichs, der von verschiedenen Build-Tools unterschiedlich gehandhabt wird. Manchmal möchten Benutzer aus verschiedenen Gründen möglicherweise verwendete Selenium-Abhängigkeiten anheften. Weitere Informationen zum Einrichten einer festen Selenium-Version für Ihr Java-Testframework finden Sie im Artikel Transitive Dependencies Management.
Der Appium-Java-Client verfügt über spezielle Klassen zur Unterstützung der folgenden Appium-Treiber:
Um andere Plattformen zu automatisieren, die oben nicht aufgeführt sind, können Sie AppiumDriver oder seine benutzerdefinierten Derivate verwenden.
Der Appium-Java-Client basiert auf Selenium und implementiert dieselben Schnittstellen wie der Basis-RemoteWebDriver. Selenium lib konzentriert sich jedoch hauptsächlich auf die Webbrowser-Automatisierung, während Appium universell ist und eine breite Palette möglicher Plattformen abdeckt, z. B. mobile und Desktop-Betriebssysteme, IOT-Geräte usw. Daher erweitert die Basisklasse AppiumDriver
in diesem Paket RemoteWebDriver
um zusätzliche Funktionen und macht es flexibler, sodass es nicht so streng auf Webbrowser-bezogene Vorgänge ausgerichtet ist.
Der Appium-Java-Client bietet eine dedizierte Klasse zur Steuerung der Appium-Serverausführung. Die Klasse ist AppiumDriverLocalService. Es ermöglicht die lokale Ausführung und Überprüfung des Appium-Servers über Ihren Test-Framework-Code und bietet mehrere praktische Verknüpfungen. Der Dienst könnte wie folgt genutzt werden:
AppiumDriverLocalService service = AppiumDriverLocalService . buildDefaultService ();
service . start ();
try {
// do stuff with drivers
} finally {
service . stop ();
}
Sie können das Dienstverhalten anpassen, beispielsweise benutzerdefinierte Befehlszeilenargumente bereitstellen oder Pfade zu ausführbaren Serverdateien mithilfe von AppiumServiceBuilder ändern
Notiz
AppiumDriverLocalService unterstützt keine Serververwaltung auf nicht lokalen Hosts
UiAutomator2Options options = new UiAutomator2Options ()
. setUdid ( "123456" )
. setApp ( "/home/myapp.apk" );
AndroidDriver driver = new AndroidDriver (
// The default URL in Appium 1 is http://127.0.0.1:4723/wd/hub
new URL ( "http://127.0.0.1:4723" ), options
);
try {
WebElement el = driver . findElement ( AppiumBy . xpath ( "//Button" ));
el . click ();
driver . getPageSource ();
} finally {
driver . quit ();
}
XCUITestOptions options = new XCUITestOptions ()
. setUdid ( "123456" )
. setApp ( "/home/myapp.ipa" );
IOSDriver driver = new IOSDriver (
// The default URL in Appium 1 is http://127.0.0.1:4723/wd/hub
new URL ( "http://127.0.0.1:4723" ), options
);
try {
WebElement el = driver . findElement ( AppiumBy . accessibilityId ( "myId" ));
el . click ();
driver . getPageSource ();
} finally {
driver . quit ();
}
BaseOptions options = new BaseOptions ()
. setPlatformName ( "myplatform" )
. setAutomationName ( "mydriver" )
. amend ( "mycapability1" , "capvalue1" )
. amend ( "mycapability2" , "capvalue2" );
AppiumDriver driver = new AppiumDriver (
// The default URL in Appium 1 is http://127.0.0.1:4723/wd/hub
new URL ( "http://127.0.0.1:4723" ), options
);
try {
WebElement el = driver . findElement ( AppiumBy . className ( "myClass" ));
el . click ();
driver . getPageSource ();
} finally {
driver . quit ();
}
Sehen Sie sich die README-Dateien des entsprechenden Treibers an, um die Liste der unterstützten Funktionen und Features zu erfahren.
Viele weitere Codebeispiele finden Sie in den Unit- und Integrationstests des Kunden.
Der Appium-Java-Client nutzt den reflektierenden Zugriff auf private Mitglieder anderer Module, um die ordnungsgemäße Funktionalität mehrerer Funktionen wie des Seitenobjektmodells sicherzustellen. Wenn Sie eine Laufzeitausnahme erhalten und InaccessibleObjectException
im Stack-Trace vorhanden ist und Ihre Java-Laufzeit Version 16 oder höher hat, ziehen Sie das folgende Tutorial von Oracle in Betracht und/oder prüfen Sie vorhandene Probleme auf mögliche Lösungen. Die Idee wäre, den Zugriff für bestimmte Module mithilfe der Befehlszeilenargumente --add-exports/--add-opens
explizit zu erlauben.
Eine andere mögliche, aber wenig empfohlene Lösung wäre ein Downgrade von Java auf Version 15 oder niedriger.
Solche Probleme treten normalerweise auf, wenn der Appium-Server direkt aus Ihrem Framework-Code gestartet wird, anstatt separat durch ein Skript oder manuell ausgeführt zu werden. Abhängig von der Art und Weise, wie der Serverprozess gestartet wird, erbt er möglicherweise die aktuell aktive Shell-Umgebung. Aus diesem Grund erhalten Sie möglicherweise immer noch Fehlermeldungen über das Vorhandensein der Variablen, obwohl diese Variablen für Ihren Befehlszeileninterpreter definiert sind. Auch hier gibt es keine universelle Lösung, da es viele Möglichkeiten gibt, einen neuen Serverprozess zu starten. Weitere Informationen zum Debuggen und Beheben von Prozessumgebungsproblemen finden Sie im Dokument zur Fehlerbehebung in der Appium-Umgebung.
Besuchen Sie CHANGELOG.md, um die vollständige Liste der Änderungen zwischen den Versionen anzuzeigen.
Führen Sie einen Test mit durch
gradle clean -Dtest.single=IOSAlertTest-Test