2016-02-04 2 views
0

Я тестирую его с помощью следующей:Тестирование Snackbar с Espresso

onView(allOf(withId(android.support.design.R.id.snackbar_text), withText("Network Error"))) 
     .check(matches(isDisplayed())); 

Но это терпит неудачу на is displayed on the screen to the user скорее всего потому, что y координата 0: ... x=18.0, y=0.0, ...

Полный журнал:

Expected: is displayed on the screen to the user 
Got: "AppCompatTextView{id=2131492981, res-name=snackbar_text, visibility=VISIBLE, width=444, height=71, has-focus=false, has-focusable=false, 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=18.0, y=0.0, text=Network Error, input-type=0, ime-target=false, has-links=false}" 

Любые идеи?

+0

добавьте ПОЛНОЕ LogCat. Вы положили только часть – piotrek1543

+1

Это самая важная часть, подумал. Проблема заключается в том, что анимация snackbar начинается с Y = 0, и из-за этого иногда эспрессо выполняет проверку «isDisplayed» сразу, а после Y = 0 возвращается false, что делает тест неудачным, даже если закусочная присутствует и существует в правильный корень. Мы отказались от этого и перешли к ожиданию тестирования. –

ответ

1

Вы можете использовать withEffectiveVisibility вместо isDisplayed так что не имеет значения, является ли он на самом деле отображается на текущем экране:

private void checkSnackBarDisplayedByMessage(@StringRes int message) { 
    onView(allOf(withId(android.support.design.R.id.snackbar_text), withText(message))) 
     .check(matches(withEffectiveVisibility(
      ViewMatchers.Visibility.VISIBLE 
    ))); 
}