Protractor падает по таймауту после авторизации

Здравствуйте! Помогите разобраться с ошибкой таймаута DEFAULT_TIMEOUT_INTERVAL в тесте для Protractor. Кейс такой - залогиниться, выполнить манипуляции с панелью навигации. Появляется окно авторизации, успешно залогиниваюсь - Protractor повисает и падает с ошибкой “Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL”. Элементы на странице есть. Копать как в сторону их отсутствия так и в сторону времени выполнения нет смысла. Здесь дело в том что теряется связь с ангуляром. Использование browser.waitForAngularEnabled(false) после авторизации это доказывает. Может кто сталкивался - в чем может быть дело?

Версии ПО:
Приложение - angular 9 + ivy
protractor - 5.4.3
jasmine - 3.5.7
chromedriver - 80.0.1
angular/cli - 9.0.3

Неужели никто не сталкивался с подобной проблемой ?

Ну кто-то же должен быть первым :slight_smile:

а если подойти к разработчикам вашего фронта и у них спросить?

Нужно отключать ожидания Angular на страницах где нет Angular и включать там где есть. Иногда ожидания не работают на страницах там где есть Angular.
browser.ignoreSynchronization = true;

1 лайк

Спасибо за отклик. Сейчас так и делаю. Таких страниц много оказалось. На stackoverflow пишут что так может быть из за сторонних компонентов, коих у нас в приложении предостаточно. Смущает только то что тесты упали вдруг, подумал что в роутере поковырялись, но со слов разработчиков изменений не было и те самые сторонние компоненты давно никто не трогал. В общем фреймворк огорчил. Это моя вторая попытка работать с ним. Пробовал его версию 3 или 4 для ангуляра 1 - тем же и закончилось, начал падать на ожиданиях ангуляра. Теперь новое приложение на ангуляр 9 - тестирование тоже начинается с шаманства. Параллельно сейчас смотрю webdriverio - первое впечатление очень хорошее, на этом же самом приложении все пока стабильно.

я использовал Protractor на JS и C#, так вот на C#, там так же как и на JS повисает, плюс ожидания навешаны на каждое действие, вплоть до получения текста, что очень сильно замедляет тест, там где не нужно. По моему ожидания достаточно выполнять после навигации или совершения активных действий.

Я взял нужные мне скрипты тут и запускаю только там где нужно, можно протестить в консоле и выбрать которые походят
https://www.swtestacademy.com/selenium-wait-javascript-angular-ajax/

Спасибо за ссылку. Если используете ignoreSynchronization везде, то да, придется ждать абсолютно всего. Но сейчас вроде допилена поддержка async/await - не пробовали ? Я один тест попробовал - работал корректно. Причем работает как я понял и controlflow и async/await одновременно. Наконец то можно вывод console.log нормально делать))) а то вываливал все сразу либо в промисы оборачивать. Возвращаясь к теме ожиданий - считаю что фреймоврк на то нужен чтобы все за меня делать)) (ждать, обрабатывать ошибки, логировать) Иначе смысл его существования теряется. Можно взять голый селениум и обернуть во что хочешь. Протрактор вообще в странном состоянии находится, он самый массовый и судя по его офсайту - сейчас заброшен. Доки новые не пишут, старые не обновляют, сопутствующее ПО не обновляют.

async/await синтаксический сахар, это не должно ни как влиять, в некоторых фреймворках так написано, что иногда лучше самому сделать (конечно это не касается таких масштабных как например Webdriver или Mocha)