量角器表.过滤器超时

protractor table.filter times out

本文关键字:超时 过滤器 量角器      更新时间:2023-09-26

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

我正在使用chai作为预期的承诺:

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中测试的一种正确方式?

.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选择器伪类定位每行的第一个单元格,然后断言数组的所有元素都具有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]);