Automatiserer brukergrensesnitttesting på Android

Introduksjon

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.

Forutsetninger

Å følge med, du trenger:

  • den nyeste utviklingen av Android Studio
  • en enhet eller emulator som kjører Android 4.3 eller høyere
  • en grunnleggende forståelse av JUnit

1. Installere avhengigheter

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'

2. Opprett en testklasse

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 

3. Kontroller Launcher brukergrensesnitt

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.

4. Forbered testmiljøet

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:

  1. Trykk på Hjem-knappen for å gå til startskjermbildet.
  2. Trykk på Apps-ikonet for å vise alle apper.
  3. Start Kalkulator-appen ved å trykke på ikonet.

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 ();

5. Kontroller kalkulatorens brukergrensesnitt

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:

  • Knappene som inneholder sifrene, har samsvar tekst verdier.
  • Knappene som inneholder + og = symboler har innholds synkende verdiene satt til i tillegg til og er lik henholdsvis.
  • Resultatet vises i en 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.

6. Opprett testen

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.

6. Kjør testen

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.

Konklusjon

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.

.