【问题标题】:How to get HTML5 validation message with selenium?如何使用硒获取 HTML5 验证消息?
【发布时间】:2019-02-01 09:34:30
【问题描述】:

请查看this 网站。

点击登录后,我有此用户凭据表单,尝试登录时缺少Email AddressPassword,我收到此消息:

所以我尝试通过打印所有页面 HTML (driver.getPageSource()) 来找到这个元素,但是这个文本丢失了。

知道如何验证我有这个error message 吗?

【问题讨论】:

  • 我认为这是特定于 Chrome 的,实际上并不是页面中的 HTML。我以前见过这样的问题,我试图自己找到它,但无法找到。如果您创建一个简单页面并添加一个包含 required 属性的 INPUT,如果您尝试在表单为空时提交表单,您将收到此消息。您可以在简单的情况下看到没有生成 HTML

标签: java html selenium constraint-validation


【解决方案1】:

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

WebElement username = driver.findElement(By.name("uname"));    
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("@vasya ");
Assert.assertTrue((Boolean)((JavascriptExecutor)driver).executeScript("return arguments[0].validity.valid;", username), "Username has special characters");

【讨论】:

    【解决方案2】:

    验证消息不是 DOM 的一部分。它们是因为您的输入文件具有required 属性而生成的。如果您看到您的字段的 HTML -

    <input type="text" placeholder="Enter Username" name="uname" required="">
    

    您可以看到它已打开必需属性。检查this。您可以验证您的字段是否具有此必填属性,如下所示-

    WebElement inputElement = driver.findElement(By.name("uname"));
    JavascriptExecutor js = (JavascriptExecutor) driver;  
    boolean isRequired = (Boolean) js.executeScript("return arguments[0].required;",inputElement)
    if(isRequired )
    {
       //element is required and validation error will popup if the field is empty.
    }
    

    不需要关心消息是否出现,因为这将由浏览器处理。

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      • 2018-12-10
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      相关资源
      最近更新 更多