UI自动化Selenium ActionChains鼠标(动作链)

我们在实现UI自动化过程中,有时会遇到鼠标模拟操作,如鼠标悬停后,菜单划出;鼠标按下后,下拉展开;单击、双击、拖动等等;但我们常常对鼠标的单击和双击比较了解(click和doubleclick)但是其他的如何使用呢?且看下面分解:

1、selenium提供了一个类来专门处理鼠标的动作-selenium.webdriver.common.action_chains.ActionChains(driver),它基本能满足所有我们对鼠标的操作

2、ActionChains是怎么工作的呢?其实当我们调用它时,他并不会立即执行,而是如一个管道,我们只是将要操作的一系列动作塞入管道中;当打开开关时(调用perform方法),就会按照我们塞入的顺序,依次执行;

3、写法1:链式写法

python 复制代码
# 鼠标悬停到指定元素
def moveMouse2(self, locate, locateType=By.XPATH):
    WebDriverWait(self.driver, 10, 0.5).until(EC.presence_of_element_located((locateType, locate)))
    DH = self.driver.find_element(locateType, locate)  # 得到要操作的对象元素
    ActionsChains(self.driver).move_to_element(DH).click(DH).perform()

4、写法2:分步骤写法

python 复制代码
# 鼠标悬停到指定元素
def moveMouse2(self, locate, locateType=By.XPATH):
    WebDriverWait(self.driver, 10, 0.5).until(EC.presence_of_element_located((locateType, locate)))
    DH = self.driver.find_element(locateType, locate)  # 得到要操作的对象元素
    actions = ActionChains(self.driver)  #创建actionChains对象
    actions.move_to_element(DH) #塞入鼠标悬停事件,并绑定要操作的元素DH
    actions.click(DH) #塞入点击鼠标事件,并绑定要操作的元素DH;
    actions.perform() # 打开开关,触发执行
    # 特别注意,上面步骤中,是可以绑定不同元素的;

5、ActionChains对象的其他方法列表

click(on_element=None) ------单击鼠标左键

click_and_hold(on_element=None) ------点击鼠标左键,不松开

context_click(on_element=None) ------点击鼠标右键

double_click(on_element=None) ------双击鼠标左键

drag_and_drop(source, target) ------拖拽到某个元素然后松开

drag_and_drop_by_offset(source, xoffset, yoffset) ------拖拽到某个坐标然后松开

key_down(value, element=None) ------按下某个键盘上的键

key_up(value, element=None) ------松开某个键

move_by_offset(xoffset, yoffset) ------鼠标从当前位置移动到某个坐标

move_to_element(to_element) ------鼠标移动到某个元素

move_to_element_with_offset(to_element, xoffset, yoffset) ------移动到距某个元素(左上角坐标)多少距离的位置

perform() ------执行链中的所有动作

release(on_element=None) ------在某个元素位置松开鼠标左键

send_keys(*keys_to_send) ------发送某个键到当前焦点的元素

send_keys_to_element(element, *keys_to_send) ------发送某个键到指定元素

相关推荐
聆风吟º8 小时前
CANN开源项目深度实践:基于amct-toolkit实现自动化模型量化与精度保障策略
运维·开源·自动化·cann
做人不要太理性13 小时前
CANN Runtime 运行时与维测组件:异构任务调度、显存池管理与全链路异常诊断机制解析
人工智能·自动化
池央14 小时前
CANN oam-tools 诊断体系深度解析:自动化信息采集、AI Core 异常解析与 CI/CD 流水线集成策略
人工智能·ci/cd·自动化
依米阳光0814 小时前
Playwright MCP AI实现自动化UI测试
ui·自动化·playwright·mcp
YongCheng_Liang14 小时前
从零开始学 Python:自动化 / 运维开发实战(核心库 + 3 大实战场景)
python·自动化·运维开发
鸽芷咕14 小时前
为什么越来越多开发者转向 CANN 仓库中的 Python 自动化方案?
python·microsoft·自动化·cann
大大大反派17 小时前
CANN 生态中的自动化部署引擎:深入 `mindx-sdk` 项目构建端到端 AI 应用
运维·人工智能·自动化
缺点内向18 小时前
C#: 告别繁琐!轻松移除Word文档中的文本与图片水印
c#·自动化·word·.net
机器视觉的发动机18 小时前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
0思必得019 小时前
[Web自动化] Selenium处理滚动条
前端·爬虫·python·selenium·自动化