Как использовать эспрессо-мэтчер в качестве условия для заявления If else?

Фрагмент моего кода выглядит следующим образом:

private void SelectOnline(String env) {    
     onView(withText("Some Text")).perform(click());

     if (onView(withText(env)).check(matches(isChecked()))) {
           onView(withId(R.id.dialogCancel)).perform(click());
     }else {
           onView(withText(env)).perform(click());
     }
}

Я получил сообщение об ошибке

required: boolean
found: ViewInteraction

Это означает, что вы не можете использовать эспрессо View Matchers в качестве условия для if..else. Есть ли другой способ реализовать оператор if..else?

1 ответ

Решение

Espresso был разработан таким образом, чтобы отговаривать разработчиков использовать условные выражения, поэтому официально поддерживаемых способов сделать это не существует.

Однако есть хаки, которые вы можете попробовать. Я использую операторы try / catch. В вашем случае это будет что-то вроде:

private void SelectTransitBackendOnline(String env) {    
     onView(withText("Some Text")).perform(click());

     try {
           onView(withText(env)).check(matches(isChecked())))
           onView(withId(R.id.dialogCancel)).perform(click());
     } catch (AssertionFailedError e) {
           onView(withText(env)).perform(click());
     }
}

В зависимости от того, что вы делаете в блоке try, измените исключение блока catch. Я хотел нажать на cancel_button, если он существует, поэтому я изменил его на:

try {
    onView(withId(R.id.cancel_button)).perform(click());
} catch (NoMatchingViewException ignore) {
}
Другие вопросы по тегам