Как решить элемент, не кликабельный в точке в Selenium, используя Python

Я тестирую сценарий, где пробегаю около 200 страниц. Каждая страница содержит кнопку редактирования, на которую мне нужно нажать. Примерно на половине страниц это успешно сделано, но в другой половине я получаю сообщение о том, что другой элемент получит щелчок.

Я знаю, почему возникает ошибка, но я не знаю, как ее решить.

Существует вкладка, которая иногда полностью блокирует кнопку редактирования (в зависимости от длины / ширины страницы и места расположения кнопки редактирования).

Не кликабельный кликабельный

Я попробовал много разных предложений по схожим вопросам, но ни один из тех, которые я пробовал, не помог мне. Особенно эти предложения казались многообещающими:

Ошибка отладки "Элемент не активен в точке"

HTML для кнопки редактирования

<div class="aikis-task-portlet-buttons-panel-button" style="">  
    <input type="button" value="Edit" 
 onclick="_aikistaskgeneric_WAR_aikistaskportlet_INSTANCE_6mbS_openFlashEditMode()" style="width: 85px">     
</div>

HTML-код для вкладки, которая мешает

<div id="userVoicelink" onclick="__displayUserVoicePanel()">    
   Suggestions for improvement
</div>

В: Можно ли как-нибудь сделать его невидимым?

Текущий код, который у меня есть:

edit_button = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH, "//input[@value='Edit']")))
driver.execute_script("arguments[0].scrollIntoView();", edit_button)
edit_button.click()

Исключением является:

ERROR:root:Message: unknown error: Element <a data-toggle="tab" href="#settings">...</a> is not clickable at point (352, 31). Other element would receive the click: <div id="curtain" style="opacity: 0.301426;">...</div>

Используя driver.execute_script("window.scrollTo(0, 350)") и меняя "350" на разные значения, я могу сделать некоторые кнопки кликабельными. Проблема в том, что кнопка редактирования находится не на одном и том же месте на всех страницах. Одним из решений может быть создание цикла с функцией, увеличивающей значение Y, в то же время проверяя, является ли кнопка нажатой / видимой. Я попытался это сделать, но следующий код выдает следующую ошибку:

    y = 350
    driver.execute_script("window.scrollTo(0, y)") 

WebDriverException: неизвестная ошибка: y не определено

Q: Можно ли получить координаты кнопки, а затем, используя, например, driver.execute_script("arguments[0].scrollIntoView();", edit_button) или же driver.execute_script("window.scrollTo(0, 350)") Но сместить позицию так, чтобы она прокручивалась чуть ниже кнопки редактирования?

Кстати, я использую chromedriver, но я испытываю ту же проблему при попытке Geckodriver.

1 ответ

Решение

Что касается вашего последнего сообщения об ошибке, мне кажется, что вы устанавливаете не значение y, а просто символ "y". Предполагая, что вы используете Python 3, это должно решить, что:

y = 350
driver.execute_script(f"window.scrollTo(0, {y})")

Более "прямой", хотя и чуть менее питонический:

y = 350
driver.execute_script("window.scrollTo(0, " + str(y) +")")

Изменить: В соответствии с возможными дубликатами, вы также можете попытаться изменить свой код, нажав кнопку через JavaScript:

edit_button = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH, "//input[@value='Edit']")))
driver.execute_script("arguments[0].scrollIntoView();", edit_button)
driver.execute_script("arguments[0].click();", edit_button)
Другие вопросы по тегам