Android's Testing Support-bibliotek inneholder UI Automator rammeverk, som kan brukes til å utføre automatisert svart boks testing på Android apps. Introdusert i API-nivå 18, tillater rammene utviklere å simulere brukerhandlinger på widgets som utgjør en apps brukergrensesnitt.
I denne opplæringen skal jeg vise deg hvordan du bruker rammen for å lage og kjøre en grunnleggende brukergrensesnitttest for standard kalkulator-appen.
Å følge med, du trenger:
For å bruke UI Automator-rammen i prosjektet, rediger du build.gradle filen i prosjektet ditt app katalog, legger til følgende avhengigheter:
androidTestCompile 'com.android.support.test: løper: 0.2' androidTestCompile 'com.android.support.test: regler: 0.2' androidTestCompile 'com.android.support.test.uiautomator: uiautomator-v18: 2.1.0'
De Synkroniser nå knappen skal være på skjermen nå. Når du klikker på det, bør du se en feil som ser slik ut:
Klikk på Installer Repository og synkroniseringsprosjekt lenke for å installere Android Support Repository.
Hvis du bruker appcompat-v7 biblioteket og dets versjon er 22.1.1, Du må legge til følgende avhengighet for å sikre at både appen og testappen bruker den samme versjonen av com.android.support:support-annotations
:
androidTestCompile 'com.android.support:support-annotations:22.1.1'
På grunn av en feil i Android Studio må du ekskludere en fil som heter LICENSE.txt ved hjelp av packagingOptions
. Hvis du ikke gjør det, vil det føre til følgende feil når du prøver å kjøre en test:
Utførelsen mislyktes for oppgaven ': app: packageDebugAndroidTest'. Dupliser filer kopiert i APK LICENSE.txt Fil 1: ~ / .gradle / caches / modules-2 / files-2.1 / org.hamcrest / hamcrest-core / 1.1 / 860340562250678d1a344907ac75754e259cdb14 / hamcrest-core-1.1.jar Fil 2: ~ / .gradle / bufrer / moduler-2 / files-2,1 / JUnit / JUnit-dep / 4.10 / 64417b3bafdecd366afa514bd5beeae6c1f85ece / JUnit-dep-4.10.jar
Legg til følgende utdrag nederst på din build.gradle fil:
android packagingOptions exclude 'LICENSE.txt'
Opprett en ny testklasse, CalculatorTester
, ved å opprette en fil som heter CalculatorTester.java inne i androidTest katalogen. For å opprette et UI Automator test tilfelle må din klasse utvides InstrumentationTestCase
.
trykk Alt + Insert og klikk deretter SetUp Metode å overstyre Setup
metode.
trykk Alt + Insert igjen og klikk Testmetode å generere en ny testmetode. Navn denne metoden testAdd
. De CalculatorTester
klassen skal nå se slik ut:
offentlig klasse CalculatorTester utvider InstrumentationTestCase @Override public void setUp () kaster Unntak public void testAdd () kaster Unntak
Koble Android-enheten til datamaskinen og trykk på Hjem-knappen på enheten for å navigere til startskjermbildet.
Gå tilbake til datamaskinen din og bruk din filoppdagelses eller terminal for å bla til katalogen der du installerte Android SDK. Deretter skriver du inn verktøy katalog 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 Android-enheten din. Vær oppmerksom på at skjermbildet du bare fanget er interaktivt. Klikk på Apps-ikonet nederst. I Node Detalj delen til høyre, kan du nå se forskjellige detaljer om ditt valg som vist nedenfor.
For å samhandle med elementer på skjermen, må UI Automator-testrammen kunne identifisere dem entydig. I denne opplæringen vil du bruke enten tekst
, de innholds synkende
, eller klasse
av elementet for å identifisere det unikt.
Som du kan se, har Apps-ikonet ingen tekst
, men det har en innholds synkende
. Legg merke til verdien, fordi du vil bruke den i neste trinn.
Velg Android-enheten din, og trykk på Apps-ikonet for å navigere til skjermen som viser appene som er installert på enheten. Gå tilbake til UI Automater Viewer og ta et annet skjermbilde. Siden du skal skrive en test for kalkulator-appen, klikker du på ikonet for å se på detaljene.
Denne gangen innholds synkende
er tom, men tekst
inneholder verdien Kalkulator. Legg også merke til dette.
Hvis Android-enheten din kjører en annen launcher eller en annen versjon av Android, vil skjermene og node-detaljene være forskjellige. Dette betyr også at du må gjøre noen endringer i koden din for å matche operativsystemet.
Gå tilbake til Android Studio for å legge til kode i Setup
metode. Som navnet antyder, den Setup
Metoden bør brukes til å forberede testmiljøet. Med andre ord, dette er hvor du angir hva som må gjøres før du kjører den faktiske testen.
Du skal nå skrive kode for å simulere hva du gjorde på Android-enheten din i forrige trinn:
I klassen din erklærer du et felt av typen UiDevice
og nev det enhet
. Dette feltet representerer Android-enheten din, og du vil bruke den til å simulere brukerinteraksjon.
privat UiDevice-enhet;
I Setup
metode, initialisere enhet
ved å påkalle UiDevice.getInstance
metode, passerer i a instrumentering
eksempel som vist nedenfor.
enhet = UiDevice.getInstance (getInstrumentation ());
For å simulere å trykke på Hjem-knappen på enheten, ring på pressHome
metode.
device.pressHome ();
Deretter må du simulere et klikkhendelse på Apps-ikonet. Du kan ikke gjøre dette umiddelbart skjønt, fordi Android-enheten trenger et øyeblikk for å navigere til startskjermbildet. Hvis du prøver å klikke på Apps-ikonet før det er synlig på skjermen, vil det føre til et kjøretidsslipp.
For å vente på at noe skal skje, må du ringe vente
metode på UiDevice
forekomst. For å vente på at Apps-ikonet skal vises på skjermen, bruk Until.hasObject
metode.
For å identifisere Apps-ikonet, bruk By.desc
metode og passere verdien Apps til det. Du må også angi maksimal ventetid i millisekunder. Sett den til 3000. Dette resulterer i følgende kodeblokk:
// Vent på Apps-ikonet for å dukke opp på skjermen enheten. Vente (Until.hasObject (By.desc ("Apps")), 3000);
For å få en referanse til Apps-ikonet, bruk findObject
metode. Når du har en referanse til Apps-ikonet, påkaller du klikk
metode for å simulere et klikk.
UiObject2 appsButton = device.findObject (By.desc ("Apps")); appsButton.click ();
Som før må vi vente et øyeblikk for kalkulatorikonet for å dukke opp på skjermen. I det forrige trinnet så du at kalkulatorikonet kan identifiseres entydig av dets tekst
felt. Vi påberoper By.text
metode for å finne ikonet, passerer inn Kalkulator
.
// Vent på Kalkulator-ikonet for å dukke opp på skjermen enheten. Vente (Until.hasObject (By.text ("Calculator")), 3000);
Bruke findObject
og klikk
metoder for å få en referanse til kalkulatorikonet og simulatoren et klikk.
UiObject2 calculatorApp = device.findObject (By.text ("Calculator")); calculatorApp.click ();
Start Kalkulator-appen på Android-enheten din, og bruk UI Automater Viewer å inspisere den. Etter å ha tatt et skjermbilde, klikk på knappene for å se hvordan du kan identifisere dem unikt.
For dette testfallet vil du få kalkulatoren til å beregne verdien av 9 + 9 = og sjekk om den viser 18 som resultatet. Dette betyr at du må vite hvordan du identifiserer knappene med etikettene 9, +, og =.
På min enhet, her er det jeg samlet fra inspeksjonen:
tekst
verdier.innholds synkende
verdiene satt til i tillegg til og er lik henholdsvis.EditText
widget.Vær oppmerksom på at disse verdiene kan være forskjellige på enheten din hvis du bruker en annen versjon av Kalkulator-appen.
I de forrige trinnene har du allerede lært at du kan bruke findObject
metode sammen med heller By.text
eller By.desc
for å få en referanse til et objekt på skjermen. Du vet også at du må bruke klikk
Metode for å simulere et klikk på objektet. Følgende kode benytter disse metodene for å utføre beregningen 9 + 9 =. Legg det til i testAdd
metode av CalculatorTester
klasse.
// Vent til kalkulatorens knapper er på skjermen enheten. Wait (Until.hasObject (By.text ("9")), 3000); // Velg knappen for 9 UiObject2 buttonNine = device.findObject (By.text ("9")); buttonNine.click (); // Velg knappen for + UiObject2 buttonPlus = device.findObject (By.desc ("plus")); buttonPlus.click (); // Trykk 9 igjen da vi beregner 9 + 9 buttonNine.click (); // Velg knappen for = UiObject2 buttonEquals = device.findObject (By.desc ("equals")); buttonEquals.click ();
På dette tidspunktet må du vente på resultatet. Du kan imidlertid ikke bruke Until.hasObject
her fordi EditText
inneholder resultatet allerede på skjermen. I stedet må du bruke waitForIdle
metode for å vente på at beregningen skal fullføres. Igjen kan ventetiden maksimalt være 3000 ms.
device.waitForIdle (3000);
Hent en referanse til EditText
objekt ved hjelp av 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")); Stringresultat = resultText.getText ();
Til slutt, bruk assertTrue
for å verifisere at resultatet er lik 18.
assertTrue (result.equals ( "18"));
Din test er nå fullført.
For å kjøre testen, i verktøylinjen i Android Studio, velg klassen CalculatorTester
fra rullegardinmenyen og klikk på avspillingsknappen til høyre.
Når byggingen er ferdig, bør testen kjøre og fullføres vellykket. Mens testen kjører, bør du kunne se UI-automatiseringen som kjører på Android-enheten din.
I denne opplæringen har du lært hvordan du bruker UI Automator testing rammeverket og UI Automater Viewer for å lage brukergrensesnitt tester. Du så også hvor lett det er å kjøre testen ved hjelp av Android Studio. Selv om vi testet en ganske enkel app, kan du bruke konseptene du lærte her for å teste nesten alle Android-apper.
.