Java 对于某些元素,isDisplayed()方法始终返回true

Java 对于某些元素,isDisplayed()方法始终返回true,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我正在使用Selenium测试输入字段为空时错误消息的外观。错误消息设计为输入元素的标签。 当消息不可见时,它具有属性“display:none;” 当我通过文本找到消息并调用isDisplayed()方法时,它总是返回true,即使消息是不可见的。我在Java上编写测试,因此没有isVisible()消息 我尝试过方法getAttribute(“style”),但它返回空字符串。 方法getCssValue(“display”)返回“block”,即使在页面上它的值为“none” 调用clic

我正在使用Selenium测试输入字段为空时错误消息的外观。错误消息设计为输入元素的标签。 当消息不可见时,它具有属性“display:none;”

当我通过文本找到消息并调用isDisplayed()方法时,它总是返回true,即使消息是不可见的。我在Java上编写测试,因此没有isVisible()消息

我尝试过方法getAttribute(“style”),但它返回空字符串。 方法getCssValue(“display”)返回“block”,即使在页面上它的值为“none”

调用click()方法后,我期望ElementNotVisibleException出现,但什么也没发生

有什么想法吗?变通办法

以下是HTML的示例:


此处有错误文本。


尝试使用WebDriverWait()查找WebElement,您可以等待该元素的可见性:

/**
 * 
 * Get a Web Element using WebDriverWait()
 * 
 */

public WebElement getInputBox() throws TimeoutException {

    WebElement webElement = null;
    WebDriverWait driverWait = new WebDriverWait(5);

    // find an element using a By selector

    driverWait.until(
            ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#input")));

    webElement = driver.findElement(By.cssSelector("#input"));

    return webElement;
}

您只是找到了错误的元素。尝试使用css或xpath selectoorI查找您的元素我猜您的选择器没有选择正确的元素(可能是与选择器匹配的早期元素),请共享复制此问题的确切HTML和代码,并解释测试此问题的浏览器。找到的元素是正确的。页面上只有一个元素包含该文本。我使用Chrome进行测试(可以在firefox/ie上运行)。@user2796068我相信它是错误的元素,因为你说它有
display:none在样式属性中,当您尝试使用webdriver返回该属性时,会得到一个空字符串