selenium - 与 Implicitwait 相比,我们是否需要为 ExplicitWait 声明更少的时间
问题描述
在某处我读到混合隐式和显式会产生不可预测的结果。这是真的吗?
资料来源:https ://www.seleniumhq.org/docs/04_webdriver_advanced.jsp#advanceduserinteractions
警告:不要混合隐式和显式等待!这样做会导致不可预测的等待时间。例如,设置 10 秒的隐式等待和 15 秒的显式等待可能会导致 20 秒后发生超时。
在那种情况下,我们是否需要给更少的时间/等于隐式等待???
解决方案
老实说,有了测试自动化框架的良好实现,您就不需要implicitWait
. 您应该始终明确地等待条件。
隐式等待可能会导致您的测试运行速度变慢。自动化测试套件应始终尽可能快地运行以向团队提供反馈。
但是,如果您坚持使用它,您可以简单地创建某种方法/类,在其中关闭隐式等待、执行显式等待并恢复隐式等待值。
像这样的东西:
public class Wait {
private static final int IMPLICIT_WAIT_TIME = 10; //store your default implicit wait here or use .properties file
private WebDriver driver;
private int timeout = 10;
private List<Class<? extends Throwable>> exceptions = new ArrayList<>();
public Wait(WebDriver driver) {
this.driver = driver;
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS); //turn off implicit wait
}
public Wait setTimeout(int seconds) {
this.timeout = seconds;
return this;
}
@SafeVarargs
public final Wait ignoring(Class<? extends Throwable>... exceptions) {
this.exceptions.addAll(Arrays.asList(exceptions));
return this;
}
public void until(ExpectedCondition... expectedConditions) {
WebDriverWait wait = new WebDriverWait(driver, timeout);
if (exceptions.size() > 0) {
wait.ignoreAll(exceptions);
}
wait.until(ExpectedConditions.and(expectedConditions));
driver.manage().timeouts().implicitlyWait(IMPLICIT_WAIT_TIME, TimeUnit.SECONDS); //restore implicit wait
}
}
推荐阅读
- python - Python中的递归排列
- reactjs - React:如何覆盖状态
- python - 如何在无头模式下选择窗口?
- google-cloud-platform - 谷歌云构建触发静态站点:“ascii”编解码器无法编码字符
- javascript - 在 SuiteScript 中创建实体组
- javascript - IndexedDB:使用方法 add 多次执行函数 - 没有新的 DB 条目
- android - 在 Android 中开源基于语音的 Indoor Turn-by-turn 导航
- c - X11/Xlib:虚拟键盘输入和键盘映射同步问题
- javascript - 多个输入循环减慢 each() 和 ajax()
- c++ - 根据 C++17 标准,为什么反向迭代器不是正式的迭代器类别?