无法使用mocha运行nightwatch.js测试“确保调用done()回调”

时间:2017-02-01 12:43:23

标签: automated-tests mocha ui-automation nightwatch.js

我在网上发现的几乎每一个例子都没有很好地解释如何实现摩卡并与nightwatchJS一起使用。

无论我做什么,我都无法避免该错误消息,即使我遵循official nightwatch how-to use mocha的所有步骤 我唯一能做的就是至少让谷歌浏览器浏览器打开就可以了。

这是我试图运行的代码

var nightwatch = require('nightwatch');

describe('Google', function() {

    var client = nightwatch.initClient({
        // Pass here options from nightwatch.json

        // selenium logs; change it to true if you want to see them in console
        silent : false,

        desiredCapabilities: {
            browserName: "chrome",
            javascriptEnabled: true,
            acceptSslCerts: true
        }
    });

    var browser = client.api();

    // Mocha timeout
    this.timeout(15000);

    it('Demo test Google', function (done) {
        browser
            .url('http://www.google.com')
            .waitForElementVisible('body', 1000)
            .setValue('input[type=text]', 'nightwatch')
            .waitForElementVisible('button[name=btnG]', 1000)
            .click('button[name=btnG]')
            .pause(1000)
            .assert.containsText('#main', 'Night Watch')
            .end();


        client.start(done);
    });
});

这是浏览器弹出后总是发生在我身上的错误消息:

INFO Request: POST /wd/hub/session 
 - data:  {"desiredCapabilities":{"browserName":"firefox","javascriptEnabled":true,"acceptSslCerts":true,"platform":"ANY"}} 
 - headers:  {"Content-Type":"application/json; charset=utf-8","Content-Length":113}
    1) Demo test Google


  0 passing (15s)
  1 failing

  1) Google Demo test Google:
     Error: timeout of 15000ms exceeded. Ensure the done() callback is being called in this test.

2 个答案:

答案 0 :(得分:1)

最初的问题指出,关于如何设置带有摩卡咖啡的守夜人的文件很少。我本周末发现自己就是这种情况,因为我希望通过摩卡咖啡设置夜视测试。 通过执行以下操作,我能够设置我的夜间监视测试而没有看到完成的回调错误:

我使用了 nightwatch.conf.js ,但我相信您也可以在 nightwatch.json 中执行以下操作:

module.exports = {
  src_folders : ["test"],
  test_runner: {
    type: 'mocha',
    options: {
      ui: 'bdd',
      reporter: 'spec'
    }
  },
  ...
}

简单吧? 这使摩卡咖啡可以进行夜视测试。 IMO更简单,更友好的语法。

以下是我的package.json的相关部分

{
  "name": "nightwatch-mocha",
  "directories": {
    "test": "test"
  },
  "scripts": {
    "nightwatch": "nightwatch -c ./nightwatch.conf.js"
  },
  "devDependencies": {
    "chromedriver": "^73.0.0",
    "mocha": "^6.1.4",
    "nightwatch": "^1.0.19"
  }
}

我已经安装了 chromedriver ,因此我可以通过 chrome 运行测试。

还安装了

摩卡咖啡和Nightwatch

我已经在 scripts 对象内创建了一个名为 nightwatch 的脚本。

当我位于项目的根目录下时,从命令行运行npm run nightwatch时,它将与摩卡一起运行守夜。

此外,使用nightwatch.json或nightwatch.conf.js可以将该配置排除在测试范围之外-您无需在编写新测试套件时就初始化一次即可,而不必初始化它完成。

答案 1 :(得分:0)

尝试在链的末尾调用done()回调。我没有完全掌握client.start()的速度,但我很确定你想要在链条到期时完成测试。

var nightwatch = require('nightwatch');

describe('Google', function() {

    var client = nightwatch.initClient({
        // Pass here options from nightwatch.json

        // selenium logs; change it to true if you want to see them in console
        silent : false,

        desiredCapabilities: {
            browserName: "chrome",
            javascriptEnabled: true,
            acceptSslCerts: true
        }
    });

    var browser = client.api();

    // Mocha timeout
    this.timeout(15000);

    it('Demo test Google', function (done) {
        browser
            .url('http://www.google.com')
            .waitForElementVisible('body', 1000)
            .setValue('input[type=text]', 'nightwatch')
            .waitForElementVisible('button[name=btnG]', 1000)
            .click('button[name=btnG]')
            .pause(1000)
            .assert.containsText('#main', 'Night Watch')
            .end(done);


        client.start();
    });
});