Как насчет сравнения количества elem1
элементов с числом элементов, имеющих elem1
elem2
элементов внутри:
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()
и иметь expect
проверку для каждого elem1
:
element.all(by.css('.elem1')).each(function(elem1) {
expect(elem1.element(by.css('.elem2')).isPresent()).toBe(true);
});