【问题标题】:How to set seconds as variable in Implicit Wait如何在隐式等待中将秒设置为变量
【发布时间】:2021-08-16 16:04:46
【问题描述】:

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

是否可以将 '10' 设置为变量,以便动态更改?如果可能怎么办?谢谢!

【问题讨论】:

    标签: java selenium groovy keyword katalon


    【解决方案1】:

    隐式等待是告诉 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

    【讨论】:

    • 嗨@cruisepandey 你这样称呼它是什么意思?我尝试将它包装在一个方法中,但是当我调用我的 keyword 并将 value 更改为 180 时,它没有任何效果。谢谢
    • 能分享一下打包后的代码吗?您如何确定它没有等待 180 秒?你有什么错误吗?隐式等待表示无论您设置什么值,都将其设置为驱动程序对象的生命周期,这意味着一旦驱动程序被初始化,直到它关闭或退出。
    • public class ImplicitWait { public static WebDriver driver; int timeInSeconds = 0; @Keyword public void implicitWait(int timeInSeconds) { // Get active window driver = DriverFactory.getWebDriver(); //Specify implicit wait of 2 minutes driver.manage().timeouts().implicitlyWait(timeInSeconds, TimeUnit.SECONDS); } } >这是我的代码,我在我的测试用例中添加了这个作为自定义关键字并将输入值更改为 180 并且没有等待 3 分钟来单击某个按钮。跨度>
    • 一般建议混用显式/隐式等待
    • @vitaliis : 我相信我们不能就此争论,因为这是官方所说的。
    【解决方案2】:

    如果您正在寻找一种方法来设置 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);
    }
    

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

    【讨论】:

    • 感谢您回答@prophet,但每当我尝试在方法上添加(WebDriver driver) 时,我都会收到一条错误消息
    • 嗯,这取决于你的项目结构。您可能应该只传递持续时间。
    • 是的,我尝试只使用(int duration),但它仍然不起作用,我不知道为什么。抱歉,这是我第一次使用katalon。
    • 我从未使用过katalon,但到目前为止,我看到了纯硒问题,所以...“不起作用”是什么意思?
    • 因为它没有等3分钟就进入下一步点击按钮
    猜你喜欢
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 2016-12-28
    • 2021-12-02
    相关资源
    最近更新 更多