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) ------发送某个键到指定元素

相关推荐
GAOJ_K1 小时前
丝杆模组精度下降的预警信号
人工智能·科技·机器人·自动化·制造
焦耳热科技前沿1 小时前
中科大EMA:3秒焦耳热一步合成双功能催化剂用于甲醇氧化协同高效制氢
大数据·人工智能·自动化·能源·材料工程
乾元4 小时前
现场运维机器人的工程化落地——移动探针采集 + AI 诊断,在真实网络中的实现路径
运维·网络·人工智能·架构·机器人·自动化
Blossom.1185 小时前
大模型自动化压缩:基于权重共享的超网神经架构搜索实战
运维·人工智能·python·算法·chatgpt·架构·自动化
Pony_186 小时前
面试 - web ui 自动化
前端·ui·自动化
呉師傅6 小时前
国产麒麟系统卡启动项或图标如何解决
运维·网络·windows·计算机外设·电脑
且去填词6 小时前
DeepSeek :基于 AST 与 AI 的遗留系统“手术刀”式治理方案
人工智能·自动化·llm·ast·agent·策略模式·deepseek
云动课堂6 小时前
【运维实战】企业级Samba文件共享服务 · 一键自动化部署方案 (适配银河麒麟 V10 /openEuler /CentOS)
运维·centos·自动化
cly17 小时前
SaltStack自动化(一): 原理与安装
运维·自动化·saltstack
f***24117 小时前
高效管理临时文件:自动化方案全解析
运维·自动化