Android Espresso - проверьте, не существует ли текст в RecyclerView - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть код, который проверяет, существует ли строка с текстом «Продукт» в RecyclerView:

onView(withId(R.id.rv_list)).perform(scrollTo(hasDescendant(withText("Product"))));
onView(withItemText("Product")).check(matches(isDisplayed()));

public static Matcher<View> withItemText(final String itemText) {
    checkArgument(!TextUtils.isEmpty(itemText), "itemText cannot be null or empty");
    return new TypeSafeMatcher<View>() {
        @Override
        public boolean matchesSafely(View item) {
            return allOf(
                    isDescendantOfA(isAssignableFrom(RecyclerView.class)),
                    withText(itemText)).matches(item);
        }
        @Override
        public void describeTo(Description description) {
            description.appendText("is isDescendantOfA RV with text " + itemText);
        }
    };
}

Как проверить, что во всем списке нет строки с предоставленным текстом из RecylerView?

1 Ответ

0 голосов
/ 13 ноября 2018

Вы можете попробовать создать собственный сопоставитель для итерации RecyclerView элементов:

public static Matcher<View> hasItem(Matcher<View> matcher) {
    return new BoundedMatcher<View, RecyclerView>(RecyclerView.class) {

        @Override public void describeTo(Description description) {
            description.appendText("has item: ");
            matcher.describeTo(description);
        }

        @Override protected boolean matchesSafely(RecyclerView view) {
            RecyclerView.Adapter adapter = view.getAdapter();
            for (int position = 0; position < adapter.getItemCount(); position++) {
                int type = adapter.getItemViewType(position);
                RecyclerView.ViewHolder holder = adapter.createViewHolder(view, type);
                adapter.onBindViewHolder(holder, position);
                if (matcher.matches(holder.itemView)) {
                    return true;
                }
            }
            return false;
        }
    };
}

И если вы хотите проверить, нет ли строки с конкретным текстом, вы можете сделать:

onView(withId(R.id.rv_list)).check(matches(not(hasItem(hasDescendant(withText("Product"))))));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...