在这篇文章中,我们将探讨 Selenium 4 中不同类型的等待,包括新的改进和使用的最佳实践。
Selenium 4 中的等待类型
Selenium 4 提供了三种主要的等待类型:
让我们深入了解每一个!
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
在此示例中,Selenium 在抛出 NoSuchElementException 之前将等待长达 10 秒的元素出现。等待适用于整个会话期间的每个元素查找。
优点:
易于实施。
适合简单的项目。
缺点:
即使不需要,也会减慢测试执行速度,因为它在全局范围内应用等待。
与其他等待类型一起使用时可能会导致不可预测的测试行为。
代码示例:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(15)); WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("example")));
在此示例中,WebDriver 将等待最多 15 秒,直到元素变得可见。如果该元素出现在 15 秒之前,则等待提前结束。
常见显式等待条件:
visibilityOfElementLocated()
elementToBeClickable()
enceOfElementLocated()
AlertIsPresent()
优点:
高度可定制,比隐式等待更高效。
仅在需要特定条件时等待。
缺点:
需要更多代码,这会增加复杂性。
在大型项目中,管理多个显式等待可能会变得很棘手。
Wait<WebDriver> fluentWait = new FluentWait<>(driver) .withTimeout(Duration.ofSeconds(20)) .pollingEvery(Duration.ofMillis(500)) .ignoring(NoSuchElementException.class); WebElement element = fluentWait.until(driver -> driver.findElement(By.id("example")));
这里,WebDriver 将每 500 毫秒检查一次元素,并在超时前等待最多 20 秒。在此期间它也会忽略 NoSuchElementException。
优点:
为如何处理等待提供更大的灵活性和控制。
允许自定义轮询间隔和异常处理。
缺点:
设置和理解可能会更复杂。
过度定制可能会导致代码混乱且难以维护。
Selenium 4 Waits 的改进
Selenium 4 引入了一些改进,特别是在如何管理等待方面:
更好的语法:Selenium 4 使用 Duration 代替之前的 TimeUnit,使其更加直观和可读。
相对定位器:您现在可以等待与其他元素相关的元素(例如,左侧、附近等)。
增强的 WebDriverWait:Selenium 4 中的 WebDriverWait 类更加精简,更易于使用现代语法。
在 Selenium 4 中使用等待的最佳实践
使用显式等待而不是隐式等待:为了更好的控制和性能,更喜欢显式等待,尤其是在复杂的场景中。
避免混合隐式和显式等待:使用两者可能会导致不可预测的行为并增加等待时间。
设置合理的超时值:避免设置不必要的长时间等待。分析应用程序的行为以确定适当的等待时间。
对动态元素使用流畅等待:如果元素高度动态,请考虑使用具有轮询间隔的流畅等待来减少不必要的等待。
结论
在 Selenium 4 中有效处理等待对于编写稳定可靠的自动化测试至关重要。了解何时以及如何使用隐式、显式和流畅的等待可以极大地提高测试套件的稳健性。随着 Selenium 4 的改进,您拥有更强大的工具来管理同步问题。
以上是了解 Selenium 4 中的等待的详细内容。更多信息请关注PHP中文网其他相关文章!