我相信 narko 是对的,这里有一些我认为可以证明的代码。
By hiddenLocator = By.id("csi");
FirefoxDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("http://www.google.com");
WebElement hiddenEle = driver.findElement(hiddenLocator);
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.presenceOfElementLocated(hiddenLocator));
System.out.println("done");
我去 google.com 发现了一个隐藏的元素
<textarea name="csi" id="csi" style="display:none"></textarea>
我将隐式等待设置为 30 秒,设置 WebDriverWait 为 30 秒,然后等待元素出现。来自the presenceOfElementLocated() source
检查元素是否存在于页面的 DOM 上的期望。这并不一定意味着该元素是可见的。
如果隐式等待是在等待除了 DOM 中元素的存在以外的任何内容,它会等待 30 秒...但在浏览器中加载页面后它就完成了。
我进行了一些研究,以更好地了解这些不同功能的作用以及它们之间的真正不同之处。这是我发现的...
WebElement 有三个方法与这个问题相关:isDisplayed()、isEnabled() 和 isSelected()。来自文档...
isDisplayed() 这个元素是否显示?这种方法避免了
必须解析元素的“样式”属性的问题。
isEnabled() 元素当前是否启用?这将
通常对除禁用输入元素之外的所有内容返回 true。
isSelected() 判断该元素是否被选中。
ExpectedConditions 也通过几种方法在这里发挥作用。我将简单地看一下elementToBeClickable()。来自文档...
elementToBeClickable 检查元素的期望是可见的
并启用,以便您可以单击它。
如果你看the source,描述是准确的。如果您想了解更多信息,可以查看其他方法的来源等,但我认为这足以回答您的问题。