我正在使用Espresso在Android应用上运行自动化的UI测试。我想对符合指定条件的all视图执行操作。 Espresso确实使用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);
}
};
}
当然,我可以使用此方法遍历每个视图。但是,还有更优雅的解决方案吗?
如果我不知道有多少个匹配的视图怎么办?
听起来您可能未正确使用allOf()
。