I have an Android application which has a RecyclerView with N elements, and when this RecyclerView reaches to end when scrolling, then more elements are added (so, it\'s an
I use the below to scroll to the bottom of my RecyclerView
.
activity = mActivityTestRule.launchActivity(startingIntent);
onView(withId(R.id.recyclerView))
.perform(RecyclerViewActions.scrollToPosition(activity.recyclerView.getAdapter().getItemCount() - 1));
You'll then have to use idling resources (or Thread.sleep()
) to call this again when more data has loaded.
you can implement ViewAction. like this:
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()
}
}
and then use it like this:
onView(withId(R.id.recyclerView)).perform(ScrollToBottomAction())
I use this ;
// Get total item of myRecyclerView
RecyclerView recyclerView = mActivityTestRule.getActivity().findViewById(R.id.myRecyclerView);
int itemCount = recyclerView.getAdapter().getItemCount();
Log.d("Item count is ", String.valueOf(itemCount));
// Scroll to end of page with position
onView(withId(R.id.myRecyclerView))
.perform(RecyclerViewActions.scrollToPosition(itemCount - 1));