Наведение курсора мыши на элемент работает только один раз, используя move_to_element().perform()

#python #selenium #hover #action

#python #селен #наведите курсор #Экшен

Вопрос:

Я использую Selenium, Python для наведения курсора мыши на значок предупреждения и получения всплывающей подсказки. Я использовал цепочки действий. Действие наведения успешно выполняется в первый раз. Тот же код завершается ошибкой при наведении курсора мыши на другой значок предупреждения. (Если я удалю первое действие наведения, второе действие наведения будет успешным, т. Е. Действие наведения выполняется только один раз). Ошибка, которую я получаю: selenium.common.exceptions .Исключение StaleElementReferenceException: Сообщение: устаревшая ссылка на элемент: элемент не прикреплен к документу страницы

Фрагмент кода:

 action = ActionChains(self.driver)
Warning_icon = self.driver.find_element_by_xpath("//div/i[@class='fa fa-exclamation-circle']")
assert Warning_icon 
action.move_to_element(Warning_icon) .perform()
TooltipMessage = self.driver.find_element_by_xpath("").text
action.release()
  

Правка1:
Наведение курсора происходит над теми же предупреждающими сообщениями, даже когда другие элементы упоминаются в move_to_element(other_element) .
Как заставить курсор мыши наводиться на новые элементы?
Экшен.release(), похоже, здесь не работает.

Комментарии:

1. Хотя это и не правильный способ, но единственный способ, которым я могу навести курсор на разные значки, — это объявлять «действия», каждый раз, когда я должен навести курсор. действия = цепочки действий (self.driver).move_to_element(IconToHover) действия.выполнить()

Ответ №1:

Возможно, проблема заключается в следующем: вы наводите курсор на значок предупреждения и получаете всплывающую подсказку. После этого вы находите следующий элемент, и мышь пытается переместиться. В этот момент ваша текущая всплывающая подсказка исчезает, а DOM изменяется, и вы получаете исключение StaleElementReferenceException.

Решение: давайте переместим мышь на другой элемент между переходом от одного значка к другому или попробуем повторить ваши шаги несколько раз.

Комментарии:

1. Пробовал move_to_element.perform() несколько раз для другого элемента, прежде чем навести курсор на значок предупреждения, безуспешно 🙁