Prueba recyclerView con Espresso, cómo realizar clics o hacer afirmaciones
Últimamente tengo que probar RecyclerView y tengo muchos problemas para hacer algo con él.
En primer lugar, llegué a saber que Espresso ya está "apoyando" RecyclerViews proporcionándonos RecyclerViewActions ubicadas en espresso-contrib . Así que he decidido usarlo y mis dependencias se ve así:
- RecyclerView item layout_weight, tamaños no actualizados
- Detectar acabado de animación en RecyclerView de Android
- Cómo importar RecyclerView para Android L-preview
- ¿Puedo usar más de 2 vistas de reciclador en una actividad?
- RecyclerView notifyItemRangeChanged no muestra nuevos datos
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" }
Pero como sólo intento ejecutar mi prueba después de cambiar espresso-core a espresso-contrib. Puedo ver este error:
Test running failed: Instrumentation run failed due to 'java.lang.IncompatibleClassChangeError'
Traté de google fuera. Vi muchos temas en los que la gente estaba dando respuestas como ésta . Así que excluí appcompat, supportv4 y recyclerview-v7. Como eso:
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' }
Y las pruebas comienzan pero … No puedo usar ninguna RecyclerViewActions. Porque no hay métodos después de excluir recyclerview-v7 lo que se recomienda casi en todas partes que vi en la web. Cuando trato de usar – RecyclerViewActions.actionOnItemAtPosition – el método que es el núcleo para mí me sale este error:
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)
Así que prefiero tener este recyclerview-v7 en lugar de excluirlo. Modifico mi importación espresso-contrib a:
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' }
La prueba funciona otra vez pero … Consigo el error en alguna parte durante pruebas:
android.view.InflateException: Binary XML file line #36: Error inflating class android.support.design.widget.NavigationView
Así que estoy usando las librerías más recientes en mi gradle:
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'
Y NavigationView está utilizando el nuevo RecyclerView 23.1.1. Trato de encontrar lo que está mal, así que mostrar dependencias de espresso-contrib mediante la aplicación ./gradlew: dependencias en la consola y puedo ver:
+--- 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
Muy bien, espresso-contrib-2.2.1, que es el más reciente, está usando com.android.support:recyclerview-v7:23.0.1 – no la versión más reciente de recyclerView y está causando un error. Decido actualizarlo dentro de espresso-contrib añadiendo:
androidTestCompile 'com.android.support:recyclerview-v7:23.1.1'
Uso app: dependencies de nuevo y puedo ver el cambio:
\--- com.android.support:recyclerview-v7:23.0.1 -> 23.1.1 (*)
Comienzo las pruebas de nuevo. Y no consigo el error con NavigationView más – pienso que se resuelve pero … otro error aparece:
android.view.InflateException: Binary XML file line #21: Error inflating class android.support.v7.widget.Toolbar
Y ahora estoy un poco fuera de las ideas. Al mirar las dependencias de espresso-contrib no está usando nada que podría utilizar la barra de herramientas en mi opinión. La barra de herramientas es parte de appcompat-v7 así que intento agregarla de la misma manera que he actualizado recyclerView a la versión más reciente. Así que agrego:
androidTestCompile 'com.android.support:appcompat-v7:23.1.1'
Pero no me ayuda. Y estoy atascado.
¿Se enfrentaron a esos problemas? ¿Tiene alguna solución para hacer clic en recyclerView? ¿Cómo comprobar si el artículo en recyclerView tiene texto o algo así? Todas las soluciones que he encontrado en la web están usando el método: findViewHolderForPosition que no puedo usar después de excluir el módulo recyclerview-v7. Me gusta :
Https://github.com/dannyroa/espresso-samples/tree/master/RecyclerView/app/src/androidTest/java/com/dannyroa/espresso_samples/recyclerview
o
Https://gist.github.com/chemouna/00b10369eb1d5b00401b
o más.
- RecyclerView.onBindViewHolder sólo se llama una vez
- Android Recyclerview Layoutmanager's onLayoutChildren llamado cuando se cambia el contenido del elemento
- ¿Cuáles son las ventajas de RecyclerView en comparación con ListView?
- Cómo utilizar RecyclerView.scrollToPosition () para mover la posición a la parte superior de la vista actual?
- Múltiples elementos seleccionados RecyclerView in Activity.java
- Elemento RecyclerView que no muestra ondulaciones / retroalimentación táctil cuando el elemento tiene una casilla de verificación
- RecyclerView scrollToPosition no dispara scrollListener
- Datos de carga de Firebase dinámicamente en desplazamiento
El problema con la barra de herramientas se debe al hecho de que algunas de las librerías que utilizo en mi archivo app.gradle no tienen el RecyclerView más reciente, así que también debía agregar:
compile 'com.android.support:appcompat-v7:23.1.1'
Problema con java.lang.NoSuchMethodError está a mi lado. ProGuard config eliminaba algunos métodos.
- Android El teclado suave flotará solo un diseño específico
- Android reproducir repetidamente un archivo mp3 sin ningún espacio vacío