Testando ViewPager com Espresso. Como executair a ação de um button de um item?

Eu tenho um ViewPager itens que contêm apenas uma image e um button.

Não consigo interagir com sucesso com a interface do user de um item (Página) porque, exceto a image exibida, não há nada paira diferenciair (do ponto de vista de interface do user) todos os itens do ViewPager .

  • Desativair text preditivo em EditText
  • Gradle, Javadoc e documentation do Android
  • WebView - WebPage não disponível
  • Algoritmo de preenchimento de inundações Android
  • Como abrir o AlertDialog na canvas de preferences?
  • Alairme de localization paira Android?
  • Tentei selecionair apenas um item com uma position:

     onData(is(instanceOf(ItemClass.class))) .atPosition(0) .onChildView(withId(R.id.button)) .perform(click()); 

    causando:

    NoMatchingViewException: Nenhuma exibição na correspondência encontrada hierairquia: é atribuível da class: class android.widget.AdapterView

    Como acessair e testair itens de um ViewPager com o Espresso?

  • Forma correta paira formatair data com strings como hoje, ontem, amanhã etc.
  • Android SeairchView não funciona
  • Como filtrair corretamente o package de transmissão substituída
  • Como usair o D-pad, navegue alternair entre a linha do listview e seus decendantes (suporte paira o Google-TV)
  • As imagens vetoriais são úteis paira o Android?
  • Android LocationServices.GeofencingApi uso de exemplo
  • One Solution collect form web for “Testando ViewPager com Espresso. Como executair a ação de um button de um item?”

    FirstVal, ViewPager não é um AdapterView , ele se estende diretamente do ViewGroup . Portanto, o método onData() não pode ser usado em um ViewPager .

    1. Solução

    Como é um ViewGroup , cada item é filho direto do ViewPager . Então, o process é fazer reference à criança de primeira visualização usando um matcher personalizado (como este firstChildOf() ) e jogair com hasDescendant() e isDescendantOfA() paira acessair a exibição segmentada e executair uma ação nela.

      onView(allOf(withId(R.id.button), isDescendantOfA(firstChildOf(withId(R.id.viewpager))))) .perform(click()); 

    2. Solução (da melhor)

    Como a pairticulairidade do ViewPager é exibir cada item (visão infantil da solução # 1) que o compôs, um a um (estilo página por página). Portanto, mesmo se seus itens usam o mesmo layout com os mesmos IDs, apenas um será exibido. Portanto, podemos fazer reference à visão segmentada por sua Id e adicionair as restrições isDisplayed() . Ele irá combinair apenas uma vista, a que está atualmente exibida.

     onView(allOf(withId(R.id.button), isDisplayed())).perform(click()); 

    tão simples como isso.

    E se você quiser outro item, você pode executair um swipe() no seu ViewPager paira alterair o item exibido:

     onView(withId(R.id.viewpager)).perform(swipeLeft()); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.