Appium Gewünschte Fähigkeiten für Android Emulator
⚡ Intelligente Zusammenfassung
Die gewünschten Fähigkeiten sind die Schlüssel-Wert-Paare. Appium Der Client sendet beim Öffnen einer Sitzung eine Nachricht an den Server, in der er mitteilt, auf welcher Plattform, welchem Gerät, welchem Treiber und welcher Anwendung der automatisierte Test ausgeführt werden soll.
Was sind gewünschte Fähigkeiten?
Die „gewünschten Fähigkeiten“ helfen uns, das Verhalten des Servers während der Automatisierung anzupassen. Appium Es handelt sich um eine Hashmap oder ein Schlüssel-Wert-Paar, das verwendet wird, um einen Befehl an den/die/das zu senden. Appium Server, auf dem jeder Client-Befehl im Kontext einer Sitzung ausgeführt wird.
Ein Client sendet beispielsweise eine POST-Anfrage an die /session-Schnittstelle, die ein JSON-Objekt enthält. Appium Server.
Um eine Anfrage zu senden oder eine Sitzung mit dem Server aufrechtzuerhalten, wird eine Reihe von Schlüssel-Wert-Paaren verwendet. Dies wird als „erwünschte Fähigkeiten“ bezeichnet.
import io.appium.java_client.AppiumDriver; import org.openqa.selenium.remote.DesiredCapabilities; { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("deviceName","Android Emulator"); capabilities.setCapability("platformVersion", "4.4"); }
Wichtige Rolle der gewünschten Fähigkeiten
- „DesiredCapabilities“ helfen dem Benutzer, die Sitzungsanfrage an den Server zu steuern. Beispielsweise setzen wir für eine iOS-Sitzung die Capability platformName = iOS, und für eine andere Sitzung… Android Sitzungsplattformname = Android.
- „DesiredCapabilities“ werden verwendet, um die WebDriver-Instanz einzurichten, zum Beispiel FirefoxDriver, ChromeDriver oder InternetExplorerDriver.
- DesiredCapability ist sehr nützlich für Selenium Grid. Es wird beispielsweise verwendet, um verschiedene Testfälle in unterschiedlichen Browsern und auf unterschiedlichen Betriebssystemen auszuführen. Basierend auf der angegebenen Funktionalität verweist der Grid-Hub auf den entsprechenden Knoten. Knoten werden mithilfe der „set“-Eigenschaftsmethoden definiert:
DesiredCapabilities obj = new DesiredCapabilities(); obj.setBrowserName("firefox"); obj.setVersion("18.0.1"); obj.setPlatform(org.openqa.selenium.Platform.WINDOWS);
- Eine gewünschte Funktion ist ein in einer Bibliothek definiertes Paket. Bevor Sie „DesiredCapabilities“ verwenden können, müssen Sie es aus der unten stehenden Bibliothek importieren.
Org.openqa.selenium.remote.DesiredCapabilities
Appium unterstützt beide Android und iOS, daher gibt es einen separaten Satz von Appium Serverkapazitäten für jede Plattform.
Die folgende Tabelle zeigt einige häufig verwendete Android Fähigkeiten und die zu verwendenden Werte.
| Kompetenzen | Beschreibung | Werte/Verwendungen |
|---|---|---|
| AppPaket | Rufen Sie den gewünschten Java Paket in Android dass der Benutzer ausführen möchte |
Wert= com.example.myapp/ Obj.setCapability(„appPackage“, „com.whatsapp“); |
| AppAktivität | Die Anwendungsaktivität, die der Benutzer aus dem Paket starten möchte. |
Wert= MainActivity, .Settings Obj.setCapability(„appActivity“, „com.whatsapp.Main“); |
| appWaitPackage | Paket, auf das die Anwendung warten muss | Wert=com.example.android.myapp |
| appWaitActivity | Jedes Android Aktivität, auf die der Benutzer warten muss |
Wert = SplashActivity abilities.setCapability(“appWaitActivity”, “com.example.game.SplashActivity”) |
HINWEIS: siehe Appium Dokumentation um mehr zu sehen Android Funktionen.
Die folgende Tabelle zeigt einige häufig verwendete iOS-Funktionen und die zu verwendenden Werte.
| Kompetenzen | Beschreibung | Werte |
|---|---|---|
| LaunchTimeout | Gesamtzeit (in ms), die auf die Instrumentierung gewartet wird. | 2000 |
| DU TATEST | Um die eindeutige Gerätenummer eines angeschlossenen physischen Geräts zu ermitteln | 166aestu4 |
HINWEIS: siehe Appium Leitfaden zu den Fähigkeiten Um weitere iOS-Funktionen anzuzeigen.
Wie sich die gewünschten Fähigkeiten verändert haben Appium 2
Die obigen Beispiele stammen aus der Appium Eine Ära und zeigt immer noch die Form eines Fähigkeitssets, aber zwei Regeln haben sich geändert und beide verhindern den Start einer modernen Sitzung.
Erstens definiert die W3C WebDriver-Spezifikation nur eine kleine Anzahl von Standardfunktionen, von denen platformName und browserName Hier kommt es auf die Funktionalität an. Alle anderen Funktionen sind herstellerspezifische Erweiterungen und müssen ein Namespace-Präfix tragen, das mit einem Doppelpunkt endet. Appium's Präfix ist appium:. So deviceName wird appium:deviceName und platformVersion wird appium:platformVersion. Appium 2 erfordert außerdem appium:automationNameweil die Treiber separat installiert werden und nicht mit dem Server gebündelt sind.
Zweitens wird die Wiederholung des Präfixes auf Dauer mühsam, daher Appium akzeptiert eine einzelne appium:options Eine Fähigkeit, deren Wert ein Objekt ist. Fähigkeiten innerhalb dieses Objekts benötigen kein Präfix, und wenn ein Name sowohl innerhalb als auch außerhalb des Objekts vorkommt, hat der innere Wert Vorrang.
{
"platformName": "iOS",
"appium:options": {
"automationName": "XCUITest",
"platformVersion": "16.0",
"app": "/path/to/your.app",
"deviceName": "iPhone 12",
"noReset": true
}
}
⚠️ Versionshinweis: auf die Java Seite, Selenium 4 und Appium Java Client 8 hat die veraltete DesiredCapabilities Die zuvor gezeigte Klasse. Treiberspezifische Builder, die von dieser Klasse geerbt wurden. BaseOptions Ersetzen Sie es — UiAutomator2Options für Android und XCUITestOptions für iOS – mit einer Eins-zu-Eins-Karteping von jedem alten setCapability Aufruf. Der obige Originalcode wird hier als historisches Beispiel beibehalten.
ExtracInformationen zu Reisepaketen und Aktivitäten
Pakete sind gebündelte Dateien oder Klassen. Sie verleihen der modularen Programmierung eine organisierte Struktur. JavaVerschiedene Pakete werden in einer einzigen JAR-Datei gespeichert, und der Benutzer kann diese JAR-Datei zur vollständigen Ausführung aufrufen. Ein ähnliches Konzept wird bei der Entwicklung mobiler Anwendungen verfolgt.
Im Android Betriebssystem, alle Anwendungen werden in folgender Form installiert: Java Pakete. Also, um z.B.tract Paketpfadinformationen, die Android Die PackageManager-Klasse wird verwendet.
Es ruft Paket- und Aktivitätsinformationen für vorinstallierte und nachinstallierte Anwendungen auf dem Gerät ab.
Sie können eine Instanz der Klasse PackageManager durch Aufruf von getPackageManager() erhalten. Diese Methode ermöglicht den Zugriff auf und die Bearbeitung der Pakete und zugehörigen Berechtigungen der installierten Anwendungen.
Beispielsweise:
PackageManager pManager = getPackageManager();
List<ApplicationInfo> list = pManager.getInstalledApplications(PackageManager.GET_META_DATA)
Wie man appPackage und appActivity mit adb findet
Der oben beschriebene Weg über den PackageManager funktioniert innerhalb einer Anwendung. Als Tester haben Sie normalerweise nur die installierte Version zur Verfügung, daher ist die schnellere Methode eine Abfrage über adb gegen ein angeschlossenes Gerät oder einen Emulator.
Öffnen Sie die Anwendung manuell auf dem Gerät und führen Sie anschließend einen der unten stehenden Befehle in einem Terminal im Ordner „platform-tools“ aus. Der Befehl gibt das aktuell fokussierte Fenster aus, und der Wert ist wie folgt formatiert: package/activity.
adb shell dumpsys window | find "mCurrentFocus" adb shell dumpsys window windows | grep -i "mCurrentFocus"
Verwenden Sie das erste Formular in der Windows Die Eingabeaufforderung und die zweite in einer Unix-Shell oder Git Bash. Lesen Sie das Ergebnis als zwei Hälften: Alles vor dem Schrägstrich ist der Wert für appPackageund alles danach ist der Wert für appActivity.
Zwei Dinge sind zu beachten. Die relevante Aktivität ist diejenige, die in diesem Moment auf dem Bildschirm angezeigt wird. Dies ist nicht immer die Startaktivität der Anwendung. Falls eine Sitzung während der Treiberinitialisierung fehlschlägt, starten Sie die Anwendung neu und lesen Sie den Wert erneut aus. Und falls zuerst ein Startbildschirm erscheint, unterscheidet sich die Einstiegsaktivität von derjenigen, deren Wert Sie letztendlich überprüfen möchten. Genau das ist hier der Fall. appWaitActivity existiert für.
Eine visuelle Alternative ist uiautomatorviewer, das die aktuelle Bildschirmhierarchie erfasst und das Paket und die Klasse jedes Knotens anzeigt.
Häufige Fehler bei den gewünschten Funktionen und wie man sie behebt
Die meisten scheiterten Appium Die Sitzungen enden, bevor ein einziger Testschritt ausgeführt wird, und die Ursache liegt fast immer im Funktionsumfang und nicht im Test selbst. Die folgende Tabelle ordnet jeder Meldung ihre übliche Lösung zu.
| Nachricht | Wahrscheinliche Ursache | Fixieren |
| Ungültige oder nicht unterstützte WebDriver-Funktion | Eine nicht standardmäßige Funktion wurde ohne Herstellerpräfix gesendet. | Füge appium: hinzu oder verschiebe es in appium:options. |
| Die gewünschten Funktionen müssen entweder einen Automatisierungsnamen oder einen Plattformnamen enthalten. | Appium 2 kann keinen Fahrer auswählen | Legen Sie platformName und appium:automationName explizit fest. |
| Die App konnte nicht gestartet werden. Ursprünglicher Fehler: Die zum Starten der App verwendete Aktivität existiert nicht. | Die appActivity stimmt nicht mit dem Manifest überein. | Lesen Sie den Wert mit dem obigen Befehl dumpsys erneut ein. |
| Sitzung konnte nicht gestartet werden: Es wurden keine Geräte gefunden. | Es ist kein Emulator oder Mobilteil angeschlossen. | Überprüfen Sie das Gerät vor dem Start mit adb devices. |
| Nach Ablauf des Timeouts konnte keine neue Sitzung erstellt werden. | Ein Begrüßungsbildschirm verzögert die Einstiegsaktivität. | Setze appWaitActivity und erhöhe appWaitDuration. |
| Der Anwendungsstatus wird zwischen den Ausführungen nicht zurückgesetzt. | Das Standardverhalten beim Zurücksetzen wurde überschrieben. | RevSchauen Sie sich appium:noReset und appium:fullReset für den gewünschten Lauf an. |
Wenn eine Sitzung nicht startet, lesen Sie die Appium Serverprotokoll anstatt des Client-Stacks trace. Der Server gibt an, welche Fähigkeit er nicht erfüllen konnte, und in dieser Zeile wird die Lösung genannt.
