How to get HTML5 validation message with selenium?

前端 未结 2 634
無奈伤痛
無奈伤痛 2021-02-10 15:18

Please see this website.

After click log in i have this User credentials form and after try to login with missing Email Address or Password i g

相关标签:
2条回答
  • 2021-02-10 15:31

    The validation messages are not the part of your DOM. They are generated because your input fileds have required attribute. If you see the HTML of your fields -

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

    You can see it has required attribute turned on. Check this out. You can verify that your fields have this required attribute or not, like 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.
    }
    

    There is no need to care about whether the message appears or not because that will handled by the browser.

    0 讨论(0)
  • 2021-02-10 15:32

    Attribute validationMessage will return the message, that will be showing if validation fails:

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

    If element has required attribute, browser will show the message after submitting the form:

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

    You can check whether entered value is valid:

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


    Not: message text and validation is customizable. If you want to test customized validation and message.

    Here test code for custom validation(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");
    
    0 讨论(0)
提交回复
热议问题