Ist es möglich, mit dem Android-Espresso-Framework Tests über mehrere Aktivitäten hinweg zu schreiben?
Testen mehrerer Aktivitäten mit Espresso
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:
- Benutzer tut nichts bei Aktivität A, aber Aktivität A ruft startActivityForResult auf, um Aktivität B zu starten;
- dann macht der Benutzer einige Eingaben und klickt auf Aktivität B (dieser Teil ist der eigentliche Test);
- 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 ActivityInstrumentationTestCase2
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.