2015-11-03 3 views
12

Мое приложение перезагружает данные, когда прокрутка выполняется на SwipeRefreshLayout. Теперь я пытаюсь проверить это с Android Test Kit/Эспрессо, как это:Эспрессо: как проверить SwipeRefreshLayout?

onView(withId(R.id.my_refresh_layout)).perform(swipeDown()); 

К сожалению, это не удается с

android.support.test.espresso.PerformException: Error performing 'fast swipe' 
on view 'with id: my.app.package:id/my_refresh_layout'. 
... 
Caused by: java.lang.RuntimeException: Action will not be performed because the target view 
does not match one or more of the following constraints: 
at least 90 percent of the view's area is displayed to the user. 
Target view: "SwipeRefreshLayout{id=2131689751, res-name=my_refresh_layout, visibility=VISIBLE, 
width=480, height=672, has-focus=false, has-focusable=true, has-window-focus=true, 
is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, 
is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, 
child-count=2}" 

Конечно, макет виден и ударяя вручную работает, но я не уверен если я что-то делаю неправильно? Макет охватывает весь экран, поэтому должно быть действительно возможно для Espresso, чтобы сделать какое-то действие на нем.

ответ

30

Спящий над ним иногда помогает. Основная причина заключалась в том, что просматриваемый вид был видимым только на 89%, тогда как действия салфетки Espresso внутренне требуют 90%. Таким образом, решение, чтобы обернуть действие салфетки в другое действие и отменить эти ограничения вручную, как это:

public static ViewAction withCustomConstraints(final ViewAction action, final Matcher<View> constraints) { 
    return new ViewAction() { 
     @Override 
     public Matcher<View> getConstraints() { 
      return constraints; 
     } 

     @Override 
     public String getDescription() { 
      return action.getDescription(); 
     } 

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

Это то можно назвать так:

onView(withId(R.id.my_refresh_layout)) 
    .perform(withCustomConstraints(swipeDown(), isDisplayingAtLeast(85)); 
Смежные вопросы