我使用量角器,我想循环遍历一系列定位器(都有不同的名称)来显示文本,然后将其与预期值数组进行比较。
我来过以下的例子:
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')
};
比较部分看起来更容易,它填充了各种定位器中充满文本的初始数组,我无法理解。
答案 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);