4

假设我有以下 HTML5 片段:

<form method="get" action="logginValidation.php">
    <input type="text" required="" name="username">
    <button class="btn" type="submit">Se connecter</button>
</form>

使用 Selenium,我将字段留空并按下按钮。该表单未按我的预期进行验证,但我如何验证字段是否无效以及该字段是否存在关联消息

现在我没有调查的一件事是我正在使用加载了 JavaScript 库的 Twitter Bootstrap。我必须仔细检查这些库是否没有欺骗我,以及验证是否真的来自 Firefox 浏览器。

4

3 回答 3

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) 和伪元素(::first-line, ::first-letter, ::selection, ::before, ::后)。

这意味着 :required、:invalid 和 :valid 不是您可以选择与之交互的伪元素。

我通过对下一页上的文本执行 VerifyNotText 来解决此限制。不理想,但工作。

于 2012-09-24T13:55:24.973 回答
0

目前我正在用硒测试覆盖公司内部项目(比如员工管理系统)。所以表格上有很多强制性的输入。如果任何一个为空,则整个表单都会得到验证。输入附近的文本标签变为(变为)红色,并出现相应的验证器消息。所以我检查验证器是否正常工作的方法非常简单:-我编写了获取颜色文本方法来获取输入附近标签的颜色(如果它是红色,那么验证器已经在提交表单)

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!");

希望现在它对你来说变得更清楚了)

于 2012-09-24T14:31:43.720 回答
0

我认为这可以通过检查元素是否在 HTML 中具有“必需”属性来测试。示例代码是:- usernameField.getAttribute("required")

如果它不为空,那么我们可以确定验证已被触发。

于 2016-10-04T10:45:11.900 回答