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.

  • ListView con OnItemClickListener android
  • Come passare dal secondo frammento al primo frammento
  • Come rilevare quando un utente collega l'auricolare al dispositivo Android? (Di fronte a ACTION_AUDIO_BECOMING_NOISY)
  • Google API API v2 non funziona
  • Applicazione Android Esci per la schermata iniziale
  • Come aggiungere TextView al centro del pollice SeekBar?
  • 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 ())

  • Invio di MMS in diversi dispositivi Android
  • Disegnare più righe in edittext ad esempio block note
  • Missing adActivity con android: configChanges in AndroidManifest.xml
  • Differenza tra il context di attività e il context applicativo
  • GZIPInputStream non riesce con IOException in Android 2.3, ma funziona bene in tutte le versioni precedenti?
  • Android Orientation Change
  • 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.