Я еще зеленый в автоматизации. Но стремительно стараюсь посинеть.
Проблема такова:
Ресурс написан с использование фреймворка AngularJS 1.5.8. Все ссылки содержали “#” - https://test.com.ua/#/ до вчерашнего дня. Все тесты писались с использование ProtractorJS. Вчера же FE разработчики убрали из url этот знак, позже выяснил что они перевели AngularJS в режим HTML5.
Все тесты начали падать: Protractor открывает браузер, заходит на тестируемый сайт, кликает на нужный элемент и ждет его появления. НО! На сайте ничего не происходит. Я пробовал ставить режим ожидания на дольше и руками прощелкивать в открытом тестом браузере - все элементы страницы (ссылки, кнопки, разделы) редиректят на начальную страницу, просто обновляется виджет страницы. Видны изменения только в теге, отвечающий за название вкладки браузера.
В чем может быть причина? Я подозреваю что проблема в WebDriver. Помогите, пожалуйста. А то это напоминает игру на выживание.
Если просто самому открыть браузер - все работает корректно.
Предположил, что может страницу не корректно подгружает. Но нет. Я вывел в консоль содержание тега href, и там была ссылка, которая должна открываться.
Так а разве cookie, session/local storage не игнорируются webdriver’ом при запуске тестов? При чем стандартным запуском браузера с рабочего стола в штатном режиме продукт и переходы/клики работают корректно.
В этом то и может быть дело, ваш браузер с рабочего стола не чищен и со старыми куками, и потому все работает хорошо, а голый браузер который заходит первый раз - не имеет никаких куки и может работать плохо. Скиньте ссылку на сайт, можно в личку, тут нужно смотреть конкретно.
Благодаря помощи xotabu4'а и подрядчика по FE, решили проблему. Если кому интересно. Для метода browser.get() я использовал ссылку с встроенной первичной авторизацией. Оказалось что html5 режим использует js функцию history.pushState. Но в браузерах есть правило запрета подмены домена(можно менять только в рамках того же окружения), и браузер в URL убирает пару логин-пароль. Но в переменной domain сохраняет путь https://логин:пароль@test.com. И получается, что https://test.com/about для него является другим доменом - они не совпадают.
Решение:
browser.get('https://логин:пароль@test.com/') //осуществляется запись в текущую сессию данных первичной авторизации
browser.get('https://test.com/');