2016-03-19 16 views
6

Sto scrivendo alcuni espressotest per un'applicazione che ho recentemente fatto. Sto usando un NavigationView all'interno di DrawerLayout come menu scorrevole.Test caffè espresso Android NavigationView

sono riuscito ad aprire il cassetto in questo modo:

 onView(withId(R.id.drawer_layout)).perform(open()); 

Questo funziona così ora sto cercando di eseguire un click su un menuitem nel NavigationView.

onView(withId(R.id.nav_register)).. 

Impossibile trovare la vista. Ho provato diverse cose ma non riesco a trovare un modo per recuperare la vista menuitem. Questo è il modo in cui gli elementi vengono assegnati nel codice:

<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:fitsSystemWindows="true" 
    app:headerLayout="@layout/nav_header_main" 
    app:menu="@menu/activity_main_drawer" /> 

e activity_main_drawer.xml

<group android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_home" 
     android:icon="@drawable/ic_menu_home" 
     android:title="Home" /> 
    <item 
     android:id="@+id/nav_register" 
     android:icon="@drawable/ic_menu_register" 
     android:title="Registreer" /> 
    <item 
     android:id="@+id/nav_login" 
     android:icon="@drawable/ic_menu_login" 
     android:title="Log in" /> 
    <item 
     android:id="@+id/nav_play" 
     android:icon="@drawable/ic_menu_play" 
     android:title="Speel sessie" /> 
    <item 
     android:id="@+id/nav_logout" 
     android:icon="@drawable/ic_menu_logout" 
     android:title="Log uit" /> 
</group> 

ho letto qualcosa su NavigationViewMenuItem è un membro privato e non accessibile. Qualcuno mi può aiutare?

Saluti! Shenno

+0

Suona come l'id delle voci di menu non è la stessa come le viste che sono costruiti per il menu. Forse usare un diverso matcher per trovare la vista dal suo testo piuttosto che dal suo id? –

+0

Per aiutare gli altri che sono arrivati ​​qui con problemi di interazione con il cassetto, per usare ".perform (aperto)" devi aggiungere una dipendenza: androidTestCompile 'com.android.support.test.espresso: espresso-contrib: 3.0.1' – Kunami

risposta

3

In realtà, la vista che rappresenta la voce di menu non conosce l'ID della voce di menu in Android. Di conseguenza, il metodo withId() non funziona in Espresso con voci di menu specifiche. Vi suggerisco di utilizzare il metodo withText:

onView(withText("the item title")). 
0

Se si vuole attaccare a ID, allora è possibile utilizzare:

onView(withId(R.id.nav_view)).perform(NavigationViewActions.navigateTo(R.id. nav_register)); 
+0

NavigationViewActions non è incluso con Expresso https://github.com/googlesamples/android-architecture/blob/todo-mvp/todoapp/app/src/androidTest/java/com/example/android/architecture/blueprints/todoapp/ custom/action/NavigationViewActions.java – melkir

+0

Aggiungi androidTestCompile "com.android.support.test.espresso: espresso-contrib: 2.2.2" –

Problemi correlati