2015-05-22 4 views

ответ

27

Если в нижней части ScrollView вам нужно найти представление и сопоставить что-то против него, просто выполните действие scrollTo() перед ним, перед любыми другими действиями, требующими его отображения.

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

Примечание: scrollTo не будет иметь никакого эффекта, если уже отображается вид, так что вы можете спокойно использовать его в тех случаях, когда представление отображается

+3

Каким образом это не работает с 'NestedScrollView'? –

+0

Я не пробовал это, но сделаю снимок и напишу новый вопрос с вопросом. – appoll

+4

работает только в том случае, если вы знаете свои дочерние элементы - что делать, если вы не знаете последний элемент? – PKAP

1

Также и можно попробовать:

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

Если у вас есть вид внутри android.support.v4.widget.NestedScrollView вместо scrollView scrollTo() не работает.

+0

Где я могу поставить этот метод? – Ixx

+0

Я считаю, что в этом ответе отсутствует информация для тех, кто еще не полностью осведомлен. Пожалуйста, проверьте https://stackoverflow.com/questions/35272953/espresso-scrolling-not-working-when-nestedscrollview-or-recyclerview-is-in-coor для получения полного ответа –

2

Для полноты (на основе ответа Морозова), вы можете передать пользовательские ViewAction вместо scrollTo(), что позволяет использовать 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); 
} 

};

И использовать его как это:

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

для меня при использовании nestedScrollview я просто swipeUp (если вы хотите идти вниз) .. вот пример вызова:

onView(withId(R.id.nsv_container)) 
       .perform(swipeUp()); 
Смежные вопросы