我有一个项目的多个实例存在的情况,我想计算它们。 我的视图匹配器如下:
public static ViewInteraction onTestPanelView(){
return onView(allOf(withId(R.id.myId), isDisplayed()));
}
使用视图匹配器,我收到以下错误:
com.google.android.apps.common.testing.ui.espresso.AmbiguousViewMatcherException: '(id:是< 2131427517>并显示在屏幕上 用户)'匹配层次结构中的多个视图。问题观点是 标有' ****比赛****'下方。
这是正确的,因为我有多个具有相同id的项目实例(R.id.myId)。我想写一个方法,它返回符合我的标准的视图计数。请注意 - 它们不在适配器视图中。
答案 0 :(得分:0)
旧问题,但可能会有人发现它有用。
从here您可以找到:
在绝大多数情况下,onView方法需要一个hamcrest 匹配器,预计匹配一个 - 只有一个 - 视图内 当前视图层次结构匹配者很强大并且会很熟悉 那些与Mockito或Junit一起使用过的人。如果你不是 熟悉hamcrest匹配器,我们建议您快速入门 看看这个演讲。
下面您可以找到一个解释,其中包含一个查找一个视图的示例。我调整了我的测试来做到这一点。但是,可能会有一些变通方法,例如查找父容器和计算某些实例的视图。
这suggestion对我没有帮助。
答案 1 :(得分:0)
您可以将放置在onView()
中的条件包装到匹配器中,并将计数器放入匹配器内。每次匹配器匹配项目时,计数器都应递增。
int counter = 0;
public static Matcher<View> withIdAndDisplayed(final int id) {
Checks.checkNotNull(id);
return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
description.appendText("with item id: " + id);
}
@Override
public boolean matchesSafely(View view) {
if ((view.getId() == id) && (view.getGlobalVisibleRect(new Rect())
&& withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE).matches(view))){
counter++;
return true;
}
return false;
}
};
}
public static ViewInteraction onTestPanelView(){
return onView(withIdAndDisplayed(R.id.myId));
}
答案 2 :(得分:-1)
查看Android Espresso的官方样本: 访问https://google.github.io/android-testing-support-library/samples/index.html