Intereting Posts
Как использовать мою собственную базу данных sqlite? Разница между основной нитью и потоком пользовательского интерфейса Android Collapsing Toolbar не использует инерцию, например приложение Google Play. Замена фрагмента другим фрагментом того же класса Включен Javascript Android WebView Как получить уникальный идентификатор устройства на Android? Выровнять кнопки горизонтально с равным интервалом в linearlayout Как изменить текст TextView в заголовке ящика навигации? В Android, как я могу запросить MediaStore только для файлов по определенному пути? Или, альтернативно, только отображение файлов по определенному пути? Не удается разрешить символ. KITKAT не может решить метод getAllocationByteCount () Простой пример киви Предотвратите воссоздание AdView для каждого действия Android Live стола с OpenGL ES 2.0? Ионная кнопка возврата Отключение аппаратного ускорения для mapView приводит к постоянному перерисовке

Тестирование 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, как выполнить щелчок или сделать утверждения"

Проблема с панелью инструментов вызвана тем фактом, что некоторые из libs, которые я использую в моем файле app.gradle, не имеют самого последнего RecyclerView, поэтому мне также нужно было добавить:

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

Проблема с java.lang.NoSuchMethodError на моей стороне. Конфигурация ProGuard удаляла несколько методов.