【问题标题】:Change implicitlyWait dynamically隐式更改动态等待
【发布时间】:2020-06-11 22:31:49
【问题描述】:

请评论我在 YouTube 上找到的以下代码。它检查当时是否存在元素

public boolean isElementPresent(By locator)
    {
        driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
        List<WebElement> list = driver.findElements(locator);
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        if (list.size() == 0)
            return false;
        else
            return list.get(0).isDisplayed();
    }

它在方法中动态改变implicitlyWait。在所有 Selenium 资源中,总是声明 implicitWait 在测试类中只能设置一次。上面的代码在某种程度上类似于显式等待,因为它适应不同的情况。 您对此代码有何看法?

在 Selenium 文档中说 一旦设置,隐式等待就会设置为会话的生命周期。 但是,在上面的代码中,我们将implicitlyWait 更改了两次。 文档有错吗?

【问题讨论】:

    标签: selenium selenium-webdriver webdriver implicitwait


    【解决方案1】:

    隐式等待

    Implicit wait 是通知WebDriver 实例在尝试查找一个或多个元素时轮询HTML DOM,如果它们在DOM Tree 中没有立即可用。


    一旦设置,隐式等待设置为会话的生命周期

    是的,你没看错。这是因为implicit waits 是在WebDriver 系统的远程 端实现的。这意味着它们被烘焙GeckoDriverChromeDriverIEDriverServer >WebDriver 安装到匿名 Firefox/Chrome 配置文件和 Java 远程 WebDriver 服务器的变体。但是,您始终可以重新配置 implicitlyWait

    您可以在Using implicit wait in selenium找到详细讨论


    这个用例

    从语法上讲,您的代码完美无缺。理想情况下,您应该在寻找所需元素的同时设置implicitlyWait。一旦元素被识别并存储在 list 中,您可以将 implicitlyWait 重置回 0。因此,您的代码块将是:

    public boolean isElementPresent(By locator)
    {
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        List<WebElement> list = driver.findElements(locator);
        driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
        if (list.size() == 0)
            return false;
        else
            return list.get(0).isDisplayed();
    }
    

    【讨论】:

      猜你喜欢
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      相关资源
      最近更新 更多