【问题标题】:RecyclerView espresso test click() not workingRecyclerView espresso 测试 click() 不工作
【发布时间】: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()不能和它一起使用。

标签: android android-recyclerview ui-testing android-espresso


【解决方案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() 没有效果。虽然自定义 ViewActionview.performClick() 有效。
  • 您在适配器中的哪个视图中定义了 onClickListener ?
猜你喜欢
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-19
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多