Падают несколько тестов в jenkins, не могу определить причину

Приветствую всех. У меня очень странная ситуация с прогоном некоторых тестов в jenkins. Из 125 сценариев 120 проходят а 5 падают по одной причине на странице логина. При этом шаг логина отображается зеленым в отчете (как бы он проходит) и затем уже при поиске элемента из следующего шага тест падает. На скриншоте при падении отображается логин страница. Локально все 5 тестов проходят в headless моде. Какая-то мистика просто :grin:

Как такое может быть и какие вообще могут быть причины? У кого какие идеи?
Спасибо.

Могу предположить, что проблема с кликом по кнопке логина. У меня тоже такое бывает, в основном в IE броузере. Иногда решается заменой клика на функцию:
webElement.SendKeys(Keys.Enter);

Тесты гонятся в Хроме. Локально все работает. 120 тестов логинятся ведь как то.

Я уже поставил ожидание пока страница полностью не загрузится и все равно падают

лог ошибки дайте, а то гадание на кофейной гуще

Вот ошибка, но я не знаю как это поможет исходя из той ситуации что я описал

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 лайк

Всем спасибо за ответы. Локатор, вероятно всего не очень - да, но у нас на проекте много подобных локаторов (проект был создан давно, а я только 1.5 месяца работаю здесь) Проблема еще в том что часто не за что привязаться вообще(имею ввиду что бы локатор был уникальный) Но дело, все же, я думаю, не в локаторе…
Как я описал в теме вот что получается:
Тест вводит логин, пароль и нажимает кнопку Login (это видно исходя из пройденного шага в отчете), но при этом, почему то, остается на странице логина (это видно на скриншоте) и ищет элемент (этот не очень красивый локатор) на главной странице (естественно он его не находит, поскольку на главную то он вовсе не попал) Главные вопросы вот в чем:

  1. Почему шаг логина отображается как Passed, если логин по сути не проходит?
  2. И собственно почему логин не проходит, если в 120 тестах он проходит?

Еще один момент, на проекте иногда не срабатывают ожидания ни visibilityOf() ни visibilityOfElementLocated() Это похоже на то, что элемент уже есть в DOM и его видно на странице, но взаимодействовать с ним нельзя. Например, кнопку нажимаешь, но ничего не происходит.

Причина может быть.
Баг проявляющийся раз на 120 случаев когда после нажатия кнопки Login реально логин не происходит. Тут причин может быть много страница не отправляет параметры на сервак, сервак долго не дает ответа после получения параметров и т.д.

Прогоните все тесты локально как это делает дженкинс, прогон единичного теста и прогон теста в сьюте это не всегда одно и тоже.
Почему шаг логина в репорте у вас зеленый, это вопрос уже к тому как вы опеределяете критерий того что логин “прошел”, если критерий жто только нажатие “LogIn” кнопки то тут все правильно кнопка ведь нажалась.

1 лайк

Используйте Selenide - это решит множество проблем с ожиданием и с кликами без эффекта.
Для такой нестабильной формы можно сделать retry: если элемент не пропал в течении 1 секунды, то попробовать еще. Для java есть фреймоврк GitHub - failsafe-lib/failsafe: Fault tolerance and resilience patterns for the JVM, для ретраев.

2 лайка

Да, Selenide не плохая вещь, я работал с ним на одном проекте…по ожиданиям там реально все четко :slight_smile: Но если его использовать, то нужно все переделывать в проекте. Кстати у нас еще Cucumber здесь (мое личное мнение что это просто лишняя прослойка в тестах, совсем не нравится)

А вот повторно пробовать логиниться возможно попробую (думал об этом, но казалось что не best practices решение)

Я подобные случаи разбирал в докладах:

1 лайк