Espresso - утверждая текстовый просмотр с Async загруженными данными

StackOverflow https://stackoverflow.com//questions/21004481

Вопрос

Я пишу тест на пользовательский интерфейс с помощью Google Espresso для Android, и я застрял, как утверждать текстовый просмотр текста, содержание которого асинхронно загружено из веб-сервиса.Мой текущий код:

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();
    }
}
.

на (1), я информирую свою деятельность, чтобы загрузить элемент из WebService.В (2) я жду взгляд, утверждая его содержание.Это часть, которую тест не удается, потому что он выполняется до того, как Webservice отвечает на приложение.

Как я могу сказать Espresso ждать, пока на экране появится определенный элемент данных?Или я должен думать по-другому, чтобы написать такой тест?

Это было полезно?

Решение

Вы можете справиться с этим случаем, зарегистрировав IDLINGRESORCE для вашей веб-сервиса с Espresso.Посмотрите на эту запись: https://developer.Android.com / Обучение / Тестирование / Espresso / IDLING-Resource.html

Скорее всего, вы захотите использовать CountingIdlingResource (который использует простой счетчик для отслеживания, когда что-то проходит).Это тест образца демонстрирует, как это можно сделать.

Другие советы

Если вы не беспокоитесь с использованием Uiautomator с Espresso, вы можете сделать что-то вроде этого на своем шаге 4.

UiObject object = mDevice.findObject(new UiSelector().resourceId(packageName + ":id/" + "review_box"));
object.waitForExists(5000);
.

https:// разработчик.Android.com/reference/android/support/test/uiautomator/uiobject.html#waitforexists(long)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top