Android-тест эспрессо NavigationView

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

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

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

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

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

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

    <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 является закрытым членом и недоступен. Кто-нибудь может мне помочь?

Приветствую! Шенно


person Hicy    schedule 19.03.2016    source источник
comment
Похоже, что идентификатор пунктов меню не совпадает с представлениями, созданными для меню. Возможно, использовать другой сопоставитель, чтобы найти представление по тексту, а не по идентификатору?   -  person Doug Stevenson    schedule 19.03.2016
comment
Чтобы помочь другим, у которых возникли проблемы с взаимодействием с ящиком, для использования .perform(open) вы должны добавить зависимость: androidTestCompile 'com.android.support.test.espresso:espresso-contrib:3.0.1'   -  person Kunami    schedule 06.03.2018


Ответы (2)


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

onView(withText("the item title")).
person Coralie B    schedule 19.03.2016

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

onView(withId(R.id.nav_view)).perform(NavigationViewActions.navigateTo(R.id. nav_register));
person priyanka p    schedule 08.02.2017
comment
NavigationViewActions не входит в состав Expresso github.com/googlesamples/android-architecture/blob/todo-mvp/ - person melkir; 04.03.2017
comment
Пожалуйста, добавьте androidTestCompile com.android.support.test.espresso:espresso-contrib:2.2.2 - person priyanka p; 06.03.2017