量角器table.filter超时

时间:2016-07-21 15:55:15

标签: javascript testing angular protractor automated-tests

我已经使用量角器+黄瓜编写了第一个角度2的验收测试,当我调用table.filter时,浏览器会挂起并超时,直到超时时间。

我正在按照预期使用柴 -

var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;

以下代码不起作用。

var grid = $$(".table tr");
grid.filter(function (row) {
    var cells = row.$$('td');
    expect(cells.get(0).getText()).to.eventually.equal(factoryName).and.notify(done);

我设法通过将上面的代码替换为:

来使我的场景通过
var grid = $$(".table tr");
for (var i = 1; i < grid.count() ; i++) {
    var cells = grid.get(i).$$('td');
    expect(cells.get(0).getText()).to.eventually.equal(factoryName).and.notify(done);
}

我很难找到 table.filter 导致超时的原因。

任何人都可以帮我发表文章/帖子,如何将这些steps.js转换为 TypeScript ,这是在angular2中测试的正确方法吗?

1 个答案:

答案 0 :(得分:1)

.filter() 期望过滤器函数从中返回(布尔值或解析为布尔值的promise),以决定是否跳过数组中的元素或不是)。

据我所知,你的意思是:

var grid = $$(".table tr");
var desiredRow = grid.filter(function (row) {
    var cells = row.$$('td');
    return cells.first().getText().then(function(cellText) {
        return cellText === factoryName;
    });
}).first();
// do something with the desiredRow

或者,如果您打算检查每行的第一个单元格是否等于factoryName,您应该/可以使用each()

var grid = $$(".table tr");
grid.each(function (row) {
    var cells = row.$$('td');
    expect(cells.first().getText()).to.eventually.equal(factoryName);
});

或者,您可以使用first-of-type CSS selector pseudo-class找到每一行的第一个单元格,然后断言该数组的所有元素都具有factoryName值:

var cells = $$(".table tr td:first-of-type");

// example for 2 rows
// for N rows, http://stackoverflow.com/questions/14832603/check-if-all-values-of-array-are-equal
expect(cells.getText()).toEqual([factoryName, factoryName]);