2016-09-06 5 views
3

Gibt es eine Möglichkeit, Elemente mit einer bestimmten ID in Espresso zu zählen?Espresso Count-Elemente

Ich kann onView(withId(R.id.my_id)) tun, aber dann bin ich fest.

Ich habe ein LinearLayout, wo ich Elemente (kein ListView) injiziere, und ich möchte testen, wie viele oder jene zu prüfen sind, ob sie erwartetes Verhalten entsprechen. Hier

Antwort

2

ist der Matcher, die ich kam mit:

public static Matcher<View> withViewCount(final Matcher<View> viewMatcher, final int expectedCount) { 
     return new TypeSafeMatcher<View>() { 
      int actualCount = -1; 

      @Override 
      public void describeTo(Description description) { 
       if (actualCount >= 0) { 
        description.appendText("With expected number of items: " + expectedCount); 
        description.appendText("\n With matcher: "); 
        viewMatcher.describeTo(description); 
        description.appendText("\n But got: " + actualCount); 
       } 
      } 

      @Override 
      protected boolean matchesSafely(View root) { 
       actualCount = 0; 
       Iterable<View> iterable = TreeIterables.breadthFirstViewTraversal(root); 
       actualCount = Iterables.size(Iterables.filter(iterable, withMatcherPredicate(viewMatcher))); 
       return actualCount == expectedCount; 
      } 
     }; 
    } 

    private static Predicate<View> withMatcherPredicate(final Matcher<View> matcher) { 
     return new Predicate<View>() { 
      @Override 
      public boolean apply(@Nullable View view) { 
       return matcher.matches(view); 
      } 
     }; 
    } 

und die Nutzung ist:

onView(isRoot()).check(matches(withViewCount(withId(R.id.anything), 5))); 
+0

ich mit den Iterables ein Problem habe nach dem Upgrade 3.0.0 auf Espresso. Der Import wurde von android.support.test.espresso.core.deps.guava.collect.Iterables geändert. auf android.support.test.espresso.core.internal.deps.guava.collect.Iterables; und dabei die für diesen Code erforderliche Größe verloren. –