Android-Espresso: не удается получить элемент в ViewPager

В нашем приложении есть пейджер просмотра, который, когда пользователь выходит из системы, показывает тот же пользовательский интерфейс. Итак, поскольку пользовательский интерфейс одинаков для каждой страницы на пейджере просмотра, нажатие на элемент или проверка того, отображается ли он, просто дает мне множественную ошибку Matches. Итак, моя теория заключается в том, что пейджеры просмотра загружают все сразу, поэтому я получаю эту ошибку. Изменение contentDescriptor не работает, так как оно будет одинаковым во всех представлениях.

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

Итак, мой вопрос: как мне добраться до кнопки или любого другого элемента, который мне может понадобиться? Я не могу изменить код приложения.

Использование эспрессо 2.2.2


person Skycamefalling    schedule 08.07.2016    source источник
comment
Используйте пользовательский вид Matcher‹View›, показанный в этом сообщении о переполнении стека stackoverflow.com/a/30073528.   -  person Sam Edwards    schedule 09.07.2016


Ответы (1)


Да, проблема в том, что ViewPager создает как минимум View слева и справа от видимого в данный момент View. И Espresso использует все сопоставители в onView для каждого View в иерархии, независимо от того, находится он на экране или нет.

Если в настоящее время виден только один из Views, который вы хотите сопоставить, используйте isDisplayed, чтобы сопоставить View, который в данный момент находится на экране:

// Matches a view that is on the screen AND has the id R.id.some_button
onView(allOf(isDisplayed(), withId(R.string.some_id))).check(matches(isDisplayed()));

Если вы не check() или perform() после того, как сопоставили View с onView(), тест не провалится! Поэтому, если вы хотите проверить, виден ли View, вам также нужно check(matches(isDisplayed())).

person thaussma    schedule 08.07.2016