如何检查是否使用selenium触发了HTML5验证?

时间:2012-02-07 14:35:27

标签: html5 selenium

如果使用Selenium测试我的webapp。 webapp中的所有表单验证都是使用HTML5表单验证完成的。有没有办法断言是否使用Selenium触发了表单/输入验证?

4 个答案:

答案 0 :(得分:16)

像这样的搜索在支持HTML5的浏览器中起作用(使用Java和WebDriver,但也应该可以在其他任何地方使用):

// looks for an element that has been marked as required on a submit attempt
WebElement elem1 = driver.findElement(By.cssSelector("input:required"));
// looks for an element that has been marked as invalid on a submit attempt
WebElement elem2 = driver.findElement(By.cssSelector("input:invalid"));

可用的CSS伪类是:

答案 1 :(得分:3)

您无需测试它,测试HTML5属性是否足够。否则,无论出于何种原因,浏览器都会更改验证的行为方式,您可能需要重新进行测试。

但是,您应该测试HTML5验证不可用时的所有后备验证。确定的用户绕过HTML5验证和JavaScript验证并不困难。

测试HTML5验证属性

要测试它已被使用,请使用assertAttribute

<tr>
    <td>assertAttribute</td>
    <td>id=myFieldId@required</td>
    <td></td>
</tr>

如果您使用的是XML语法required="required",则需要断言值为“required”:

<tr>
    <td>assertAttribute</td>
    <td>id=myFieldId@required</td>
    <td>required</td>
</tr>

测试回退验证

的JavaScript

如果您的HTML5验证阻止您的JavaScript验证返回错误,则在断言HMTL5验证属性存在后,您可以删除HTML5验证属性以测试后备JavaScript验证:

<tr>
    <td>runScript</td>
    <td>document.getElementById('myFieldId').removeAttribute('required')</td>
    <td></td>
</tr>

现在您可以测试JavaScript验证。要删除电子邮件验证,您需要将字段的type属性设置为text

<tr>
    <td>runScript</td>
    <td>document.getElementById('myFieldId').setAttribute('type','text')</td>
    <td></td>
</tr>

测试服务器端验证

即使您使用HTML5验证和JavaScript验证,如果您要提交给服务器,您也需要测试您的服务器验证这些字段。

调用表单的submit()函数将提交表单而不调用任何验证。 Selenium的submit命令执行相同的操作:

<tr>
    <td>submit</td>
    <td>name=myFormName</td>
    <td></td>
</tr>

等待下一页加载后,您可以检查是否存在预期的错误。

答案 2 :(得分:2)

属性validationMessage将返回消息,如果验证失败,将显示该消息:

WebElement username = driver.findElement(By.id("username"));    
String validationMessage = username.getAttribute("validationMessage");

如果元素具有required属性,则浏览器将在提交表单后显示以下消息:

boolean required = Boolean.parseBoolean(username.getAttribute("required"));

您可以检查输入的值是否有效:

boolean valid = (Boolean)((JavascriptExecutor)driver).executeScript("return arguments[0].validity.valid;", username);


:消息文本和验证是可自定义的。如果要测试定制 验证和消息。

此处提供用于自定义验证(Java,TestNG)的测试代码:

Assert.assertTrue(Boolean.parseBoolean(username.getAttribute("required")), "Username is required and message should be showin");
Assert.assertEquals(username.getAttribute("validationMessage"), "My custom message", "Message text control");

username.sendKeys("@vasy a^");
Assert.assertTrue((Boolean)((JavascriptExecutor)driver).executeScript("return arguments[0].validity.valid;", username), "Username should not contain not special characters");

答案 3 :(得分:0)

除了来自@Slanec的答案之外:还添加以下行(使用C#,但在Java或其他语言中应该相同):

Assert.IsTrue(true,"<The error message which appears>",elem1);

这是为了检查邮件是否可见。