Appium A kívánt képességek Android emulátor

⚡ Okos összefoglaló

A kívánt képességek a kulcs-érték párok. Appium a kliens küld el, amikor megnyit egy munkamenetet, jelezve a szervernek, hogy melyik platformon, eszközön, illesztőprogramon és alkalmazáson kell futtatni az automatizált tesztet.

  • ???? Munkamenet-konverziótract: A képességek a new-session kérés JSON törzsében kerülnek át, és utólag nem módosíthatók.
  • ☑️ Android alapvető dolgok: Az appPackage és az appActivity elnevezést ad az alkalmazásnak és a képernyőnek. Appium indulnia kellene.
  • Várakozási változatok: Az appWaitPackage és az appWaitActivity lefedik azokat a kezdőképernyőket, amelyek a tényleges belépési pont előtt jelennek meg.
  • 🧪 Appium 2 előtag: Mostantól minden nem szabványos képességhez szükség van az appium: vendor előtagra, különben a szerver elutasítja azt.
  • 🇧🇷 Modern Java ügyfél: A DesiredCapabilities helyét az UiAutomator2Options és az XCUITestOptions vette át. Selenium 4.
  • 📊 Értékek keresése: Egy adb dumpsys lekérdezés vagy a PackageManager osztály felfedi a csomagok és tevékenységneveket.

Appium kívánt képességek kulcs-érték párjai egy Android emulátor munkamenet

Mi a kívánt képességek

A „Kívánatos képességek” segítenek módosítani a szerver viselkedését az automatizálás során. Appium Ez egy hashmap, vagy kulcs-érték pár, amellyel parancsot küldhetünk a Appium szerver, ahol minden kliensparancs egy munkamenet kontextusában fut.

Például egy kliens egy JSON objektumot tartalmazó POST /session kérést küld a Appium szervert.

Tehát egy kérés küldéséhez vagy egy munkamenet fenntartásához a szerverrel kulcs-érték párokat kell használni. Ezt „kívánt képességeknek” nevezik.

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");
}

A kívánt képesség fontos szerepe

  • A „DesiredCapabilities” segít a felhasználónak a szerverrel folytatott munkamenet-kérések vezérlésében. Például egy iOS-munkamenethez a platformName = iOS képességet állítjuk be, egy másikhoz pedig Android munkamenet platformNév = Android.
  • A „DesiredCapabilities” paraméterekkel például beállítható a WebDriver példány. FirefoxIllesztőprogram, ChromeDriver vagy InternetExplorerDriver.
  • A DesiredCapability nagyon hasznos Selenium Grid. Például különböző tesztesetek futtatására használják különböző böngészőkön és operációs rendszereken. A megadott képesség alapján a Grid hub a megfelelő csomópontra mutat. A csomópontokat a 'set' tulajdonságmetódusok segítségével definiáljuk:
    DesiredCapabilities obj = new DesiredCapabilities(); 
    obj.setBrowserName("firefox"); 
    obj.setVersion("18.0.1"); 
    obj.setPlatform(org.openqa.selenium.Platform.WINDOWS);					
    
  • A kívánt képesség egy könyvtár által definiált csomag. A 'DesiredCapabilities' használata előtt importálni kell azt az alábbi könyvtárból.
    Org.openqa.selenium.remote.DesiredCapabilities

Appium mindkettőt támogatja Android és iOS-en, tehát különálló készlet létezik Appium szerverképességek minden platformon.

Az alábbi táblázat néhány gyakran használt Android képességek és a használandó értékek.

Képességek Leírás Értékek/felhasználások
alkalmazáscsomag Hívja a kívánt Java csomag be Android amit a felhasználó futtatni akar

Value= com.example.myapp/

Obj.setCapability("appPackage", "com.whatsapp");

appActivity Az alkalmazástevékenység, amelyet a felhasználó a csomagból szeretne elindítani.

Érték= MainActivity, .Settings

Obj.setCapability("appActivity", "com.whatsapp.Main");

appWaitPackage Csomag, amelyre az alkalmazásnak várnia kell Value=com.example.android.myapp
appWaitActivity Bármilyen Android a felhasználónak várnia kell a tevékenységre

Érték= SplashActivity

capabilities.setCapability("appWaitActivity", "com.example.game.SplashActivity")

MEGJEGYZÉS: lásd a Appium dokumentáció továbbiak megtekintéséhez Android képességeit.

Az alábbi táblázat néhány gyakran használt iOS-képességet és a használandó értékeket mutat be.

Képességek Leírás Értékek
LaunchTimeout A műszerezésre való várakozás teljes ideje (ms-ban). 2000
TE TETTED Egy csatlakoztatott fizikai eszköz egyedi eszközszámának azonosítása 166aestu4

MEGJEGYZÉS: lásd a Appium képességek útmutatója további iOS-funkciók megtekintéséhez.

Hogyan változtak a kívánt képességek Appium 2

A fenti példák onnan származnak, Appium 1. korszak, és továbbra is egy képességkészlet alakját mutatják, de két szabály megváltozott, és mindkettő megakadályozza a modern munkamenetek elindítását.

Először is, a W3C WebDriver specifikáció csak a szabványos képességek egy kis halmazát határozza meg, amelyek közül platformName és a browserName itt nem számít. Minden más képesség szállítói kiterjesztés, és rendelkeznie kell egy kettősponttal végződő névtér-előtaggal. Appiumelőtagja a következő: appium:. Így deviceName válik appium:deviceName és a platformVersion válik appium:platformVersion. Appium 2. pont is szükséges appium:automationName, mivel az illesztőprogramok külön települnek, nem pedig a szerverrel együtt kerülnek telepítésre.

Másodszor, az előtag ismétlése unalmassá válik, így Appium egyetlen embert fogad el appium:options olyan képesség, amelynek értéke egy objektum. Az objektumon belüli képességekhez nem kell előtag, és ahol egy név az objektumon belül és kívül is megjelenik, ott a belső érték a nyerő.

{
    "platformName": "iOS",
    "appium:options": {
        "automationName": "XCUITest",
        "platformVersion": "16.0",
        "app": "/path/to/your.app",
        "deviceName": "iPhone 12",
        "noReset": true
    }
}

⚠️ Verzió megjegyzés: a Java oldal, Selenium 4 és Appium Java A 8-as kliens elavulttá tette a DesiredCapabilities korábban látható osztály. Az illesztőprogram-specifikus építők a következőtől öröklődtek: BaseOptions cserélje ki – UiAutomator2Options mert Android és a XCUITestOptions iOS-re – egy az egyhez térképpelping minden régitől setCapability hívás. A fenti eredeti kódot itt történelmi példaként tartjuk meg.

ExtracCsomagok és tevékenységek információi

A csomagok csomagokban tárolt fájlok vagy osztályok. Ezek szervezett struktúrát adnak a moduláris programozásnak. Java, a különböző csomagok egyetlen JAR fájlban tárolódnak, és a felhasználó ezt a JAR fájlt hívhatja meg a teljes végrehajtáshoz. Hasonló koncepciót követnek a mobilalkalmazás-fejlesztésben is.

A Android operációs rendszer, minden alkalmazás telepítésre kerül a következő formában: Java csomagok. Tehát, példáultract csomag elérési út információ, a Android A PackageManager osztály használatos.

Csomag- és tevékenységinformációkat kér le az eszközre előre telepített és utólag telepített alkalmazásokról.

A PackageManager osztály egy példányát a getPackageManager() meghívásával szerezheted be. Ez a metódus hozzáférhet és manipulálhatja a telepített alkalmazások csomagjait és a kapcsolódó engedélyeket.

Például:

PackageManager pManager = getPackageManager();
List<ApplicationInfo> list = pManager.getInstalledApplications(PackageManager.GET_META_DATA)

Hogyan találhat appPackage és appActivity elemeket az ADB segítségével?

A fenti PackageManager útvonal egy alkalmazáson belülről működik. Tesztelőként általában csak a telepített builddel rendelkezel, így a gyorsabb út egy lekérdezés a következőn keresztül: aDB egy csatlakoztatott eszközzel vagy emulátorral szemben.

Nyissa meg az alkalmazást az eszközön manuálisan, majd futtassa az alábbi parancsok egyikét egy terminálból a platform-tools mappában. A parancs kinyomtatja az aktuálisan fókuszban lévő ablakot, és az érték a következőképpen lesz formázva: package/activity.

adb shell dumpsys window | find "mCurrentFocus"
adb shell dumpsys window windows | grep -i "mCurrentFocus"

Használja az első űrlapot Windows parancssorban, a második pedig egy Unix shellben vagy Git Bash-ben. Az eredményt két félként kell olvasni: a perjel előtti minden érték a következő értéke: appPackage, és minden utána következő érték a következő értéke: appActivity.

Két figyelmeztetés érvényes. A fókuszált tevékenység az, ami az adott pillanatban a képernyőn van, és nem mindig az a tevékenység, amellyel az alkalmazás elindul – ha egy munkamenet meghiúsul az illesztőprogram inicializálása során, indítsa el újra az alkalmazást, és olvassa el újra az értéket. Ha pedig először egy kezdőképernyő jelenik meg, a belépési tevékenység eltér attól, amelyik ellen végül érvényesíteni szeretné, és pontosan ez a helyzet. appWaitActivity létezik.

Egy vizuális alternatíva az uiautomatorviewer, amely rögzíti az aktuális képernyőhierarchiát, és megjeleníti az egyes csomópontok csomagját és osztályát.

Gyakori kívánt képességekkel kapcsolatos hibák és azok javítása

Legtöbb kudarcot vallott Appium A munkamenetek egyetlen tesztlépés lefutása előtt véget érnek, és az ok szinte mindig a képességkészletben rejlik, nem pedig a tesztben. Az alábbi táblázat minden üzenetet a szokásos javításához rendel hozzá.

Üzenet Valószínű oka Rögzít
Érvénytelen vagy nem támogatott WebDriver képesség Nem szabványos képességet küldtek el a szállítói előtag nélkül. Add hozzá az appium: függvényt, vagy helyezd át az appium:options könyvtáron belülre
A kívánt képességeknek tartalmazniuk kell vagy egy automationName, vagy egy platformName értéket. Appium 2 nem választhat sofőrt Explicit módon állítsa be a platformName és az appium:automationName értékeket
Az alkalmazás nem indítható el. Eredeti hiba: az alkalmazás indításához használt tevékenység nem létezik. Az appActivity nem egyezik a manifesttel Olvasd be újra az értéket a fenti dumpsys paranccsal
A munkamenet nem indult el: nem található eszköz. Nincs emulátor vagy kézibeszélő csatlakoztatva Indítás előtt erősítse meg az eszközt az ADB-eszközökkel
Az időtúllépés után nem lehetett új munkamenetet létrehozni. A kezdőképernyő késlelteti a belépési tevékenységet Állítsa be az appWaitActivity értékét és növelje az appWaitDuration értékét.
Az alkalmazás állapota nem áll vissza a futtatások között Az alapértelmezett visszaállítási viselkedés felülírva Review appium:noReset és appium:fullReset a kívánt futtatáshoz

Amikor egy munkamenet nem indul el, olvassa el a Appium szervernapló a kliensverem helyett trace. A szerver megadja, hogy melyik képességet nem tudta kielégíteni, és a sor megnevezi a javítást.

GYIK

A platformName és a browserName szabványos W3C-képességek, és előtag nélkül maradnak. Minden más Appium A `capability`, beleértve a deviceName`-et és a platformVersion-t is, egy gyártói kiterjesztés, és szüksége van az appium: előtagra.

Az eszközfelhőkben található gépi tanulási eszközök a build és a céleszköz alapján meghatározott képességeket javasolják, és megjelölik azokat az értékeket, amelyek hasonló munkamenetek során hibát jeleztek. A kimenetet vázlatként kell kezelni, és minden nevet össze kell hasonlítani az illesztőprogram dokumentációjával.

A Copilot teljesíti a közös képességblokkokat, de sok mindenen képezték ki. Appium 1 kód, és gyakran kihagyja az előtagot, vagy az elavult DesiredCapabilities osztályt javasolja. Ellenőrizze az egyes javaslatokat a jelenlegi útmutató alapján.

Az appPackage megnevezi a csomagot. Appium indít.appWaitPackage megnevezi a csomagot Appium megvárja a megjelenést, mielőtt visszaadja a vezérlést, ami akkor számít, amikor egy indítóképernyő vagy egy másik csomagot tölt be először.

A platformName értéke iOS, az appium:automationName értéke pedig XCUITest. Az XCUITest illesztőprogramnak az appium:app, appium:bundleId vagy browserName közül legalább az egyikre is szüksége van, ellenkező esetben a kezdőképernyőn nyit meg egy munkamenetet.

Az az időtartam másodpercben, ameddig a szerver vár a kliens következő parancsára. Ha a várakozási idő túllépi a várakozási időt, a szerver feltételezi, hogy a kliens elment, és leállítja a munkamenetet, ami gyakran véletlenszerű hibának tűnik.

A noReset kihagyja a szokásos visszaállítást, így az alkalmazásadatok túlélik a munkamenetet. A fullReset további lépéseket ad hozzá, eltávolítást és újratelepítést a maximális reprodukálhatóság érdekében. Mindkettő alapértelmezett értéke „hamis”, és nem szabad együtt engedélyezni őket.

Nem. A képességek a munkamenet indítására vonatkozó paraméterek, és a létrehozás után rögzülnek. Amennyiben egy illesztőprogram engedélyezi egy viselkedés megváltoztatását munkamenet közben, akkor ehelyett egy beállítást tesz elérhetővé a Beállítások API-n keresztül.

Foglald össze ezt a bejegyzést a következőképpen: