如何针对实现了匹配多个视图的RecylerView ID的片段的Viewpager进行定位?
我有一个MainActivity,其中包含一个Viewpager。Viewpager有5个标签页。在这5个标签页中,我使用RecylerViews在每个标签页中加载图像。
RecylerView XML在不同的片段中被重用,所以当使用Espresso访问它时,它会抱怨ID匹配多个视图。
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
我的RecylerView没有加载任何文本,只加载图像,所以我甚至不能使用withText("Text here")
。 我也无法对RecylerViews使用onData()
。
@RunWith(AndroidJUnit4.class)
@LargeTest
public class ExampleTest {
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(
MainActivity.class);
Activity activity = mActivityRule.getActivity();
@Test
public void ExampleMethod() {
// perform a swipe
onView(withId(R.id.viewpager)).perform(swipeLeft());
// try to click on one of the recycler view items.
// this crashes:
onView(withId(R.id.recycler_view))
.perform(RecyclerViewActions.actionOnItemAtPosition(2, click()));
}
}
所以它会崩溃并指出错误
android.support.test.espresso.AmbiguousViewMatcherException: 'with id: com.example.app:id/recycler_view' 匹配到层次结构中的多个视图。问题视图在下面用 '****MATCHES****' 标注了出来。
//列出不同的层次结构
View Hierarchy:
View Hierarchy:
+>DecorView{id=-1, visibility=VISIBLE, width=720, height=1280,
has-focus=false, has-focusable=true, has-window-focus=true,
is-clickable=false, is-enabled=true, is-focused=false,
is-focusable=false, is-layout-requested=false, is-selected=false,
root-is-layout-requested=false, has-input-connection=false, x=0.0,
y=0.0, child-count=1}
//...