Automatizarea testării interfeței utilizator pe Android

Introducere

Biblioteca de suport Android pentru testarea include UI Automator cadru, care poate fi folosit pentru a efectua teste automate black-box pe aplicațiile Android. Prezentat în API Level 18, cadrul permite dezvoltatorilor să simuleze acțiunile utilizatorilor asupra widget-urilor care constituie interfața de utilizator a unei aplicații.

În acest tutorial, vă voi arăta cum să utilizați cadrul pentru a crea și rula un test de interfață de bază pentru aplicația implicită Calculator.

Cerințe preliminare

Pentru a continua, aveți nevoie de:

  • ultima versiune de Android Studio
  • un dispozitiv sau un emulator care rulează Android 4.3 sau o versiune ulterioară
  • o înțelegere de bază a JUnit

1. Instalarea dependențelor

Pentru a utiliza cadrul UI Automator în proiectul dvs., editați build.gradle fișier în proiectul dvs. aplicaţia director, adăugând următoarele dependențe:

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'

Sincronizați acum butonul trebuie să fie pe ecran acum. Când faceți clic pe el, ar trebui să vedeți o eroare care arată astfel:

Apasă pe Instalați Depozit și sincronizați proiectul link pentru a instala Spațiul de asistență Android.

Dacă utilizați appcompat-V7 bibliotecă și versiunea sa este 22.1.1, trebuie să adăugați următoarea dependență pentru a vă asigura că atât aplicația, cât și aplicația de test utilizează aceeași versiune de com.android.support:support-annotations:

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

Apoi, din cauza unui bug în Android Studio, trebuie să excludeți un fișier numit license.txt utilizând packagingOptions. În caz contrar, atunci când încercați să executați un test, veți provoca următoarea eroare:

Executarea a eșuat pentru sarcina ': app: packageDebugAndroidTest'. Fișiere duplicate copiate în fișier APK LICENSE.txt Fișierul 1: ~ / .gradle / caches / modules-2 / files-2.1 / org.hamcrest / hamcrest-core / 1.1 / 860340562250678d1a344907ac75754e259cdb14 / .gradle / Caches / module-2 / fișiere-2.1 / JUnit / JUnit-DEP / 4.10 / 64417b3bafdecd366afa514bd5beeae6c1f85ece / JUnit-DEP-4.10.jar

Adăugați următorul fragment în partea de jos a paginii dvs. build.gradle fişier:

android packagingOptions exclude 'LICENSE.txt'

2. Creați o clasă de testare

Creați o nouă clasă de testare, CalculatorTester, prin crearea unui fișier numit CalculatorTester.java în interiorul androidTest director. Pentru a crea un test de UI Automator, clasa trebuie să se extindă InstrumentationTestCase.

presa Alt + Insert apoi faceți clic pe Metoda SetUp pentru a suprascrie înființat metodă.

presa Alt + Insert din nou și faceți clic pe Metoda de test pentru a genera o nouă metodă de testare. Denumiți această metodă testAddCalculatorTester clasa ar trebui să arate astfel:

clasa publica CalculatorTester extinde InstrumentationTestCase @Override public void setUp () aruncă excepția  public void testAdd () aruncă Excepție 

3. Verificați interfața de utilizare a lansatorului

Conectați dispozitivul Android la computer și apăsați butonul de pornire de pe dispozitiv pentru a naviga la ecranul de pornire.

Reveniți la computer și utilizați un explorator de fișiere sau un terminal pentru a naviga la directorul în care ați instalat SDK-ul Android. Apoi, introduceți unelte directorul din interiorul acestuia și lansarea uiautomatorviewer. Acest lucru va fi lansat UI Automater Viewer. Ar trebui să prezentați un ecran care arată astfel:

Faceți clic pe butonul care arată ca un telefon pentru a captura o captură de ecran a dispozitivului Android. Rețineți că captura de ecran pe care tocmai ați capturat-o este interactivă. Dați clic pe pictograma Aplicații din partea de jos. În Nod detalii din dreapta, acum puteți vedea diferite detalii ale selecției dvs., după cum se arată mai jos.

Pentru a interacționa cu elementele de pe ecran, cadrul de testare UI Automator trebuie să le poată identifica în mod unic. În acest tutorial, veți folosi fie text, Conținutul-desc, sau clasă a elementului pentru ao identifica în mod unic.

După cum puteți vedea, pictograma Apps nu are niciunul text, dar are un a Conținutul-desc. Notați valoarea, pentru că o veți folosi în pasul următor.

Alegeți dispozitivul Android și atingeți pictograma Aplicații pentru a naviga la ecranul care afișează aplicațiile instalate pe dispozitiv. Înapoi la UI Automater Viewer și capturați o altă captură de ecran. De când veți scrie un test pentru aplicația Calculator, faceți clic pe pictograma sa pentru a vedea detaliile acesteia.

De data aceasta Conținutul-desc este gol, dar text conține valoarea Calculator. Observați și acest lucru.

Dacă dispozitivul dvs. Android rulează un lansator diferit sau o versiune diferită de Android, ecranele și detaliile nodurilor vor fi diferite. Acest lucru înseamnă, de asemenea, că va trebui să faceți anumite modificări în codul dvs. pentru a se potrivi cu sistemul de operare.

4. Pregătiți mediul de testare

Reveniți la Android Studio pentru a adăuga codul la înființat metodă. După cum sugerează și numele, înființat trebuie să utilizați metoda pentru a vă pregăti mediul de testare. Cu alte cuvinte, aici specificați ce trebuie făcut înainte de a efectua testul real.

Veți scrie acum un cod pentru a simula ceea ce ați făcut pe dispozitivul dvs. Android în etapa anterioară:

  1. Apăsați butonul de pornire pentru a merge la ecranul de pornire.
  2. Apăsați pictograma Apps pentru a vedea toate aplicațiile.
  3. Lansați aplicația Calculator atingând pictograma sa.

În clasa dvs., declarați un câmp de tip UiDevice și numește-o dispozitiv. Acest câmp reprezintă dispozitivul dvs. Android și îl veți utiliza pentru a simula interacțiunea cu utilizatorul.

dispozitiv privat UiDevice;

În înființat metoda, inițializați dispozitiv invocând UiDevice.getInstance metoda, trecând într-un Instrumentaţie exemplu după cum se arată mai jos.

dispozitiv = UiDevice.getInstance (getInstrumentation ());

Pentru a simula apăsarea butonului acasă al dispozitivului, invocați pressHome metodă.

device.pressHome ();

Apoi, trebuie să simulați un eveniment clic pe pictograma Aplicații. Totuși, nu puteți face acest lucru imediat, deoarece dispozitivul Android va avea nevoie de un moment pentru a naviga la ecranul de pornire. Încercarea de a face clic pe pictograma Aplicații înainte de a fi vizibilă pe ecran va determina o excepție de rulare.

Pentru a aștepta să se întâmple ceva, trebuie să apelați aștepta metoda pe UiDevice instanță. Pentru a aștepta ca pictograma Apps să apară pe ecran, utilizați Until.hasObject metodă.

Pentru a identifica pictograma Aplicații, utilizați By.desc metoda și să treacă valoarea Aplicații la el. De asemenea, trebuie să specificați durata maximă a așteptării în milisecunde. Setați-l la 3000. Rezultă următorul bloc de cod:

// Așteptați ca pictograma Apps să apară pe ecranul device.wait (Until.hasObject (By.desc ("Apps")), 3000);

Pentru a obține o referință la pictograma Apps, utilizați findObject metodă. Odată ce ați făcut o trimitere la pictograma Apps, invocați clic pentru a simula un clic.

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

Ca și înainte, trebuie să așteptăm o clipă ca pictograma Calculator să apară pe ecran. În pasul anterior, ați văzut că pictograma Calculator poate fi identificată în mod unic de către ei text camp. Invocăm By.text metoda de a găsi icoana, trecând Calculator.

// Așteptați ca pictograma Calculator să apară pe ecranul device.wait (Until.hasObject (By.text ("Calculator")), 3000);

Folosește findObject și clic metode pentru a obține o referință la pictograma Calculator și la un simulator un clic.

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

5. Inspectați interfața de utilizare a calculatorului

Lansați aplicația Calculator pe dispozitivul Android și utilizați-l UI Automater Viewer să o inspecteze. După ce ați captat o captură de ecran, faceți clic pe butoane pentru a vedea cum le puteți identifica în mod unic.

Pentru acest test, veți face calculul calcula valoarea 9 + 9 = și verificați dacă se arată 18 drept urmare. Aceasta înseamnă că trebuie să știți cum să identificați butoanele cu etichetele 9, +, și =.

Pe dispozitivul meu, iată ce am adunat din inspecție:

  • Butoanele care conțin cifrele se potrivesc text valorile.
  • Butoanele care conțin + și = simboluri au Conținutul-desc valorile setate la la care se adauga și este egală respectiv.
  • Rezultatul este afișat într-un Editează textul widget.

Rețineți că aceste valori pot fi diferite pe dispozitivul dvs. dacă utilizați o altă versiune a aplicației Calculator.

6. Creați testul

În pașii anteriori, ați aflat deja că puteți utiliza findObject împreună cu oricare dintre acestea By.text sau By.desc pentru a obține o referință la orice obiect de pe ecran. De asemenea, știți că trebuie să utilizați clic pentru a simula un clic pe obiect. Următorul cod folosește aceste metode pentru a efectua calculul 9 + 9 =. Adăugați-l la testAdd metodă a CalculatorTester clasă.

// Așteptați până când butoanele Calculatorului se află pe dispozitiv. Așteptați (Until.hasObject (By.text ("9")), 3000); // Selectați butonul pentru 9 UiObject2 buttonNine = device.findObject (By.text ("9")); buttonNine.click (); // Selectați butonul pentru + UiObject2 buttonPlus = device.findObject (By.desc ("plus")); buttonPlus.click (); // Apăsați 9 din nou pe măsură ce calculam butonul 9 + 9Nine.click (); // Selectați butonul pentru = UiObject2 buttonEquals = device.findObject (By.desc ("equals")); buttonEquals.click ();

În acest moment, trebuie să așteptați rezultatul. Cu toate acestea, nu puteți folosi Until.hasObject aici pentru că Editează textul conținând rezultatul este deja pe ecran. În schimb, trebuie să utilizați waitForIdle metoda de a aștepta ca calculul să se finalizeze. Din nou, durata maximă a așteptării poate fi de 3000 ms.

device.waitForIdle (3000);

Obțineți o referință la Editează textul obiect folosind findObject și By.clazz metode. Odată ce ați făcut referința, apelați getText metoda de determinare a rezultatului calculului.

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

În cele din urmă, utilizați assertTrue pentru a verifica dacă rezultatul este egal cu 18.

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

Testul dvs. este acum complet.

6. Rulați testul

Pentru a rula testul, în bara de instrumente Android Studio, selectați clasa CalculatorTester din meniul derulant și faceți clic pe butonul de redare din partea dreaptă.

Odată ce construcția se termină, testul ar trebui să funcționeze și să se finalizeze cu succes. În timp ce testul rulează, ar trebui să puteți vedea automatizarea UI care rulează pe dispozitivul dvs. Android.

Concluzie

În acest tutorial, ați învățat cum să utilizați cadrul de testare UI Automator și UI Automater Viewer pentru a crea teste de interfață cu utilizatorul. De asemenea, ați văzut cât de ușor este să rulați testul utilizând Android Studio. Chiar dacă am testat o aplicație destul de simplă, puteți aplica conceptele pe care le-ați învățat aici pentru a testa aproape orice aplicație Android.

.

Cod