使用Selenium Python在OrangeHRM依次hover多元素后点击报错如何解决
报错原因
AttributeError: move_to requires a WebElement 报错的核心是你传入move_to_element方法的参数不是单个WebElement对象:
你使用的find_elements_by_xpath是复数形式,返回的是匹配到的所有元素组成的列表,直接把列表传入方法自然不符合参数要求。
修正方案
你需要把三处复数定位的find_elements_by_xpath改成单数形式find_element_by_xpath,同时建议补充路径转义、兼容高版本Selenium的写法优化,修正后的代码如下:
from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By import time # 路径前加r避免反斜杠转义问题 driver=webdriver.Chrome(executable_path=r"D:\ChromeDriverExtracted\chromedriver") driver.get("https://opensource-demo.orangehrmlive.com/") driver.maximize_window() time.sleep(2) # 统一用Selenium 4+推荐的By写法,兼容后续版本 driver.find_element(By.ID, "txtUsername").send_keys("Admin") driver.find_element(By.ID, "txtPassword").send_keys("admin123") driver.find_element(By.ID, "btnLogin").click() time.sleep(1) # 改成单数find_element获取单个元素对象 admin=driver.find_element(By.XPATH, "//*[@id='menu_admin_viewAdminModule']/b") userManagment=driver.find_element(By.XPATH, "//*[@id='menu_admin_UserManagement']") users=driver.find_element(By.XPATH, "//*[@id='menu_admin_viewSystemUsers']") actions=ActionChains(driver) actions.move_to_element(admin).move_to_element(userManagment).move_to_element(users).click().perform()
补充注意事项
- 如果运行后仍有元素找不到的问题,可以适当增加
time.sleep的时长,或者换成显式等待逻辑,避免页面未加载完成就执行定位的问题。 - Selenium 4.6+ 已经内置了Selenium Manager,可以自动匹配对应版本的chromedriver,不需要手动指定executable_path路径,如果你升级到对应版本可以去掉该参数。
内容的提问来源于stack exchange,提问作者NikaTheKilla
相关产品推荐
相关产品推荐

