2015-07-24 16 views
6

Chiedo menu delle opzioni utilizzando questo codice:
openActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext());come fare clic su indice sul menu delle opzioni usando Espresso Android

Dopo di che, il menu è apparso. Ora clicco sulla voce di menu dal suo testo, e va bene.

Il problema che ho già notato è soggetto, che può cambiare, diciamo se l'utente usa molte lingue per client diversi. Quindi nel lungo test non è utile.

Per tale motivo, desidero utilizzare Espresso per fare clic su specifico index per un caso di test specifico.

Il menu delle impostazioni non sembra avere un ID. Quindi non so come fare clic sull'elemento specifico 'indice' in quel menu, diciamo che voglio fare clic sul quarto elemento.

Potresti aiutarmi a risolverlo?

+0

perché non usare 'onView (withText (R.string.string_id)). Perform (click());'? Ciò selezionerà String in base alle impostazioni locali del sistema e non dipendendo dalla lingua. – denys

+0

sarebbe bello se tornassi per confermare se questo aiuto e quindi aiuti gli altri con problemi simili – Ewoks

risposta

0

Ho appena selezionato la voce di menu in base al suo ID.

onView(withId(R.id.some_option_menu_id)).perform(click()); 
+1

Si prega di astenersi dal pubblicare una cartella senza spiegare cosa sta facendo il codice – krilovich

4

Quindi, vorrei provare a spiegare Passo dopo passo:

1) Hai aperto il menu con questo metodo:

openActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext()); 

Penso che si può aprire lo stesso menu mettere questo codice:

onView(withContentDescription("More options")).perform(click()); 

2) Si desidera cliccare sulla voce da ID:

In primo luogo, perché non si desidera utilizzare "strings.xml". Il testo estratto da questo file viene modificato automaticamente con la lingua impostata per smartphone, ma solo se è stato preparato prima del file di traduzione esatto.

rispetto al codice sarebbe simile a questa:

openActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext()); 
onView(withText(R.string.help)).perform(click()); 

o

onView(withContentDescription("More options")).perform(click()); 
onView(withText(R.string.help)).perform(click()); 

Naturalmente, è ancora fare prendere una vista dal suo ID, come @Rodrigo detto. Che il codice sarebbe stato così:

onView(withContentDescription("More options")).perform(click()); 
onView(withId(R.id.help_item)).perform(click()); 

Ricordate che nei file XML è possibile per ogni singolo 'view' dichiarare android:id, android:text o android:contentDescription.

+1

"Altre opzioni" avrà una descrizione diversa con un'altra locale. –