2015-11-04 2 views

ответ

1

Как насчет сравнения количества elem1 элементов с числом элементов, имеющих elem1elem2 элементов внутри:

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); 
}); 
Смежные вопросы