如何测试是否为Selenium的必填字段触发了HTML5验证?

时间:2012-09-20 20:59:54

标签: html5 selenium validation

假设我有以下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浏览器。

3 个答案:

答案 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,那么我们可以确定验证是触发的。