Automazione del test dell'interfaccia utente su Android

introduzione

La libreria di supporto di test di Android include il Struttura di UI Automator, che può essere utilizzato per eseguire test black-box automatizzati su app Android. Introdotto nel livello 18 dell'API, il framework consente agli sviluppatori di simulare azioni dell'utente sui widget che costituiscono l'interfaccia utente di un'app.

In questo tutorial, ti mostrerò come utilizzare il framework per creare ed eseguire un test dell'interfaccia utente di base per l'app Calcolatrice predefinita.

Prerequisiti

Per seguire, è necessario:

  • l'ultima build di Android Studio
  • un dispositivo o emulatore che esegue Android 4.3 o versioni successive
  • una conoscenza di base di JUnit

1. Installazione delle dipendenze

Per utilizzare il framework UI Automator nel tuo progetto, modifica il file build.gradle file nel tuo progetto App directory, aggiungendo le seguenti dipendenze:

androidTestCompile 'com.android.support.test: runner: 0.2' androidTestCompile 'com.android.support.test: rules: 0.2' androidTestCompile 'com.android.support.test.uiautomator: uiautomator-v18: 2.1.0'

Il Sincronizza ora il pulsante dovrebbe essere sullo schermo ora. Quando fai clic su di esso, dovresti vedere un errore simile al seguente:

Clicca il Installa il repository e sincronizza il progetto link per installare il Repository supporto Android.

Se stai usando il appcompat-V7 libreria e la sua versione è 22.1.1, è necessario aggiungere la seguente dipendenza per garantire che sia l'app sia l'app di test utilizzino la stessa versione di com.android.support:support-annotations:

androidTestCompile 'com.android.support:support-annotations:22.1.1'

Successivamente, a causa di un bug in Android Studio, devi escludere un file chiamato LICENSE.txt utilizzando packagingOptions. In caso contrario, si verificherà il seguente errore quando si tenta di eseguire un test:

Esecuzione fallita per task ': app: packageDebugAndroidTest'. File duplicati copiati in APK LICENSE.txt File 1: ~ / .gradle / caches / modules-2 / files-2.1 / org.hamcrest / hamcrest-core / 1.1 / 860340562250678d1a344907ac75754e259cdb14 / hamcrest-core-1.1.jar File 2: ~ / .gradle / caches / modules-2 / file-2.1 / JUnit / JUnit-dep / 4.10 / 64417b3bafdecd366afa514bd5beeae6c1f85ece / JUnit-dep-4.10.jar

Aggiungi il seguente snippet nella parte inferiore del tuo build.gradle file:

android packagingOptions exclude 'LICENSE.txt'

2. Creare una classe di test

Crea una nuova classe di test, CalculatorTester, creando un file chiamato CalculatorTester.java dentro il androidTest directory. Per creare un caso di test di UI Automator, la tua classe deve estendersi InstrumentationTestCase.

stampa Alt + Ins e quindi fare clic Metodo di impostazione per sovrascrivere il impostare metodo.

stampa Alt + Ins ancora e clicca Metodo di prova per generare un nuovo metodo di prova. Nome questo metodo testAdd. Il CalculatorTester la classe dovrebbe ora assomigliare a questa:

public class CalculatorTester estende InstrumentationTestCase @Override public void setUp () genera Exception  public void testAdd () genera Exception 

3. Ispezionare l'interfaccia utente del programma di avvio

Collega il tuo dispositivo Android al computer e premi il tasto home sul dispositivo per accedere alla schermata principale.

Torna al tuo computer e usa un esploratore di file o un terminale per accedere alla directory in cui hai installato l'SDK di Android. Quindi, inserisci il utensili directory al suo interno e avvio uiautomatorviewer. Questo lancerà UI Automater Viewer. Dovresti essere presentato con uno schermo simile a questo:

Fai clic sul pulsante che assomiglia a un telefono per acquisire uno screenshot del tuo dispositivo Android. Nota che lo screenshot appena catturato è interattivo. Fai clic sull'icona App in basso. Nel Dettaglio nodo sezione a destra, ora puoi vedere vari dettagli della tua selezione come mostrato di seguito.

Per interagire con gli elementi sullo schermo, il framework di testing di UI Automator deve essere in grado di identificarli in modo univoco. In questo tutorial, userai o il testo, il content-disc, o il classe dell'articolo per identificarlo in modo univoco.

Come puoi vedere, l'icona Apps non ne ha testo, ma ha un content-disc. Prendi nota del suo valore, perché lo utilizzerai nel passaggio successivo.

Seleziona il tuo dispositivo Android e tocca l'icona App per accedere alla schermata che mostra le app installate sul dispositivo. Torna a UI Automater Viewer e catturare un altro screenshot. Dal momento che si sta scrivendo un test per l'app Calcolatrice, fare clic sulla relativa icona per visualizzarne i dettagli.

Questa volta il content-disc è vuoto, ma il testo contiene il valore Calcolatrice. Annota anche questo.

Se il tuo dispositivo Android esegue un altro launcher o una versione diversa di Android, le schermate e i dettagli del nodo saranno diversi. Ciò significa anche che dovrai apportare alcune modifiche al tuo codice per adattarlo al sistema operativo.

4. Preparare l'ambiente di test

Torna a Android Studio per aggiungere il codice al impostare metodo. Come suggerisce il nome, il impostare il metodo dovrebbe essere usato per preparare il tuo ambiente di test. In altre parole, è qui che si specifica cosa deve essere fatto prima di eseguire il test effettivo.

Ora dovrai scrivere il codice per simulare ciò che hai fatto sul tuo dispositivo Android nel passaggio precedente:

  1. Premere il tasto Home per andare alla schermata principale.
  2. Premi l'icona App per visualizzare tutte le app.
  3. Avvia l'app Calcolatrice toccando la relativa icona.

Nella tua classe, dichiara un campo di testo UIDevice e nominalo dispositivo. Questo campo rappresenta il tuo dispositivo Android e lo utilizzerai per simulare l'interazione dell'utente.

dispositivo UiDevice privato;

Nel impostare metodo, inizializzare dispositivo invocando il UiDevice.getInstance metodo, passando in a Strumentazione istanza come mostrato di seguito.

device = UiDevice.getInstance (getInstrumentation ());

Per simulare la pressione del tasto home del dispositivo, richiamare il pressHome metodo.

device.pressHome ();

Successivamente, devi simulare un evento click sull'icona di Google Apps. Non è possibile farlo immediatamente, perché il dispositivo Android avrà bisogno di un momento per accedere alla schermata principale. Provare a fare clic sull'icona Apps prima che sia visibile sullo schermo causerà un'eccezione di runtime.

Per aspettare che qualcosa accada, devi chiamare il aspettare metodo sul UIDevice esempio. Per attendere che l'icona App appaia sullo schermo, usa il tasto Until.hasObject metodo.

Per identificare l'icona App, usa il By.desc metodo e passare il valore applicazioni ad esso. È inoltre necessario specificare la durata massima dell'attesa in millisecondi. Impostalo su 3000. Ciò risulta nel seguente blocco di codice:

// Attendi che l'icona App appaia sullo schermo device.wait (Until.hasObject (By.desc ("Apps")), 3000);

Per ottenere un riferimento all'icona Apps, usa il FindObject metodo. Una volta che hai un riferimento all'icona Apps, richiama il clic metodo per simulare un clic.

UiObject2 appsButton = device.findObject (By.desc ("Apps")); appsButton.click ();

Come prima, dobbiamo aspettare un attimo affinché l'icona del Calcolatore venga visualizzata sullo schermo. Nel passaggio precedente, hai visto che l'icona del Calcolatore può essere identificata in modo univoco dal suo testo campo. Invochiamo il By.text metodo per trovare l'icona, passando dentro Calcolatrice.

// Attendi che l'icona del Calcolatore appaia sullo schermo device.wait (Until.hasObject (By.text ("Calculator")), 3000);

Utilizzare il FindObject e clic metodi per ottenere un riferimento all'icona Calcolatrice e simulare un clic.

Calcolatrice UiObject2App = device.findObject (By.text ("Calculator")); calculatorApp.click ();

5. Ispezionare l'interfaccia utente della calcolatrice

Avvia l'app Calcolatrice sul tuo dispositivo Android e utilizzala UI Automater Viewer per ispezionarlo. Dopo aver catturato uno screenshot, fai clic sui pulsanti per vedere come puoi identificarli in modo univoco.

Per questo test case, farai calcolare il valore della calcolatrice 9 + 9 = e controlla se mostra 18 come risultato. Ciò significa che è necessario sapere come identificare i pulsanti con le etichette 9, +, e =.

Sul mio dispositivo, ecco cosa ho raccolto dall'ispezione:

  • I pulsanti contenenti le cifre hanno corrispondenza testo valori.
  • I pulsanti contenenti il + e = i simboli hanno il content-disc valori impostati su più e è uguale a rispettivamente.
  • Il risultato è mostrato in un Modifica il testo widget di.

Tieni presente che questi valori potrebbero essere diversi sul tuo dispositivo se utilizzi una versione diversa dell'app Calcolatrice.

6. Crea il test

Nei passaggi precedenti, hai già imparato che puoi usare il FindObject metodo insieme a entrambi By.text o By.desc per ottenere un riferimento a qualsiasi oggetto sullo schermo. Sai anche che devi usare il clic metodo per simulare un clic sull'oggetto. Il seguente codice utilizza questi metodi per eseguire il calcolo 9 + 9 =. Aggiungilo al testAdd metodo del CalculatorTester classe.

// Attendi fino a quando i pulsanti della calcolatrice si trovano sullo schermo device.wait (Until.hasObject (By.text ("9")), 3000); // Seleziona il pulsante per 9 UiObject2 buttonNine = device.findObject (By.text ("9")); buttonNine.click (); // Seleziona il pulsante per + UiObject2 buttonPlus = device.findObject (By.desc ("plus")); buttonPlus.click (); // Premi nuovamente 9 mentre stiamo calcolando 9 + 9 buttonNine.click (); // Seleziona il pulsante per = UiObject2 buttonEquals = device.findObject (By.desc ("equals")); buttonEquals.click ();

A questo punto, devi aspettare il risultato. Tuttavia, non è possibile utilizzare Until.hasObject qui perché il Modifica il testo contenente il risultato è già sullo schermo. Invece, devi usare il waitForIdle metodo per attendere il completamento del calcolo. Di nuovo, la durata massima dell'attesa può essere di 3000 ms.

device.waitForIdle (3000);

Ottieni un riferimento al Modifica il testo oggetto usando il FindObject e By.clazz metodi. Una volta ottenuto il riferimento, chiamare il getText metodo per determinare il risultato del calcolo.

UiObject2 resultText = device.findObject (By.clazz ("android.widget.EditText")); String result = resultText.getText ();

Finalmente, usa assertTrue per verificare che il risultato sia uguale a 18.

assertTrue (result.equals ( "18"));

Il tuo test è ora completo.

6. Esegui il test

Per eseguire il test, nella barra degli strumenti di Android Studio, seleziona la classe CalculatorTester dal menu a discesa e fai clic sul pulsante di riproduzione alla sua destra.

Al termine della generazione, il test dovrebbe essere eseguito e completato correttamente. Durante l'esecuzione del test, dovresti essere in grado di vedere l'automazione dell'interfaccia utente in esecuzione sul tuo dispositivo Android.

Conclusione

In questo tutorial, hai imparato come utilizzare il framework di test di UI Automator e UI Automater Viewer per creare test dell'interfaccia utente. Hai anche visto quanto è facile eseguire il test utilizzando Android Studio. Anche se abbiamo provato un'app piuttosto semplice, puoi applicare i concetti che hai imparato qui per testare praticamente qualsiasi app per Android.

.