Не всегда срабатывает 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