如何使用Kaspresso无异常检查授权页面元素是否显示?
在Kaspresso中安全检查元素是否显示的正确方式
你的现有方案存在两个问题:一是误将「按钮是否可用」(isEnabled())当成了「元素是否显示」的判断标准,逻辑不符合需求;二是依赖捕获NullPointerException来判断元素不存在,这种方式不可靠——Kaspresso在找不到元素时通常抛出的是NoMatchingViewException而非NPE,而且其他未知场景也可能触发NPE,导致误判。
以下是两种更稳妥的实现方式:
方案1:使用Kotlin标准库runCatching统一处理异常
利用runCatching包裹Kaspresso的标准检查逻辑,它会捕获执行过程中所有异常,并通过isSuccess返回检查是否成功:
fun isNeedAuth(): Boolean { return runCatching { authButton.check { isDisplayed() } }.isSuccess }
方案2:先判断元素存在,再检查显示状态
如果需要区分「元素存在但不可见」和「元素不存在」两种场景,可以先用exists()判断元素是否存在于视图树中,再检查其显示状态:
fun isNeedAuth(): Boolean { return authButton.exists() && runCatching { authButton.check { isDisplayed() } }.isSuccess }
说明
authButton.check { isDisplayed() }是Kaspresso官方推荐的元素显示状态检查方式,它会在元素不可见时抛出异常exists()是Kaspresso提供的安全方法,返回布尔值,不会抛出异常,用于判断元素是否存在于当前视图层级中runCatching是Kotlin标准库函数,相比手动写try-catch更简洁、可读性更高
内容的提问来源于stack exchange,提问作者Red Cape
相关产品推荐
相关产品推荐

