Espresso – Fare clic sul text nella visualizzazione Elenco

Sto cercando di fare clic su un text in una vista di elenco utilizzando Espresso. So che hanno questa guida , ma non riesco a capire come fare questo lavoro cercando text. Questo è quello che ho provato

Espresso.onData(Matchers.allOf(Matchers.is(Matchers.instanceOf(ListView.class)), Matchers.hasToString(Matchers.startsWith("ASDF")))).perform(ViewActions.click()); 

Come previsto, questo non funzionava. L'errore ha detto che nessuna vista in gerarchia. Qualcuno sa come select una String? ( "ASDF" in questo caso) Grazie in anticipo.

  • GpsStatus.Listener non si spegne sulle modifiche di stato della networking
  • 3D Flip Animation su android.support.v4.Fragment
  • Come aggiungere una copia di XML in modo dinamico
  • Gradle fallisce con "Metodo ambiguo di sovraccarico per il metodo java.io.File # <init>"
  • Come Picasso effettua la cache delle immagini
  • Multiple TypeFace in singolo TextView
  • Aggiornamento dovuto @haffax

    Ho ricevuto un errore:

    com.google.android.apps.common.testing.ui.express.AmbiguousViewMatcherException: 'è assegnabile dalla class: class android.widget.AdapterView' corrisponde a più viste nella gerarchia.

    Secondo errore

    Con questo codice

     onData(hasToString(startsWith("ASDF"))).inAdapterView(withContentDescription("MapList")).perform(click()); 

    Ottengo questo errore

    com.google.android.apps.common.testing.ui.express.PerformException: Errore durante l'esecuzione di 'dati dell'adattatore di carico' in vista 'con la descrizione del contenuto: è "MapList"'.

    Causa: java.lang.RuntimeException: Nessun dato trovato: asString (una string che inizia con "ASDF")


    Soluzione

    onData (qualsiasi cosa ()). inAdapterView (withContentDescription ( "disc")). atPosition (x) .Effettuare (click ())

  • Lo background del cerchio Android diventa ovale
  • Eclipse dice che il mio progetto Android contiene degli errori, ma non ce ne sono
  • Ottieni Programmaticamente il model di telefono Android
  • Come modificare l'icona predefinita di SearchView?
  • Scrittura di un'applicazione per Android e iOS
  • Come utilizzare Single TextWatcher per più EditTexts?
  • 3 Solutions collect form web for “Espresso – Fare clic sul text nella visualizzazione Elenco”

    Il problema è che si tenta di abbinare la vista di elenco con l' instanceOf(ListView.class) come argomento per onData() . onData() richiede un corrispondente di dati che corrisponda ai dati adattati di ListView , non il ListView stesso, e non anche la View che Adapter.getView() restituisce, ma i dati reali.

    Se hai qualcosa di simile nel tuo codice di produzione:

     ListView listView = (ListView)findViewById(R.id.myListView); ArrayAdapter<MyDataClass> adapter = getAdapterFromSomewhere(); listView.setAdapter(adapter); 

    Quindi l'argomento Matcher di Espresso.onData() dovrebbe corrispondere all'istanza desiderata di MyDataClass . Quindi, qualcosa di simile dovrebbe funzionare:

     onData(hasToString(startsWith("ASDF"))).perform(click()); 

    (È ansible utilizzare un altro Matcher utilizzando un metodo di org.hamcrest.Matchers )

    Se si dispone di più viste adattatori nell'attività, è ansible call ViewMatchers.inAdapterView() con un corrispondente di visualizzazione che specifica l'AdapterView come questo:

     onData(hasToString(startsWith("ASDF"))) .inAdapterView(withId(R.id.myListView)) .perform(click()); 

    Se l'adattatore ha class di model personalizzato per esempio Item :

     public static Matcher<Object> withItemValue(final String value) { return new BoundedMatcher<Object, Item>(Item.class) { @Override public void describeTo(Description description) { description.appendText("has value " + value); } @Override public boolean matchesSafely(Item item) { return item.getName().toUpperCase().equals(String.valueOf(value)); } }; } 

    Quindi call:

     onData(withItemValue("DRINK1")).inAdapterView(withId(R.id.menu_item_grid)).perform(click()); 
     onData(hasEntry(equalTo(ListViewActivity.ROW_TEXT),is("List item: 25"))) .onChildView(withId(R.id.rowTextView)).perform(click()); 

    Questo funziona meglio per me con i dati di text in row.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.