Selenium documentation page on Waits说:
默认情况下,隐式等待元素出现是禁用的,需要在每个会话中手动启用。
由此我推断出显式等待通常是首选。我想知道为什么显式等待正式优于隐式等待?
答案 0 :(得分:2)
隐式等待会持续轮询DOM以查找特定条件,这意味着会话中所有呼叫的通用“最多”时间限制。另一方面,显式等待为特定命令指定“最大”限制。
如Selenium文档所述,不建议混合使用隐式等待和显式等待(有关更多信息,请参见Combining implicit wait and explicit wait together results in unexpected wait times)。
如果在任何地方使用隐式状态,则必须找到“最大”限制的上限。有时,您可能希望为特定元素设置一个下限(您可能正在测试页面打开时间),而不是其他元素。
答案 1 :(得分: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());