Android. Как я могу перемещать NavigationDrawer из тестовой библиотеки Espresso?

Я создаю unit-тест из Espresso в Android. Мой проект имеет NavigationDrawer. Я создаю тест, который должен перемещать NavigationDrawer и нажимать кнопку. В понимании, как создать действие слайдов в моем тесте.

Мое текущее решение:

try { runTestOnUiThread(new Runnable() { @Override public void run() { DrawerLayout drawer = (DrawerLayout)getActivity().findViewById(R.id.drawer_layout); drawer.openDrawer(Gravity.LEFT); } }); } catch (Throwable e) { e.printStackTrace(); } 

Но я думаю, что это плохой код.

Существует описание, как это сделать в группе андроид-тест-кит, объясненной Валерой Захаровым – ссылкой .

Эспрессо 1.1 уже давно не работает, но я все еще не смог найти никаких функциональных возможностей навигационного ящика внутри него … То есть, пока я не узнал, что эта функциональность фактически включена в полностью отдельный файл библиотеки: espresso-contrib , который доступен через град

androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.2'

Это очень кратко упоминается на странице «Почему эспрессо» на веб-сайте Espresso :

Если вам нужна какая-либо функциональность из библиотеки Contrib , например DrawerActions , скопируйте здесь банку espresso-contrib.

Вот документация DrawerActions . И вот пример кода, который его использует. Надеюсь, это ставит вас в правильном направлении; На странице EspressoSamples нет примера кода для этого …

OpenDrawer () устарел, вы можете использовать этот код. Я могу подтвердить, что он работает

 onView(withId(R.id.my_drawer_layout)).perform(DrawerActions.open()); 

Поддержка NavigationDrawer скоро появится в следующем выпуске Espresso. В настоящее время вы можете реализовать свой собственный ViewAction, где вы бы добавили код внутри своего Runnable. Это неполное решение, потому что вы, вероятно, столкнетесь с проблемами времени, связанными с открытием / закрытием ящика. Espresso 1.1 позаботится об этом.