使用 Espresso 根据其在 ViewPager 中的位置匹配 RecyclerView
Match RecyclerView by its position in ViewPager using Espresso
我有一个包含 3 个项目的 ViewPager,每个项目都使用相同的片段,因此使用相同的 Recycler 视图。我的视图层次结构是这样的,
-ViewPager
----LinearLayout (id = ll)
--------RecyclerView (id = rv)
----LinearLayout (id = ll)
--------RecyclerView (id = rv)
----LinearLayout (id = ll)
--------RecyclerView (id = rv)
所有的 ID 都相同,因为它们是相同的布局。
如何从视图层次结构中区分这 3 个相同的 RecyclerView?
首先创建一个用于选择第i个匹配视图的匹配器:
public static <T> Matcher<T> result(final Matcher<T> matcher, final int i) {
return new BaseMatcher<T>() {
private int resultIndex = -1;
@Override
public boolean matches(final Object item) {
if (matcher.matches(item)) {
resultIndex++;
return resultIndex == i;
}
return false;
}
@Override
public void describeTo(final Description description) {
}
};
}
然后,如下使用:
//select the second recycler view
int i = 1;
//then click on the first item of it
int itemPosition = 0;
onview(result(withId(R.id.rv), i)).perform(RecyclerViewActions.actionOnItemAtPosition(itemPosition, click()));
我有一个包含 3 个项目的 ViewPager,每个项目都使用相同的片段,因此使用相同的 Recycler 视图。我的视图层次结构是这样的,
-ViewPager
----LinearLayout (id = ll)
--------RecyclerView (id = rv)
----LinearLayout (id = ll)
--------RecyclerView (id = rv)
----LinearLayout (id = ll)
--------RecyclerView (id = rv)
所有的 ID 都相同,因为它们是相同的布局。
如何从视图层次结构中区分这 3 个相同的 RecyclerView?
首先创建一个用于选择第i个匹配视图的匹配器:
public static <T> Matcher<T> result(final Matcher<T> matcher, final int i) {
return new BaseMatcher<T>() {
private int resultIndex = -1;
@Override
public boolean matches(final Object item) {
if (matcher.matches(item)) {
resultIndex++;
return resultIndex == i;
}
return false;
}
@Override
public void describeTo(final Description description) {
}
};
}
然后,如下使用:
//select the second recycler view
int i = 1;
//then click on the first item of it
int itemPosition = 0;
onview(result(withId(R.id.rv), i)).perform(RecyclerViewActions.actionOnItemAtPosition(itemPosition, click()));