2016-03-19 5 views
6

Я пишу некоторые эспрессоты для приложения, которое я недавно сделал. Я использую NavigationView внутри DrawerLayout в качестве скользящего меню.Android espresso test NavigationView

мне удалось открыть ящик таким образом:

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

Это работает, так что теперь я пытаюсь выполнить щелчок на MenuItem в NavigationView.

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

не может найти свое мнение. Я пробовал несколько вещей, но я не могу найти способ получить представление menuitem. Это путь элементы назначаются в коде:

<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" /> 

и 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> 

Я читал кое-что о NavigationViewMenuItem является частным членом и не доступен. Кто-нибудь может мне помочь?

Приветствует! Shenno

+0

Это звучит как идентификатор пунктов меню не то же самое, как мнения, которые создаются для меню. Возможно, используйте другой матчи, чтобы найти представление по его тексту, а не по его идентификатору? –

+0

Чтобы помочь другим, которые получили здесь проблемы с взаимодействием с ящиком, использовать «.perform (open)», вы должны добавить зависимость: androidTestCompile 'com.android.support.test.espresso: espresso-contrib: 3.0.1' – Kunami

ответ

3

Фактически, представление, представляющее элемент меню, не знает идентификатора элемента меню в Android. В результате метод withId() не работает в Espresso с элементами меню. Я предлагаю вам использовать withText метод:

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

Если вы хотите придерживаться ID, то вы можете использовать:

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

NavigationViewActions не входит в состав 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

Пожалуйста, добавьте androidTestCompile "com.android.support.test.espresso: espresso-contrib: 2.2.2" –

Смежные вопросы