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