量角器 - 循环通过不同的定位器来填充数组

时间:2017-05-05 12:23:26

标签: javascript arrays protractor

我使用量角器,我想循环遍历一系列定位器(都有不同的名称)来显示文本,然后将其与预期值数组进行比较。

我来过以下的例子:

var expected = ['expect1', 'expect2', 'expect3'];
var els = element.all(by.css('selector'));
for (var i = 0; i < expected.length; ++i) {
    expect(els.get(i).getText()).toEqual(expected[i]);
}

您可以在其中对定位器子项进行比较,但不能从不同的定位器进行比较。

如何调整上面的内容来循环定位器列表(如下所示),然后将其与另一个数组中的一系列值进行比较。

const locators = {
    emp: by.id('employmentError'),
    occ: by.id('occupationError'),
    stat: by.id('statError'),
    show: by.id('showError')
}; 

比较部分看起来更容易,它填充了各种定位器中充满文本的初始数组,我无法理解。

2 个答案:

答案 0 :(得分:2)

看起来您正在尝试收集与不同类型的错误相对应的元素。如果您使用统一定位器获取所有这些内容,例如:

,该怎么办?
var errors = $$("[id$=Error]");
expect(errors.getText()).toEqual([
    "Employment Error happened",
    "Some other error" 
]);

此处errors会找到id属性以&#34结尾的元素;错误&#34;。

答案 1 :(得分:0)

量角器方法返回承诺。因此,每次使用promises更安全,因为它们是asyn操作。 请尝试以下代码:

const locators = {
    emp: element(by.id('employmentError')),
    occ: element(by.id('occupationError')),
    stat: element(by.id('statError')),
    show: element(by.id('showError'))
}; 
var promises = [], texts = [];
var els = element.all(by.css('selector'));
els.forEach(els, function(el) {
  els.getText().then(function(text) {
    texts.push(text);
  });
});
for (var i in locators) {
  promises.push(locators[i].getText());
}
expect(protractor.promise.all(promises)).to.become(texts);