Appium Željene mogućnosti za Android imitator

⚡ Pametni sažetak

Željene mogućnosti su parovi ključ-vrijednost Appium klijent šalje poruku kada otvori sesiju, obavještavajući poslužitelj na kojoj platformi, uređaju, upravljačkom programu i aplikaciji treba pokrenuti automatizirani test.

  • ???? Sesija protivtract: Mogućnosti se prenose u JSON tijelu zahtjeva za novu sesiju i naknadno se ne mogu mijenjati.
  • ☑️ Android osnovno: appPackage i appActivity imenuju aplikaciju i zaslon Appium trebalo bi pokrenuti.
  • Varijante čekanja: appWaitPackage i appWaitActivity pokrivaju uvodne zaslone koji se pojavljuju prije stvarne ulazne točke.
  • 🧪 Appium 2 prefiksa: Svaka nestandardna mogućnost sada treba prefiks appium:vendor ili će je poslužitelj odbiti.
  • 🛠️ moderna Java klijent: DesiredCapabilities je ustupio mjesto UiAutomator2Options i XCUITestOptions pod Selenium 4.
  • 📊 Pronalaženje vrijednosti: Adb dumpsys upit ili klasa PackageManager otkrivaju nazive paketa i aktivnosti.

Appium željene mogućnosti parova ključ-vrijednost za Android sesija emulatora

Što su željene sposobnosti

'Željene mogućnosti' nam pomažu modificirati ponašanje poslužitelja tijekom automatizacije. U Appium To je hashmapa ili par ključ-vrijednost koji se koristi za slanje naredbe Appium poslužitelj, gdje se svaka klijentska naredba izvršava u kontekstu sesije.

Na primjer, klijent šalje POST /session zahtjev koji sadrži JSON objekt na Appium poslužitelj.

Dakle, za slanje zahtjeva ili održavanje sesije s poslužiteljem koristi se skup parova ključ i vrijednost. To se naziva 'Željene mogućnosti'.

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

Važna uloga željene sposobnosti

  • 'ŽeljeneMogućnosti' pomažu korisniku da kontrolira zahtjev za sesiju s poslužiteljem. Na primjer, za iOS sesiju postavljamo platformNameName mogućnosti = iOS, a za Android Naziv platforme sesije = Android.
  • 'DesiredCapabilities' se koriste za postavljanje instance WebDrivera, na primjer FirefoxUpravljački program, ChromeDriver ili InternetExplorerDriver.
  • DesiredCapability vrlo je koristan za Selenium Grid. Na primjer, koristi se za pokretanje različitih testnih slučajeva na drugom pregledniku i drugom operativnom sustavu. Na temelju navedene mogućnosti, Grid središte pokazuje na odgovarajući čvor. Čvorovi se definiraju pomoću metoda svojstva 'set':
    DesiredCapabilities obj = new DesiredCapabilities(); 
    obj.setBrowserName("firefox"); 
    obj.setVersion("18.0.1"); 
    obj.setPlatform(org.openqa.selenium.Platform.WINDOWS);					
    
  • Željena mogućnost je paket definiran u biblioteci. Prije korištenja 'DesiredCapabilities', treba ga uvesti iz biblioteke u nastavku.
    Org.openqa.selenium.remote.DesiredCapabilities

Appium podržava oboje Android i iOS, tako da postoji zaseban skup Appium mogućnosti poslužitelja za svaku platformu.

Donja tablica prikazuje neke često korištene Android mogućnosti i vrijednosti koje treba koristiti.

Sposobnosti Description Vrijednosti/upotrebe
appPackage Nazovite željeni Java paket u Android koje korisnik želi pokrenuti

Vrijednost= com.example.myapp/

Obj.setCapability(“appPackage”, “com.whatsapp”);

appActivity Aktivnost aplikacije koju korisnik želi pokrenuti iz paketa.

Vrijednost= Glavna aktivnost, .Postavke

Obj.setCapability(“appActivity”, “com.whatsapp.Main”);

appWaitPackage Paket koji aplikacija treba čekati Vrijednost=com.example.android.myapp
appWaitActivity bilo koji Android aktivnost koju korisnik treba čekati

Vrijednost= SplashActivity

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

NAPOMENA: pogledajte Appium dokumentacija za pregled više Android sposobnosti.

Donja tablica prikazuje neke često korištene iOS mogućnosti i vrijednosti koje treba koristiti.

Sposobnosti Description Vrijednosti
LaunchTimeout Ukupno vrijeme (u ms) čekanja na instrumentaciju. 2000
UID Za identifikaciju jedinstvenog broja povezanog fizičkog uređaja 166aestu4

NAPOMENA: pogledajte Appium vodič za mogućnosti za pregled više iOS mogućnosti.

Kako su se željene sposobnosti promijenile u Appium 2

Gornji primjeri dolaze iz Appium 1 era i još uvijek pokazuju oblik skupa mogućnosti, ali dva pravila su se promijenila i oba će spriječiti pokretanje moderne sesije.

Prvo, specifikacija W3C WebDrivera definira samo mali skup standardnih mogućnosti, od kojih platformName i browserName ovdje je važno. Svaka druga mogućnost je proširenje dobavljača i mora imati prefiks imenskog prostora koji završava dvotočkom. AppiumPrefiks ' je appium:, Tako deviceName postaje appium:deviceName i platformVersion postaje appium:platformVersion. Appium 2 također zahtijeva appium:automationName, jer se upravljački programi instaliraju zasebno, a ne u paketu s poslužiteljem.

Drugo, ponavljanje prefiksa postaje dosadno, pa Appium prihvaća jednog appium:options sposobnost čija je vrijednost objekt. Sposobnosti unutar tog objekta ne trebaju prefiks, a tamo gdje se ime pojavljuje i unutar i izvan objekta, unutarnja vrijednost pobjeđuje.

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

⚠️ Napomena o verziji: na Java strana, Selenium 4 i Appium Java klijent 8 je ukinuo DesiredCapabilities klasa prikazana ranije. Specifični alati za izradu upravljačkih programa naslijeđeni od BaseOptions zamijenite ga — UiAutomator2Options za Android i XCUITestOptions za iOS — s mapom jedan na jedanping od svakog starog setCapability poziv. Izvorni kod iznad ovdje se čuva kao povijesni primjer.

ExtracInformacije o paketima i aktivnostima

Paketi su povezane datoteke ili klase. Oni daju organiziranu strukturu modularnom programiranju. U Java, različiti paketi pohranjeni su u jednoj JAR datoteci, a korisnik može pozvati tu JAR datoteku za potpuno izvršenje. Sličan koncept se primjenjuje u razvoju mobilnih aplikacija.

u Android operativni sustav, sve aplikacije su instalirane u obliku Java paketi. Dakle, na primjertracinformacije o putanji paketa, Android Koristi se klasa PackageManager.

Dohvaća informacije o paketima i aktivnostima za unaprijed instalirane i naknadno instalirane aplikacije na uređaju.

Instancu klase PackageManager možete dobiti pozivom metode getPackageManager(). Ova metoda može pristupiti i manipulirati paketima i povezanim dozvolama instaliranih aplikacija.

Na primjer:

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

Kako pronaći appPackage i appActivity pomoću adb-a

Gornja ruta PackageManagera funkcionira unutar aplikacije. Kao tester obično imate samo instaliranu verziju, pa je brži put upit preko ADB prema povezanom uređaju ili emulatoru.

Ručno otvorite aplikaciju na uređaju, a zatim pokrenite jednu od dolje navedenih naredbi iz terminala u mapi platform-tools. Naredba ispisuje prozor koji trenutno ima fokus, a vrijednost je formatirana kao package/activity.

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

Koristite prvi obrazac u Windows naredbeni redak, a drugi u Unix ljusci ili Git Bashu. Rezultat pročitajte kao dvije polovice: sve prije kose crte je vrijednost za appPackage, a sve nakon toga je vrijednost za appActivity.

Primjenjuju se dva upozorenja. Fokusirana aktivnost je ono što je na zaslonu u tom trenutku, što nije uvijek aktivnost s kojom aplikacija počinje - ako sesija ne uspije tijekom inicijalizacije upravljačkog programa, ponovno pokrenite aplikaciju i ponovno pročitajte vrijednost. A ako se prvo pojavi početni zaslon, aktivnost unosa razlikovat će se od one protiv koje na kraju želite izvršiti tvrdnju, što je upravo slučaj. appWaitActivity postoji za.

Vizualna alternativa je uiautomatorviewer, koji bilježi trenutnu hijerarhiju ekrana i prikazuje paket i klasu svakog čvora.

Uobičajene greške u vezi sa željenim sposobnostima i kako ih ispraviti

Većina neuspješnih Appium Sesije završavaju prije nego što se pokrene jedan korak testiranja, a uzrok je gotovo uvijek u skupu mogućnosti, a ne u testu. Tablica u nastavku prikazuje svaku poruku s njezinim uobičajenim rješenjem.

Poruka Vjerojatni uzrok Popraviti
Nevažeća ili nepodržana mogućnost WebDrivera Nestandardna mogućnost je poslana bez prefiksa dobavljača Dodajte mu appium: ili ga premjestite unutar appium:options
Željene mogućnosti moraju uključivati ​​ili automatizacijskiNaziv ili nazivplatforme Appium 2 ne mogu odabrati vozača Eksplicitno postavite platformName i appium:automationName
Nije moguće pokrenuti aplikaciju. Izvorna pogreška: aktivnost korištena za pokretanje aplikacije ne postoji. appActivity ne odgovara manifestu Ponovno pročitajte vrijednost pomoću gornje naredbe dumpsys
Sesija nije započela: nije pronađen nijedan uređaj Nije priključen emulator ili ručni telefon Potvrdite uređaj s adb uređajima prije pokretanja
Nova sesija nije mogla biti kreirana nakon isteka vremenskog ograničenja Uvodni zaslon odgađa aktivnost unosa Postavi appWaitActivity i podigni appWaitDuration
Stanje aplikacije se ne resetira između izvršavanja Zadano ponašanje resetiranja je poništeno RevPogledajte appium:noReset i appium:fullReset za željeno pokretanje

Kada sesija odbija započeti, pročitajte Appium zapisnik poslužitelja umjesto klijentskog stoga trace. Poslužitelj navodi koju mogućnost nije mogao zadovoljiti, a u tom retku se navodi ispravak.

Pitanja i odgovori

Ne. platformName i browserName su standardne W3C mogućnosti i ostaju bez prefiksa. Svaki drugi Appium Mogućnost, uključujući deviceName i platformVersion, je proširenje dobavljača i treba mu prefiks appium:.

Alati za strojno učenje u oblacima uređaja predlažu skup mogućnosti iz izrade i ciljnog uređaja te označavaju vrijednosti koje nisu uspjele u sličnim sesijama. Tretirajte izlaz kao nacrt i provjerite svako ime u odnosu na dokumentaciju upravljačkog programa.

Kopilot završava uobičajene blokove sposobnosti, ali je obučen na mnogim Appium 1 kod i često izostavlja prefiks ili predlaže zastarjelu klasu DesiredCapabilities. Provjerite svaki prijedlog u odnosu na trenutni vodič.

appPackage imenuje paket Appium pokreće. appWaitPackage imenuje paket Appium čeka da se pojavi prije vraćanja kontrole, što je važno kada pokretač ili uvodni zaslon prvo učita drugi paket.

platformName postavljen na iOS i appium:automationName postavljen na XCUITest. Upravljački program XCUITest također treba barem jedno od appium:app, appium:bundleId ili browserName, inače otvara sesiju na početnom zaslonu.

Broj sekundi koliko poslužitelj čeka da klijent pošalje sljedeću naredbu. Ako se čekanje prekorači, poslužitelj pretpostavlja da je klijent otišao i prekida sesiju, što često izgleda kao slučajni kvar.

noReset preskače uobičajeno resetiranje tako da podaci aplikacije prežive sesiju. fullReset dodaje dodatne korake, deinstalaciju i ponovnu instalaciju, za maksimalnu ponovljivost. Obje su zadane na false i ne bi se trebale omogućiti zajedno.

Ne. Mogućnosti su parametri za pokretanje sesije i fiksiraju se nakon što se ona stvori. Tamo gdje upravljački program dopušta promjenu ponašanja usred sesije, umjesto toga izlaže Postavku putem Settings API-ja.

Sažmite ovu objavu uz: