Size: a a a

2020 March 04

OV

Oleg Voropaev in JS for testing
Oleg Voropaev
Привет. Вопрос по  протрактору:
Пишу тесты на ангулар  приложение,  но аутентификация реализована  через сторонний сервис. Соответственно меня редиректит на login форму и это не ангулар страница. После успешной  аутентификации перекидывает обратно.
Вопрос на счет waitForAngularEnabled().
Метод login() выглядит так:

   await browser.waitForAngularEnabled(false);
   await this.setLogin(userName);
   await this.clickOnProceedButton();
   await WaitUtils.waitForPresent(this.passwordInput);
   await this.setPassword(password);
   await this.clickLoginButton({ waitNextPage: shouldWait });
   await browser.waitForAngularEnabled(true);

но далее тест не идет и падает с Failed: script timeout ошибкой.
Предполагаю,  что проблема в waitForAngularEnabled(), так как до внедрения сторонней аутентификации все стабильно работало.
если кто-то  сталкивался с подобной проблемой, как  решали, обходили?
Перепробовал  вчера таймауты ставить до/после и в разных местах вызывать waitForAngularEnabled(true) - ничего не  помогло. Суть в том,  что  после  вызова waitForAngularEnabled(true), драйвер  перестает  выполнять какие-либо  действия и  падает  с ошибкой,  что  не  дождался завершения всех angular testbility коллбэков,  которые реализованы в waitForAngularEnabled(). Если как  в  примере выключить waitForAngularEnabled() и не  включать обратно, то  скрипт  работает дальше,  но  падает в какой-то  момент из-за  отсутсвия ожиданий.
Более  того,  если запустить тест на  ангулар  приложении и где-то в  скрипте  вызвать waitForAngularEbnabled(true), то  он  так же перестает  работать дальше, хотя при запуске драйвера этот параметр  и  так true по  дефолту. Может есть  у кого  мысли  какие?
источник

B

Bola in JS for testing
Oleg Voropaev
Перепробовал  вчера таймауты ставить до/после и в разных местах вызывать waitForAngularEnabled(true) - ничего не  помогло. Суть в том,  что  после  вызова waitForAngularEnabled(true), драйвер  перестает  выполнять какие-либо  действия и  падает  с ошибкой,  что  не  дождался завершения всех angular testbility коллбэков,  которые реализованы в waitForAngularEnabled(). Если как  в  примере выключить waitForAngularEnabled() и не  включать обратно, то  скрипт  работает дальше,  но  падает в какой-то  момент из-за  отсутсвия ожиданий.
Более  того,  если запустить тест на  ангулар  приложении и где-то в  скрипте  вызвать waitForAngularEbnabled(true), то  он  так же перестает  работать дальше, хотя при запуске драйвера этот параметр  и  так true по  дефолту. Может есть  у кого  мысли  какие?
не касательно вашего вопроса: а можно спросить, вы каким-то плюшками протрактора для ангуляр приложения пользуетесь? помимо waitForAngular?
источник

OV

Oleg Voropaev in JS for testing
Bola
не касательно вашего вопроса: а можно спросить, вы каким-то плюшками протрактора для ангуляр приложения пользуетесь? помимо waitForAngular?
По факту никакими. Логичный вопрос: зачем тогда протрактор? Но переписывать и адаптировать 1000 тестов под другой Фреймворк давольно трудозатратно и долго
источник

B

Bola in JS for testing
спасибо за ответ
источник

OK

Oleksandr Khotemskyi in JS for testing
Oleg Voropaev
Перепробовал  вчера таймауты ставить до/после и в разных местах вызывать waitForAngularEnabled(true) - ничего не  помогло. Суть в том,  что  после  вызова waitForAngularEnabled(true), драйвер  перестает  выполнять какие-либо  действия и  падает  с ошибкой,  что  не  дождался завершения всех angular testbility коллбэков,  которые реализованы в waitForAngularEnabled(). Если как  в  примере выключить waitForAngularEnabled() и не  включать обратно, то  скрипт  работает дальше,  но  падает в какой-то  момент из-за  отсутсвия ожиданий.
Более  того,  если запустить тест на  ангулар  приложении и где-то в  скрипте  вызвать waitForAngularEbnabled(true), то  он  так же перестает  работать дальше, хотя при запуске драйвера этот параметр  и  так true по  дефолту. Может есть  у кого  мысли  какие?
попробуй сначала убедится что ты перешел на angular страницу, а потом включать waitForAngularEnabled
источник

OK

Oleksandr Khotemskyi in JS for testing
сделай какой то browser.wait - что страница открылась
источник

OV

Oleg Voropaev in JS for testing
Oleksandr Khotemskyi
попробуй сначала убедится что ты перешел на angular страницу, а потом включать waitForAngularEnabled
Уже убеждался и релоад страницы делал и переходил на другую страницу и там включал waitForAngularEnabled() - не помогает. Покарался в open issues angular/protractor на github. Там как минимум 3 таких же открытых issue, и нет никаких советов/ответов от контрибьюторов.
источник

OV

Oleg Voropaev in JS for testing
Так что походу баг в протракторе
источник

OK

Oleksandr Khotemskyi in JS for testing
Oleg Voropaev
Уже убеждался и релоад страницы делал и переходил на другую страницу и там включал waitForAngularEnabled() - не помогает. Покарался в open issues angular/protractor на github. Там как минимум 3 таких же открытых issue, и нет никаких советов/ответов от контрибьюторов.
Я еще могу посоветовать проверить в каком режиме бежит твоя ангуляр апка - dev mode или prod mode
источник

OK

Oleksandr Khotemskyi in JS for testing
Oleg Voropaev
Уже убеждался и релоад страницы делал и переходил на другую страницу и там включал waitForAngularEnabled() - не помогает. Покарался в open issues angular/protractor на github. Там как минимум 3 таких же открытых issue, и нет никаких советов/ответов от контрибьюторов.
Протрактор только может засинхронится если это dev mode
источник

OV

Oleg Voropaev in JS for testing
Приложение билдится в prod  моде. Но тогда почему по  дефолту оно  синхронится и работает стабильно,  если не вызывать waitForAngularEnabled(false)
источник

OV

Oleg Voropaev in JS for testing
Ну  по дефолту же  стоит waitForAngular =true
источник

OV

Oleg Voropaev in JS for testing
Хотя опять же таки, как  я писал выше: если  запустить  протрактор  скрипт на ангулар  приложении и где-то посреди теста вызвать waitForAngularEnabled(true),  то  скрипт  перестает работать, хотя вызов этого метода не должен ничего менять,  так как по дефолту этот параметр и так true
источник

OK

Oleksandr Khotemskyi in JS for testing
Oleg Voropaev
Хотя опять же таки, как  я писал выше: если  запустить  протрактор  скрипт на ангулар  приложении и где-то посреди теста вызвать waitForAngularEnabled(true),  то  скрипт  перестает работать, хотя вызов этого метода не должен ничего менять,  так как по дефолту этот параметр и так true
А может ты где то в on prepare свичишь в false?
источник

OV

Oleg Voropaev in JS for testing
Oleksandr Khotemskyi
А может ты где то в on prepare свичишь в false?
точно нет
источник

OK

Oleksandr Khotemskyi in JS for testing
Oleg Voropaev
точно нет
Тогда просто выруби его там и не парься
источник

OV

Oleg Voropaev in JS for testing
да, но  проблема возникает  потом,  когда включаешь  его  обратно
источник

OK

Oleksandr Khotemskyi in JS for testing
Oleg Voropaev
точно нет
Или нужно еще копнуть може то сама апликуха никогда не отпускает ангуляр, но тогда ошибка была бы другой
источник

OK

Oleksandr Khotemskyi in JS for testing
Oleg Voropaev
да, но  проблема возникает  потом,  когда включаешь  его  обратно
Не включай его, просто выруби и прогони без синхронизации вообще
источник

OV

Oleg Voropaev in JS for testing
Oleksandr Khotemskyi
Не включай его, просто выруби и прогони без синхронизации вообще
Да, так работает. Но падает потом  на  каком-нибудь клике не дождавшись элемента. Смысл  то  протратора в этих  самых зашитых ожиданиях waitForAngular
источник