Android Espresso:滑动标签,每个标签上都有RecyclerViews
我有一个滑动标签应用程序,每个标签上都有recyclerview。 我正在测试应用程序使用。我想点击一个recyclerview项目。当我这样做时:Android Espresso:滑动标签,每个标签上都有RecyclerViews,android,android-espresso,Android,Android Espresso,我有一个滑动标签应用程序,每个标签上都有recyclerview。 我正在测试应用程序使用。我想点击一个recyclerview项目。当我这样做时: onView(withId(R.id.recyclerView)) .perform(RecyclerViewActions.actionOnItemAtPosition(2, click())); 我得到一个例外: android.support.test.espresso.AmbiguousViewMatcherEx
onView(withId(R.id.recyclerView))
.perform(RecyclerViewActions.actionOnItemAtPosition(2, click()));
我得到一个例外:
android.support.test.espresso.AmbiguousViewMatcherException: 'with id: com.uriel.frankel:id/recyclerView' matches multiple views in the hierarchy.
有什么想法吗?嗯,我猜您在选项卡中的每个
RecyclerView
都使用相同的xml文件。因此,您所有的RecyclerView
都具有相同的ID。因此,您不能使用您的ID引用您的RecyclerView
因此,要么给每个
RecyclerView
它自己的ID,要么尝试用任何其他ViewMatcher
像withText(“你的回收器中的任何特定文本”)一样搜索。您可能会找到适合您情况的方法。我建议创建ViewHolder
匹配器,以匹配回收视图中的特定项目。然后,您将能够使用positionablerecyclervicewaction
像scrollToHolder(…)
例如:
public static Matcher<RecyclerView.ViewHolder> withMessageSubjectInViewHolder(String itemSubject) {
Checks.checkNotNull(itemSubject);
return new BoundedMatcher<RecyclerView.ViewHolder,
MyRecyclerViewItemAdapter.MyViewHolder>(MyRecyclerViewItemAdapter.MyViewHolder.class) {
@Override
public boolean matchesSafely(MyRecyclerViewItemAdapter.MyViewHolder holder) {
boolean isMatches = false;
if (!(holder.subject == null)) {
isMatches = ((itemSubject.equals(holder.subject.getText().toString()))
&& (holder.subject.getVisibility() == View.VISIBLE));
}
return isMatches;
}
@Override
public void describeTo(Description description) {
description.appendText("with message subject: " + itemSubject);
}
};
}
你为什么不把监听器添加到你的项目中呢?你有一个RecyclerView
和一个Adapter
,里面有一个ViewHoler
类,对吧?我说的是Android Espresso的UI单元测试。哦,很抱歉,我错过了那一个我的错误。我编辑了这个问题的答案。
onView(withId(R.id.my_recycler_view_id)).perform(scrollToHolder(withMessageSubjectInViewHolder(unique_message_subject)));
onView(withText(unique_message_subject)).check(matches(isDisplayed())).perform(click());