java - 为什么有些元素存在但不可交互/显示?
问题描述
我对测试很陌生,试图更好地了解到底发生了什么。我发现当 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")));
Element to be clickable:可以通过ExpectedCondition
elementToBeClickable()
检测元素的这种状态,期望检查元素是否可见并启用,以便您可以单击它。示例:
WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("css_of_element")));
您可以在 Selenium 中找到详细讨论:检查元素的存在
推荐阅读
- c - “如何修复 C 中的‘格式字符串不是字符串文字(可能不安全)’错误”
- jupyter-notebook - 使用 ipywidgets 交互时表格闪烁
- php - 无法将回显输出写入文本文件
- c - 如何在循环的最后停止换行?
- javascript - React 和 Vue Google 地图 API 在地图上设置新方向之前删除渲染方向
- sql - 从加入自己中选择第一行
- html - 在特定页面上插入不同块的页面的 Vue App 布局
- php - $Factory 未定义变量
- javascript - 如何使用reactjs在json中设置数组名称
- python - 为什么 torch.gt 函数将 requires_grad 变为 False?