2015-05-22 14 views

risposta

27

Se nella parte inferiore di ScrollView è necessario trovare una vista e abbinare qualcosa contro di essa, quindi eseguire semplicemente l'azione scrollTo() su di essa, prima di qualsiasi altra azione che richiede che venga visualizzata.

onView(withId(R.id.onBottomOfScrollView)) 
    .perform(scrollTo(), click()); 

Nota: scrollTo non avrà alcun effetto se è già visualizzata la vista in modo da poter utilizzare in sicurezza in casi in cui viene visualizzata la vista

+3

Come mai questo non funziona con 'NestedScrollView'? –

+0

Non l'ho provato, ma provalo e scrivi una nuova domanda con il numero – appoll

+4

funziona solo se conosci i tuoi elementi figli - cosa fare se non conosci l'ultimo elemento? – PKAP

1

anche u può provare:

public Matcher<View> getConstraints() { 
return allOf(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE), isDescendantOfA(anyOf(
     isAssignableFrom(ScrollView.class), isAssignableFrom(HorizontalScrollView.class), isAssignableFrom(NestedScrollView.class)))); 

Se si dispone di una vista all'interno di android.support.v4.widget.NestedScrollView invece di scrollView scrollTo() non funziona.

+0

Dove posso inserire/chiamare questo metodo? – Ixx

+0

Credo che questa risposta manchi di informazioni per chiunque non sia pienamente consapevole. Si prega di controllare https://stackoverflow.com/questions/35272953/espresso-scrolling-not-working-when-nestedscrollview-or-recyclerview-is-in-coor per la risposta completa –

2

Per completezza (in base alla risposta del Morozov), è possibile passare una consuetudine ViewAction invece di scrollTo(), che permette di utilizzare NestedScrollView:

ViewAction customScrollTo = new ViewAction() { 

@Override 
public Matcher<View> getConstraints() { 
    return allOf(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE), isDescendantOfA(anyOf(
     isAssignableFrom(ScrollView.class), 
     isAssignableFrom(HorizontalScrollView.class), 
     isAssignableFrom(NestedScrollView.class))) 
    ); 
} 

@Override 
public String getDescription() { 
    return null; 
} 

@Override 
public void perform(UiController uiController, View view) { 
    new ScrollToAction().perform(uiController, view); 
} 

};

e usarlo in questo modo:

onView(withId(R.id.onBottomOfScrollView)).perform(customScrollTo, click()); 
3

per me quando si utilizza nestedScrollview ho appena swipeUp (se si vuole andare verso il basso) .. Ecco un esempio di chiamata:

onView(withId(R.id.nsv_container)) 
       .perform(swipeUp()); 
Problemi correlati