Приветствую всех. У меня очень странная ситуация с прогоном некоторых тестов в jenkins. Из 125 сценариев 120 проходят а 5 падают по одной причине на странице логина. При этом шаг логина отображается зеленым в отчете (как бы он проходит) и затем уже при поиске элемента из следующего шага тест падает. На скриншоте при падении отображается логин страница. Локально все 5 тестов проходят в headless моде. Какая-то мистика просто
Как такое может быть и какие вообще могут быть причины? У кого какие идеи?
Спасибо.
Могу предположить, что проблема с кликом по кнопке логина. У меня тоже такое бывает, в основном в IE броузере. Иногда решается заменой клика на функцию: webElement.SendKeys(Keys.Enter);
Вот ошибка, но я не знаю как это поможет исходя из той ситуации что я описал
org.openqa.selenium.TimeoutException: Expected condition failed: waiting for visibility of Proxy element for: DefaultElementLocator ‘By.xpath: //div[contains(@class, ‘layer-body__top-left’)]//h2’ (tried for 30 second(s) with 250 MILLISECONDS interval)
Врядли это проблема дженкинса.
Как вам написали выше, локатор для начала сделать постабильнее.
Попробуйте прогнать локально у себя тесты с логином 125 раз и вы увидите что там скорее всего что-то иногда не так со страницей и поэтому проблема плавающая.
Вы на скриншоте падения реально видите тот элемент который ищете и у него реально такой локатор ? //div[contains(@class, ‘layer-body__top-left’)]//h2
Вы пробовали локально запустить все 120 тестов как на дженкинсе? Очень часто по одному тесты работают, а при множественном запуске они могут влиять друг на друга, если они не полностью stateless. Также на Дженкинсе другая система (если вы не подняли его локально) и другой браузер, нужно проверить на одинаковых, например использовать BrowserWebDriverContainer или Selenoid в обоих случаях. Также можно и локально поднять дженкинс и проверить так. + записать видео
Локатор либо работает либо нет, понятия стабильности у него нет, есть только понятие сложности, но на стабильность это никак, если используется ожидание, поэтому дело не в локаторе.
Всем спасибо за ответы. Локатор, вероятно всего не очень - да, но у нас на проекте много подобных локаторов (проект был создан давно, а я только 1.5 месяца работаю здесь) Проблема еще в том что часто не за что привязаться вообще(имею ввиду что бы локатор был уникальный) Но дело, все же, я думаю, не в локаторе…
Как я описал в теме вот что получается:
Тест вводит логин, пароль и нажимает кнопку Login (это видно исходя из пройденного шага в отчете), но при этом, почему то, остается на странице логина (это видно на скриншоте) и ищет элемент (этот не очень красивый локатор) на главной странице (естественно он его не находит, поскольку на главную то он вовсе не попал) Главные вопросы вот в чем:
Почему шаг логина отображается как Passed, если логин по сути не проходит?
И собственно почему логин не проходит, если в 120 тестах он проходит?
Еще один момент, на проекте иногда не срабатывают ожидания ни visibilityOf() ни visibilityOfElementLocated() Это похоже на то, что элемент уже есть в DOM и его видно на странице, но взаимодействовать с ним нельзя. Например, кнопку нажимаешь, но ничего не происходит.
Причина может быть.
Баг проявляющийся раз на 120 случаев когда после нажатия кнопки Login реально логин не происходит. Тут причин может быть много страница не отправляет параметры на сервак, сервак долго не дает ответа после получения параметров и т.д.
Прогоните все тесты локально как это делает дженкинс, прогон единичного теста и прогон теста в сьюте это не всегда одно и тоже.
Почему шаг логина в репорте у вас зеленый, это вопрос уже к тому как вы опеределяете критерий того что логин “прошел”, если критерий жто только нажатие “LogIn” кнопки то тут все правильно кнопка ведь нажалась.
Да, Selenide не плохая вещь, я работал с ним на одном проекте…по ожиданиям там реально все четко Но если его использовать, то нужно все переделывать в проекте. Кстати у нас еще Cucumber здесь (мое личное мнение что это просто лишняя прослойка в тестах, совсем не нравится)
А вот повторно пробовать логиниться возможно попробую (думал об этом, но казалось что не best practices решение)