【发布时间】:2015-12-15 22:56:19
【问题描述】:
我正在使用 Selenium 来检查用户发送带有空字段的表单时是否显示错误消息。错误消息块一直附加到 DOM,但是当没有错误时,它会显示“display: none;”样式属性。因此,当我按下“保存”按钮时,我会检查此块是否以这种方式可见:
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());
它总是失败。而且我真的不明白为什么以及如何检查,错误消息的文本以正确的方式显示。
更新: 我找到了问题的根源。这个字符串不是在“validationModal”块内找到元素,而是在标签内找到,其中包含我们必须找到的文本。
driver.findElement(By.id("validationModal")).findElement(By.tagName("ul"))
.findElement(By.xpath("//*[contains(text(),'Empty app name field')]")).isDisplayed()
但我还是不明白为什么会这样,因为我指定了应该搜索的元素。
【问题讨论】:
-
你能分享你的html吗?
-
我不确定,但是查看我发现的页面代码,错误的内容并不是我想的那样,所以我猜这是问题的根源,因为附加了内容使用脚本动态地。