行为事件(ActionChains)源码详解
ActionChains简介
actionchains是selenium里面专门处理鼠标相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互。
这对于做更复杂的动作非常有用,比如悬停和拖放。
actionchains也可以和快捷键结合起来使用,如ctrl,shif,alt结合鼠标一起使用
当你使用actionchains对象方法,行为事件是存储在actionchains对象队列。当你使用perform(),事件按顺序执行。
- 方法一:可以写一长串
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
- 方法二:可以分几步写
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()
无论哪种方式,操作都是按照调用的顺序执行挨个执行!
方法介绍
1.以下提到的Keys类,是selenium里面的键盘事件类,导入方法:
from selenium.webdriver.common.keys import Keys
2.鼠标事件使用导入方法:
from selenium.webdriver.common.action_chains import ActionChains
class ActionChains(object):
def __init__(self, driver):
self._driver = driver
self._actions = []
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">perform</span><span class="hljs-params">(<span class="hljs-keyword">self</span>)</span></span>:
<span class="hljs-comment"># 执行行为事件</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">click</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, on_element=None)</span></span>:
点击:
- 如果参数不写,那么点击的是当前鼠标位置
- 如果参数写定位到的元素对象element,那就是点这个元素
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">click_and_hold</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, on_element=None)</span></span>:
鼠标左键按住某个元素
- 如果参数不写,那么点的是当前鼠标位置
- 如果参数写定位到的元素对象element,那就是点这个元素
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">context_click</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, on_element=None)</span></span>:
鼠标右键点击
- 如果参数不写,那么点的是当前鼠标位置
- 如果参数写定位到的元素对象element,那就是点这个元素
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">double_click</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, on_element=None)</span></span>:
双击鼠标
- 如果参数不写,那么点的是当前鼠标位置
- 如果参数写定位到的元素对象element,那就是点这个元素
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">drag_and_drop</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, source, target)</span></span>:
按住源元素上的鼠标左键,然后移动到目标元素并释放鼠标按钮
- <span class="hljs-symbol">source:</span> 按住鼠标的元素位置
- <span class="hljs-symbol">target:</span> 松开鼠标的元素位置
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">drag_and_drop_by_offset</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, source, xoffset, yoffset)</span></span>:
按住源元素上的鼠标左键,然后移动到目标偏移量并释放鼠标按钮。
- <span class="hljs-symbol">source:</span> 按住鼠标的元素位置
- <span class="hljs-symbol">xoffset:</span> X 轴的偏移量
- <span class="hljs-symbol">yoffset:</span> Y 轴的偏移量
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">key_down</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, value, element=None)</span></span>:
只发送一个按键,而不释放它。只应用于修饰键(控制、alt和shift)。
- <span class="hljs-symbol">value:</span> 要发送的修饰符键。值在“Keys”类中定义。
- <span class="hljs-symbol">element:</span> 定位的元素
如果element参数不写就是当前鼠标的位置
举个例子,按住 ctrl+c::
ActionChains(driver).key_down(Keys.CONTROL).send_keys(<span class="hljs-string">'c'</span>).key_up(Keys.CONTROL).perform()
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">key_up</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, value, element=None)</span></span>:
<span class="hljs-comment"># 释放按键,配合上面的一起使用</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">move_by_offset</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, xoffset, yoffset)</span></span>:
将鼠标移动到当前鼠标位置的偏移量
- <span class="hljs-symbol">xoffset:</span> X轴 作为一个正整数或负整数移动到x偏移量
- <span class="hljs-symbol">yoffset:</span> Y轴 偏移,作为正整数或负整数。
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">move_to_element</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, to_element)</span></span>:
鼠标悬停
- <span class="hljs-symbol">to_element:</span> 定位需要悬停的元素
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">move_to_element_with_offset</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, to_element, xoffset, yoffset)</span></span>:
通过指定元素的偏移量移动鼠标。偏移量与元素的左上角相对
- <span class="hljs-symbol">to_element:</span> 定位需要悬停的元素
- <span class="hljs-symbol">xoffset:</span> X 轴偏移量
- <span class="hljs-symbol">yoffset:</span> Y 轴偏移量
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">release</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, on_element=None)</span></span>:
释放一个元素上的鼠标按钮。
- 如果参数不写,那么是当前鼠标位置
- 如果参数写定位到的元素对象element,那就是这个元素.
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">send_keys</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, *keys_to_send)</span></span>:
发送到当前焦点元素
要发送的按键。修饰符键常数可以在“Keys”类。
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">send_keys_to_element</span><span class="hljs-params">(<span class="hljs-keyword">self</span>, element, *keys_to_send)</span></span>:
发送到定位到的元素上
- <span class="hljs-symbol">element:</span> 定位的元素
- <span class="hljs-symbol">keys_to_send:</span> 要发送的按键。修饰符键常数可以在“Keys”类。</code></pre>
举个案例
1.实现Ctrl +F5 的组合键功能
# coding:utf-8
行为事件(ActionChains)源码详解的更多相关文章
- selenium+python自动化94-行为事件(ActionChains)源码详解
ActionChains简介 actionchains是selenium里面专门处理鼠标相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互. 这对于做更复杂的动作非常有用,比如悬停 ...
- Activiti架构分析及源码详解
目录 Activiti架构分析及源码详解 引言 一.Activiti设计解析-架构&领域模型 1.1 架构 1.2 领域模型 二.Activiti设计解析-PVM执行树 2.1 核心理念 2. ...
- 源码详解系列(七) ------ 全面讲解logback的使用和源码
什么是logback logback 用于日志记录,可以将日志输出到控制台.文件.数据库和邮件等,相比其它所有的日志系统,logback 更快并且更小,包含了许多独特并且有用的特性. logback ...
- vue 源码详解(一):原型对象和全局 `API`的设计
vue 源码详解(一):原型对象和全局 API的设计 1. 从 new Vue() 开始 我们在实际的项目中使用 Vue 的时候 , 一般都是在 main.js 中通过 new Vue({el : ' ...
- vue 源码详解(二): 组件生命周期初始化、事件系统初始化
vue 源码详解(二): 组件生命周期初始化.事件系统初始化 上一篇文章 生成 Vue 实例前的准备工作 讲解了实例化前的准备工作, 接下来我们继续看, 我们调用 new Vue() 的时候, 其内部 ...
- RocketMQ源码详解 | Producer篇 · 其二:消息组成、发送链路
概述 在上一节 RocketMQ源码详解 | Producer篇 · 其一:Start,然后 Send 一条消息 中,我们了解了 Producer 在发送消息的流程.这次我们再来具体下看消息的构成与其 ...
- RocketMQ源码详解 | Broker篇 · 其一:线程模型与接收链路
概述 在上一节 RocketMQ源码详解 | Producer篇 · 其二:消息组成.发送链路 中,我们终于将消息发送出了 Producer,在短暂的 tcp 握手后,很快它就会进入目的 Broker ...
- RocketMQ源码详解 | Broker篇 · 其四:事务消息、批量消息、延迟消息
概述 在上文中,我们讨论了消费者对于消息拉取的实现,对于 RocketMQ 这个黑盒的心脏部分,我们顺着消息的发送流程已经将其剖析了大半部分.本章我们不妨乘胜追击,接着讨论各种不同的消息的原理与实现. ...
- RocketMQ源码详解 | Broker篇 · 其五:高可用之主从架构
概述 对于一个消息中间件来讲,高可用功能是极其重要的,RocketMQ 当然也具有其对应的高可用方案. 在 RocketMQ 中,有主从架构和 Dledger 两种高可用方案: 第一种通过主 Brok ...
随机推荐
- sqlserver 一个字段分成两个字段 截取,保存
Ma,LeiTo(Ma,lT) 分割后为 姓 名 Ma,LeiTo Ma,lT SELECT LEFT(作者, CHARINDEX('(', 作者) - 1) AS 姓 , repl ...
- 丢手绢问题(约瑟夫问题)的python实现
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉. def fnA(p, personNum, cnt): times = cnt // pe ...
- BZOJ1444:[JSOI2009]有趣的游戏(AC自动机,矩阵乘法)
Description Input 注意 是0<=P, n , l, m≤ 10. Output Sample Input input 1 3 2 2 1 2 1 2 AB BA AA inpu ...
- Loj #2256. 「SNOI2017」英雄联盟
题目 我就是个丝薄 如果要用\(dp_i\)表示凑出\(i\)的最小花费显然不可能的 之后大力猜想能凑出来的状态不会很多,我的暴力也告诉我不是很多,好像也确实不多的样子,大概\(4e4\)左右 但是我 ...
- svn 查找指定文件和后缀变化
有时候需要批量查找一些包含特定关键字文件名和后缀的文件,先把所有变化文件通多svn diff命令 输出到一个文件,然后使用如下命令: grep -i 'data*.xml' change.txt |a ...
- 《数据结构算法分析C描述》引论:选择问题,字谜游戏问题
#include <stdio.h> #include <stdlib.h> // 第一题 // 找出N个数的第k个最大者 // 方法1:排序(冒泡),降序找出第k个值 // ...
- dpkg安装失败解决过程
终于好了.搞到转钟3点都没搞定,耽误不少时间. 执行sudo port install dpkg 报错如下Error: org.macports.build for port gmp return ...
- weex中UISegmentControl实现及遇到的问题
在最近主导的一个项目中,App端的实现使用了weex.通过近一个月的实践,我们发现如果对于人机交互较少的App,即使较少前端经验的人也能迅速进入开发(当然需要一定时间 才能上手weex).在开发的时候 ...
- mac最常用快捷键
本人使用的是18款512g的macbookpro<后续简称mbp>,已升级最新mojave系统. 以下是我平时记录.也是使用最多的快捷键,惠存. 1.切换拼音和字母 control ...
- 关于IRAM和IFLASH启动模式,重映射remap 整理中
工程基于NXP LPC2468 1 为什么试用IRAM MODE 2 设置Program algorithm 编程算法的作用是什么 3 IRAM和FLASH 模式下IROM和IRAM的地址为什么不一样 ...