Ответ 1
FirstVal, ViewPager
не является AdapterView
, он напрямую распространяется от ViewGroup
. Таким образом, метод onData()
не может использоваться на ViewPager
.
1. Решение
Поскольку он ViewGroup
, каждый элемент является прямым дочерним элементом его ViewPager
.
Таким образом, процесс состоит в том, чтобы ссылаться на первый вид дочернего элемента с использованием пользовательского совпадения (например, этот firstChildOf()
) и играть с hasDescendant()
и isDescendantOfA()
для доступа к целевому виду и выполнения действия над ним.
onView(allOf(withId(R.id.button), isDescendantOfA(firstChildOf(withId(R.id.viewpager)))))
.perform(click());
2. Решение (да лучше)
Поскольку спецификацией ViewPager
является отображение каждого элемента (дочерние представления решения 1), которые его составляли, один за другим (поэтапный стиль). Поэтому, даже если ваши элементы используют один и тот же макет с одинаковыми идентификаторами, отображается только один. Поэтому мы можем ссылаться на целевое представление по его идентификатору и добавлять ограничения isDisplayed()
. Он будет соответствовать только одному представлению, отображаемому в настоящее время.
onView(allOf(withId(R.id.button), isDisplayed())).perform(click());
так же просто.
И если вы хотите другой элемент, вы можете выполнить swipe()
на ViewPager
, чтобы изменить отображаемый элемент:
onView(withId(R.id.viewpager)).perform(swipeLeft());