Espresso中RecyclerView操作

RecyclerViewActions
espresso中如果我们要对AdapterView进行操作,我们会使用onData()方法,然而在对RecyclerView使用onData()方法时会报错,因为RecyclerView是继承自ViewGroup而非AdapterView,如何对RecyclerView进行操作,google官方提供了对应的支持:

androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2')

代码如下,点击recyclerview中的第五个item:

onView(withId(R.id.swipe_target)).perform(RecyclerViewActions.actionOnItemAtPosition(4,click()));

官方仅仅只对recyclerview提供了操作的api,如何check RecyclerView中的元素并没有提供。

RecyclerViewMatcher
官方没有提供,但是官方给出了建议,由自己实现自定义viewMathcer来匹配定位元素,github已有大神实现:
https://github.com/dannyroa/espresso-samples/tree/master/RecyclerView

public static RecyclerViewMatcher withRecyclerView(final int recyclerViewId) {
    return new RecyclerViewMatcher(recyclerViewId);
}
//检查recyclerview中第4个item是否含有内容为“hello”
onView(withRecyclerView(R.id.scroll_view).atPosition(3))
    .check(matches(hasDescendant(withText("hello"))));
// 点击该item
onView(withRecyclerView(R.id.scroll_view).atPosition(3)).perform(click());

对于屏幕外的元素
以上方法在对屏幕外的item操作时会报错,如何解决:

onView(withId(recyclerViewId)).perform(scrollToPosition(position));
onView(withRecyclerView(recyclerViewId).atPosition(position)).perform(click());

通过scroll方法首先滚动到屏幕外的元素,再对元素进行check或者操作即可。

发表评论

电子邮件地址不会被公开。 必填项已用*标注