在某处我读到混合隐式和显式会产生不可预测的结果。这是真的吗?
资料来源:https ://www.seleniumhq.org/docs/04_webdriver_advanced.jsp#advanceduserinteractions
警告:不要混合隐式和显式等待!这样做会导致不可预测的等待时间。例如,设置 10 秒的隐式等待和 15 秒的显式等待可能会导致 20 秒后发生超时。
在那种情况下,我们是否需要给更少的时间/等于隐式等待???
在某处我读到混合隐式和显式会产生不可预测的结果。这是真的吗?
资料来源: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
}
}