Espresso AmbiguousViewMatcherException: как выбрать первое горизонтальное представление Recycler из нескольких горизонтальных представлений Recycler
Есть несколько горизонтальных 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
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");
}
};
}
А вот фрагмент кода, как вы можете его использовать,
onView(firstView(withId(R.id.recyclerview_tray)))
.perform(RecyclerViewActions.actionOnItemAtPosition(1, click()));