使用 HTML5 验证 API 测试表单验证,使用 nightwatch API 测试伪选择器

testing form validation with HTML5 validation API and pseudo-selector with nightwatch API

我有一个典型的登录表单,其中包含电子邮件和密码以及提交按钮。密码和电子邮件字段是必需的,即设置了表单上的必需属性。这是这样的,当用户单击提交并且例如电子邮件字段为空时,会弹出错误 'Please fill in the field'。这在手动测试中效果很好。

问题是我想用 nightwatch 自动进行检查,我想到了以下几点:

Testing if attribute validity of <.c-textfield__input--email> equals "somevalue". Element does not have a validity attribute. - expected "somevalue" but got: "null"

有人知道如何自动化表单验证测试吗?

我能够通过使用自定义断言来做到这一点。

在文件中 test/e2e/custom-assertions/isValidInput.js :

exports.assertion = function (selector, stateAttr, stateValue) {
  this.message = 'Testing if element <' + selector + '> has ValidityState ' + stateAttr + ': ' + stateValue
  this.expected = stateValue

  this.pass = function (val) {
    return val === this.expected
  }

  this.value = function (res) {
    return res.value[stateAttr]
  }

  this.command = function (cb) {
    var self = this
    return this.api.execute(
      function (selector) {
        return document.querySelector(selector).validity
      },
      [selector],
      function (res) {
        cb.call(self, res)
      }
    )
  }
}

然后你可以这样使用它,例如需要的空输入表单:

browser
  .assert.isValidInput('#form-input-id', 'valid', false)
  .assert.isValidInput('#form-input-id', 'valueMissing', true)

不要忘记加载自定义断言。对我来说,我必须将其添加到我的 nightwatch.conf.js 文件中:

module.exports = {
  ...
  custom_assertions_path: ['test/e2e/custom-assertions'],
  ...
}