如何获取具有相同ID的项目的数量,这些项目不在适配器视图中

时间:2014-12-11 19:06:02

标签: android-espresso

我有一个项目的多个实例存在的情况,我想计算它们。 我的视图匹配器如下:

 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)。我想写一个方法,它返回符合我的标准的视图计数。请注意 - 它们不在适配器视图中。

3 个答案:

答案 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)