Я использую Espresso для запуска автоматических тестов пользовательского интерфейса в приложении Android. Я хочу выполнить действие для всех представлений, соответствующих указанным условиям. Эспрессо использует метод allOf()
, чтобы найти все виды, которые соответствуют сопоставителю. Однако такие команды, как onView(withText("some text")).perform(click())
, будут выдавать AmbiguousViewMatcherException
, если найдено более одного совпадения.
У меня есть метод для получения n-го представления совпадения при наличии нескольких совпадений.
private static Matcher<View> getElementFromMatchAtPosition(final Matcher<View> matcher, final int position) {
return new BaseMatcher<View>() {
int counter = 0;
@Override
public boolean matches(final Object item) {
if (matcher.matches(item)) {
if(counter == position) {
counter++;
return true;
}
counter++;
}
return false;
}
@Override
public void describeTo(final Description description) {
description.appendText("Element at hierarchy position " + position);
}
};
}
Конечно, я мог бы использовать этот метод для l oop через каждое представление. Но есть ли более элегантное решение?
А что, если я не знаю, сколько совпадающих просмотров?