Как решить проблему - исключение Elementclickintercepted - PullRequest
0 голосов
/ 23 мая 2019

Я использую Selenium 3.9.0 + GeckoDriver 0.24 + FireFox 58.0.2.

Когда веб-драйверу требуется щелкнуть элемент в дереве навигации на моем целевом сайте -> сбой сценария с исключением селена: «selenium.common.exceptions.ElementClickInterceptedException: Message: элемент не активен в точке (151,823), потому что другой элемент скрывает его»

В чем проблема, как я могу это исправить?

Я попытался увеличить время ожидания для элемента DOM, прежде чем селен будет кликать по элементу. Но это не помогло мне. Когда я использовал старую версию selenium (2.53) и старую версию firefox (45.2.0), этот скрипт работал отлично. HTML-код на этом сайте никто не изменил.

Также, если я запускаю только один тестовый пример -> скрипт не падает и завершается успешно. Если я запускаю много тестов -> сценарий начинает аварийно завершаться с этими исключениями.

Я использую отдельный метод для щелчка по элементу:

def click (драйвер, локатор, sleep_time = 5, expl_wait = 40): «»» Дождитесь, пока элемент будет показан и кликабелен, затем отправьте ему «клик». TimeoutException будет сгенерировано, если что-то не так (НЕ NoSuchElementException).

:type driver: WebDriver
:type locator: tuple
:param sleep_time: delay before click
:param expl_wait: explicit waiting time for presence of element will found
:type sleep_time: float
:type expl_wait: float
"""

time.sleep(sleep_time)
WebDriverWait(driver, expl_wait, ignored_exceptions=StaleElementReferenceException).until(
    ec.presence_of_element_located(locator))
# additional check were deleted, cause of some unexpected timeout exceptions on it
WebDriverWait(driver, 40).until(ec.element_to_be_clickable(locator))
driver.find_element(*locator).click()
wait_for_loading(driver)

Веб-драйвер должен щелкнуть по элементу, выполнить некоторые действия и вернуть успешный или неудачный результат. Но фактический результат -> сбой скрипта, потому что селен не может щелкнуть по элементу

1 Ответ

1 голос
/ 23 мая 2019
selenium exception: "selenium.common.exceptions.ElementClickInterceptedException: Message: Element is not clickable at point (151,823) because another element obscures it

Чтобы решить эту проблему, попробуйте с помощью javaScript Executor щелкнуть элемент.

driver.execute_script("arguments[0].click();",driver.find_element(*locator))
...