我使用Selenium检查用户发送带空字段的表单时是否显示错误消息。错误消息块始终附加到DOM,但是当没有错误时,它具有" display:none;"样式属性。所以,当我推动" save"按钮,我检查这个块是否可见:
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()
但是我仍然不明白为什么会这样,因为我指定了应该搜索它的元素。
答案 0 :(得分:0)
您似乎正在尝试与某个模态框架进行交互。
通常,要与模态元素进行交互,您应首先更改驱动程序上下文。
driver.switchTo().frame("ModelFrameTitle");
或
driver.switchTo().activeElement()
查找或检查元素,然后返回主框架
driver.switchTo().defaultContent()
答案 1 :(得分:0)
试试这个:
Assert.assertTrue("Element is not displayed",driver.findElement(By.xpath("//*[contains(text(),'Empty app name field')]")).isDisplayed());
答案 2 :(得分:0)
xpath中有错误。
错误的字符串是:
findElement(By.xpath("//*[contains(text(),'Empty app name field')]"))
正确的是:
findElement(By.xpath("//li[contains(text(),'Empty app name field')]")
)