【问题标题】:Espresso AmbiguousViewMatcherException: How can I select a first horizontal Recyclerview from multiple horizontal RecyclerviewEspresso AmbiguousViewMatcherException:如何从多个水平 Recyclerview 中选择第一个水平 Recyclerview
【发布时间】:2017-08-28 06:58:49
【问题描述】:

一个屏幕上有多个水平的Recyclerview。我想在第一个水平Recyclerview 的第一项上执行浓缩咖啡点击事件。请让我知道我们如何实现它。

 onView(withId(R.id.craousal_recyclerview))
.perform(RecyclerViewActions.actionOnItemAtPosition(1, new ClickOnImageView()));

 public class ClickOnImageView implements ViewAction {
    ViewAction click = click();

    @Override
    public Matcher<View> getConstraints() {
        return click.getConstraints();
    }

    @Override
    public String getDescription() {
        return " click on custom image view";
    }

    @Override
    public void perform(UiController uiController, View view) {
        click.perform(uiController, view.findViewById(R.id.craousal_imageview));
    }

它给了我以下例外:

android.support.test.espresso.AmbiguousViewMatcherException

【问题讨论】:

  • 你能发布你的布局文件吗?可能有一种方法可以在您的应用程序中执行此操作,而无需借助 RecyclerViewAction 使用更具体的视图匹配器来创建自定义 ViewAction。 actionOnHolderItem()
  • @jdonmoyer 我在我的代码中在运行时创建布局。通过我得到了解决方案,我提到了答案。但现在面临另一个问题,即我的RecyclerView 适配器大小变为零,因此我无法单击列表的第一项。但在屏幕上我可以看到我的RecyclerView 中的数据。有什么意见吗?

标签: android android-espresso android-junit androidjunitrunner


【解决方案1】:

花了几个小时我找到了解决方案,我们需要使用 Matcher 来匹配多个水平 RecyclerView 中的第一个 RecyclerView。将以下方法放入您的测试类中。

    private <T> Matcher<T> firstView(final Matcher<T> matcher) {
    return new BaseMatcher<T>() {
        boolean isFirst = true;

        @Override
        public boolean matches(final Object item) {
            if (isFirst && matcher.matches(item)) {
                isFirst = false;
                return true;
            }

            return false;
        }

        @Override
        public void describeTo(final Description description) {
            description.appendText("should return first matching item");
        }
    };
}

这里是代码sn-p如何使用它,

  onView(firstView(withId(R.id.recyclerview_tray)))
            .perform(RecyclerViewActions.actionOnItemAtPosition(1, click()));

【讨论】:

    猜你喜欢
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    相关资源
    最近更新 更多