假设我有以下HTML5片段:
<form method="get" action="logginValidation.php">
<input type="text" required="" name="username">
<button class="btn" type="submit">Se connecter</button>
</form>
使用Selenium,我将该字段留空并按下按钮。 该表单未按照我的预期进行验证,但如何验证此字段是否无效以及是否存在与此字段相关联的消息。
现在有一件事我没有调查过,我正在使用Twitter Bootstrap加载JavaScript库。我必须仔细检查这些图书馆是否没有对我进行欺骗,而且验证确实来自Firefox浏览器。
答案 0 :(得分:1)
来自Selenium文档:
目前,css选择器定位器支持所有css1,css2和css3 除了css3中的命名空间之外的选择器,一些伪类(:nth-of-type, :nth-last-of-type,:first-of-type,:last-of-type,:only-of-type, :visited,:hover,:active,:focus,:indeterminate)和pseudo elements(:: first-line,:: first-letter,:: selection,:: before, ::后)。
这意味着:required,:invalid和:valid不是可以选择与之交互的伪元素。
我通过对下一页上的文本执行VerifyNotText来解决此限制。不理想,但工作。
答案 1 :(得分:0)
目前,我正在使用硒测试来覆盖公司内部项目(如员工管理系统)。所以表格上有很多强制性的输入。如果有空 - 那么整个表格都会得到验证。并且输入附近的文本标签变为(变为)红色并出现适当的验证器消息。 所以我检查验证器正确工作的方法非常简单: - 我写了get color text方法来获取输入附近标签的颜色(如果它是红色的,那么验证器已经提交了表单)
public String jsGetColor(String css){
JavascriptExecutor js = (JavascriptExecutor) driver;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("var x=$(\'"+css+"\');");
stringBuilder.append("return x.css('color')");
String res= (String) js.executeScript(stringBuilder.toString());
return res;
}
// the way i use this method:
String defaultTimeOffLabelColor=(String)jsGetColor(propertyKeysLoader("rms.home.timeoffsportlet.addnewtimeoff.typetimeofflabel"));
driverClickByCssSelector("rms.home.timeoffsportlet.addnewtimeoff.submitbutton");
String validationTimeOffLabelColor=(String)jsGetColor(propertyKeysLoader("rms.home.timeoffsportlet.addnewtimeoff.typetimeofflabel"));
//verifying validation works properly using Assert mechanism
Assert.assertFalse("validation is invalid", validationTimeOffLabelColor.equals(defaultTimeOffLabelColor));
另外我应该补充一点,如果验证器工作,则会出现错误消息。因此,您可以找到此消息的定位器并比较适当的文本。 在其他情况下验证器没有工作时,例如提交表单验证者的消息样式将类似于“display:none”。因此,要了解一切正常,您只需检查是否有可见的消息:
driver.findElement(By.cssSelector(...blabla...)).isDisplayed()
最后一点。如果您想验证验证者的消息。
public void addNewTimeOffValidatorsMessagesCheck(String expectedValidationMsg) {
Assert.assertTrue(driver.findElement(By.cssSelector(propertyKeysLoader("rms.home.timeoffsportlet.addnewtimeoff.validationmessage"))).getText().trim().equals(expectedValidationMsg));
}
addNewTimeOffValidatorsMessagesCheck("Timeoff type was not selected!");
希望现在对你来说变得更加清晰了)
答案 2 :(得分:0)
我认为可以通过检查元素是否具有“必需”属性来测试。在HTML中。 示例代码如下: - usernameField.getAttribute(&#34;需&#34)
如果它不为null,那么我们可以确定验证是触发的。