我对测试还很陌生,试图更好地了解到底发生了什么。我发现当 css 选择器元素附加了 waitUntilCanInteract 或 waitUntilDisplayed 时,我们的一些测试代码失败,即使当我进行 chrome 检查时,该元素显示在浏览器中。将它们更改为 waitUntilExists 会使它们达到一个通过点,所以我想知道究竟发生了什么造成这种情况?
最佳答案
正是Selenium处理元素的三种独特状态。
html 中存在元素 :可以通过 ExpectedCondition 检测元素的此状态
presenceOfElementLocated()
其中期望是检查元素是否存在在 DOM 中一个页面的。这并不一定意味着该元素可见。示例:
WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("css_of_element")));
html 中元素的可见性 :可以通过 ExpectedCondition 检测元素的此状态
visibilityOfElementLocated()
其中期望是检查元素是否存在在 DOM 中页面的并且可见。可见性意味着该元素不仅会显示,而且高度和宽度都大于0。示例:
WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("css_of_element")));
可点击的元素:可以通过ExpectedCondition检测元素的这种状态
elementToBeClickable()
期望是检查元素是否可见并且启用,以便您可以单击它。示例:
WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("css_of_element")));
You can find a detailed discussion in Selenium: Check for the presence of element
关于java - 为什么有些元素存在但不可交互/显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57693634/