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)源码详解的更多相关文章

  1. selenium+python自动化94-行为事件(ActionChains)源码详解

    ActionChains简介 actionchains是selenium里面专门处理鼠标相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互. 这对于做更复杂的动作非常有用,比如悬停 ...

  2. Activiti架构分析及源码详解

    目录 Activiti架构分析及源码详解 引言 一.Activiti设计解析-架构&领域模型 1.1 架构 1.2 领域模型 二.Activiti设计解析-PVM执行树 2.1 核心理念 2. ...

  3. 源码详解系列(七) ------ 全面讲解logback的使用和源码

    什么是logback logback 用于日志记录,可以将日志输出到控制台.文件.数据库和邮件等,相比其它所有的日志系统,logback 更快并且更小,包含了许多独特并且有用的特性. logback ...

  4. vue 源码详解(一):原型对象和全局 `API`的设计

    vue 源码详解(一):原型对象和全局 API的设计 1. 从 new Vue() 开始 我们在实际的项目中使用 Vue 的时候 , 一般都是在 main.js 中通过 new Vue({el : ' ...

  5. vue 源码详解(二): 组件生命周期初始化、事件系统初始化

    vue 源码详解(二): 组件生命周期初始化.事件系统初始化 上一篇文章 生成 Vue 实例前的准备工作 讲解了实例化前的准备工作, 接下来我们继续看, 我们调用 new Vue() 的时候, 其内部 ...

  6. RocketMQ源码详解 | Producer篇 · 其二:消息组成、发送链路

    概述 在上一节 RocketMQ源码详解 | Producer篇 · 其一:Start,然后 Send 一条消息 中,我们了解了 Producer 在发送消息的流程.这次我们再来具体下看消息的构成与其 ...

  7. RocketMQ源码详解 | Broker篇 · 其一:线程模型与接收链路

    概述 在上一节 RocketMQ源码详解 | Producer篇 · 其二:消息组成.发送链路 中,我们终于将消息发送出了 Producer,在短暂的 tcp 握手后,很快它就会进入目的 Broker ...

  8. RocketMQ源码详解 | Broker篇 · 其四:事务消息、批量消息、延迟消息

    概述 在上文中,我们讨论了消费者对于消息拉取的实现,对于 RocketMQ 这个黑盒的心脏部分,我们顺着消息的发送流程已经将其剖析了大半部分.本章我们不妨乘胜追击,接着讨论各种不同的消息的原理与实现. ...

  9. RocketMQ源码详解 | Broker篇 · 其五:高可用之主从架构

    概述 对于一个消息中间件来讲,高可用功能是极其重要的,RocketMQ 当然也具有其对应的高可用方案. 在 RocketMQ 中,有主从架构和 Dledger 两种高可用方案: 第一种通过主 Brok ...

随机推荐

  1. sqlserver 一个字段分成两个字段 截取,保存

      Ma,LeiTo(Ma,lT) 分割后为 姓       名 Ma,LeiTo  Ma,lT SELECT LEFT(作者, CHARINDEX('(', 作者) - 1) AS 姓 , repl ...

  2. 丢手绢问题(约瑟夫问题)的python实现

    约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉. def fnA(p, personNum, cnt): times = cnt // pe ...

  3. 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 ...

  4. Loj #2256. 「SNOI2017」英雄联盟

    题目 我就是个丝薄 如果要用\(dp_i\)表示凑出\(i\)的最小花费显然不可能的 之后大力猜想能凑出来的状态不会很多,我的暴力也告诉我不是很多,好像也确实不多的样子,大概\(4e4\)左右 但是我 ...

  5. svn 查找指定文件和后缀变化

    有时候需要批量查找一些包含特定关键字文件名和后缀的文件,先把所有变化文件通多svn diff命令 输出到一个文件,然后使用如下命令: grep -i 'data*.xml' change.txt |a ...

  6. 《数据结构算法分析C描述》引论:选择问题,字谜游戏问题

    #include <stdio.h> #include <stdlib.h> // 第一题 // 找出N个数的第k个最大者 // 方法1:排序(冒泡),降序找出第k个值 // ...

  7. dpkg安装失败解决过程

      终于好了.搞到转钟3点都没搞定,耽误不少时间. 执行sudo port install dpkg 报错如下Error: org.macports.build for port gmp return ...

  8. weex中UISegmentControl实现及遇到的问题

    在最近主导的一个项目中,App端的实现使用了weex.通过近一个月的实践,我们发现如果对于人机交互较少的App,即使较少前端经验的人也能迅速进入开发(当然需要一定时间 才能上手weex).在开发的时候 ...

  9. mac最常用快捷键

    本人使用的是18款512g的macbookpro<后续简称mbp>,已升级最新mojave系统. 以下是我平时记录.也是使用最多的快捷键,惠存.     1.切换拼音和字母 control ...

  10. 关于IRAM和IFLASH启动模式,重映射remap 整理中

    工程基于NXP LPC2468 1 为什么试用IRAM MODE 2 设置Program algorithm 编程算法的作用是什么 3 IRAM和FLASH 模式下IROM和IRAM的地址为什么不一样 ...