ActionChains 鼠标操作笔记
1. 引入依赖
import pytest from selenium
import webdriver from selenium.webdriver.common.by
import By from selenium.webdriver.common.action_chains import ActionChains
2. 前置准备(pytest fixture)
@pytest.fixture(scope="module") def driver(): # 创建浏览器实例
driver = webdriver.Chrome() driver.maximize_window()
driver.get("https://www.baidu.com") # 示例页面
driver driver.quit()
3. 单击 click
def test_single_click(driver):
element = driver.find_element(By.ID, "kw") # 百度搜索框
ActionChains(driver).click(element).perform()
注意:
click()
如果不传element
,则点击当前鼠标所在位置。
4. 悬停 hover
def test_hover(driver):
element = driver.find_element(By.XPATH, '//a[text()="更多"]')
ActionChains(driver).move_to_element(element).perform()
常用于测试下拉菜单、tooltip 提示框。
5. 双击 double_click
def test_double_click(driver):
element = driver.find_element(By.ID, "kw")
ActionChains(driver).double_click(element).perform()
双击一般用于触发选中或打开操作。
6. 右击 context_click
def test_right_click(driver):
element = driver.find_element(By.ID, "kw")
ActionChains(driver).context_click(element).perform()
右键操作可以测试自定义右键菜单。
7. 元素拖拽 drag_and_drop
def test_drag_and_drop(driver):
driver.get("https://jqueryui.com/droppable/") # 示例拖拽页面
driver.switch_to.frame(driver.find_element(By.CSS_SELECTOR, ".demo-frame"))
source = driver.find_element(By.ID, "draggable") # 拖动源
target = driver.find_element(By.ID, "droppable") # 拖动目标
ActionChains(driver).drag_and_drop(source, target).perform()
8. 拖拽到指定位置 drag_and_drop_by_offset
def test_drag_and_drop_by_offset(driver):
driver.get("https://jqueryui.com/draggable/")
driver.switch_to.frame(driver.find_element(By.CSS_SELECTOR, ".demo-frame"))
source = driver.find_element(By.ID, "draggable") # 向右 100 像素,下 50 像素
ActionChains(driver).drag_and_drop_by_offset(source, 100, 50).perform()
9. 常用注意事项
.perform()
必须调用所有链式操作在
.perform()
之前不会执行。
如果页面有 iframe,先
driver.switch_to.frame()
再操作元素。如果目标元素被遮挡,需要先滚动到可见位置(
element.location_once_scrolled_into_view
)。鼠标操作可能受浏览器缩放、分辨率影响,建议统一测试环境。
有延迟的交互,配合
.pause(秒数)
使用更稳。