如何用Nightwatch履行承诺

Maj*_*juj 2 javascript promise nightwatch.js

我正在从量角器切换到Nightwatch.js,我在使用Nightwatch处理承诺的方式时遇到了一些困难.

举个例子,我试图计算满足给定标准的元素数量.count函数位于页面对象中,因此与测试本身分开:

页面对象命令:

    countToDoList: function(browser) {
        browser.elements('css selector', "input[ng-model='todo.done']", function(result){
            return result.value.length;
        });
    }
Run Code Online (Sandbox Code Playgroud)

和测试中的电话:

'Angular - 1' : function(browser) {
  var angular = browser.page.angularPO();
  var mainPage = angular.section.main;

  angular.openMainPage(browser);
  var countToDoBoxes = 0;

  countToDoBoxes = mainPage.countToDoList(browser);
  console.log("countToDoBoxes = " + countToDoBoxes);

  browser.end();
}
Run Code Online (Sandbox Code Playgroud)

这将返回"countToDoBoxes = undefined".基于我对Protractor的(短期)经验,我认为这是由于函数没有履行承诺,当它传递给"countToDoBoxes"时.

有没有办法让这项工作?

Enr*_*eda 5

我找不到API描述elements,但是这里是你的代码,修改为返回Bluebird的承诺.(您可以使用您选择的Promise库执行类似操作.)

countToDoList: function(browser) {
    return new Promise(function(resolve, reject) {
        browser.elements('css selector', "input[ng-model='todo.done']", function(result){
            resolve(result.value.length);
        });

    });
}
Run Code Online (Sandbox Code Playgroud)

  • @StefanHanke请查看我(现已修改)对OP问题的回复,并确认它符合您的期望.感谢您的反馈. (2认同)