Возникла сложность, у меня есть список елементов на странице которые нужно проверив кликнув на них переходя на новую страницу а потом вернуться, получилось так что срабатывают первые 3 елемента а те что ниже (не видны) и пишет каждый раз Element is not clickable at point … Кто может посмотреть и сказать какие есть варианты ? Пробовал с ActionChains(driver).move_to_element(elem).perform() разные вариации но увы
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC, expected_conditions, wait
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re
from selenium.webdriver.support.wait import WebDriverWait
class Video003(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.base_url = "https://www.hydroshare.org/"
self.verificationErrors = []
self.accept_next_alert = True
def test_180320_video003(self):
driver = self.driver
driver.get(self.base_url + "/")
driver.find_element_by_link_text("HELP").click()
support_links = driver.find_elements_by_css_selector(".topic-name>div")
links_text = []
for l in support_links:
links_text.append(l.text)
for link in links_text:
elem = driver.find_element_by_xpath("//div[contains(text(),\"{}\")]".format(link))
ActionChains(driver).move_to_element(elem).perform()
elem.click()
WebDriverWait(driver, 4).until(
expected_conditions.text_to_be_present_in_element(
(By.CSS_SELECTOR, "#breadcrumb-menu-home>a"),
"HydroShare Support"
)
)
driver.back()
У меня вот что выдает
selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (371.5, 11.600006103515625). Other element would receive the click:
Но в Firefox запускаю, и по требованиям как раз нужно что бы в нем работало
Попробовал и сам запустить на Chrome, с первого раза заработал, даже при учете того что не не выставлял размер окна. Потом добавил maximize_window() ну и так же работало хорошо. Но что делать с Firefox уже не знаю
Важен порядок в котором проходят клики по элементам. У вас сначала ff кликает на что-то внизу, страница прокручивается вниз, при возврате назад - прокрутка на том же месте, а клик на следующий элемент сделать нельзя, т.к. он под меню.
Вижу несколько вариантов:
Жестко задать порядок элементов (вряд ли хелп меняется так часто что вы его перебором прокликиваете)
Скролл вверх страницы после возврата назад.
Как выше предложили - триггерить событие через JS/
Можете помечать тему как решенную. Если у вас Page Objects то киньте в BasePage такую функу и забудьте про дефолтные клики:
def click_via_script(self, element: WebElement):
"""
Метод осуществляет клик по элементу через JS скрипт
:param element: экземпляр класса WebElement
"""
self.driver.execute_script("arguments[0].click();", element)
PS: Использовать чистый Selenium = начать учить JS))