gpt4 book ai didi

selenium - 隐式、显式和流利等待之间的区别

转载 作者:行者123 更新时间:2023-12-02 19:14:42 26 4
gpt4 key购买 nike

隐式 wait()、显式 wait() 和 Fluentwait() 之间的具体区别是什么?能举例说明吗?

最佳答案

我发布了a blog article about this ,我想我提供了一些其他答案忽略的细节。

隐式等待:在隐式等待期间,如果 Web 驱动程序由于其可用性而无法立即找到它,WebDriver 将定期轮询 DOM(以 0.5 秒的间隔或取决于在驱动程序浏览器实现上),直到达到默认的隐式最大等待时间。一旦指定的隐式等待最长时间结束,它将尝试再次搜索上次的元素,然后抛出 WebDriverException(例如 NoSuchElementException)。默认设置为 0,这意味着对 driver.findElement 的调用不需要轮询 DOM,如果该元素确实存在,它将在 0-999 毫秒内立即返回,否则将抛出如果同一时间段内不存在,则出现 NoSuchElementException。要覆盖默认的最长时间,请执行以下操作:

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

显式等待:在某些情况下,特定元素的加载时间可能会超过一秒或更长时间。在这种情况下,您绝对不想设置巨大的隐式等待时间,因为如果您这样做,那么您的浏览器将为每个驱动程序调用等待相同的最长时间来查找元素。因此,您可能会注意到测试性能略有下降。

为了避免这种情况,您可以简单地仅在所需元素上定义单独的等待时间。通过遵循此规则,浏览器的隐式等待时间对于每个驱动程序调用来查找元素来说会很短,而对于一个特定元素(根据具体情况而定)可能会很长。

显式等待总是首先定义 FluentWait,例如 WebDriverWait 对象,然后通常使用预期条件来解决等待。

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id(“aId”)));

流畅等待:假设您有一个元素,有时只需要 1 秒就出现,有时需要几分钟才能出现。在这种情况下,最好使用 FluentWait 定义显式等待,因为这将尝试一次又一次地查找元素,直到找到它或直到最终计时器耗尽。 WebDriverWait 是 Fl​​uentWait 的一种类型,因为 WebDriverWait 扩展了 FluentWait 并具有 FluentWait 类的所有功能,例如能够调整 DOM 轮询间隔、忽略异常。

FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(timeoutSeconds, TimeUnit.SECONDS)
.pollingEvery(500, TimeUnit.MILLISECONDS)
.ignoring(NoSuchElementException.class);

关于selenium - 隐式、显式和流利等待之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28658418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com