Selenium webdriver 轮询时间

Posted

技术标签:

【中文标题】Selenium webdriver 轮询时间【英文标题】:Selenium webdriver polling time 【发布时间】:2017-06-20 06:39:27 【问题描述】:

我期待有关 Selenium 中的 selenium webdriver 轮询时间的正确解释。

据我所知,下面的等待命令将等待 40 秒,直到特定元素可点击

  public void CreateSalesOrder()
        WebDriverWait wait = new WebDriverWait(driver, 40);
        wait.until(ExpectedConditions.elementToBeClickable(btnNewSalesOrser));
            btnNewSalesOrser.click(); 
    

在第二个代码 sn-p 中,我添加了“轮询”命令。

   public void CreateSalesOrder()
        WebDriverWait wait = new WebDriverWait(driver, 40);
        wait.pollingEvery(2, TimeUnit.SECONDS);
        wait.until(ExpectedConditions.elementToBeClickable(btnNewSalesOrser));
        btnNewSalesOrser.click();
    

轮询时间有什么用?

【问题讨论】:

【参考方案1】:

如果我们没有提到任何轮询时间,selenium 将默认轮询时间为 500 毫秒。即,脚本将每 500 毫秒检查一次网页中 web 元素的异常情况。您的第一个代码 sn-p 可用于此。

我们使用 pollingEvery 来覆盖默认的轮询时间。在下面的示例中(您的第二个代码 sn-p),脚本每 2 秒而不是 500 毫秒检查一次预期条件。

public void CreateSalesOrder()

    WebDriverWait wait = new WebDriverWait(driver, 40);
    wait.pollingEvery(2, TimeUnit.SECONDS);
    wait.until(ExpectedConditions.elementToBeClickable(btnNewSalesOrser));
    btnNewSalesOrser.click();

这种轮询频率实际上可能有助于减少 CPU 过载。 有关更多信息,请参阅此 javadoc pollingEvery。

希望这对您有所帮助。谢谢。

【讨论】:

谢谢老兄。答案真的很有帮助 更新你的答案。这种方法实际上已被弃用。执行此操作的新方法是使用:wait.pollingEvery(Duration.ofSeconds(2))【参考方案2】:

使用WebDriverWait wait = new WebDriverWait(driver, 40);,驱动程序最多会等待40秒,直到条件满足。

使用 wait.pollingEvery(2, TimeUnit.SECONDS); 指定驱动程序将每 2 秒进行检查(以查看条件是否满足),直到条件满足。


总而言之,这意味着您的司机将每 2 秒进行一次检查,持续 40 秒


您还可以在Constructor 中将轮询间隔指定为快捷方式:

WebDriverWait wait = new WebDriverWait(driver, 40, TimeUnit.SECONDS.toMillis(2));

【讨论】:

谢谢老兄。答案真的很有帮助【参考方案3】:

为了理解解释,你必须了解显式等待的轮询时间。

WebDriverWait 等待 = new WebDriverWait(driver, 40);

这会在抛出 TimeoutException 之前等待最多 40 秒,除非它找到要在 40 秒内返回的元素。 WebDriverWait 默认每 500 毫秒调用一次 ExpectedCondition,直到它成功返回,因此 ExplicitWait 的默认轮询时间为 500 毫秒。

wait.pollingEvery(2, TimeUnit.SECONDS);

在这种情况下,轮询时间为 2 秒,即每 500 毫秒后不会检查预期条件,应在 2 秒后检查,直到特定元素可点击。

【讨论】:

以上是关于Selenium webdriver 轮询时间的主要内容,如果未能解决你的问题,请参考以下文章

Selenium二次封装-Python版本

Selenium WebDriver如何使滚动条滚动到最元素位置

selenium测试(Java)-- 隐式等待

selenium

有没有更简洁的方法来编写这个轮询循环?

TestNG,Selenium 如何在多个类之间共享对象