tutorial studio propiedades otro navegar fragments entre ejemplo desde botones abrir android android-viewpager android-espresso ui-testing

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?