Тестирование recyclerView с помощью Espresso, как выполнить щелчок или сделать утверждения

В последнее время мне нужно протестировать RecyclerView, и у меня есть много проблем, чтобы что-либо сделать с этим.

Прежде всего, я узнал, что Espresso уже «поддерживает» RecyclerViews, предоставляя нам RecyclerViewActions, расположенную в espresso-contrib . Поэтому я решил использовать его, и мои зависимости выглядят так:

dependencies { androidTestCompile 'junit:junit:4.12' androidTestCompile 'com.squareup.spoon:spoon-client:1.2.1' androidTestCompile 'com.jraska:falcon-spoon-compat:0.3.1' androidTestCompile 'com.android.support:support-annotations:23.1.1' androidTestCompile 'com.android.support.test:runner:0.4.1' androidTestCompile 'com.android.support.test:rules:0.4.1' androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.1' androidTestCompile "org.mockito:mockito-core:1.10.19" androidTestCompile "com.google.dexmaker:dexmaker:1.2" androidTestCompile "com.google.dexmaker:dexmaker-mockito:1.2" } 

Но поскольку только я пытаюсь запустить свой тест после смены эспрессо-ядра на espresso-contrib. Я вижу эту ошибку:

 Test running failed: Instrumentation run failed due to 'java.lang.IncompatibleClassChangeError' 

Я попытался это сделать. Я видел много тем, где люди давали ответы вроде этого . Поэтому я исключил appcompat, supportv4 и recyclerview-v7. Как это:

  androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.1') { exclude group: 'com.android.support', module: 'appcompat' exclude group: 'com.android.support', module: 'support-v4' exclude module: 'recyclerview-v7' } 

И тесты начинаются, но … Я не могу использовать какой-либо RecyclerViewActions. Потому что нет методов после исключения recyclerview-v7, что рекомендуется почти везде, где я видел в Интернете. Когда я пытаюсь использовать – RecyclerViewActions.actionOnItemAtPosition – метод, который является ядром для меня, я получаю эту ошибку:

 java.lang.NoSuchMethodError: No virtual method findViewHolderForPosition(I)Landroid/support/v7/widget/RecyclerView$ViewHolder; in class Landroid/support/v7/widget/RecyclerView; or its super classes (declaration of 'android.support.v7.widget.RecyclerView' appears in /data/app/com.myapp.debug1-1/base.apk) at android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemAtPositionViewAction.perform(RecyclerViewActions.java:288) at android.support.test.espresso.ViewInteraction$1.run(ViewInteraction.java:144) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

Поэтому я предпочел бы использовать этот recyclerview-v7 вместо его исключения. Я изменяю свой импорт espresso-contrib для:

  androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.1') { exclude group: 'com.android.support', module: 'appcompat' exclude group: 'com.android.support', module: 'support-v4' } 

Тест снова запускается, но … Я получаю ошибку где-то во время тестов:

 android.view.InflateException: Binary XML file line #36: Error inflating class android.support.design.widget.NavigationView 

Поэтому я использую самые последние библиотеки в моей градиенте:

  compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.android.support:support-v13:23.1.1' compile 'com.android.support:cardview-v7:23.1.1' compile 'com.android.support:design:23.1.1' 

И NavigationView использует новейший RecyclerView 23.1.1. Я пытаюсь найти, что не так, поэтому я отображаю зависимости espresso-contrib, используя ./gradlew app: зависимости в консоли, и я вижу:

  +--- com.android.support.test.espresso:espresso-contrib:2.2.1 | +--- com.android.support.test.espresso:espresso-core:2.2.1 | | +--- com.squareup:javawriter:2.1.1 | | +--- com.android.support.test:runner:0.4.1 (*) | | +--- com.android.support.test:rules:0.4.1 (*) | | +--- javax.inject:javax.inject:1 | | +--- org.hamcrest:hamcrest-library:1.3 | | | \--- org.hamcrest:hamcrest-core:1.3 | | +--- org.hamcrest:hamcrest-integration:1.3 | | | \--- org.hamcrest:hamcrest-library:1.3 (*) | | +--- com.google.code.findbugs:jsr305:2.0.1 | | +--- javax.annotation:javax.annotation-api:1.2 | | \--- com.android.support.test.espresso:espresso-idling-resource:2.2.1 | +--- com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework:2.0 | | \--- org.hamcrest:hamcrest-core:1.3 | \--- com.android.support:recyclerview-v7:23.0.1 | \--- com.android.support:support-annotations:23.0.1 -> 23.1.1 

Итак, espresso-contrib-2.2.1, который является самым новым, использует com.android.support:recyclerview-v7:23.0.1 – не самая последняя версия recyclerView и вызывает ошибку. Я решил обновить его внутри espresso-contrib, добавив:

  androidTestCompile 'com.android.support:recyclerview-v7:23.1.1' 

Я снова использую приложения: зависимости, и вижу изменения:

 \--- com.android.support:recyclerview-v7:23.0.1 -> 23.1.1 (*) 

Я снова начинаю тесты. И я больше не ошибаюсь с NavigationView – я думаю, что он решен, но … появляется еще одна ошибка:

 android.view.InflateException: Binary XML file line #21: Error inflating class android.support.v7.widget.Toolbar 

И теперь я немного из идей. Когда вы смотрите на зависимости espresso-contrib, он не использует ничего, что могло бы использовать панель инструментов, на мой взгляд. Панель инструментов является частью appcompat-v7, поэтому я пытаюсь добавить ее так же, как я обновил recyclerView до самой новой версии. Поэтому я добавляю:

 androidTestCompile 'com.android.support:appcompat-v7:23.1.1' 

Но это мне не помогает. И я застрял.

Вы столкнулись с этими проблемами? У вас есть обходной способ, как нажать на recyclerView? Как проверить, имеет ли элемент в recyclerView текст или что-то в этом роде? Все решения, которые я нашел в Интернете, используют метод findViewHolderForPosition, который я не могу использовать после исключения модуля recyclerview-v7. Подобно :

https://github.com/dannyroa/espresso-samples/tree/master/RecyclerView/app/src/androidTest/java/com/dannyroa/espresso_samples/recyclerview

или

https://gist.github.com/chemouna/00b10369eb1d5b00401b

или больше.

Solutions Collecting From Web of "Тестирование recyclerView с помощью Espresso, как выполнить щелчок или сделать утверждения"