如何使用 espresso 匹配器作为 If else 语句的条件?

How to use espresso matcher as a condition for If else statement?

我的代码片段如下所示:

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

这意味着您不能使用 espresso View Matchers 作为 if..else 的条件。有没有其他方法可以实现 if..else 语句?

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) {
}