2016-01-06 15 views
7

Voglio controllare la visualizzazione di Salva € XX nell'elenco. Salva € XX è un TextView che può essere VISIBLE o INVISIBLE. Uso JUnit 4 e Espresso 2.2.1.Espresso - controlla se il TextView esiste in ListView

ho cercato di controllare in questo modo:

onView(withText(startsWith("Save"))).check(matches(isDisplayed())); 

ma sempre un errore:

android.support.test.espresso.AmbiguousViewMatcherException: 'with text: a string starting with "Save"' matches multiple views in the hierarchy. 

C'è un modo per se il TextView esiste nel ListView con Espresso?

UPDATE

Ho anche provato ad utilizzare onData:

onData(hasToString(startsWith("Save"))) 
       .inAdapterView(withId(R.id.suggestion_list_view)).atPosition(0) 
       .check(matches(isDisplayed())); 

ma sembra che onData opere con strato di dati, ma non lo strato di vista. Pertanto, ricevo l'errore:

java.lang.RuntimeException: No data found matching: with toString() a string starting with "Save" contained values: <[Data: ...]> 

enter image description here

risposta

14

Dopo diversi tentativi, ho trovato il modo.

In questo caso, dovremmo utilizzare un approccio combinato e lavorare con i livelli di dati e vista. Accediamo allo ListView entro il ID e scegliamo il primo elemento. Quindi controllalo per il testo "Salva".

onData(anything()) 
       .inAdapterView(withId(R.id.list_view)) 
       .atPosition(0) 
       .onChildView(withId(R.id.suggestion_saving)) 
       .check(matches(withText(startsWith("Save")))); 

Funziona come un fascino. Godere!