Транспортир AngularJS дождется отображения элемента и выполнит некоторые действия

#javascript #angularjs #protractor

#javascript #angularjs #транспортир

Вопрос:

Я должен создать метод, который выполняет некоторые действия, пока какой-либо элемент не виден на странице. Когда это отобразится, я заканчиваю тест.

 this.waitHolidayInCalendarFunc = function () {
                return browser.wait(anyHolidayInCalendar.isDisplayed()
                    .then(nextWeekButton.click()));
            };
  

Но возникает ошибка

«сбой: fn не является функцией»

Я попробовал сделать метод, подобный этому:

 this.IsPresentHoliday = function () {
            browser.wait(function () {
                return holiday.isPresent();
            }, defaultDelay);
        };" 
  

И в тесте я добавляю ‘while’ вот так

 var clickNextWeek = new holidaycalendar.NavigateOnCalendarView();
while (clickNextWeek .IsPresentHoliday() == false ) clickNextWeek.GoNextWeek();
  

Но метод isPresent() возвращает true (но элемент отсутствует на странице) и тест пройден! Пожалуйста, помогите!

Ответ №1:

Используйте ExpectedConditions вместе с browser.wait , чтобы заставить ваши скрипты ожидать выполнения определенных условий. Попробуйте приведенный ниже код.

 var EC = protractor.ExpectedConditions;
var waitTime = 5000; //5 secs
var elementToBeVisible = element(by.id("some-id"));
browser.wait(EC.visibilityOf(elementToBeVisible),waitTime);