Appium Požadované schopnosti pro Android emulátor
⚡ Chytré shrnutí
Požadované schopnosti jsou páry klíč-hodnota Appium klient odešle při zahájení relace informaci serveru o tom, proti které platformě, zařízení, ovladači a aplikaci by měl být automatizovaný test spuštěn.
Co jsou požadované schopnosti
„Požadované schopnosti“ nám pomáhají upravovat chování serveru během automatizace. Appium Jedná se o hashmapu neboli pár klíč-hodnota, který se používá k odeslání příkazu do Appium server, kde každý klientský příkaz běží v kontextu relace.
Například klient odešle požadavek POST /session obsahující objekt JSON do Appium serveru.
Pro odeslání požadavku nebo udržení relace se serverem se tedy používá sada párů klíč-hodnota. Toto je známé jako „požadované schopnosti“.
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"); }
Důležitá role požadované schopnosti
- „Požadované schopnosti“ pomáhají uživateli řídit požadavek na relaci se serverem. Například pro relaci iOS nastavíme capability platformName = iOS a pro Android Názevplatformyrelace = Android.
- 'DesiredCapabilities' se používají například k nastavení instance WebDriver. FirefoxOvladač, ovladač Chrome nebo ovladač Internet Exploreru.
- DesiredCapability je velmi užitečná pro Selenium Grid. Používá se například ke spouštění různých testovacích případů v jiném prohlížeči a jiném operačním systému. Na základě uvedené schopnosti ukazuje Grid Hub na odpovídající uzel. Uzly jsou definovány pomocí metod vlastnosti 'set':
DesiredCapabilities obj = new DesiredCapabilities(); obj.setBrowserName("firefox"); obj.setVersion("18.0.1"); obj.setPlatform(org.openqa.selenium.Platform.WINDOWS);
- Požadovaná schopnost je balíček definovaný knihovnou. Před použitím „DesiredCapabilities“ by měl být importován z níže uvedené knihovny.
Org.openqa.selenium.remote.DesiredCapabilities
Appium podporuje oba Android a iOS, takže existuje samostatná sada Appium možnosti serveru pro každou platformu.
Níže uvedená tabulka ukazuje některé běžně používané Android schopnosti a hodnoty, které je třeba použít.
| Možnosti | Description | Hodnoty/použití |
|---|---|---|
| appPackage | Zavolejte požadovanému Java balíček v Android které chce uživatel spustit |
Value= com.example.myapp/ Obj.setCapability(“appPackage”, “com.whatsapp”); |
| appActivity | Aktivita aplikace, kterou chce uživatel spustit z balíčku. |
Hodnota= MainActivity, .Settings Obj.setCapability(“appActivity”, “com.whatsapp.Main”); |
| appWaitPackage | Balíček, na který musí aplikace čekat | Value=com.example.android.myapp |
| appWaitActivity | Žádný Android aktivita, na kterou musí uživatel čekat |
Hodnota = SplashActivity schopnosti.setCapability("appWaitActivity", "com.example.game.SplashActivity") |
POZNÁMKA: viz Appium dokumentace zobrazit více Android schopnosti.
Níže uvedená tabulka ukazuje některé běžně používané funkce systému iOS a hodnoty, které je třeba použít.
| Možnosti | Description | Hodnoty |
|---|---|---|
| Časový limit spuštění | Celková doba (v ms) čekání na přístrojové vybavení. | 2000 |
| UDID | Identifikace jedinečného čísla připojeného fyzického zařízení | 166aestu4 |
POZNÁMKA: viz Appium průvodce schopnostmi zobrazit další funkce systému iOS.
Jak se požadované schopnosti změnily v Appium 2
Výše uvedené příklady pocházejí z Appium 1. éra a stále zobrazují tvar sady schopností, ale změnila se dvě pravidla a obě zabrání spuštění moderní relace.
Zaprvé, specifikace W3C WebDriver definuje pouze malou sadu standardních funkcí, z nichž platformName a browserName Zde záleží. Každá další funkce je rozšířením dodavatele a musí mít prefix jmenného prostoru končící dvojtečkou. AppiumPředpona je appium:. Tak deviceName se stává appium:deviceName a platformVersion se stává appium:platformVersion. Appium 2 také vyžaduje appium:automationName, protože ovladače se instalují samostatně, a nejsou součástí serveru.
Za druhé, opakování předpony je únavné, takže Appium přijímá jeden appium:options Schopnost, jejíž hodnota je objekt. Schopnosti uvnitř tohoto objektu nepotřebují žádný prefix a pokud se název objeví uvnitř i vně objektu, vítězí vnitřní hodnota.
{
"platformName": "iOS",
"appium:options": {
"automationName": "XCUITest",
"platformVersion": "16.0",
"app": "/path/to/your.app",
"deviceName": "iPhone 12",
"noReset": true
}
}
⚠️ Poznámka k verzi: na Java boční, Selenium 4 a Appium Java klient 8 označil za zastaralý DesiredCapabilities třída uvedená dříve. Tvůrci specifické pro ovladače zdědění z BaseOptions vyměnit to — UiAutomator2Options for Android a XCUITestOptions pro iOS – s mapou jedna k jednéping z každého starého setCapability volání. Původní kód výše je zde uložen jako historický příklad.
ExtracInformace o balíčcích a aktivitách
Balíčky jsou sdružené soubory nebo třídy. Dávají modulárnímu programování organizovanou strukturu. JavaRůzné balíčky jsou uloženy v jednom souboru JAR a uživatel může tento soubor JAR zavolat pro jeho plné spuštění. Podobný koncept se používá i při vývoji mobilních aplikací.
v Android operační systém, všechny aplikace jsou nainstalovány ve formě Java balíčky. Takže, k např.tracinformace o cestě balíčku, Android Používá se třída PackageManager.
Načítá informace o balíčcích a aktivitách pro předinstalované a dodatečně nainstalované aplikace v zařízení.
Instanci třídy PackageManager můžete získat voláním metody getPackageManager(). Tato metoda může přistupovat k balíčkům a souvisejícím oprávněním nainstalovaných aplikací a manipulovat s nimi.
Například:
PackageManager pManager = getPackageManager();
List<ApplicationInfo> list = pManager.getInstalledApplications(PackageManager.GET_META_DATA)
Jak najít appPackage a appActivity pomocí adb
Výše uvedená trasa PackageManager funguje z aplikace. Jako tester máte obvykle pouze nainstalovanou verzi, takže rychlejší cesta je dotaz přes Adb proti připojenému zařízení nebo emulátoru.
Ručně otevřete aplikaci na zařízení a poté spusťte jeden z níže uvedených příkazů z terminálu ve složce platform-tools. Příkaz vypíše okno, které je aktuálně aktivní, a hodnota je formátována jako package/activity.
adb shell dumpsys window | find "mCurrentFocus" adb shell dumpsys window windows | grep -i "mCurrentFocus"
Použijte první formulář v Windows příkazového řádku a druhý v Unixovém shellu nebo Git Bash. Výsledek se přečte jako dvě poloviny: vše před lomítkem je hodnota pro appPackagea vše, co následuje, je hodnota pro appActivity.
Platí dvě upozornění. Zaměřená aktivita je to, co je v daném okamžiku na obrazovce, což není vždy aktivita, se kterou aplikace začíná – pokud se relace během inicializace ovladače nezdaří, spusťte aplikaci znovu a znovu načtěte hodnotu. A pokud se nejprve zobrazí úvodní obrazovka, vstupní aktivita se bude lišit od té, proti které chcete nakonec provést assert, což je přesně ten případ. appWaitActivity existuje pro.
Vizuální alternativou je uiautomatorviewer, který zachycuje aktuální hierarchii obrazovky a zobrazuje balíček a třídu každého uzlu.
Časté chyby v požadovaných schopnostech a jak je opravit
Většina selhala Appium Relace končí před spuštěním jediného kroku testu a příčina je téměř vždy v sadě možností, nikoli v testu. Níže uvedená tabulka mapuje každou zprávu na její obvyklou opravu.
| Zpráva | Pravděpodobná příčina | Opravit |
| Neplatná nebo nepodporovaná funkce WebDriveru | Nestandardní funkce byla odeslána bez předpony dodavatele. | Přidejte k němu appium: nebo jej přesuňte dovnitř appium:options |
| Požadované funkce musí zahrnovat buď automatizační název (automationName), nebo název platformy (platformName). | Appium 2 si nemohou vybrat řidiče | Explicitně nastavte platformName a appium:automationName |
| Aplikaci nelze spustit. Původní chyba: aktivita použitá ke spuštění aplikace neexistuje. | Aktivita aplikace neodpovídá manifestu | Znovu si přečtěte hodnotu pomocí výše uvedeného příkazu dumpsys |
| Relace se nespustila: nenalezena žádná zařízení | Není připojen žádný emulátor ani telefon | Před spuštěním ověřte zařízení pomocí adb devices. |
| Po uplynutí časového limitu nebylo možné vytvořit novou relaci. | Úvodní obrazovka zpožďuje vstupní aktivitu | Nastavit appWaitActivity a zvýšit appWaitDuration |
| Stav aplikace se mezi spuštěními neresetuje. | Výchozí chování resetování bylo přepsáno. | RevZobrazte si appium:noReset a appium:fullReset pro požadovaný běh. |
Pokud se relace odmítá spustit, přečtěte si Appium protokol serveru, nikoli klientský stack trace. Server uvádí, kterou schopnost nemohl splnit, a daný řádek pojmenuje opravu.
