Appium Soovitud võimalused Android Emulator

⚡ Nutikas kokkuvõte

Soovitud võimed on võtme-väärtuse paarid ja Appium klient saadab seansi avamisel teate, millise platvormi, seadme, draiveri ja rakenduse suhtes peaks automatiseeritud test käivituma.

  • ???? Sessioonikonversioontract: Võimalused liiguvad uue seansi taotluse JSON-kehas ja neid ei saa hiljem muuta.
  • ☑️ Android olulised asjad: appPackage ja appActivity nimetavad rakenduse ja ekraani Appium peaks käivituma.
  • Oota variante: appWaitPackage ja appWaitActivity katavad avakuvasid, mis ilmuvad enne tegelikku sisenemispunkti.
  • 🧪 Appium 2 eesliidet: Iga mittestandardne funktsioon vajab nüüd eesliidet appium: vendor, vastasel juhul server lükkab selle tagasi.
  • 🛠️ Kaasaegne Java klient: DesiredCapabilities andis teed UiAutomator2Optionsile ja XCUITestOptionsile all Selenium 4.
  • 📊 Väärtuste leidmine: Adb dumpsys päring või PackageManager klass kuvab paketi ja tegevuste nimed.

Appium soovitud võimete võtme-väärtuse paarid Android emulaatori seanss

Mis on soovitud võimalused

„Soovitud võimalused” aitavad meil automatiseerimise ajal serveri käitumist muuta. Appium see on räsikaart ehk võtme-väärtuse paar, mida kasutatakse käsu saatmiseks Appium server, kus iga kliendikäsk käivitatakse seansi kontekstis.

Näiteks saadab klient serverile POST /session päringu, mis sisaldab JSON-objekti. Appium server.

Seega päringu saatmiseks või serveriga seansi hoidmiseks kasutatakse võtme- ja väärtusepaaride komplekti. Seda nimetatakse soovitud võimeteks.

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

Soovitud võimekuse oluline roll

  • „Soovitud võimed” aitavad kasutajal serveriga seansipäringut juhtida. Näiteks iOS-i seansi jaoks määrame võimekuseks platformName = iOS ja Android seansi platvormiNimi = Android.
  • Näiteks „DesiredCapabilities” abil seadistatakse WebDriveri eksemplar. FirefoxDraiver, ChromeDriver või InternetExplorerDriver.
  • DesiredCapability on väga kasulik Selenium Ruudustik. Näiteks kasutatakse seda erinevate testide käivitamiseks erinevas brauseris ja operatsioonisüsteemis. Sõltuvalt deklareeritud võimekusest osutab Ruudustiku keskus vastavale sõlmele. Sõlmed defineeritakse atribuudimeetodite 'set' abil:
    DesiredCapabilities obj = new DesiredCapabilities(); 
    obj.setBrowserName("firefox"); 
    obj.setVersion("18.0.1"); 
    obj.setPlatform(org.openqa.selenium.Platform.WINDOWS);					
    
  • Soovitud võimekus on teegipõhine pakett. Enne 'DesiredCapabilities' kasutamist tuleks see allolevast teegist importida.
    Org.openqa.selenium.remote.DesiredCapabilities

Appium toetab mõlemat Android ja iOS-is, seega on olemas eraldi komplekt Appium iga platvormi serverivõimalused.

Allolev tabel näitab mõningaid levinumaid Android võimed ja kasutatavad väärtused.

Võimed Kirjeldus Väärtused/Kasutusalad
rakenduse pakett Helista soovitud Java pakkida sisse Android mida kasutaja soovib käivitada

Väärtus= com.example.myapp/

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

rakendustegevus Rakenduse tegevus, mida kasutaja soovib paketist käivitada.

Väärtus= MainActivity, .Settings

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

appWaitPackage Pakett, mida rakendus peab ootama Value=com.example.android.myapp
appWaitActivity mistahes Android tegevus, mida kasutaja peab ootama

Väärtus = SplashActivity

capabilities.setCapability(“appWaitActivity”, “com.example.game.SplashActivity”)

MÄRKUS: vaadake Appium dokumentatsioon et rohkem vaadata Android võimeid.

Allolev tabel näitab mõningaid iOS-i levinumaid funktsioone ja nende väärtusi.

Võimed Kirjeldus Väärtused
LaunchTimeout Mõõteriistade ootamise aeg kokku (ms). 2000
UID Ühendatud füüsilise seadme unikaalse seadmenumbri tuvastamiseks 166aestu4

MÄRKUS: vaadake Appium võimete juhend et näha rohkem iOS-i võimalusi.

Kuidas soovitud võimed muutusid Appium 2

Ülaltoodud näited pärinevad Appium 1 ajastu ja näitavad endiselt võimete komplekti kuju, kuid kaks reeglit on muutunud ja mõlemad peatavad tänapäevase seansi alustamise.

Esiteks defineerib W3C WebDriveri spetsifikatsioon vaid väikese hulga standardseid võimeid, millest platformName ja browserName siin oluline. Kõik muud funktsioonid on tarnija laiendused ja neil peab olema kooloniga lõppev nimeruumi eesliide. Appiumeesliide on appium:. Nii deviceName muutub appium:deviceName ja platformVersion muutub appium:platformVersion. Appium 2 nõuab ka appium:automationName, kuna draiverid installitakse eraldi, mitte ei ole serveriga komplekteeritud.

Teiseks, eesliite kordamine muutub tüütuks, seega Appium võtab vastu ühe appium:options võimekus, mille väärtus on objekt. Selle objekti sees olevad võimed ei vaja eesliidet ja kui nimi esineb nii objekti sees kui ka väljaspool, on sisemine väärtus ülimuslik.

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

⚠️ Versiooni märkus: kohta Java poolel Selenium 4 ja Appium Java klient 8 aegunud DesiredCapabilities klass varem näidatud. Draiveripõhised konstruktorid päritud BaseOptions asenda see — UiAutomator2Options eest Android ja XCUITestOptions iOS-i jaoks – üks-ühele kaardigaping igast vanast setCapability kõne. Ülaltoodud algset koodi on siin kasutatud ajaloolise näitena.

ExtracPakettide ja tegevuste teave

Paketid on komplekteeritud failid või klassid. Need annavad modulaarsele programmeerimisele organiseeritud struktuuri. Java, salvestatakse erinevad paketid ühte JAR-faili ja kasutaja saab seda JAR-faili täielikuks täitmiseks kutsuda. Sarnast kontseptsiooni järgitakse ka mobiilirakenduste arendamisel.

aasta Android operatsioonisüsteemis installitakse kõik rakendused kujul Java pakette. Seega, näitekstracpaketi teekonna teave, Android Kasutatakse PackageManager klassi.

See hangib seadmesse eelinstallitud ja järelinstallitud rakenduste paketi- ja tegevusteavet.

PackageManageri klassi eksemplari saab hankida funktsiooni getPackageManager() abil. See meetod pääseb juurde installitud rakenduste pakettidele ja nendega seotud õigustele ning saab neid muuta.

Näiteks:

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

Kuidas leida appPackage'i ja appActivity't ADB abil

Ülaltoodud PackageManageri marsruut töötab rakenduse seest. Testijana on teil tavaliselt ainult installitud järk, seega on kiirem tee päring üle Adb ühendatud seadme või emulaatori vastu.

Avage rakendus seadmes käsitsi ja seejärel käivitage terminalis platvormi tööriistade kaustas üks allolevatest käskudest. Käsk prindib hetkel fookuses oleva akna ja väärtus vormindatakse järgmiselt: package/activity.

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

Kasutage esimest vormi Windows käsurealt ja teine ​​Unixi kestas või Git Bashis. Loe tulemust kahe poolena: kõik kaldkriipsu ees olev on väärtus appPackageja kõik pärast seda olev on väärtus appActivity.

Kehtib kaks hoiatust. Fookuses olev tegevus on see, mis sel hetkel ekraanil on, ja see ei pruugi alati olla tegevus, millega rakendus alustab – kui draiveri initsialiseerimise ajal seanss ebaõnnestub, käivitage rakendus uuesti ja lugege väärtus uuesti. Ja kui esmalt ilmub avakuva, erineb sisestatud tegevus sellest, millele te lõpuks soovite väidet esitada, mis on täpselt nii. appWaitActivity eksisteerib.

Visuaalne alternatiiv on uiautomatorviewer, mis jäädvustab praeguse ekraanihierarhia ja näitab iga sõlme paketti ja klassi.

Levinumad soovitud võimete vead ja kuidas neid parandada

Kõige ebaõnnestunud Appium seansid lõpevad enne ühe testietapi käivitamist ja põhjus on peaaegu alati pigem võimete komplektis kui testis. Allolev tabel seob iga teate selle tavapärase lahendusega.

Jäta sõnum Tõenäoline põhjus Määrama
Kehtetu või toetamata WebDriveri funktsioon Mittestandardne võimekus saadeti ilma tarnija eesliiteta Lisa sinna appium: või liiguta see üksuse appium:options sisse
Soovitud võimalused peavad sisaldama kas automationName'i või platformName'i. Appium 2 ei saa juhti valida Määrake platvormi nimi ja appium:automationName selgesõnaliselt
Rakendust ei saa käivitada. Algne viga: rakenduse käivitamiseks kasutatud tegevust pole olemas. appActivity ei vasta manifestile Loe väärtus uuesti ülaltoodud dumpsys käsuga
Seanss ei alanud: seadmeid ei leitud Emulaatorit ega telefonitoru pole ühendatud Enne käivitamist kinnitage seade ADB-seadmetega
Pärast ajalõpu lõppu ei saanud uut seanssi luua Avakuva lükkab sisestust edasi Määrake appWaitActivity ja suurendage appWaitDuration väärtust
Rakenduse olekut ei lähtestata käivituste vahel Vaikimisi lähtestamise käitumine tühistati Revsoovitud käivitamiseks käske iew appium:noReset ja appium:fullReset

Kui seanss keeldub algamast, lugege Appium serverilogi, mitte kliendi pinu trace. Server märgib, millist võimekust ta ei suutnud rahuldada, ja see rida nimetab paranduse.

KKK

Ei. PlatformName ja browserName on W3C standardfunktsioonid ja jäävad eesliiteta. Iga teine Appium Võimalus, sealhulgas deviceName ja platformVersion, on tarnija laiendus ja vajab eesliidet appium:.

Seadmepilvedes olevad masinõppe tööriistad pakuvad välja järgu- ja sihtseadmest pärit võimete komplekti ning märgistavad väärtused, mis sarnastel seanssidel nurjusid. Käsitle väljundit mustandina ja võrdle iga nime draiveri dokumentatsiooniga.

Copilot täidab ühiseid võimete plokke, aga seda treeniti paljude peal Appium 1 kood ja sageli jätab eesliite ära või soovitab aegunud DesiredCapabilities klassi. Võrrelge iga soovitust praeguse juhendiga.

appPackage nimetab paketi Appium käivitab. appWaitPackage nimetab paketi Appium ootab enne juhtimise tagastamist ilmumist, mis on oluline siis, kui käivitaja või avakuva laadib esmalt mõne muu paketi.

PlatformName väärtuseks on määratud iOS ja appium:automationName väärtuseks XCUITest. XCUITesti draiver vajab ka vähemalt ühte järgmistest: appium:app, appium:bundleId või browserName, vastasel juhul avab see seansi avakuval.

Sekundite arv, mille jooksul server ootab kliendi järgmise käsu saatmist. Kui ooteaeg ületatakse, eeldab server, et klient on läinud ja sulgeb seansi, mis sageli näeb välja nagu juhuslik tõrge.

noReset jätab tavapärase lähtestamise vahele, nii et rakenduse andmed jäävad seansi järel alles. fullReset lisab maksimaalse reprodutseeritavuse tagamiseks täiendavaid samme (desinstallimine ja uuesti installimine). Mõlema vaikeväärtus on „väär“ ja neid ei tohiks koos lubada.

Ei. Võimalused on seansi alustamise parameetrid ja need fikseeritakse pärast selle loomist. Kui draiver lubab käitumise seansi keskel muutuda, avaldab see hoopis sätte Settings API kaudu.

Võta see postitus kokku järgmiselt: