Automatisieren von Benutzeroberflächen-Tests auf Android

Einführung

Die Test-Support-Bibliothek von Android enthält die UI Automator-Framework, Dies kann verwendet werden, um automatisierte Black-Box-Tests für Android-Apps durchzuführen. Das in API Level 18 eingeführte Framework ermöglicht Entwicklern die Simulation von Benutzeraktionen in den Widgets, die die Benutzeroberfläche einer App bilden.

In diesem Tutorial werde ich Ihnen zeigen, wie Sie mit dem Framework einen grundlegenden Benutzeroberflächentest für die Standardrechner-App erstellen und ausführen.

Voraussetzungen

Um mitzumachen, brauchst du:

  • der neueste Build von Android Studio
  • ein Gerät oder Emulator, auf dem Android 4.3 oder höher ausgeführt wird
  • ein grundlegendes Verständnis von JUnit

1. Abhängigkeiten installieren

Um das UI Automator-Framework in Ihrem Projekt zu verwenden, bearbeiten Sie das build.gradle Datei in Ihrem Projekt App Verzeichnis, das folgende Abhängigkeiten hinzufügt:

androidTestCompile 'com.android.support.test: Läufer: 0.2' androidTestCompile 'com.android.support.test: Regeln: 0.2' androidTestCompile 'com.android.support.test.uiautomator: uiautomator-v18: 2.1.0'

Das Jetzt synchronisieren Die Schaltfläche sollte jetzt auf dem Bildschirm angezeigt werden. Wenn Sie darauf klicken, sollten Sie einen Fehler sehen, der wie folgt aussieht:

Drücke den Repository installieren und Projekt synchronisieren Link zur Installation der Android-Support-Repository.

Wenn Sie das verwenden appcompat-v7 Bibliothek und ihre Version ist 22.1.1, Sie müssen die folgende Abhängigkeit hinzufügen, um sicherzustellen, dass sowohl die App als auch die Test-App dieselbe Version von verwenden com.android.support:support-annotations:

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

Als Nächstes müssen Sie aufgrund eines Fehlers in Android Studio eine Datei mit dem Namen ausschließen LIZENZ.txt mit Verpackungsoptionen. Andernfalls wird beim Versuch, einen Test auszuführen, die folgende Fehlermeldung angezeigt:

Ausführung fehlgeschlagen für Task ': app: packageDebugAndroidTest'. Doppelte Dateien, die in APK LICENSE.txt kopiert wurden. .gradle / caches / modules-2 / files-2.1 / junit / junit-dep / 4.10 / 64417b3bafdecd366afa514bd5beeae6c1f85ece / junit-dep-4.10.jar

Fügen Sie den folgenden Ausschnitt am unteren Rand Ihres hinzu build.gradle Datei:

android packageOptions exclude 'LICENSE.txt'

2. Erstellen Sie eine Testklasse

Erstellen Sie eine neue Testklasse, RechnerTester, Erstellen Sie eine Datei mit dem Namen CalculatorTester.java in der androidTest Verzeichnis. Um einen UI-Automator-Testfall zu erstellen, muss Ihre Klasse erweitert werden InstrumentationTestCase.

Drücken Sie Alt + Einfügen und klicken Sie dann auf SetUp-Methode das überschreiben Konfiguration Methode.

Drücken Sie Alt + Einfügen erneut und klicken Sie auf Testmethode eine neue Testmethode erzeugen. Benennen Sie diese Methode testAdd. Das RechnerTester Die Klasse sollte jetzt so aussehen:

public class CalculatorTester erweitert InstrumentationTestCase @Override public void setUp () löst Exception  aus. public void testAdd () löst Exception  aus.

3. Überprüfen Sie die Benutzeroberfläche des Launcher

Verbinden Sie Ihr Android-Gerät mit Ihrem Computer und drücken Sie die Home-Taste auf Ihrem Gerät, um zum Startbildschirm zu navigieren.

Gehen Sie zu Ihrem Computer zurück und navigieren Sie mit dem Dateiexplorer oder -terminal zu dem Verzeichnis, in dem Sie das Android SDK installiert haben. Als nächstes geben Sie die Werkzeuge Verzeichnis darin und starten uiautomatorviewer. Dies wird gestartet UI Automater Viewer. Es sollte ein Bildschirm angezeigt werden, der folgendermaßen aussieht:

Klicken Sie auf die Schaltfläche, die wie ein Telefon aussieht, um einen Screenshot Ihres Android-Geräts aufzunehmen. Beachten Sie, dass der soeben aufgenommene Screenshot interaktiv ist. Klicken Sie unten auf das Apps-Symbol. In dem Knotendetail Im rechten Bereich können Sie nun verschiedene Details Ihrer Auswahl sehen (siehe unten).

Um mit Elementen auf dem Bildschirm zu interagieren, muss das UI Automator-Testframework sie eindeutig identifizieren können. In diesem Tutorial verwenden Sie entweder die Text, das content-desc, oder der Klasse der Artikel eindeutig zu identifizieren.

Wie Sie sehen, hat das Apps-Symbol keine Text, aber es hat eine content-desc. Notieren Sie sich den Wert, da Sie ihn im nächsten Schritt verwenden werden.

Heben Sie Ihr Android-Gerät hoch und berühren Sie das Apps-Symbol, um zum Bildschirm mit den auf dem Gerät installierten Apps zu navigieren. Geh zurück zu UI Automater Viewer und einen weiteren Screenshot aufnehmen. Da Sie einen Test für die Taschenrechner-App schreiben, klicken Sie auf das Symbol, um die Details anzuzeigen.

Diesmal die content-desc ist leer, aber die Text enthält den Wert Taschenrechner. Notieren Sie sich auch dies.

Wenn auf Ihrem Android-Gerät ein anderes Startprogramm oder eine andere Android-Version ausgeführt wird, unterscheiden sich die Bildschirme und Knotendetails. Dies bedeutet auch, dass Sie einige Änderungen an Ihrem Code vornehmen müssen, um sich an das Betriebssystem anzupassen.

4. Bereiten Sie die Testumgebung vor

Kehren Sie zu Android Studio zurück, um dem Code Code hinzuzufügen Konfiguration Methode. Wie der Name schon sagt, die Konfiguration Diese Methode sollte zur Vorbereitung Ihrer Testumgebung verwendet werden. Mit anderen Worten, hier legen Sie fest, was vor dem eigentlichen Test zu tun ist.

Sie schreiben jetzt Code, um zu simulieren, was Sie im vorherigen Schritt auf Ihrem Android-Gerät gemacht haben:

  1. Drücken Sie die Starttaste, um zum Startbildschirm zu gelangen.
  2. Drücken Sie das Apps-Symbol, um alle Apps anzuzeigen.
  3. Starten Sie die Rechner-App, indem Sie auf das Symbol tippen.

Deklarieren Sie in Ihrer Klasse ein Feld vom Typ UiDevice und nennen Sie es Gerät. Dieses Feld stellt Ihr Android-Gerät dar und Sie verwenden es, um die Benutzerinteraktion zu simulieren.

privates UiDevice-Gerät;

In dem Konfiguration Methode, initialisieren Gerät durch Aufruf der UiDevice.getInstance Methode, übergeben in a Instrumentierung Instanz wie unten gezeigt.

device = UiDevice.getInstance (getInstrumentation ());

Um das Drücken der Home-Taste des Geräts zu simulieren, rufen Sie das Symbol auf PresseHome Methode.

device.pressHome ();

Als Nächstes müssen Sie ein Klickereignis auf dem Apps-Symbol simulieren. Sie können dies jedoch nicht sofort tun, da das Android-Gerät einen Moment benötigt, um zum Startbildschirm zu navigieren. Wenn Sie versuchen, auf das Apps-Symbol zu klicken, bevor es auf dem Bildschirm angezeigt wird, wird eine Laufzeitausnahme ausgelöst.

Um darauf zu warten, dass etwas passiert, rufen Sie die warten Methode auf der UiDevice Beispiel. Um zu warten, bis das Apps-Symbol auf dem Bildschirm angezeigt wird, verwenden Sie die Bis.hat ein Objekt Methode.

Um das Apps-Symbol zu identifizieren, verwenden Sie die Von.desc Methode und übergeben Sie den Wert Apps dazu Sie müssen auch die maximale Wartezeit in Millisekunden angeben. Stellen Sie es auf 3000. Dies führt zu dem folgenden Codeblock:

// Warten Sie, bis das Apps-Symbol auf dem Bildschirm angezeigt wird. Device.wait (Bis.hasObject (By.desc ("Apps")), 3000);

Um einen Verweis auf das Apps-Symbol zu erhalten, verwenden Sie die findObject Methode. Wenn Sie einen Verweis auf das Apps-Symbol haben, rufen Sie das Symbol auf klicken Methode, um einen Klick zu simulieren.

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

Wie zuvor müssen wir einen Moment warten, bis das Calculator-Symbol auf dem Bildschirm angezeigt wird. Im vorherigen Schritt haben Sie gesehen, dass das Calculator-Symbol eindeutig durch sein Symbol identifiziert werden kann Text Feld. Wir rufen das an By.text Methode, um das Symbol zu finden, übergeben Taschenrechner.

// Warten Sie, bis das Calculator-Symbol auf dem Bildschirm angezeigt wird. Device.wait (Until.hasObject (By.text ("Calculator")), 3000);

Verwenden Sie die findObject und klicken Methoden, um einen Verweis auf das Calculator-Symbol zu erhalten, und einen Simulator mit einem Klick.

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

5. Überprüfen Sie die Benutzeroberfläche des Rechners

Starten Sie die Rechner-App auf Ihrem Android-Gerät und verwenden Sie sie UI Automater Viewer um es zu inspizieren Klicken Sie nach der Aufnahme eines Screenshots auf die Schaltflächen, um zu sehen, wie Sie diese eindeutig identifizieren können.

Für diesen Testfall berechnen Sie den Wert von 9 + 9 = und prüfen, ob es angezeigt wird 18 als Ergebnis. Dies bedeutet, dass Sie wissen müssen, wie Sie die Tasten mit den Beschriftungen identifizieren 9, +, und =.

Auf meinem Gerät habe ich aus der Inspektion Folgendes zusammengestellt:

  • Die Tasten, die die Ziffern enthalten, stimmen überein Text Werte.
  • Die Schaltflächen mit der + und = Symbole haben die content-desc Werte gesetzt auf Plus und gleich beziehungsweise.
  • Das Ergebnis wird in einem angezeigt Text bearbeiten Widget.

Beachten Sie, dass sich diese Werte auf Ihrem Gerät möglicherweise unterscheiden, wenn Sie eine andere Version der Rechner-App verwenden.

6. Erstellen Sie den Test

In den vorherigen Schritten haben Sie bereits gelernt, dass Sie das verwenden können findObject Methode zusammen mit entweder By.text oder Von.desc um einen Verweis auf ein beliebiges Objekt auf dem Bildschirm zu erhalten. Sie wissen auch, dass Sie das verwenden müssen klicken Methode, um einen Klick auf das Objekt zu simulieren. Der folgende Code verwendet diese Methoden, um die Berechnung durchzuführen 9 + 9 =. Fügen Sie es dem hinzu testAdd Methode der RechnerTester Klasse.

// Warten Sie, bis die Schaltflächen des Rechners auf dem Bildschirm angezeigt werden. Device.wait (Bis.hasObject (By.text ("9")), 3000); // Wähle die Schaltfläche für 9 UiObject2 buttonNine = device.findObject (By.text ("9")); buttonNine.click (); // Wählen Sie die Schaltfläche für + UiObject2 buttonPlus = device.findObject (By.desc ("plus")); buttonPlus.click (); // Drücken Sie erneut 9, während wir 9 + 9 berechnen. ButtonNine.click (); // Wählen Sie die Schaltfläche für = UiObject2 buttonEquals = device.findObject (By.desc ("equals")); buttonEquals.click ();

An diesem Punkt müssen Sie auf das Ergebnis warten. Sie können jedoch nicht verwenden Bis.hat ein Objekt hier, weil die Text bearbeiten das Ergebnis enthält ist bereits auf dem Bildschirm. Stattdessen müssen Sie das verwenden waitForIdle Methode, um zu warten, bis die Berechnung abgeschlossen ist. Wieder kann die maximale Wartezeit 3000 ms betragen.

device.waitForIdle (3000);

Bekommen Sie einen Verweis auf die Text bearbeiten Objekt mit der findObject und Von.clazz Methoden. Sobald Sie die Referenz haben, rufen Sie die getText Methode zur Ermittlung des Ergebnisses der Berechnung.

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

Zum Schluss verwenden assertTrue um zu überprüfen, ob das Ergebnis gleich ist 18.

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

Ihr Test ist jetzt abgeschlossen.

6. Führen Sie den Test aus

Um den Test auszuführen, wählen Sie in der Symbolleiste von Android Studio die Klasse aus RechnerTester Klicken Sie im Dropdown-Menü auf die Wiedergabeschaltfläche rechts.

Sobald der Build abgeschlossen ist, sollte der Test erfolgreich ausgeführt werden. Während des Tests sollten Sie die Automatisierung der Benutzeroberfläche auf Ihrem Android-Gerät sehen können.

Fazit

In diesem Lernprogramm haben Sie gelernt, wie Sie mit dem UI Automator-Testframework und dem UI Automater Viewer Benutzerschnittstellentests erstellen. Sie haben auch gesehen, wie einfach es ist, den Test mit Android Studio auszuführen. Obwohl wir eine recht einfache App getestet haben, können Sie die hier erlernten Konzepte anwenden, um fast jede Android-App zu testen.

.