Ich schreibe einen UI-Test mit Google Espresso für Android und ich bin fest, wie man einen TextView-Text, der asynchron von einem Web-Service geladen wird behaupten. Mein aktueller Code ist:Espresso - Assert eine TextView mit async geladenen Daten
public class MyTest extends BaseTestCase<MyActivity>{
public void setUp() throws Exception {
// (1) Tell the activity to load 'element-to-be-loaded' from webservice
this.setActivityIntent(new Intent(Intent.ACTION_VIEW, Uri.parse("data://data/element-to-be-loaded")));
getActivity();
super.setUp();
}
public void testClickOnReviews(){
// (2) Check the element is loaded and its name is displayed
Espresso
.onView(ViewMatchers.withId(R.id.element_name))
.check(ViewAssertions.matches(ViewMatchers.withText("My Name")));
// (3) Click on the details box
Espresso
.onView(ViewMatchers.withId(R.id.details_box))
.check(ViewAssertions.matches(ViewMatchers.isDisplayed()))
.perform(ViewActions.click());
// (4) Wait for the details screen to open
Espresso
.onView(ViewMatchers.withId(R.id.review_box));
// Go back to element screen
Espresso.pressBack();
}
}
On (1), informiere ich meine Tätigkeit ein Element aus dem Webservice zu laden. An (2) warte ich auf die Ansicht, die ihren Inhalt bestätigt. Dies ist der Teil, bei dem der Test fehlschlägt, da er ausgeführt wird, bevor der Webservice die App beantwortet.
Wie kann ich Espresso darauf warten, dass bestimmte Daten auf dem Bildschirm angezeigt werden? Oder sollte ich anders denken, um einen solchen Test zu schreiben?
versuchen, diesen Ansatz zu tun - http://stackoverflow.com/ a/22563297/349681, möglicherweise können Sie negative Matcher verwenden und warten, bis die Ansicht verschwindet. –