Selenium:为什么显式等待优先于隐式等待?

问题描述 投票:0回答:2

Selenium documentation page on Waits说:

默认情况下,隐式等待元素出现是禁用的,需要在每个会话中手动启用。

由此,我推断出显式等待通常比隐式等待更可取。我想知道为什么吗?

selenium selenium-webdriver wait
2个回答
1
投票

隐式等待会持续轮询DOM,以查找特定条件,这意味着会话中所有呼叫的通用“最多”时间限制。另一方面,显式等待为特定命令指定“最大”限制。正如Selenium文档所述,不建议将隐式和显式等待混合使用(有关更多信息,请参见Combining implicit wait and explicit wait together results in unexpected wait times)。如果在任何地方使用隐式状态,则必须找到“最大”限制的上限。有时,您可能希望为特定元素设置一个下限(您可能正在测试页面打开时间),而不是其他元素。


0
投票

隐式等待是DOM中元素查找的最长时间。

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

意味着WebElement element = driver.findElement(By.id("someId"))将查找ID为"someId" 直到 10秒的元素,并在DOM中存在该元素后立即返回。

明确等待使用ExpectedConditions,这意味着您可以等待元素处于特定状态

WebDriverWait wait = new WebDriverWait(WebDriverRefrence, 10);
WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("someId")));

类似,等待元素在DOM中存在,但是有更多选项,例如

WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("someId")));

这将等待该元素可见。它还为您提供了等待与定位元素无关的其他条件的选项,例如等待url更改或提醒出现。

wait.until(ExpectedConditions.urlToBe("someUrl"));

wait.until(ExpectedConditions.alertIsPresent());
© www.soinside.com 2019 - 2024. All rights reserved.