RecyclerView espresso 测试 click() 不工作
Posted
技术标签:
【中文标题】RecyclerView espresso 测试 click() 不工作【英文标题】:RecyclerView espresso test click() not working 【发布时间】:2016-01-27 10:05:27 【问题描述】:我遇到了奇怪的浓缩咖啡仪器测试行为。单击回收站视图的项目不起作用。
此处未发生点击:
onView(withId(R.id.recyclerView)).perform(actionOnItemAtPosition(0, click()));
但这种解决方法有效:
onView(withId(R.id.recyclerView)).perform(actionOnItemAtPosition(0, recyclerClick()));
// ...
public static ViewAction recyclerClick()
return new ViewAction()
@Override
public Matcher<View> getConstraints()
return any(View.class);
@Override
public String getDescription()
return "performing click() on recycler view item";
@Override
public void perform(UiController uiController, View view)
view.performClick();
;
这是 Espresso 或 RecyclerView 的问题吗?
【问题讨论】:
两者都不是; espresso 根本不“知道”如何点击回收站视图。一旦你为它提供了一个 howto 实现,它就知道了,而且它工作了。如果第二种方法不起作用,那将是一个问题;) 你试过用onData代替onView吗? 正如我们在官方文档中看到的 Espresso.onData()Use this method to load (into the view hierarchy) items from AdapterView widgets (e.g. ListView).
RecyclerView
扩展 ViewGroup
。所以onData()
不能和它一起使用。
【参考方案1】:
应该与RecyclerView
无关。 Espresso 通过其ViewActions.click()
实现所做的是将MotionEvent
发送到目标视图的中心。确保没有孩子拦截它。
【讨论】:
看来你是对的。 Espresso 在屏幕上点击,但没有在视图中模拟performClick()
。似乎项目中间的一些视图拦截了点击。【参考方案2】:
您可以使用RecyclerViewActions
只需使用:
onView(withId(R.id.recyclerView)).perform(
RecyclerViewActions.actionOnItemAtPosition(0, click()));
例如:
@RunWith(androidJUnit4.class)
public class MainActivityTest
@Rule
public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void clickItem()
onView(withId(R.id.recycler_view))
.perform(RecyclerViewActions.actionOnItemAtPosition(o, click()));
onView(withId(R.id.text))
.check(matches(withText("XX")))
.check(matches(isDisplayed()));
【讨论】:
嗨。这实际上是第一个被剪断的问题。这里的问题是Espresso.click()
没有效果。虽然自定义 ViewAction
和 view.performClick()
有效。
您在适配器中的哪个视图中定义了 onClickListener ?以上是关于RecyclerView espresso 测试 click() 不工作的主要内容,如果未能解决你的问题,请参考以下文章
如何让 Espresso 单击特定的 RecyclerView 项目?
Espresso Nested Recycler Views UI 测试
用于嵌套 RecyclerView 的 Espresso Matcher
Espresso,当 NestedScrollView 或 RecyclerView 在 CoordinatorLayout 中时滚动不起作用