Проверьте, закончилась ли операция загрузкой всех данных без изменения кода приложения
Я пытаюсь найти способ убедиться, что действие завершило загрузку всего только без каких-либо изменений в коде приложения. Метод, упомянутый в этом и многих других, требует изменения кода приложения, и я хотел бы сделать это через раздел 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);
}
Надеюсь, что это полезно для тех, кто ищет это.