Comment compter les articles RecyclerView avec Espresso

En utilisant Espresso et Hamcrest,

Comment puis-je compter le numéro d'article disponible dans un recyclerView?

  • Le désordre de Dalvik avec le code de la bibliothèque et le projet ne peut plus être exécuté
  • Android - Annuler AsyncTask avec force
  • Comment télécharger des fichiers à l'intérieur de WebView?
  • Quand devrait-on envisager d'envisager des changements de position d'un élément?
  • Comment utiliser GCM sur Intel x86 Emulator
  • Comment puis-je invoquer la boîte de dialogue de recherche en utilisant onSearchRequested ()
  • Exemple: J'aimerais vérifier si 5 éléments s'affichent dans un RecyclerView spécifique (défilement si nécessaire).

  • Android-Connectez-vous via Google plus "Une erreur interne s'est produite"
  • Comparer deux sons dans Android
  • Problème de messagerie (envoyer un lien hypertexte dans le corps du courrier électronique) Android
  • Comment annuler handler.postDelayed?
  • Translucent StatusBar avec la couleur ActionBar dynamique dans Android
  • Aucune ressource trouvée qui correspond au nom donné (à 'titre' avec valeur '@ string / action_settings')
  • 4 Solutions collect form web for “Comment compter les articles RecyclerView avec Espresso”

    Voici un exemple ViewAssertion pour vérifier le nombre d'articles RecyclerView

    public class RecyclerViewItemCountAssertion implements ViewAssertion { private final int expectedCount; public RecyclerViewItemCountAssertion(int expectedCount) { this.expectedCount = expectedCount; } @Override public void check(View view, NoMatchingViewException noViewFoundException) { if (noViewFoundException != null) { throw noViewFoundException; } RecyclerView recyclerView = (RecyclerView) view; RecyclerView.Adapter adapter = recyclerView.getAdapter(); assertThat(adapter.getItemCount(), is(expectedCount)); } } 

    Et ensuite utiliser cette assertion

     onView(withId(R.id.recyclerView)).check(new RecyclerViewItemCountAssertion(5)); 

    J'ai commencé à écrire une bibliothèque qui devrait rendre les tests plus simples avec espresso et uiautomator. Cela comprend l'outillage pour l'action et les assertions de RecyclerView. https://github.com/nenick/espresso-macchiato Voir par exemple EspRecyclerView avec la méthode assertItemCountIs (int)

    Pour compléter la réponse nenick et fournir et une solution un peu plus souple pour tester si le cout d'article est plus grand, moinsThan …

     public class RecyclerViewItemCountAssertion implements ViewAssertion { private final Matcher<Integer> matcher; public RecyclerViewItemCountAssertion(int expectedCount) { this.matcher = is(expectedCount); } public RecyclerViewItemCountAssertion(Matcher<Integer> matcher) { this.matcher = matcher; } @Override public void check(View view, NoMatchingViewException noViewFoundException) { if (noViewFoundException != null) { throw noViewFoundException; } RecyclerView recyclerView = (RecyclerView) view; RecyclerView.Adapter adapter = recyclerView.getAdapter(); assertThat(adapter.getItemCount(), matcher); } } 

    Usage:

     onView(withId(R.id.recyclerView)).check(new RecyclerViewItemCountAssertion(5)); onView(withId(R.id.recyclerView)).check(new RecyclerViewItemCountAssertion(greaterThan(5)); onView(withId(R.id.recyclerView)).check(new RecyclerViewItemCountAssertion(lessThan(5)); // ... 

    Ajout d'un peu de sucre syntaxique à la réponse @ Stephane .

     public class RecyclerViewItemCountAssertion implements ViewAssertion { private final Matcher<Integer> matcher; public static RecyclerViewItemCountAssertion withItemCount(int expectedCount) { return withItemCount(is(expectedCount)); } public static RecyclerViewItemCountAssertion withItemCount(Matcher<Integer> matcher) { return new RecyclerViewItemCountAssertion(matcher); } private RecyclerViewItemCountAssertion(Matcher<Integer> matcher) { this.matcher = matcher; } @Override public void check(View view, NoMatchingViewException noViewFoundException) { if (noViewFoundException != null) { throw noViewFoundException; } RecyclerView recyclerView = (RecyclerView) view; RecyclerView.Adapter adapter = recyclerView.getAdapter(); assertThat(adapter.getItemCount(), matcher); } } 

    Usage:

     import static your.package.RecyclerViewItemCountAssertion.withItemCount; onView(withId(R.id.recyclerView)).check(withItemCount(5)); onView(withId(R.id.recyclerView)).check(withItemCount(greaterThan(5)); onView(withId(R.id.recyclerView)).check(withItemCount(lessThan(5)); // ... 

    J'ai utilisé la méthode ci-dessous pour obtenir le compte de RecyclerView

     public static int getCountFromRecyclerView(@IdRes int RecyclerViewId) { int COUNT = 0; Matcher matcher = new TypeSafeMatcher<View>() { @Override protected boolean matchesSafely(View item) { COUNT = ((RecyclerView) item).getAdapter().getItemCount(); return true; } @Override public void describeTo(Description description) { } }; onView(allOf(withId(RecyclerViewId),isDisplayed())).check(matches(matcher)); int result = COUNT; COUNT = 0; return result; } 

    Usage –

     int itemsCount = getCountFromRecyclerView(R.id.RecyclerViewId); 

    Ensuite, effectuez des assertions pour vérifier si les itemsCount sont comme prévu

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.