内部为循环承诺

时间:2015-01-06 09:52:37

标签: promise protractor

我正在努力解决这个问题:

  • 点击按钮获取一组数据
  • 检查返回的行数是我期待的
  • 我需要每次运行10次,我期待不同的行数

下面的代码段不起作用,因为'i'不是我所期待的。我怎样才能做到这一点?

for (var i = 0; i < subElements.length; ++i) {
    element(by.id('get-data')).click();

    // Check users returned
    element.all(by.id('users')).map(function (elm) {
        return elm;
    }).then(function (users) {
        expect(users.length).toBe(expectedRecords[i]);
        // Some more checks to be added later
    });
}

2 个答案:

答案 0 :(得分:2)

怎么样:

for (var i = 0; i < subElements.length; ++i) {
    element(by.id('get-data')).click();

    var count = element.all(by.id('users')).count();
    expect(count).toBe(expectedRecords[i]);
}

只要您未访问i中的then,它就会是您想要的,否则i将是您循环中的最后一个值,而您需要闭合。

编辑:见Using protractor with loops

答案 1 :(得分:0)

使用蓝鸟

var Promise = require('bluebird');

it('my test', function(done){
  var promises = subElements.map(function(subElm, i){
    return element(by.id('get-data')).click()
      .then(function(){
        // Check users returned
        return element.all(by.id('users')).map(function (elm) {
          return elm;
        })
      })
      .then(function(users) {
        expect(users.length).toBe(expectedRecords[i]);
      });
  });

  Promise.all(promises).nodeify(done);
})