Проверьте, закончилась ли операция загрузкой всех данных без изменения кода приложения

Я пытаюсь найти способ убедиться, что действие завершило загрузку всего только без каких-либо изменений в коде приложения. Метод, упомянутый в этом и многих других, требует изменения кода приложения, и я хотел бы сделать это через раздел androidTest.

Существуют сценарии, когда действие загружается не полностью и выполнение следующего кода завершается неудачно:

onView(allOf(withId(R.id.user_name), withText("username1"))).perform(click());

В этом примере я жду ListView чтобы загрузить, поэтому данные также могут быть загружены асинхронно (я использую эспрессо).

1 ответ

Решение

Возможно, уже слишком поздно, но вы должны взглянуть на ресурс ожидания эспрессо, чтобы синхронизировать задачи фоновой загрузки с эспрессо. Вам не нужно менять код приложения. Здесь у вас есть более глубокий взгляд на пользовательские ресурсы холостого хода Android: http://dev.jimdo.com/2014/05/09/wait-for-it-a-deep-dive-into-espresso-s-idling-resources/ или это http://blog.sqisland.com/2015/04/espresso-custom-idling-resource.html

Вот что я сделал, чтобы эспрессо дождался заполнения моего списка (от данных, поступающих из сети), прежде чем запускать тест пользовательского интерфейса.

public class ListResultsIdlingResource implements IdlingResource {

private ResourceCallback callback;

private RecyclerView mRecyclerListings;


public ListResultsIdlingResource(RecyclerView recyclerListings) {
    mRecyclerListings = recyclerListings;
}

@Override
public boolean isIdleNow() {
    if (mRecyclerListings != null && mRecyclerListings.getAdapter().getItemCount() > 0) {
        if (callback != null) {
            callback.onTransitionToIdle();
        }
        return true;
    }
    return false;
}


@Override
public void registerIdleTransitionCallback(ResourceCallback callback) {
    this.callback = callback;
}

@Override
public String getName() {
    return "Recycler idling resource";
}

Вам просто нужно убедиться, что в вашем списке есть элементы в вашем методе isIdleNow(), прежде чем запускать тест UI над его элементами.

И в вашем тестовом классе эспрессо в вашем методе настройки зарегистрируйте свой ресурс на холостом ходу и передайте ему ссылку на ваш ListView или Recyclerview или любое представление, которое вы используете в качестве списка.

@Before
public void setUp() throws Exception {

    Intent intent = createIntentForActivity();
    activityRule.launchActivity(intent);
    mActivity = activityRule.getActivity();

    mListResultsIdlingResource = new ListingResultsIdlingResource(
            (RecyclerView) mActivity.findViewById(R.id.recycler_view));
    registerIdlingResources(mListResultsIdlingResource);
}

Надеюсь, что это полезно для тех, кто ищет это.

Другие вопросы по тегам