2014-12-09 10 views
8

Mam ListView wewnątrz PopupWindow, i chcę kliknąć na drugi element na liście. Próbowałem następujących czynności:Napisz test, który klika widoki wewnątrz PopupWindow

// Open the popupwindow 
onView(withId(R.id.popupwindow_open)).perform(click()); 

a teraz, pojawi się okienko, próbowałem:

onData(anything()).inAdapterView(withContentDescription("delete")).atPosition(1).perform(
     click()); 

lub to:

onView(withContentDescription("delete"))).perform(click()); 

Ale zawsze się, że widok ISN nie znaleziono. Jak mogę to zrobić w Espresso?

+1

Espresso powinno być w stanie znaleźć widoki w 'PopupWindow's. Czy na pewno Twój widok zawiera opis treści "usuń"? Nie mieszałeś 'android: text' z' android: contentDescription'? –

+1

'.inAdapterView (withContentDescription (" delete "))' oznacza, że ​​sam ListView musi mieć contentDescription "delete". Czy usunięcie działania inAdapterView działa? tj. 'onData (cokolwiek()). atPosition (1) .perform ( click());' Ponadto, jeśli opublikujesz pełny komunikat o błędzie, pomoże nam to lepiej zrozumieć problem. – yogurtearl

Odpowiedz

5

W twoim przypadku masz dwa różne okna. Aby wskazać Espresso, z którego okna chcesz wejść w interakcję, musisz użyć narzędzia Root matcher. Wypróbuj lub grać z tych rozwiązań trochę:

onView(withContentDescription("delete")) 
    .inRoot(withDecorView(not(is(getActivity().getWindow().getDecorView())))) 
    .perform(click()); 

lub

onData(withContentDescription("delete")) 
    .inRoot(withDecorView(not(is(getActivity().getWindow().getDecorView())))) 
    .inAdapterView(withId(R.id.adapter_view)) 
    .perform(click()); 
18

Android system pop-upy i alarmy są wyświetlane w innym oknie. Tak więc, musisz spróbować znaleźć widok w tym konkretnym oknie, a nie w głównym oknie aktywności.

Espresso zapewnia wygodną metodę wyszukiwania widoku głównego dla wyskakujących okienek. Spróbuj tego.

onView(ViewMatchers.withContentDescription("delete")) 
     .inRoot(RootMatchers.isPlatformPopup()) 
     .perform(ViewActions.click()); 
+3

jesteś ratownikiem, po godzinach próbowania wszystkich rozwiązań, chciałbym mieć więcej głosów: dla mnie to działało z wyszukiwaniem tekstu onView (withText ("Popup Selection 1")) .inRoot (isPlatformPopup()) .perform (Kliknij()); –