Androïde Espresso vérifier texte spinner sélectionné

j'ai ce code dans mon Espresso test

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

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

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

Ce que j'essaie de faire est de cliquez sur l'élément dans le Spinner et vérifiez si c'est bien sélectionné dans le Spinner.

Mais j'obtiens cette erreur:

android.soutien.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: 'avec le texte: une chaîne de caractères contenant "CCD"' ne correspond pas à la vue sélectionnée. Attendu: avec texte: une chaîne de caractères contenant "CCD"" Obtenir: "AppCompatSpinner{id=2131558533, res-name=src, la visibilité=VISIBLE, largeur=528, hauteur=163, a-focus=false, a-focusable=true, a-fenêtre-focus=vrai, est-cliquable=vrai, est-enabled=true, est axée=false, est-focusable=vrai, est-layout-requis=false, est-selected=false, racine-est-layout-requis=false, a-entrée-connexion=false, x=0.0, y=0.0, enfant-count=1}"

19
demandé sur N J 2015-07-15 06:10:59

3 réponses

Remplacer 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))));

Référence: https://code.google.com/p/android-test-kit/issues/detail?id=85

55
répondu Jonas 2015-07-21 11:16:55

Vraiment simple solution qui a fonctionné pour moi .....sans utiliser matcher pour 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"))));
3
répondu Arpit Agarwal 2017-08-27 22:18:43

Pour coutume adaptateur que j'ai eu yo créer une correspondance personnalisée:

 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) {

        }
    };
}

alors vous devez surcharger la méthode toString () sur votre classe personnalisée.

2
répondu sagits 2016-08-13 18:23:37