Testen mehrerer Aktivitäten mit Espresso

Lesezeit: 3 Minuten

Ist es möglich, mit dem Android-Espresso-Framework Tests über mehrere Aktivitäten hinweg zu schreiben?

Benutzeravatar von Jigish Chawda
Jigish Chawda

Ja, es ist möglich. In einem der Beispiele haben sie dies hier demonstriert https://github.com/googlesamples/android-testing/blob/master/ui/espresso/BasicSample/app/src/androidTest/java/com/example/android/testing/espresso/BasicSample/ChangeTextBehaviorTest.java

@Test
public void changeText_newActivity() {
    // Type text and then press the button.
    onView(withId(R.id.editTextUserInput)).perform(typeText(STRING_TO_BE_TYPED),
            closeSoftKeyboard());
    onView(withId(R.id.activityChangeTextBtn)).perform(click());

    // This view is in a different Activity, no need to tell Espresso.
    onView(withId(R.id.show_text_view)).check(matches(withText(STRING_TO_BE_TYPED)));
}

Lesen Sie den Inline-Kommentar.

Das Warten auf das Laden der neuen Aktivität wird implizit von Espresso übernommen.

  • Ist es jetzt noch möglich? mit Espresso 2. Ich habe eine Art Anwendung wie diese, wenn der Benutzer auf die Datei drückt, wechselt sie zu einer anderen Aktivität, und ich muss diese Benutzeroberfläche testen. Irgendwelche Ideen?

    – Optimus Prime

    18. November 2016 um 6:53 Uhr

  • @AQU Ich habe nicht mit gearbeitet Espresso schon lange. Ich empfehle, die Beispiele von Espresso 2 durchzugehen.

    – Jigish Chawda

    28. November 2016 um 6:30 Uhr

  • Yaa, bei mir funktioniert es jetzt. Ich bin in der Lage, all die Dinge zu tun, die ich will.

    – Optimus Prime

    28. November 2016 um 9:50 Uhr

  • Nun, mein Test kann die Ansichten der zweiten Aktivität nicht finden und zerkleinert.

    – kann

    9. August 2021 um 9:51 Uhr

Es ist durchaus möglich, einen Espresso-Test (oder einen anderen Instrumenten-basierten) Test zu schreiben, der mehrere Aktivitäten umfasst. Sie müssen mit einer Aktivität beginnen, können aber über die Benutzeroberfläche Ihrer Anwendung zu anderen Aktivitäten navigieren. Einziger Vorbehalt: Aufgrund von Sicherheitseinschränkungen muss der Testablauf im Prozess Ihrer Anwendung bleiben.

  • Wie kann ich sicherstellen, dass die richtige Aktivität geöffnet wurde, nachdem ich auf ein Widget geklickt habe?

    – Bolhoso

    17. Dezember 2013 um 15:56 Uhr

  • Wie es der App-Benutzer tun würde – behaupten, dass eine bestimmte Ansicht dieser Aktivität angezeigt wird.

    – WaleraSacharow

    18. Dezember 2013 um 22:21 Uhr


Angenommen, Sie haben zwei Aktivitäten: HomeAktivität und SearchResultsActivity. Für den Test möchten Sie einige Aktionen für HomeActivity ausführen und das Ergebnis für SearchResultsActivity überprüfen. Dann wird der Test wie folgt geschrieben:

public class SearchTest extends ActivityInstrumentationTestCase2<HomeActivity> {

    public SearchTest() {
        super(HomeActivity.class);
    }

    protected void setUp() throws Exception {
        super.setUp();
        getActivity(); // launch HomeActivity
    }

    protected void tearDown() throws Exception {
        super.tearDown();
    }

    public void testSearch() {
        onView(withId(R.id.edit_text_search_input)).perform(typeText("Hello World"));
        onView(withId(R.id.button_search)).perform(click());
        // at this point, another activity SearchResultsActivity is started
        onView(withId(R.id.text_view_search_result)).check(matches(withText(containsString("Hello World"))));
    }

}

Sie müssen also nur darauf achten, dass Sie die Testklasse von ActivityInstrumentationTestCase2< erweiternErsteAktivität>, und rufen Sie super(ErsteAktivität.class) in Ihrem Konstruktor.

Das obige Beispiel ist ziemlich einfach.

Voraus Beispiel (wenn startActivityForResult passiert):

Manchmal ist es wirklich verwirrend, einen Test zu schreiben, bei dem Sie immer noch zwei Aktivitäten A und B haben und der Anwendungsablauf anders ist als oben:

  1. Benutzer tut nichts bei Aktivität A, aber Aktivität A ruft startActivityForResult auf, um Aktivität B zu starten;
  2. dann macht der Benutzer einige Eingaben und klickt auf Aktivität B (dieser Teil ist der eigentliche Test);
  3. Schließlich wird Aktivität B beendet, sie ruft setResult auf und setzt Aktivität A fort (Sie müssen das Ergebnis hier überprüfen).

Auch wenn der gesamte Testteil in Aktivität B stattfindet, müssen Sie möglicherweise nur einen winzigen Teil in Aktivität A überprüfen, aber Ihr Test sollte sich von ActivityInstrumentationTestCase2ActivityWhoCallsStartActivityForResult> das ist Aktivität A, aber nicht Aktivität B. Andernfalls wird Aktivität A nach Abschluss des Testteils nicht fortgesetzt, Sie haben keine Möglichkeit, Ihr Ergebnis zu überprüfen.

Benutzeravatar von stef
Stefan

Ich habe das so getestet:

onView(withId(R.id.hello_visitor)).perform(click());
pressBack();
onView(withId(R.id.hello_visitor)).check(matches(isDisplayed())); //fails here

Die Klickaktion startet natürlich eine neue Aktivität.

1394440cookie-checkTesten mehrerer Aktivitäten mit Espresso

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy