Selenide调用waitUntil(condition,timeout).isDisplayed()抛出错误而非返回布尔值问题
问题根源
Selenide 内置的 waitUntil 方法默认逻辑为:指定时间内元素未满足预期条件时,直接抛出UIAssertionError断言异常终止流程,不会返回布尔值。你之前第二个校验方法单独运行无异常,只是因为对应场景下按钮总能在超时前满足启用条件,没有触发异常抛出逻辑,本质上原有写法的两个工具方法都不符合按需返回布尔值的需求。
解决方法
修改工具类方法,捕获Selenide抛出的断言异常和元素未找到异常,条件不满足时直接返回false即可,改造后代码如下:
import com.codeborne.selenide.ex.UIAssertionError; import org.openqa.selenium.NoSuchElementException; public static boolean waitUntilAppears(By locator, long timeForWait) { try { $(locator).waitUntil(Condition.appear, timeForWait); // 满足可见条件直接返回true return true; } catch (UIAssertionError | NoSuchElementException e) { // 超时/元素不存在,返回false return false; } } public static boolean waitUntilEnabled(By locator, long timeForWait) { try { $(locator).waitUntil(Condition.enabled, timeForWait); return true; } catch (UIAssertionError | NoSuchElementException e) { return false; } }
逻辑验证
改造后你的原有业务判断逻辑可以正常执行:
- 第一个元素在5秒内可见:第一个条件返回true,继续校验按钮是否可用,按钮不可用则返回false
- 第一个元素5秒内未出现:第一个条件返回false,直接跳过if判断,继续执行后续逻辑,完全符合你的业务需求。
内容的提问来源于stack exchange,提问作者Kirill
相关产品推荐
相关产品推荐

