概述

从 Nightwatch 版本 1.3 开始,您可以使用流行的 BDD 接口编写测试。 您无需额外的配置即可使用 BDD 接口。 这些现在开箱即用地得到支持。

您也可以运行使用 BDD describe 和 Exports 接口编写的测试。 在此版本之前,您必须使用 Mocha 测试运行器才能启用此功能,现在无需额外的插件或库即可实现。

Nightwatch 中的 BDD 接口提供以下功能

  • describe() / context()
  • test() / it() / specify()
  • before()
  • after()
  • beforeEach()
  • afterEach()
Nightwatch 目前不支持嵌套的 describe`/`context 声明。 您只能使用 describe 来定义测试套件的名称。

示例

describe('Ecosia', function() {
  
// test() and specify() is also available
it('demo test', function(browser) { browser .url('https://www.ecosia.org/') .setValue('input[type=search]', 'nightwatch') .click('button[type=submit]') .assert.containsText('.mainline-results', 'Nightwatch.js') .end(); }); });

import {NightwatchTests} from 'nightwatch';

const Ecosia: NightwatchTests = { 'demo test': () => { browser .url('https://www.ecosia.org/') .setValue('input[type=search]', 'nightwatch') .click('button[type=submit]') .assert.containsText('.mainline-results', 'Nightwatch.js') .end(); } };
export default Ecosia;

除了常用的 BDD 语法之外,Nightwatch 还提供了一些方法来定义自己的行为。

测试套件特定的功能


describe('homepage test with describe', function() {
  // testsuite specific capabilities
  this.desiredCapabilities = {
    browserName: 'firefox'
  };
  
it('...', function() {...}); });

测试套件特定的标签


describe('homepage test with describe', function() {
  // defining tags using bdd
  this.tags = ['login', 'authentication''];
  
it('...', function() {...}); });

测试套件特定的重试


describe('homepage test with describe', function() {
  // how many time to retry a failed testcase inside this test suite
   this.retries(3);
   
// how many times to retry the current test suite in case of an assertion failure or error this.suiteRetries(2);
it('...', function() {...}); });

完整的 BDD 语法

检索设置

所有当前设置都可通过 this.settings 获取。

describe('homepage test with describe', function() {
  console.log('Settings', this.settings);
  
it('...', function() { // ... }); });

所需功能

测试套件特定的功能。

describe('homepage test with describe', function() {
  this.desiredCapabilities = {};
  
it('...', function() { // ... }); });

单元测试

如果当前测试是单元/集成测试(即不会创建 Webdriver 会话),则启用此选项;

describe('homepage test with describe', function() {
   this.unitTest = true;
   
it('...', function() { // ... }); });

在失败时结束会话

如果希望在出现故障或错误时保持浏览器窗口打开(用于调试),请将其设置为 false

describe('homepage test with describe', function() {
   this.endSessionOnFail = false
   
it('...', function() { // ... }); });

在失败时跳过其余测试用例

如果希望在断言失败/错误的情况下执行其余测试用例/测试步骤,请将其设置为 false

describe('homepage test with describe', function() {
   this.skipTestcasesOnFail = true
   
it('...', function() { // ... }); });

禁用/跳过测试套件

如果希望测试运行器跳过此测试套件,请将其设置为 true

describe('homepage test with describe', function() {
   this.disabled = true
   
it('...', function() { // ... }); });

重试

describe('homepage test with describe', function() {
  this.retries(3);
  this.suiteRetries(2);
  
it('...', function() { // ... }); });

控制断言超时

控制断言和元素命令超时,直到找到元素或断言通过为止

describe('homepage test with describe', function() {
  this.timeout(1000)
  
it('...', function() { // ... }); });

控制轮询间隔

控制断言或元素命令重试之间的轮询间隔

describe('homepage test with describe', function() {
  this.retryInterval(100);
  
it('...', function() { // ... }); });

定义标签

为该测试套件定义标签。

describe('homepage test with describe', function() {
  this.tags = ['login']
  
it('...', function() { // ... }); });

测试函数和钩子

describe('homepage test with describe', function() {
  
before(function(browser) { this.homepage = browser.page.home(); });
it('startHomepage', () => { this.homepage.navigate(); this.homepage.expect.section('@indexContainer').to.be.not.visible; });

// Run only this testcase //* it.only('startHomepage', () => { this.homepage.navigate(); }); *//
// skipped testcase: equivalent to: test.skip(), it.skip(), and xit() xtest('async testcase', async browser => { const result = await browser.getText('#navigation'); console.log('result', result.value) });
test('version dropdown is enabled', browser => { const navigation = this.homepage.section.navigation; const navbarHeader = navigation.section.navbarHeader;
navbarHeader.expect.element('@versionDropdown').to.be.enabled; });
after(browser => browser.end()); });

示例 Github 仓库

我们已经构建了一个完整的 Github 模板仓库,其中包含几个示例,我们会定期更新,包括一个 Github Actions 工作流程,供您入门。

nightwatch-examples on Github