问题描述
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
是否可以将“10”设置为变量,以便动态更改?如果可能怎么办?谢谢!
解决方法
隐式等待是告诉 WebDriver 轮询某个特定的 DOM 尝试查找一个或多个元素(如果它们是)的时间 不是立即可用。默认设置为 0,表示禁用。 一旦设置,隐式等待就设置为会话的生命周期。
它设置为 webdriver 会话的生命周期。
回到您的问题是否可以将“10”设置为变量?
是的,这是可能的。
int a = 10;
driver.manage().timeouts().implicitlyWait(a,TimeUnit.SECONDS);
如果您有这样的静态驱动程序引用,请将这一行包装在一个方法中并传递 int args:
public void wdImplicitWait(int duration){
driver.manage().timeouts().implicitlyWait(duration,TimeUnit.SECONDS);
}
这样称呼它:
wdImplicitWait(5);
some web element interaction like click or sendkeys here
wdImplicitWait(3)
如果您的驱动程序不是静态的,请确保传递驱动程序实例引用
public void wdImplicitWait(int duration,WebDriver driver){
driver.manage().timeouts().implicitlyWait(duration,TimeUnit.SECONDS);
}
但不会有任何影响,因为它是针对特定执行在 webdriver
的整个生命周期内设置的。
所以一次又一次地调用 implicitlyWait
不会有任何影响。
如果您正在寻找一种可以根据传递的持续时间设置 implicitlyWait
的方法,可以按如下方式完成:
public void setImplicitlyWait(Webdriver driver,int duration){
driver.manage().timeouts().implicitlyWait(duration,TimeUnit.SECONDS);
}
根据您的实际项目结构,您可能只需要传递持续时间,这样做会像这样:
public void setImplicitlyWait(int duration){
driver.manage().timeouts().implicitlyWait(duration,TimeUnit.SECONDS);
}
但是不建议使用隐式等待,应该使用显式等待。
此外,如果您仍然想隐式定义等待,它通常为每个驱动程序实例定义一次,即在整个测试生命周期内。