2015-01-19 6 views
7

Ich habe ListView mit Bildern und Text. Wenn ich versuche, Artikel zu klicken, erhalte ich FehlerAndroid Espresso ListView klicken Sie auf Artikel

android.support.test.espresso.AmbiguousViewMatcherException: 'with id: com.cifrasoft.telefm:id/cardsGridView' matches multiple views in the hierarchy. 
Problem views are marked with '****MATCHES****' below. 

ich den folgenden Code verwenden:

onData(hasToString(startsWith("Item Text"))) 
      .inAdapterView(withId(R.id.cardsGridView)) 
      .perform(click()); 

Kann ich ListView klicken Position Adapter verwenden, ohne Streichhölzer oder startWith?

+3

Dies bedeutet, dass Sie mehrere Ansichten mit der benannten ID in der Ansichtshierarchie haben. Kannst du die ganze Fehlermeldung posten? – haffax

+1

Ja, sicher. Aber voller Fehler ist zu lang. Http://pastebin.com/eahDGDMb – rz0

+2

Aus der Betrachtung der gesamten Hierarchie scheint es, dass Sie einen ViewPager haben, der mehrere Seiten zeigt, von denen drei ein AdapterView mit der ID cardsGridView haben. Sie haben also ein AdapterView, den ViewPager, mit einem anderen verschachtelten AdapterView, Ihrem ListView. Was funktioniert, ist, die von Adapter.getView zurückgegebenen Views mit individuellen IDs oder Tags zu versehen und einen isDescendantOf() -Matcher in Ihrem inAdapterView() - Aufruf zusammen mit der withId zu verwenden. – haffax

Antwort

9

Versuchen Sie mit atPosition(). z.B.

onData(hasToString(startsWith("Item Text"))) 
      .inAdapterView(withId(R.id.cardsGridView)).atPosition(0) 
      .perform(click()); 

mit Index 0, es wird auf die erste übereinstimmende Ansicht gefunden.