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.
Per seguire, è necessario:
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'
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
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.
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:
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 ();
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:
testo
valori.content-disc
valori impostati su più e è uguale a rispettivamente.Modifica il testo
widget di.Tieni presente che questi valori potrebbero essere diversi sul tuo dispositivo se utilizzi una versione diversa dell'app Calcolatrice.
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.
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.
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.
.