我可以在Espresso中检测视图是否包含文本*或*其他文本

时间:2018-10-10 14:50:20

标签: android android-espresso

我有一个回收站视图,其中应包含3个不明顺序的物品。

我知道如何按位置获取回收物品以及如何检查文字

onView(withId(...)).check(matches(atPosition(0, hasDescendant(withText(A)))));

但是我不知道该怎么说withText(A) withText(B)

我用Google搜索,但看不到OR hamcrest Matcher之类的东西

2 个答案:

答案 0 :(得分:1)

您可以使用Matchers.anyOf()。例如:

onView(anyOf(withText("X"), withText("Y"))).check(matches(isDisplayed()))

答案 1 :(得分:1)

创建自己的自定义matcher

class MultiTextMatcher extends BoundedMatcher<View, TextView> {
    static MultiTextMatcher withTexts(String[] texts) {
        return new MultiTextMatcher(texts);
    }

    private final String[] texts;

    private MultiTextMatcher(String[] texts) {
       super(TextView.class);
       this.texts = texts;
    }

    @Override protected boolean matchesSafely(TextView item) {
       for(String text: texts) {
           if(item.getText().toString().equals(text)) {
               return true;
           }  
       }
       return false;
    }

    @Override public void describeTo(Description description) {
        description.appendText("with texts:").appendValue(texts.toString());
    }
}

然后,只需应用您的自定义matcher,如下所示:

onView(withId(...)).check(matches(atPosition(0, hasDescendant(withTexts({"A", "B"})))));