Подтвердить что ты не робот

Android Espresso проверяет выбранный текст spinner

У меня есть этот код в моем тесте Espresso

    onView(withId(R.id.src))
            .perform(click());

    onData(hasToString(startsWith("CCD")))
            .perform(click());

   onView(withId(R.id.src))
           .check(matches(withText(containsString("CCD"))));

То, что я пытаюсь сделать, - щелкнуть элемент в Spinner и проверить, действительно ли он выбран в Spinner.

Но я получаю эту ошибку:

android.support.test.espresso.base.DefaultFailureHandler $AssertionFailedWithCauseError: 'с текстом: строка, содержащая "CCD", не соответствует выбранному виду. Ожидаемое: с текстом: строка, содержащая "CCD" Got: "AppCompatSpinner {id = 2131558533, res-name = src, visibility = VISIBLE, width = 528, height = 163, has-focus = false, has-focusable = true, has-window-focus = true, is-clickable = true, is-enabled = true, is-focus = false, is-focusable = true, is-layout-request = false, is-selected = false, root-is-layout-request = false, has-input-connection = false, x = 0.0, y = 0.0, child-count = 1}"

4b9b3361

Ответ 1

Замените withText() на withSpinnerText()

onView(withId(spinnerId)).perform(click());
onData(allOf(is(instanceOf(String.class)), is(selectionText))).perform(click());
onView(withId(spinnerId)).check(matches(withSpinnerText(containsString(selectionText))));

Ссылка: https://code.google.com/p/android-test-kit/issues/detail?id=85

Ответ 2

Для пользовательского адаптера я создал пользовательский соединитель:

 onView(withId(R.id.spinner)).perform(click());
 onData(allOf(is(instanceOf(YourCustomClass.class)), withMyValue("Open"))).perform(click());


public static <T> Matcher<T> withMyValue(final String name) {
    return new BaseMatcher<T>() {
        @Override
        public boolean matches(Object item) {
            return item.toString().equals(name);
        }

        @Override
        public void describeTo(Description description) {

        }
    };
}

Затем вы должны переопределить метод toString() в своем пользовательском классе.

Ответ 3

На самом деле простое решение, которое сработало для меня..... без использования сокета для CustomSpinner

    onView(withId(R.id.custom_spinner)).perform(click());
 onData(anything()).atPosition(1).perform(click());
 onView(withId(R.id.custom_spinner)).check(matches(withSpinnerText(containsString("yourstring"))));