2017-07-17 1 views
0

Actuellement, j'ai une activité qui a une vue de texte automatique. Les données dans la vue de texte sont remplies à partir d'un adaptateur de tableau et j'ai des problèmes pour obtenir mon cas de test à cliquer sur un des éléments de la liste par nom. Voici des captures d'écran et le code:Android Espresso - Impossible de cliquer sur le texte dans la vue de liste générée à partir de l'adaptateur

// setup ingredient list widget 
    mFridgeList = (ListView) findViewById(R.id.fridge_list); 
    mFridgeList.setAdapter(new ArrayAdapter<String>(this, 
      android.R.layout.simple_dropdown_item_1line, FridgesterDB.ingredientsList)); 

enter image description here

Lorsqu'un utilisateur tape dans le texte (ex: tom), une liste d'options apparaîtront que l'utilisateur peut alors sélectionner pour confirmer leur sélection.

Je me sens comme je l'ai essayé mille solutions différentes, mais l'erreur la plus cohérente que je reçois est:

Erreur exécution « charge les données de l'adaptateur » sur la vue « est cessible de la classe: android classe. widget.AdapterView

J'ai essayé d'utiliser les solutions suggérées here:

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

et différentes variantes de celui-ci en vain.

C'est le code qui a été généré à partir de l'enregistreur Espresso et provoque une NoMatchingViewException:

ViewInteraction appCompatTextView = onView(
      allOf(withId(android.R.id.text1), withText("tomato"), isDisplayed())); 
appCompatTextView2.perform(click()); 

NoMatchingViewException: Aucune vue dans la hiérarchie trouvé correspondant: (avec id: android: id/text1 et avec le texte : est "tomate" et est affiché sur l'écran de l'utilisateur)

J'ai également vu où quelques personnes ont eu ce travail en utilisant des dortoirs mais cela ne fait aucune différence dans mon cas. Des idées? Merci

Répondre

0

J'ai pu utiliser la réponse proposée ici: Espresso AutoCompleteTextView click

onData(allOf(instanceOf(BaseIngredient.class), withContent(ingredient))).inRoot(RootMatchers.withDecorView(not(is(mActivityTestRule.getActivity().getWindow().getDecorView())))).perform(ViewActions.click()); 

je devais créer un matcher personnalisé car chaque élément de l'adaptateur est un BaseIngredient objet.

public static Matcher<Object> withContent(final String title) { 
    return new BoundedMatcher<Object, BaseIngredient>(BaseIngredient.class) { 
     @Override 
     public boolean matchesSafely(BaseIngredient myObj) { 
      return myObj.mName.equals(title); 
     } 

     @Override 
     public void describeTo(Description description) { 
      description.appendText("with title '" + title + "'"); 
     } 
    }; 
}