测试中的条件逻辑是不可取的。考虑到这一点,Espresso的API旨在引导测试作者远离它(通过明确显示测试动作和断言)。
话虽如此,您仍然可以通过实现自己的ViewAction并将isDisplayed检查(在perform方法内部)捕获到AtomicBoolean中来实现上述目的。
另一个不太优雅的选项-捕获失败的检查引发的异常:
try { onView(withText("my button")).check(matches(isDisplayed())); //view is displayed logic } catch (NoMatchingViewException e) { //view not displayed logic }Kotlin版本,具有扩展功能:
fun ViewInteraction.isDisplayed(): Boolean { try { check(matches(ViewMatchers.isDisplayed())) return true } catch (e: NoMatchingViewException) { return false } } if(onView(withText("my button")).isDisplayed()) { //view is displayed logic } else { //view not displayed logic }


