Espresso:适配器视图中的字符串

Espresso: String in adapterView

是否可以使用 android-espresso 来验证字符串是否显示在 listAdapter 的多个项目之一中?

尝试这样的事情:

onData(anything()).inAdapterView(withId(R.id.test)).check(matches(hasToString("Anmeldung steht noch aus!")));

这必须有效,但仅基于列表项位置:

onData(instanceOf(YourListItem.class))
  .inAdapterView(withId(R.id.test))
  .atPosition(0)
  .check(matches(hasDescendant(withText("Anmeldung steht noch aus!"))));

如果您想检查适配器中某处是否存在唯一文本 - 您应该创建自己的匹配器,因此,它类似于:

onData(withYourListItemText("Anmeldung steht noch aus!"))
  .inAdapterView(withId(R.id.test))
  .check(matches(isDisplayed()));

和匹配器:

public static Matcher<Object> withYourListItemText(final Matcher<String> yourListItemText) {
    Checks.checkNotNull(yourListItemText);
    return new BoundedMatcher<Object, YourListItem>(YourListItem.class) {
        @Override
        public boolean matchesSafely(YourListItem item) {
            return yourListItemText.matches(item.getYourItemText());
        }

        @Override
        public void describeTo(Description description) {
            description.appendText("with text: " + yourListItemText.toString());
            yourListItemText.describeTo(description);
        }
    };
}