Размер шрифта:
Не всегда срабатывает click по элементу
Play

Не всегда срабатывает click по элементу

Строю фреймворк для написания тестов и загвоздка в методе с кликом по кнопке.

Суть в том, что клик какбЭ не всегда срабатывает, и положенный POST запрос от формы не уходит. Вроде ожидаю как положено элемента, вроде кликаю по нему, но почти в половине случаев фактически в браузере клика не происходит.

Привожу части кода

#2 elvis
  • Город: Tallinn

не отработали какие-то вещи на странице, нужно ждать, так как ExpectedConditions . elementToBeClickable - не панацея, увы

#3 Prettser

Забыл написать, что submit самой формы вместо click по button - выручает, но это не честно по отношению к действиям настоящего пользователя.

Исходя из этого, есть подозрение, что просто браузер еще не знает о функции

которая прописана сразу же после блока с формой. Может ли быть это причиной?

#4 elvis
  • Город: Tallinn

попробуй проверять document.readyState (гугл в помощь) или то, что функция определена

#5 serjb9

Вместо клика что происходит?

Элемент в зоне видимости?

Переинциализировать элемент перед кликом пробовал?

#6 Prettser

Вместо клика что происходит?

Элемент в зоне видимости?

Переинциализировать элемент перед кликом пробовал?

Ничего не происходит. По крайней мере не происходит логаут. Строчка кода выполняется, но результат клика не виден, ни каких ошибок тоже. В этом вся суть вопроса

Элемент в зоне видимости, доступен и кликабелен.

Это на самом деле не элемент, а проксиэлемент (этож PageFactory) и поиск по сути происходит при каждом обращении.

Селениум не выкидывает ошибок, он думает, что честно нажал на видимый элемент. Склоняюсь к озвученному мной выше варианту, что дело в функции.

- Селениум жмет кнопку

- После этого прогружается функция, которая не вызвалась на момент нажатия кнопки.

Попросил разработчиков функцию прописать выше. А пока делаю submit формы вместо функции.

#7 serjb9

Я тоже раньше так считал, и не поверил своим глазам, когда повесил переинициализацию на элементы.

Где собака зарыта и на какой глубине, я пока не знаю (возможно плацебо + время инициализации делают свое дело :) ).

Можно было проще обыграть:

- Т.к. это логаут смотрим, разлогинило нас или нет

Если не вышли: - Чекаем контент на script (есть ли, загрузился ли)

- Жмем кнопку еще раз

и в loop если необходимо

#8 elvis
  • Город: Tallinn

Я тоже раньше так считал, и не поверил своим глазам, когда повесил переинициализацию на элементы.

Где собака зарыта и на какой глубине, я пока не знаю (возможно плацебо + время инициализации делают свое дело :) ).

Можно было проще обыграть:

- Т.к. это логаут смотрим, разлогинило нас или нет

Если не вышли: - Чекаем контент на script (есть ли, загрузился ли)

- Жмем кнопку еще раз

и в loop если необходимо

А если у юзеров кнопка будет срабатывать всегда со 2й попытки? Тест ваш будет зелёный?

#9 serjb9

Постановка такой конструкции дала бы понять, что клик происходит после загрузки скрипта.

Можно было бы вычеркнуть 1+2 шаги нажатия на кнопку, согласен.

А что делать, если затрекать события не получается ни в какую?

#10 Prettser

Перед кликом на кнопку временно сделал вытаскивание в строку driver .getPageSource(); И там вся страница целиком (вместе со скриптом).

И, наверное, это логично. Ведь если элемент отрисован и кликабелен (что проверяется перед кликом), значит это уже идет этап отрисовки и код страницы загружен вместе с нужной функцией.

Простой слип в 1000мс перед кликом избавляет от проблемы. Значит чего-то не хватает секундой раньше, но так и не пойму чего. :)

Секунда ничего не решает и можно так и оставить. По отношению к пользователю и функциональному тестированию все честно, ведь никто в реальности так быстро жать кнопку не сможет.

Но я же теперь спать нормально не смогу, буду думать о вопросе "Почему? И как можно сделать красиво?"

#11 elvis
  • Город: Tallinn

Перед кликом на кнопку временно сделал вытаскивание в строку driver .getPageSource(); И там вся страница целиком (вместе со скриптом).

И, наверное, это логично. Ведь если элемент отрисован и кликабелен (что проверяется перед кликом), значит это уже идет этап отрисовки и код страницы загружен вместе с нужной функцией.

Простой слип в 1000мс перед кликом избавляет от проблемы. Значит чего-то не хватает секундой раньше, но так и не пойму чего. :)

Секунда ничего не решает и можно так и оставить. По отношению к пользователю и функциональному тестированию все честно, ведь никто в реальности так быстро жать кнопку не сможет.

Но я же теперь спать нормально не смогу, буду думать о вопросе "Почему? И как можно сделать красиво?"

Если это один тест, то можно сформулировать требование так - кнопка logout активна через N ms после того, как стала видимой. И требования к задержке согласовать с продакт оунером. Далее дрючить девов :D

📎📎📎📎📎📎📎📎📎📎