В Espresso, как я могу выполнить действие для всех соответствующих представлений, не вызывая AmbiguousViewMatcherException? - PullRequest
0 голосов
/ 18 февраля 2020

Я использую Espresso для запуска автоматических тестов пользовательского интерфейса в приложении Android. Я хочу выполнить действие для всех представлений, соответствующих указанным условиям. Эспрессо использует метод allOf(), чтобы найти все виды, которые соответствуют сопоставителю. Однако такие команды, как onView(withText("some text")).perform(click()), будут выдавать AmbiguousViewMatcherException, если найдено более одного совпадения.

У меня есть метод для получения n-го представления совпадения при наличии нескольких совпадений.

    private static Matcher<View> getElementFromMatchAtPosition(final Matcher<View> matcher, final int position) {
        return new BaseMatcher<View>() {
            int counter = 0;

            @Override
            public boolean matches(final Object item) {
                if (matcher.matches(item)) {
                    if(counter == position) {
                        counter++;
                        return true;
                    }
                    counter++;
                }
                return false;
            }

            @Override
            public void describeTo(final Description description) {
                description.appendText("Element at hierarchy position " + position);
            }
        };
    }

Конечно, я мог бы использовать этот метод для l oop через каждое представление. Но есть ли более элегантное решение?

А что, если я не знаю, сколько совпадающих просмотров?

1 Ответ

0 голосов
/ 24 февраля 2020

Звучит так, как будто вы неправильно использовали allOf().

Как вы отметили в своем комментарии, allOf() следует использовать с сопоставителями. Затем вы можете выбрать все уникальные аспекты представления, которые вы хотите выбрать, через запятую.

Вот пример:

onView(allOf(isDescendantOfA(withId(R.id.input)), withText("jeff@bob.com"))).check(matches(isDisplayed()));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...