Как решить элемент, не кликабельный в точке в 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)