概述

Nightwatch 编写测试的默认接口一直是 exports 语法,这使得编写端到端测试非常容易。

虽然这种格式更容易理解和使用,但它也比 BDD describe() 接口更有限。由于 describe() 作为测试格式的广泛使用以及与 Mocha 等工具的兼容性,我们建议使用 BDD describe(),但是 exports 也将继续正常工作。

示例

以下基本测试套件示例打开搜索引擎 Ecosia.org,搜索“nightwatch”一词,然后验证第一个结果是否为 Nightwatch.js 网站。

tests/sampleTest.js
module.exports = {
  'Demo test ecosia.org' : function(browser) {
    browser
      .url('https://www.ecosia.org/')
      .waitForElementVisible('body')
      .assert.titleContains('Ecosia')
      .assert.visible('input[type=search]')
      .setValue('input[type=search]', 'nightwatch')
      .assert.visible('button[type=submit]')
      .click('button[type=submit]')
      .assert.containsText('.mainline-results', 'Nightwatch.js')
      .end();
  }
};

您也可以在测试中包含多个步骤,如下所示

tests/sampleTest.js
module.exports = {
  'step one: navigate to ecosia.org': function(browser) {
    browser
      .url('https://www.ecosia.org')
      .waitForElementVisible('body')
      .assert.titleContains('Ecosia')
      .assert.visible('input[type=search]')
      .setValue('input[type=search]', 'nightwatch')
      .assert.visible('button[type=submit]');
  },
  
'step two: click submit' : function (browser) { browser .click('button[type=submit]') .assert.containsText('.mainline-results', 'Nightwatch.js') .end(); } };

使用 ES 模块 (ESM)

如果在项目中使用 ES 模块,则需要使用以下格式编写测试。

tests/sampleTest.js
exports default {
  'Demo test ecosia.org' : function(browser) {
    browser
      .url('https://www.ecosia.org/')
      .waitForElementVisible('body')
      .assert.titleContains('Ecosia')
      .assert.visible('input[type=search]')
      .setValue('input[type=search]', 'nightwatch')
      .assert.visible('button[type=submit]')
      .click('button[type=submit]')
      .assert.containsText('.mainline-results', 'Nightwatch.js')
      .end();
  }
};

您还需要使用 nightwatch.conf.cjs 配置文件。

我们已经整理了一个完整的 Github ESM 模板存储库,其中包含多个示例,我们定期对其进行更新,包括 Github Actions 工作流程,方便您入门。

nightwatch-boilerplate-esm on Github

测试标签

您也可以根据标签选择性地指定要运行的测试,这样测试可以属于多个标签。例如,您可能有一个登录测试,它属于 login 套件,也属于 sanity 套件。

可以通过将 @tags 属性添加到测试模块来实现标记。

tests/sampleTest.js
module.exports = {
  '@tags': ['login', 'sanity'],
  'demo login test': function (browser) {
     // test code
  }
};

要选择要运行的标签,请使用 --tag 命令行标志

nightwatch --tag login

将多个标签指定为
nightwatch --tag login --tag something_else

要跳过运行具有特定标签的测试,请使用 `--skiptags` 标志
nightwatch --skiptags login

或者要跳过多个标签,请将要跳过的每个标签添加为以逗号分隔的列表
nightwatch --skiptags login,something_else