Espresso AmbiguousViewMatcherException:如何从多个水平Recyclerview中选择第一个水平Recyclerview
问题描述:
屏幕上有多个水平Recyclerview
。我想在第一个横向Recyclerview
的第一项上执行意式浓缩咖啡单击事件。请让我知道我们如何实现它。Espresso AmbiguousViewMatcherException:如何从多个水平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
答
花费几个小时里,我找到了解决办法之后,我们需要使用一个匹配器到第一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");
}
};
}
这里是代码片段,你如何使用它,
onView(firstView(withId(R.id.recyclerview_tray)))
.perform(RecyclerViewActions.actionOnItemAtPosition(1, click()));
您可以发布您的布局文件?有可能有一种方法可以在您的应用中执行此操作,而无需通过使用RecyclerViewAction更具体的查看器匹配器来创建自定义ViewActions。 actionOnHolderItem() – jdonmoyer
@jdonmoyer我在我的代码在运行时创建布局。通过我得到了解决方案,我提到了答案。但是现在面临的另一个问题是,我的'RecyclerView'适配器大小变为零,所以我无法执行列表中的第一项。但在屏幕上,我可以在我的'RecyclerView'中看到数据。它的任何输入? – chank007