Automating User Interface Testing på Android
31
Del
5
Del
Dette Cyber mandag Envato Tuts + Kursene vil bli redusert til bare $ 3. Ikke gå glipp av.
Innledning
Android Testing Support bibliotek omfatter UI Automator rammeverk, som kan brukes til å utføre automatisert black-box testing på Android-apps. Introdusert i API nivå 18, kan rammen utviklere å simulere brukerhandlinger på widgets som utgjør en app brukergrensesnitt.
I denne opplæringen jeg skal vise deg hvordan du bruker rammeverk for å lage og kjøre en grunnleggende brukergrensesnitt test for standard Kalkulator app
Forutsetninger
For å følge med, trenger du:.
den siste versjonen av Android Studio
en enhet eller emulator som kjører Android 4.3 eller høyere
en grunnleggende forståelse av JUnit
1 . Installere Avhengig
For å bruke UI Automator rammene i prosjektet, redigere build.gradle filen i prosjektets app katalog, og legger til følgende avhengigheter:
androidTestCompile 'com.android.support.test: runner: 0.2'androidTestCompile 'com.android.support.test: regler: 0.2'androidTestCompile' com.android.support.test.uiautomator: uiautomator-v18: 2.1.0 '
Synkroniser nå knappen skal være på skjermen nå. Når du klikker på den, skal du se en feilmelding som ser slik ut:
Klikk på Repository og sync prosjekt lenke Installer for å installere Android Support Repository
Hvis du bruker. appcompat-v7 biblioteket og dens versjon er 22.1.1, må du legge til følgende avhengighet for å sikre at både app og testen app bruker samme versjon av com.android.support:support-annotations:
androidTestCompile 'com.android.support:support-annotations:22.1.1'
Next, på grunn av en feil i Android Studio, må du ekskludere en fil som heter LICENSE.txt hjelp packagingOptions. Unnlate å gjøre dette vil føre til følgende feilmelding når du prøver å kjøre en test:
Execution mislyktes for oppgaven ': app: packageDebugAndroidTest'.Duplicate filer kopiert i APK LICENSE.txtFile 1: ~/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.1/860340562250678d1a344907ac75754e259cdb14/hamcrest-core-1.1.jarFile 2: ~/.gradle/caches/modules-2/files-2.1/junit/junit-dep/4.10/64417b3bafdecd366afa514bd5beeae6c1f85ece/junit-dep-4.10.jar
Add følgende biten nederst på din build.gradle filen:
android {packagingOptions {utelukke LICENSE.txt '}}
2. Lag en Test Class
Opprett en ny test klasse, CalculatorTester, ved å opprette en fil som heter CalculatorTester.java inne i androidTest katalogen. For å opprette en UI Automator test, må klassen forlenge InstrumentationTestCase.
Trykk Alt + Insert og klikk deretter setup-metoden for å overstyre oppsettmetode.
Trykk Alt + Insert igjen og klikker på testmetoden å generere en ny testmetode. Kalle denne metoden testAdd. Den CalculatorTester klasse skal nå se slik ut:
public class CalculatorTester strekker InstrumentationTestCase {Override public void setup () kaster Exception {} public void testAdd () kaster Exception {}}
3. Inspisere Launcher brukergrensesnitt
Koble Android-enheten til datamaskinen, og trykk på hjem-knappen på enheten for å navigere til hjemmeskjermen.
Gå tilbake til datamaskinen og bruke en filutforsker eller terminal for å bla til katalogen der du installerte Android SDK. Deretter skriver du inn verktøy katalogen inni den og lansere uiautomatorviewer. Dette vil starte UI Automater Viewer. Du bør bli presentert med en skjerm som ser slik ut:
Klikk på knappen som ser ut som en telefon for å ta et skjermbilde av din Android-enhet. Merk at skjermbildet du nettopp fanget er interaktiv. Klikk på Apps-ikonet nederst. I Node Detail delen til høyre, du er nå i stand til å se ulike detaljer om ditt valg, som vist nedenfor.
Hvis du vil kommunisere med elementer på skjermen, må UI Automator testing rammeverk for å kunne unikt identifisere dem. I denne opplæringen vil du bruke enten tekst, innholds synkende, eller klassen av elementet for å identifisere den.
Som du kan se, Apps ikonet ikke har noen tekst, men den har et innholds synkende. Lag et notat av sin verdi, fordi du skal bruke det i neste trinn.
Velg din Android-enhet opp og berøre Apps ikonet for å navigere på skjermen som viser apps installert på enheten . Hodet tilbake til UI Automater Viewer og fange et annet skjermbilde. Siden du skal skrive en test for Kalkulator app, klikk på ikonet for å se på detaljene.
Denne gangen innholdet-desc er tom, men teksten inneholder verdien Kalkulator. Noterer dette også.
Hvis Android-enheten kjører en annen bærerakett eller en annen versjon av Android, skjermene og node detaljer vil være annerledes. Dette betyr også at du blir nødt til å gjøre noen endringer i koden for å matche operativsystemet.
4. Klargjør Test Environment
Gå tilbake til Android Studio for å legge koden til konfigurasjonsmetoden. Som navnet antyder, bør oppsettmetoden brukes til å klargjøre testmiljø. Med andre ord, dette er hvor du spesifiserer hva som må gjøres før du kjører selve testen
Du vil nå bli å skrive kode for å simulere hva du gjorde på Android-enheten i forrige trinn. < .no>
- knapper som inneholder sifrene har matchende tekstverdier.
Knappene inneholder + og = symbolene har innholds synkende verdier satt til pluss og tilsvarer henholdsvis.
Resultatet er vist i en EditText widget .
Merk at disse verdiene kan være annerledes på enheten hvis du bruker en annen versjon av Kalkulator app.
6. Opprett Test
I de foregående trinnene, har du allerede lært at du kan bruke findObject metoden sammen med enten By.text eller By.desc å få en referanse til et objekt på skjermen. Du vet også at du må bruke klikk-metoden for å simulere et klikk på objektet. Følgende kode bruker disse metodene for å utføre beregningen 9 + 9 =. Legg det til testAdd metoden i CalculatorTester klassen
//Vent til i Kalkulator knappene er på screendevice.wait (Until.hasObject (By.text ("9")), 3000);. //Velg knappen for 9UiObject2 buttonNine = device.findObject (By.text ("9")); buttonNine.click (); //velge knappen for + UiObject2 buttonPlus = device.findObject (By.desc ("pluss")); buttonPlus.click (); //Trykk 9 igjen som vi beregner 9 + 9buttonNine.click (); //Velg knappen for = UiObject2 buttonEquals = device.findObject (By.desc ("likeverdige")); buttonEquals. Klikk på ();På dette punktet, må du vente på resultatet. Du kan imidlertid ikke bruke Until.hasObject her fordi EditText inneholder resultatet er allerede på skjermen. I stedet må du bruke waitForIdle metode for å vente på beregningen for å fullføre. Igjen, kan den maksimale varigheten av ventetiden være 3000 ms
device.waitForIdle (3000);.Få en referanse til EditText objektet med findObject og By.clazz metoder. Når du har referansen, ring GetText metode for å bestemme resultatet av beregningen
UiObject2 resultText = device.findObject (By.clazz ("android.widget.EditText"));. String resultat = resultText.getText ();Til slutt bruker assertTrue å sjekke at resultatet er lik 18.
assertTrue (result.equals ("18"));.Din test er nå fullført
6. Kjør Test
For å kjøre testen, på verktøylinjen i Android Studio, velg klasse CalculatorTester fra drop-down og klikker på avspillingsknappen på høyre.
Når bygge ferdig, testen skal kjøre og fullføres. Mens testkjøringer, bør du være i stand til å se UI automatisering kjører på Android-enheten.
Konklusjon
I denne opplæringen, har du lært hvordan du bruker UI Automator testing rammeverk og UI Automater Viewer for å lage brukergrensesnitt tester. Du så også hvor lett det er å kjøre testen bruker Android Studio. Selv om vi testet en ganske enkel app, kan du bruke begreper du har lært her for å teste nesten alle Android-app.
Du kan lære mer om testing støtte biblioteket på Android Developers nettsiden.
Trykk på Hjem-knappen for å gå til startskjermen.
Trykk på Apps-ikonet for å vise alle apps.
Start Kalkulator app ved å tappe sin ikon.
I klassen din, erklære et felt av typen UiDevice og kall den enheten. Dette feltet representerer din Android-enhet, og du skal bruke den til å simulere brukermedvirkning
privat UiDevice enhet;.
I oppsettmetoden, starter enheten ved å påberope seg UiDevice.getInstance metoden, passerer i en Instrumentation eksempel som vist nedenfor .
device = UiDevice.getInstance (getInstrumentation ());
For å simulere trykke på hjem-knappen på enheten, påberope pressHome metoden
device.pressHome ();.
Deretter må du simulere et klikk hendelsen på Apps-ikonet. Du kan ikke gjøre dette umiddelbart, fordi Android-enheten vil trenge litt tid på å navigere til hjemmeskjermen. Prøver å klikke på Apps ikon før det er synlig på skjermen vil føre til en runtime unntak.
Å vente på at noe skal skje, må du ringe vente metoden på UiDevice eksempel. Å vente på Apps ikonet til å dukke opp på skjermen, bruker du Until.hasObject metoden.
Å identifisere Apps-ikonet, bruker By.desc metode og bestå verdi Apps til det. Du må også angi den maksimale varigheten av ventetiden i millisekunder. Sett den til 3000. Dette resulterer i følgende kode blokken:
//Vent til Apps ikonet til å dukke opp på screendevice.wait (Until.hasObject (By.desc ("Apps")), 3000); < p> For å få en henvisning til Apps-ikonet, bruker findObject metoden. Når du har en referanse til Apps-ikonet, påberope klikk-metoden for å simulere et klikk
UiObject2 appsButton = device.findObject (By.desc ("Apps"));. AppsButton.click ();
Som før Vi må vente en stund for på Kalkulator-ikonet til å dukke opp på skjermen. I forrige trinn, så du at Kalkulator-ikonet kan identifiseres ved hjelp av tekstfeltet. Vi påberope By.text metode for å finne ikonet, passerer i Kalkulator.
//Vent på Kalkulator-ikonet til å dukke opp på screendevice.wait (Until.hasObject (By.text ("kalkulator")), 3000 );
Bruk findObject og klikk metoder for å få en henvisning til Kalkulator-ikonet og simulator et klikk
UiObject2 calculatorApp = device.findObject (By.text ("kalkulator"));. calculatorApp.click ();
5. Inspisere Calculator brukergrensesnitt
Start Kalkulator app på Android-enheten og bruke UI Automater Viewer for å inspisere den. Etter fangst et skjermbilde, klikk på knappene for å se hvordan du kan identifisere dem.
For denne testen tilfelle, vil du være å gjøre kalkulatoren beregne verdien av 9 + 9 = og sjekk om det viser 18 som resultat. Dette betyr at du trenger å vite hvordan å identifisere knappene med etikettene 9, + og =
På min enhet, her er hva jeg samlet fra inspeksjonen.