1

Il existe plusieurshorizontaux sur un écran. Je veux effectuer un événement click expresso sur le premier élément de la première horizontale Recyclerview. S'il vous plaît laissez-moi savoir comment nous pouvons y parvenir.Espresso AmbiguousViewMatcherException: Comment puis-je sélectionner un premier Recyclerview horizontal à partir de plusieurs horizontaux Recyclerview

onView(withId(R.id.craousal_recyclerview)) 
.perform(RecyclerViewActions.actionOnItemAtPosition(1, new ClickOnImageView())); 

public class ClickOnImageView implements ViewAction { 
    ViewAction click = click(); 

    @Override 
    public Matcher<View> getConstraints() { 
     return click.getConstraints(); 
    } 

    @Override 
    public String getDescription() { 
     return " click on custom image view"; 
    } 

    @Override 
    public void perform(UiController uiController, View view) { 
     click.perform(uiController, view.findViewById(R.id.craousal_imageview)); 
    } 

Il me donne l'exception suivante:

android.support.test.espresso.AmbiguousViewMatcherException 
+0

Pouvez-vous poster vos fichiers de mise en page? Il existe probablement un moyen de le faire dans votre application sans avoir recours à la création de ViewActions personnalisées, en utilisant un comparateur d'affichage plus spécifique avec RecyclerViewAction. actionOnHolderItem() – jdonmoyer

+0

@jdonmoyer Je crée une mise en page à l'exécution dans mon code. Par le j'ai eu la solution pour cela et j'ai mentionné la réponse. Mais maintenant face à un autre problème que ma taille de l'adaptateur 'RecyclerView' arrive à zéro, je ne suis pas en mesure d'effectuer un clic sur le premier élément de la liste. Mais à l'écran, je peux voir les données dans mon 'RecyclerView'. Toute contribution à ce sujet? – chank007

Répondre

0

Après avoir passé quelques heures que j'ai trouvé la solution, nous avons besoin d'utiliser un adaptateur pour correspondre à la première RecyclerView de multiples horizontal RecyclerView. Mettez la méthode ci-dessous dans votre classe de test.

private <T> Matcher<T> firstView(final Matcher<T> matcher) { 
    return new BaseMatcher<T>() { 
     boolean isFirst = true; 

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

      return false; 
     } 

     @Override 
     public void describeTo(final Description description) { 
      description.appendText("should return first matching item"); 
     } 
    }; 
} 

Et voici le code snippet comment vous pouvez l'utiliser,

onView(firstView(withId(R.id.recyclerview_tray))) 
      .perform(RecyclerViewActions.actionOnItemAtPosition(1, click()));