android - studio - Prueba de ViewPager con Espresso. ¿Cómo se actúa en un botón de un Objeto?
navegar entre fragments android studio (1)
FirstVal, ViewPager
no es un AdapterView
, se extiende directamente desde ViewGroup
. Entonces el método onData()
no se puede usar en un ViewPager
.
1. Solución
Como es un ViewGroup
, cada elemento es hijo directo de su ViewPager
. Por lo tanto, el proceso consiste en hacer referencia a la primera vista de un niño que usa un matcher personalizado (como este, firstChildOf()
) y jugar con hasDescendant()
e isDescendantOfA()
para acceder a la vista de destino y realizar una acción sobre ella.
onView(allOf(withId(R.id.button), isDescendantOfA(firstChildOf(withId(R.id.viewpager)))))
.perform(click());
2. Solución (da mejor)
Como la particularidad de ViewPager
es mostrar cada elemento (vistas secundarias de la solución # 1) que lo compuso, uno por uno (estilo página por página). Por lo tanto, incluso si sus elementos usan el mismo diseño con los mismos ID, solo se muestra uno. De modo que podemos hacer referencia a la vista dirigida por su Id y agregar las restricciones isDisplayed()
. Solo coincidirá con una vista, la que se muestra actualmente.
onView(allOf(withId(R.id.button), isDisplayed())).perform(click());
Tan sencillo como eso.
Y si quiere otro artículo, puede swipe()
en su ViewPager
para cambiar el elemento mostrado:
onView(withId(R.id.viewpager)).perform(swipeLeft());
Tengo una ViewPager
con elementos que contienen solo una imagen y un botón.
No puedo interactuar con éxito con la IU de un elemento (Página) porque, a excepción de la imagen que se muestra, no hay nada que diferencie (desde el punto de vista de la IU) de todos los elementos de ViewPager
.
Intenté seleccionar solo un artículo con una posición:
onData(is(instanceOf(ItemClass.class)))
.atPosition(0)
.onChildView(withId(R.id.button))
.perform(click());
causando
NoMatchingViewException: ninguna vista en la jerarquía encontrada coincidente: se puede asignar desde la clase: class android.widget.AdapterView
¿Cómo acceder y probar elementos de un ViewPager
con Espresso?