Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Python+selenium+geckodriver. Почему происходит ложный клик по элементу?

behave
webdriver
python
selenium
Теги: #<Tag:0x00007fedb81668b0> #<Tag:0x00007fedb8166770> #<Tag:0x00007fedb8166630> #<Tag:0x00007fedb81664f0>

(Daulet) #1

Доброго времени суток!)

подскажите, я нахожу элемент на web странице через мотодом find_elements_by_xpath(“my/xpath”), делаю проверку, что элемнет

.is_enabled() .is_displayed(), совершаю клик по элементу, но клика не происходит. Если делаю задержку в 1 сек. или более после всех проверок, тогда клик происходит.
Бьюсь с этой проблемой давно, пробовал различные пути workaround, но все это костыли, вокруг нерешенной проблемы.
На чьей стороне проблема, на стороне web части или geckodriver? Как решить это недорузумение?
Благодарю!)


(Maxim Andryushchenkov) #2

Попробуйте вот так:

driver.execute_script("arguments[0].click();", element)

где element - экземпляр класса WebElement, то есть уже найденный элемент


(Ильдар Бекмансуров) #3

А что значит клика не происходит? Какой Exception?

Возможно нужно подождать пока элемент станет кликабельным element_to_be_clickable

from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "myXpath")))
element.click()

(Daulet) #4

Благодрю за workaround.
Автотматизирую web приложение написанное на dojo, тоже первое что пришло в голову кликать javascript-ом, но в dojo кликнуть например по селекту js-ом не получается. Даже из консоли браузера.


(Daulet) #5

В том то идело, что никакого exception не вываливается, просто происходит клик по мертвому елементу, который не дает событие.
на счет element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, “myXpath”)))
element.click()
писал выше, что делаю проверку .is_enabled() .is_displayed()
это равноценные проверки, внутри element_to_be_clickable, вызываются эти методы


(Maxim Andryushchenkov) #6

Дайте пример, ссылку на страницу желательно где не получается кликнуть


(Daulet) #7

https://dispatch.navitel.ru/
user: temp_user
login: 1234qwer

Вкладка “Объекты” -> нажимаем на “+” -> в появившемся окне выбираем “Производитель” -> “Модель” не кликаеся js-ом
на скринах подробнее



(Вадим) #8

Что Вы именно хотите сделать ? Выбрать конкретную опцию, получить список опций или же ввести значение в инпут поля ?


(Daulet) #9

Выбрать конкретную опцию, из списка опций.


#10

Здравствуйте, не то, что бы я был сильно прошаренный, но такие вот проблемы,по моему опыту, зачастую решаются чем-то вроде этого: https://m.habrahabr.ru/post/111649/

У меня была с ангуляром похожая проблема, это по-сути единственный выход как написать стабильные автотесты. Стандартными вэйтами вы этого не добьётесь, либо у вас на одно действие будет по 3 вэйта


(Daulet) #11

Весь ajax уже отрабатывает, и элемент находится нужный, но клика по элементу не происходит


#12

Ну, можно ещё попробовать яваскриптом scrollIntoView сделать, а после этого кликать по элементу, иногда помогает


(Вадим) #13

Первый вариант, если вам требуется выбрать что-то из списка Вам не что не мешает использовать инпут который подтягивает значение из списка (send_keys + press_enter). Если используете другой сценарий, то попробуйте использовать такой фреймворк как Selene . Он помогает решить не только проблемы с wait ( проксирует указанное действие в течении указанного времени), но и ряд других проблем.