Как использовать эспрессо-мэтчер в качестве условия для заявления 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) {
}