Python ElementClickInterceptedException в Selenium - PullRequest
0 голосов
/ 31 марта 2020

Я работаю над проектом автоматизации на основе селена python. Код автоматизирует некоторые обычные задачи, подключаясь к внутреннему URL-адресу веб-страницы компании. Однако код иногда вызывает одно и то же исключение между двумя действиями нажатия кнопки. Не могли бы вы помочь мне понять, в чем смысл, по которому я скучаю? Заранее спасибо. Вы можете найти мой фрагмент кода и скриншот ошибки здесь:

selenium.common.exceptions.ElementClickInterceptedException: Сообщение: элемент перехвачен: Элемент ... неактивен в точке (180, 447). Другой элемент получит щелчок: ...

pycharm_error_output_screenshot

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

timeout = 200
options = Options()
options.headless = False
driver = webdriver.Chrome(options=options)
driver.implicitly_wait(3)
wait = WebDriverWait(driver, timeout)

driver.get("https://internal_web_appplication_page_for_company_x")

apply_button_v4 = wait.until(EC.visibility_of_element_located((By.XPATH, "//body//button[2]")))
apply_button_v4.click()
both_button = wait.until(EC.element_to_be_clickable((By.XPATH, "// label[3] // span[1]")))
wait.until_not(EC.element_to_be_clickable((By.CLASS_NAME, "map-mask")))
wait.until_not(EC.element_to_be_clickable((By.XPATH, "// *[ contains( @ class, 'map-mask')]")))
both_button.click()

Перехваченный элемент - это полноэкранное уведомление о загрузке, которое отображается для короткий период времени после любого нажатия кнопки. Более того, мой код работает, как и ожидалось, если я поставлю time.sleep (5) до нажатия кнопки «both_button».

1 Ответ

0 голосов
/ 31 марта 2020

Попробуйте следующее решение для нажатия кнопки both_button. Существует несколько причин этого исключения, например, вызов javascript или ajax, элемент отсутствует в порту просмотра.

actions = ActionChains(driver)
actions.move_to_element(both_button)
actions.click(both_button)
actions.perform()
...