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.
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.
