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

bqjvbblv  于 2022-12-26  发布在  其他
关注(0)|答案(3)|浏览(211)

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

Assert.assertTrue("There is no validation error!", driver.findElement(By.id("validationModal")).isDisplayed());

这是可行的。但是当我试图检查这个块中的消息是否显示时,isDisplayed方法总是返回“false”。

driver.findElement(By.id("validationModal")).findElement(By.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')]")).isDisplayed());

它总是失败,我真的不明白为什么,怎么检查,错误信息的文本显示,正确的方式。

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

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

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

3b6akqbq

3b6akqbq1#

看起来你在尝试与一些模态框架交互。
通常,要与模态元素交互,您应该首先更改驱动程序上下文。

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

driver.switchTo().activeElement()

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

driver.switchTo().defaultContent()
jyztefdp

jyztefdp2#

试试这个:

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

fwzugrvs3#

xpath中有错误。
错误字符串为:

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

右边是:

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

相关问题