【发布时间】:2015-11-04 23:59:38
【问题描述】:
我想测试每个元素.elem1 是否包含一个元素.elem2。试过了,但似乎没有按预期工作:
expect(element.all(by.css('.elem1')).all(by.css('.elem2')).isDisplayed()).toBeTruthy();
【问题讨论】:
标签: javascript angularjs selenium testing protractor
我想测试每个元素.elem1 是否包含一个元素.elem2。试过了,但似乎没有按预期工作:
expect(element.all(by.css('.elem1')).all(by.css('.elem2')).isDisplayed()).toBeTruthy();
【问题讨论】:
标签: javascript angularjs selenium testing protractor
您如何比较 elem1 元素的数量与内部具有 elem2 元素的 elem1 元素的数量:
var elem1count = element.all(by.xpath("//*[contains(@class, 'elem1')]")).count();
var elem1WithElem2count = element.all(by.xpath("//*[contains(@class, 'elem1') and .//*[contains(@class, 'elem2')]]")).count();
elem1WithElem2count.then(function (elem1WithElem2count) {
expect(elem1count).toEqual(elem1WithElem2count);
});
是的,那有点丑。
类似的想法,但使用filter():
var elem1count = element.all(by.css(".elem1")).count();
var elem1WithElem2count = element.all(by.css(".elem1")).filter(function (elem1) {
return elem1.element(by.css('.elem2')).isPresent();
}).count();
elem1WithElem2count.then(function (elem1WithElem2count) {
expect(elem1count).toEqual(elem1WithElem2count);
});
或者,你可以用reduce()解决它:
var result = element.all(by.css('.elem1')).reduce(function(acc, elem1) {
return elem1.element(by.css('.elem2')).isPresent().then(function (isPresent) {
return acc && isPresent;
});
}, false);
expect(result).toBe(true);
在这里,对于每个 elem1 元素,我们得到一个布尔变量,指示是否存在 elem2 元素,然后将所有布尔值简化为一个布尔值。
您也可以使用each() 并对每个elem1 进行expect 检查:
element.all(by.css('.elem1')).each(function(elem1) {
expect(elem1.element(by.css('.elem2')).isPresent()).toBe(true);
});
【讨论】: