Я пишу UI-тест с Google Espresso для Android, и я зациклился на том, как утверждать текст TextView, содержимое которого асинхронно загружается из веб-службы. Мой текущий код:Эспрессо - утверждение TextView с данными с асинхронными данными
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), сообщаю свою деятельность, чтобы загрузить элемент из веб-сервиса. На (2) я жду представления, утверждающего его содержимое. Это та часть, которую тест терпит неудачу, потому что он выполняется до того, как веб-служба ответит на приложение.
Как я могу сказать Espresso, чтобы ждать, пока на экране появится определенная часть данных? Или я должен думать иначе, чтобы написать такой тест?
попробовать этот подход - http://stackoverflow.com/ a/22563297/349681, потенциально вы можете использовать отрицательный сокет и ждать, пока вид не исчезнет. –