如何在隐式等待中将秒设置为变量

问题描述

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 不会有任何影响。

看看official doc says

,

如果您正在寻找一种可以根据传递的持续时间设置 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);
}

但是不建议使用隐式等待,应该使用显式等待。
此外,如果您仍然想隐式定义等待,它通常为每个驱动程序实例定义一次,即在整个测试生命周期内。