Espresso Recyclerview滚动到结束

Lor*_*ter 8 android android-espresso android-recyclerview

我有一个Android应用程序,它有一个带有N个元素的RecyclerView,当这个RecyclerView在滚动时到达结束时,会添加更多元素(因此,它是一个无限列表,当滚动到达底部时加载数据).

我想测试一下,但我还没有办法做到这一点.我使用具有scrollToPosition的RecyclerViewActions,但即使我放置了最后一个位置,也没有达到结束(因为每个元素的高度很高).

谁知道我怎么能这样做?

Jos*_*ird 18

我用下面的内容滚动到我的底部RecyclerView.

activity = mActivityTestRule.launchActivity(startingIntent);

onView(withId(R.id.recyclerView))
                .perform(RecyclerViewActions.scrollToPosition(activity.recyclerView.getAdapter().getItemCount() - 1));
Run Code Online (Sandbox Code Playgroud)

然后,您必须使用空闲资源(或Thread.sleep())在加载更多数据时再次调用它.


小智 11

你可以实现ViewAction。像这样:

class ScrollToBottomAction : ViewAction {
override fun getDescription(): String {
    return "scroll RecyclerView to bottom"
}

override fun getConstraints(): Matcher<View> {
    return allOf<View>(isAssignableFrom(RecyclerView::class.java), isDisplayed())
}

override fun perform(uiController: UiController?, view: View?) {
    val recyclerView = view as RecyclerView
    val itemCount = recyclerView.adapter?.itemCount
    val position = itemCount?.minus(1) ?: 0
    recyclerView.scrollToPosition(position)
    uiController?.loopMainThreadUntilIdle()
}
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

onView(withId(R.id.recyclerView)).perform(ScrollToBottomAction())
Run Code Online (Sandbox Code Playgroud)