убедитесь, что элемент исчезает в транспортире

Для целей ожидания я использую такую ​​функцию ожидания:

    browser.wait(function()
    {
        return browser.isElementPresent(by.repeater('recentName in recentNames').row(0));
    }, 10000);

Как я могу дождаться исчезновения элемента со страницы? У меня есть проект, в котором много модальных окон, и поскольку элементы всегда представлены на странице, у меня время от времени возникают трудности и неудачные тесты, потому что я использовал неправильные элементы для ожидания. Например, у меня есть такой элемент, который исчезает при закрытии модального окна после нажатия Enter:

<div class="modal-backdrop  in"></div>

person Sergey Teplyakov    schedule 27.11.2014    source источник


Ответы (3)


Вы можете использовать пользовательскую вспомогательную функцию waitAbsent(), которая активно ожидает исчезновения элемента, либо становясь невидимым или не присутствующим.

Этот помощник ждет до specTimeoutMs, игнорируя бесполезные ошибки веб-драйвера, такие как StaleElementError.

Использование: добавьте require('./waitAbsent.js'); в свой блок или файл onPrepare.

Пример ожидания исчезновения модального окна:

expect($('.modal-backdrop.in').waitAbsent()).toBeTruthy();
person Leo Gallucci    schedule 27.11.2014
comment
Я могу подтвердить, что это лучшее текущее решение этой проблемы. Большое спасибо Лео! - person Dejan Toteff; 23.07.2015

Сейчас рекомендуется использовать ExpectedConditions Protractor. Вы можете использовать его в сочетании с browser.wait для создания условия ожидания для различных состояний, среди которых invisibilityOf (если он скрыт) или stalenessOf (если он удален из DOM) элемента.

browser.wait( EC.invisibilityOf( $('#selector') ), 5000 );
person filoxo    schedule 02.07.2015

Если элемент уже присутствует на странице, вы можете заморочиться обратными вызовами :D , воспользовавшись тем фактом, что browser.wait() опрашивает страницу до тех пор, пока переданная ей функция не оценит значение true.

browser.wait(function()
    {
        return browser.isElementPresent(by.repeater('recentName in recentNames').row(0)) //if element is already present, this line will evaluate to true
               .then(function(presenceOfElement) {return !presenceOfElement}); // this modifies the previous line so that it evaluates to false until the element is no longer present. 
    }, 10000);
person aricearice    schedule 01.12.2014