首页 > 解决方案 > 为什么有些元素存在但不可交互/显示?

问题描述

我对测试很陌生,试图更好地了解到底发生了什么。我发现当 css 选择器元素附加了 waitUntilCanInteract 或 waitUntilDisplayed 时,我们的一些测试代码失败,即使当我进行 chrome 检查时,该元素显示在浏览器中。将它们更改为 waitUntilExists 会使它们达到一个通过点,所以我想知道究竟是怎么回事造成这种情况?

标签: javaseleniumselenium-webdriverwebdriverwebdriverwait

解决方案


准确地说, 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 中找到详细讨论:检查元素的存在


推荐阅读