如何使用Espresso单击RecyclerView项目中的特定视图?我知道我可以使用以下命令单击位置0的项目:
第一个月
但我需要单击该项目内的特定视图,而不是项目本身。
- 编辑-
更准确地说:我有一个RecyclerView(R.id.recycler_view
),其中的项目是CardView(R.id.card_view
)。在每个CardView中,我有四个按钮(以及其他内容),我想单击特定的按钮(R.id.bt_deliver
)。
我想使用Espresso 2.0的新功能,但我不确定这是否可行。
如果不可能,我想使用类似这样的代码(使用Thomas Keller代码):
onRecyclerItemView(R.id.card_view, ???, withId(R.id.bt_deliver)).perform(click());
但我不知道该怎么打问号。
9条答案
按热度按时间idfiyjo81#
您可以使用自定义视图操作来完成此操作。
然后,您可以使用单击它
2admgd592#
现在有了android.support.test.espresso.contrib,一切都变得简单了:
1)添加测试依赖项
2)然后做一些像
或者
或者
wlzqhblo3#
以下是我如何解决Kotlin中的问题:
然后
j9per5c44#
您可以单击
recyclerView
的第三项,如下所示:不要忘记提供
ViewHolder
类型,以便推理不会失败。jrcvhitl5#
尝试下一种方法:
7uhlpewt6#
你甚至可以推广这种方法来支持更多的动作,而不仅仅是
click
。对于
EditText
,你可以这样做:pqwbnv8z7#
以上所有的答案对我来说都不起作用,所以我构建了一个新方法,它搜索单元格内的所有视图,以返回具有所请求ID的视图。它需要两个方法(可以合并为一个):
最后,您可以通过执行以下操作在Recycler View上使用此功能:
如果您想对视图执行其他操作,您可以使用回调来返回视图,或者只构建3-4个不同版本的视图来执行任何其他任务。
1yjd4xko8#
我不断尝试各种方法来找出为什么@blade的答案对我不起作用,结果发现我有一个
OnTouchListener()
,我相应地修改了ViewAction:mfuanj7w9#
首先给予你的按钮一个独特的contentDescriptions,例如“delivery button row 5”。
第一个月
然后滚动到行:
onView(withId(R.id.recycler_view)).perform(RecyclerViewActions.scrollToPosition(5));
然后根据contentDescription选择视图。
onView(withContentDescription("delivery button row 5")).perform(click());
内容描述是使用Espresso的onView并使您的应用更易于访问的绝佳方式。