Javascript 测试每个元素是否包含带量角器的元素

Javascript 测试每个元素是否包含带量角器的元素,javascript,angularjs,selenium,testing,protractor,Javascript,Angularjs,Selenium,Testing,Protractor,我想测试每个元素.elem1是否包含一个元素.elem2。已尝试此操作,但似乎没有按预期工作: expect(element.all(by.css('.elem1')).all(by.css('.elem2')).isDisplayed()).toBeTruthy(); 将elem1元素的数量与内部包含elem2元素的elem1元素的数量进行比较如何: var elem1count = element.all(by.xpath("//*[contains(@class, 'elem1')]")

我想测试每个元素
.elem1
是否包含一个元素
.elem2
。已尝试此操作,但似乎没有按预期工作:

expect(element.all(by.css('.elem1')).all(by.css('.elem2')).isDisplayed()).toBeTruthy();

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);
});
是的,那有点难看

类似的想法,但使用:


或者,您可以通过以下方法解决此问题:

这里,对于每个
elem1
元素,我们得到一个布尔变量,指示
elem2
元素是否存在,然后将所有布尔值减少为一个布尔值

您还可以对每个
elem1
使用并进行
expect
检查:

element.all(by.css('.elem1')).each(function(elem1) {
    expect(elem1.element(by.css('.elem2')).isPresent()).toBe(true);
});
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);
element.all(by.css('.elem1')).each(function(elem1) {
    expect(elem1.element(by.css('.elem2')).isPresent()).toBe(true);
});