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.

  • ???? Sezení pod tlakemtract: Schopnosti se přenášejí v těle JSON požadavku na novou relaci a nelze je později změnit.
  • ☑️ Android základní věci: Prvky appPackage a appActivity pojmenují aplikaci a obrazovku. Appium by se mělo spustit.
  • (Tj. Varianty čekání: appWaitPackage a appWaitActivity pokrývají úvodní obrazovky, které se zobrazují před skutečným vstupním bodem.
  • 🧪 Appium 2. předpona: Každá nestandardní funkce nyní potřebuje prefix appium:vendor, jinak ji server odmítne.
  • 🛠️ moderní Java klient: DesiredCapabilities ustoupily UiAutomator2Options a XCUITestOptions v rámci Selenium 4.
  • 📊 Hledání hodnot: Dotaz adb dumpsys nebo třída PackageManager odhalí názvy balíčků a aktivit.

Appium požadované schopnosti párů klíč-hodnota pro Android relace emulátoru

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.

Nejčastější dotazy

Ne. platformName a browserName jsou standardní funkce W3C a zůstávají bez předpony. Všechny ostatní Appium Funkce, včetně názvu zařízení a verze platformy, je rozšíření dodavatele a vyžaduje prefix appium:.

Nástroje strojového učení v cloudových zařízeních navrhují sadu funkcí ze sestavení a cílového zařízení a označují hodnoty, které selhaly v podobných relacích. S výstupem zacházejte jako s konceptem a každý název ověřte v dokumentaci k ovladači.

Copilot splňuje běžné bloky schopností, ale byl trénován na mnoha Appium 1 kód a často vynechává prefix nebo navrhuje zastaralou třídu DesiredCapabilities. Každý návrh porovnejte s aktuálním průvodcem.

appPackage pojmenovává balíček Appium spustí. appWaitPackage pojmenuje balíček. Appium čeká na zobrazení, než vrátí řízení, což je důležité, když spouštěč nebo úvodní obrazovka nejprve načte jiný balíček.

platformName nastaven na iOS a appium:automationName nastaven na XCUITest. Ovladač XCUITest také potřebuje alespoň jeden z parametrů appium:app, appium:bundleId nebo browserName, jinak otevře relaci na domovské obrazovce.

Počet sekund, po které server čeká na odeslání dalšího příkazu klientem. Pokud je doba čekání překročena, server předpokládá, že klient je pryč, a ukončí relaci, což často vypadá jako náhodné selhání.

Funkce noReset přeskočí obvyklý reset, takže data aplikace přežijí relaci. Funkce fullReset přidává další kroky, odinstalaci a opětovnou instalaci, pro maximální reprodukovatelnost. Obě možnosti jsou standardně nastaveny na hodnotu false a neměly by být povoleny současně.

Ne. Schopnosti jsou parametry pro spuštění relace a jsou pevně dané po jejím vytvoření. Pokud ovladač povolí změnu chování v průběhu relace, zpřístupní místo toho nastavení prostřednictvím rozhraní Settings API.

Shrňte tento příspěvek takto: