Android 浓缩咖啡:循环查看滚动至结尾
有没有办法用浓缩咖啡滚动到recyclerview的末尾 有一个带有文本的项目,比如说“text XYZ”,recyclerview有一个id recycler\u视图。此项恰好是recycler视图的最后一项 我试过了Android 浓缩咖啡:循环查看滚动至结尾,android,android-recyclerview,android-espresso,Android,Android Recyclerview,Android Espresso,有没有办法用浓缩咖啡滚动到recyclerview的末尾 有一个带有文本的项目,比如说“text XYZ”,recyclerview有一个id recycler\u视图。此项恰好是recycler视图的最后一项 我试过了 onView(withId(R.id.recycler_view)).check(matches(isDisplayed())).perform(RecyclerViewActions.scrollTo(withText("Text XYZ")),click()); 但这似乎
onView(withId(R.id.recycler_view)).check(matches(isDisplayed())).perform(RecyclerViewActions.scrollTo(withText("Text XYZ")),click());
但这似乎不起作用。有什么想法吗?
RecycleServiceActions.scrollTo()
与ViewHolder
的ItemView
匹配,后者在适配器的onCreateViewHolder()
中膨胀。为了使scrollTo()
正常工作,您需要提供一个匹配器来唯一地标识ItemView
您当前的匹配者告诉espresso滚动到一个视图架,该视图架以文本视图
作为项目视图
充气。这可能会发生,但通常您会在那里执行一些ViewGroup
操作,以按照您希望的方式设置视图持有者的样式
如果您将scrollTo()
Matcher更改为hasgendant(withText(“Text XYZ”))
以说明所有嵌套布局(如果有多个)
还请记住,因为您也在尝试单击该项目-您不能在相同的perform()
中执行,因为它会将单击发送到当前的ViewInteraction
,在本例中,它是一个id为R.id.recycler\u视图的RecyclerView
。在同一执行中执行此操作时,只需单击RecyclerView
的中间部分,而不是您滚动到的项目
要解决此问题,您需要使用另一个onView()
和用于滚动到项目的匹配器,或者使用RecyclerView.actionItem()
在另一个onView()
语句中,hassgender(withText(“Text XYZ”))
将使您失败,因为它将找到该TextView的所有父级(viewholder、recyclerview、保存recyclerview的viewgroup等),因为它们都有此特定的子级。这将迫使您使ItemView
匹配器更加精确,并考虑所有嵌套布局。在这些情况下,我通常使用的匹配器是withChild()
,但对您来说可能会有所不同。即使这种方法不显示向上滚动,但允许您选择回收器的位置。
多亏了这个家伙(我用了这个方法:
onView(allOf(withId(R.id.recyclerUserCustomListsView)))
.perform(RecycleServiceActions.ActionOnItemPosition(7,click());
如果您知道RecycleView
的最后一个位置,则可以滚动到它
static final int LAST_POSITION = 100;
// First method
onView(withId(R.id.recyclerview))
.perform(RecyclerViewActions.scrollToPosition((LAST_POSITION)));
// Second method
onView(withId(R.id.recyclerview))
.perform(actionOnItemAtPosition(LAST_POSITION, scrollTo()));
似乎不起作用-错误日志请在滚动到视图之前检查视图是否显示。@denys ckeck用于实际的recyclerview。除非没有实际显示recyclerview,否则不会有任何区别。是的,有意义。太棒了,谢谢,效果很好!应该是smth类似于此onView(带id(R.id.rvSettings)).check(匹配项(isDisplayed()).perform(RecycleServiceActions.scrollTo(带文本(stringId)));onView(带id(R.id.recycler_视图)).perform(RecycleServiceActions.scrollTo(带文本(getString(stringResId)));onView(带文本(getString(stringResId)))。perform(单击());