В Espresso, как я могу проверить, содержит ли * любой * дочерний элемент RecyclerView правильный текст? - PullRequest
0 голосов
/ 10 октября 2018

У меня есть вид переработчика, который должен содержать 3 элемента в неизвестном порядке.

Я знаю, как получить переработанный элемент по позиции и как проверить текст

onView (withId (...)). check (соответствует (atPosition (0, hasDescendant (withText (A)))));

Но я не знаю, как сказать: если естьпредмет hasDescendant(withText(A))

1 Ответ

0 голосов
/ 16 октября 2018

Вы можете попробовать создать пользовательский Matcher<View>:

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(...)).check(matches(hasItem(hasDescendant(withText(...)))))

Или, если вы не хотите настраивать сопоставление, вы также можетеиспользуйте RecyclerViewActions.scrollTo () :

onView(withId(...)).perform(scrollTo(hasDescendant(withText(...))))
...