Java isDisplayed始终为特定元素返回false

Java isDisplayed始终为特定元素返回false,java,selenium,Java,Selenium,我使用Selenium检查当用户发送带有空字段的表单时是否显示错误消息。错误消息块始终附加到DOM,但当没有错误时,它具有“display:none;”样式属性。因此,当我按下“保存”按钮时,我会检查此块是否以这种方式可见: Assert.assertTrue(“没有验证错误!”,driver.findElement(By.id(“validationModal”)).isDisplayed()); 这是有效的。但当我试图检查此块中的消息是否显示时,isDisplayed方法总是返回“fals

我使用Selenium检查当用户发送带有空字段的表单时是否显示错误消息。错误消息块始终附加到DOM,但当没有错误时,它具有“display:none;”样式属性。因此,当我按下“保存”按钮时,我会检查此块是否以这种方式可见:

Assert.assertTrue(“没有验证错误!”,driver.findElement(By.id(“validationModal”)).isDisplayed());
这是有效的。但当我试图检查此块中的消息是否显示时,isDisplayed方法总是返回“false”。当我仅使用此选项时:

driver.findElement(按.id(“validationModal”)).findElement(按.tagName(“ul”))
.findElement(By.xpath(“/*[contains(text(),'Empty app name field')]”);
它运行得很好,但它是错误的,因为当文本不可见,但在页面代码中时,它不会引发异常。如果我这样写:

Assert.assertTrue(driver.findElement(By.id(“validationModal”))).findElement(By.tagName(“ul”))
.findElement(By.xpath(“/*[contains(text(),'Empty app name field')]”);
它总是失败。我真的不明白为什么以及如何检查,错误信息的文本是以正确的方式显示的


UPD: 我找到了问题的根源。这个字符串在“validationModal”块中找不到元素,而是在包含我们必须找到的文本的标记中

driver.findElement(按.id(“validationModal”)).findElement(按.tagName(“ul”))
.findElement(By.xpath(“/*[contains(text(),'Empty app name field')]”)

但我仍然不明白为什么会发生这种情况,因为我指定了应该在其中搜索的元素。

似乎您正在尝试与某个模态框架进行交互

通常,要与模态元素交互,您应该首先更改驱动程序上下文

driver.switchTo().frame("ModelFrameTitle");

查找或检查元素,然后返回主框架

driver.switchTo().defaultContent()

似乎您正在尝试与某个模态框架进行交互

通常,要与模态元素交互,您应该首先更改驱动程序上下文

driver.switchTo().frame("ModelFrameTitle");

查找或检查元素,然后返回主框架

driver.switchTo().defaultContent()
试试这个:

 Assert.assertTrue("Element is not displayed",driver.findElement(By.xpath("//*[contains(text(),'Empty app name field')]")).isDisplayed());
试试这个:

 Assert.assertTrue("Element is not displayed",driver.findElement(By.xpath("//*[contains(text(),'Empty app name field')]")).isDisplayed());

xpath中存在错误

错误的字符串是:

findElement(By.xpath("//*[contains(text(),'Empty app name field')]"))
对的是:


findElement(By.xpath(//li[contains(text(),'Empty app name field')])

xpath中出现错误

错误的字符串是:

findElement(By.xpath("//*[contains(text(),'Empty app name field')]"))
对的是:


findElement(By.xpath(//li[contains(text(),'Empty app name field'))

你能分享你的html吗?我不确定,但看看我发现的页面代码,错误的内容并不像我想的那样是静态的,所以我想这就是问题的根源,因为使用脚本动态附加内容。您可以共享您的html吗?我不确定,但查看我发现的页面代码,错误内容不是静态的,正如我所想,因此我猜这是问题的根源,因为使用脚本动态附加内容。