在尝试编写与listview项交互的代码时,我收到了AmbiguousViewMatcherException异常。情景如下。
我有一个包含两个视图的列表视图
我的列表中有近250行。所有按钮都有文字"预订"或"取消"。他们正在洗牌。我想直接点击Espresso点击"预订"列表中的按钮。我已经尝试了很多场景,仍然无法解决这个问题。请有人帮助我。
以下是我的代码
onView(withId(R.id.List))
.check(matches(withAdaptedData(withItemContent("Book it"))));
/////////////////////////////////////////////// /////////
private static Matcher<View> withAdaptedData(final Matcher<Object> dataMatcher) {
return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
description.appendText("with class name: ");
dataMatcher.describeTo(description);
}
@Override
public boolean matchesSafely(View view) {
if (!(view instanceof AdapterView)) {
return false;
}
@SuppressWarnings("rawtypes")
Adapter adapter = ((AdapterView) view).getAdapter();
for (int i = 0; i < adapter.getCount(); i++) {
if (dataMatcher.matches(adapter.getItem(i))) {
return true;
}
}
return false;
}
};
}
/////////////////////////////////////////////// /////////////
android.support.test.espresso.AmbiguousViewMatcherException:&#39; id: com.bottegasol.com.migym.EmpireSportFit:ID /列表&#39;匹配多个 层次结构中的视图。问题视图标有 &#39; **** **** MATCHES&#39;下方。
答案 0 :(得分:0)
这是我发现的一个例子,希望它有所帮助:
public void testClickOnFirstAndFifthItemOfLength8() {
onData(is(withItemSize(8)))
.atPosition(0)
.perform(click());
onView(withId(R.id.selection_row_value))
.check(matches(withText("10")));
onData(is(withItemSize(8)))
.atPosition(4)
.perform(click());
onView(withId(R.id.selection_row_value))
.check(matches(withText("14")));
}
答案 1 :(得分:0)
根据错误消息,您有多个ID等于R.id.List
的视图。您应首先检查视图层次结构,并将列表ID(id/List
)替换为您要匹配的视图的唯一ID。
答案 2 :(得分:0)
在allOff()中放入列表视图,因为您的id列表在项目中多次使用。
onView(allOff(withId(R.id.List))) .check(matches(withAdaptedData(withItemContent(“ Book it”)))));