W jaki sposób klikasz element menu w NavigationView z biblioteki projektu używając Espresso? Działa to dobrze na większych urządzeniach, gdzie całe menu jest widoczne, ale w poziomych lub mniejszych urządzeniach dno mojego menu jest poza ekranem i nie mogę znaleźć sposobu na przewinięcie/przesunięcie do tych elementów menu, więc mogę je kliknąć.Jak klikasz element menu w NavigationView na Androidzie podczas testów z Espresso?
numerem:
onView(withText(R.string.contact_us)).perform(scrollTo()).check(matches(isDisplayed())).perform(click());
generuje następujący:
Spowodowany przez: java.lang.RuntimeException: Działanie nie zostanie wykonane ponieważ widok target nie pasuje jedno lub więcej z po ograniczeniach : (widok ma efektywną widoczność = WIDOCZNY i jest potomkiem z: (można przypisać z klasy: klasa android.widget.ScrollView lub jest możliwe do przypisania z klasy: klasa android.widget.Horizon talScrollView)) Widok celu: "NawigacjaMenuItemView {id = -1, widoczność = WIDOCZNA, szerokość = 888, wysokość = 144, ma-fokus = fałsz, ma-fokus = fałsz, ma-okno-fokus = prawda, jest -clickable = false, is-enabled = true, is-focused = false, is-focusable = false, is-layout-requested = false, jest wybrany = false, root-jest-layout-requested = false, ma-input-connection = false, x = 0,0, y = 1653,0, text = Kontakt, input-type = 0, ime-target = false, HAS-linki = false}”
NavigationView dziedziczy FrameLayout i wykonują przesunięcie płótna do przewijania. https://developer.android.com/reference/android/support/design/widget/NavigationView.html
Próbowałem napisać customViewAction powoli przewinąć ekran za pomocą poniższego działania i sprawdzić czy MENUITEM jest widoczny, a jeśli nie zatrzymać przewijanie, ale nie mogę zmusić go do pracy.
CoordinatesProvider coordinatesProvider = new CoordinatesProvider() {
public float[] calculateCoordinates(View view) {
float[] xy = GeneralLocation.BOTTOM_CENTER.calculateCoordinates(view);
xy[0] += 0.0F * (float)view.getWidth();
xy[1] += -0.083F * (float)view.getHeight();
return xy;
}
};
onView(withId(R.id.navigation_view)).perform(new GeneralSwipeAction(Swipe.SLOW,
coordinatesProvider, GeneralLocation.TOP_CENTER, Press.FINGER));
onView(withText(R.string.contact_us)).check(matches(isDisplayed())).perform(click());
Czy ktoś wymyślił jak przetestować nawigacjęView na Espresso jeszcze? Jestem prawie pewien, że moja logika stojąca za niestandardową funkcjąViewView będzie działała, ale nie będę mógł jej uruchomić.