Транспортир: как дождаться, пока все элементы станут невидимыми

У меня есть веб-приложение, которое я тестирую с помощью Protractor. К сожалению, при загрузке в каждой из различных областей приложения может отображаться перекрывающийся счетчик загрузки. Поэтому я хочу подождать, пока все прядильщики не станут невидимыми, прежде чем я продолжу. Спиннеры становятся невидимыми, а не полностью исчезают из DOM.

Вот что я до сих пор придумал. К сожалению, он всегда выполняется, пока не истечет время ожидания.

function waitForAllElementsToDisappear(elementArray) {
    return function () {
        return elementArray.reduce(function (acc, elem) {
            if (acc == null) acc = true; 
            try {
                return elem.isDisplayed().then(function(displayValue) {
                    if (displayValue)  return false; 
                    else  return acc; 
                });
            }
            catch (err) {
                return acc;
            }
        });
    };
};

browser.wait(this.waitForAllElementsToDisappear(
    element.all(by.css('div[ng-if~="mmc.menuTree.showSpinner"]'))), 
    5000);

Надеюсь, это слишком сложно и есть хорошее элегантное решение.

Спасибо за помощь.


person mightflypig    schedule 14.06.2018    source источник
comment
Я не могу его протестировать, поэтому я не публикую его, но похоже на element.all (by.css ('div [ng-if ~ = mmc.menuTree.showSpinner]'))). Each ((elem, index) = ›{Browser.wait (EC.invisibilityOf (elem), 5000);}) должен это сделать. Кроме того, я подумал, что вы можете сделать element.all и отфильтровать невидимые (т.е. выбрать видимые), а затем подождать, пока счетчик не станет равным 0.   -  person Jeremy Kahan    schedule 23.06.2018


Ответы (1)


Неправильное место в функции waitForAllElementsToDisappear:

function waitForAllElementsToDisappear(elementArray) {

    return elementArray.isDisplayed().then(function(arrs){
        // arrs is an array like [true, false, false, true]
        // when there is no true in the array, means all spinners are not visible
        // we can end the waiting now
        return arrs.includes(true) === false
    });

};
person yong    schedule 14.06.2018