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

2023-12-25

两者之间的确切区别是什么implicitwait(), explicitwait() and fluentwait()?您能举例说明吗?


我已经发布关于此的博客文章 https://medium.com/@austenjt/difference-betwen-implicit-explicit-and-fluentwait-in-selenium-d36e724d0174,我想我提供了一些其他答案遗漏的细节。

隐式等待:在隐式等待期间,如果 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 定义显式等待,因为这将尝试一次又一次地查找元素,直到找到它或直到最终计时器耗尽。 AWebDriverWait 是 Fl​​uentWait 的一种由于WebDriverWait扩展了FluentWait并具有FluentWait类的所有功能,例如能够调整DOM轮询间隔,忽略异常。

FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver)
            .withTimeout(timeoutSeconds, TimeUnit.SECONDS)
            .pollingEvery(500, TimeUnit.MILLISECONDS)
            .ignoring(NoSuchElementException.class);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

隐式、显式和流利等待之间的区别 的相关文章