1、selenium做自动化的时候,需要模拟鼠标进行单击、双击、右键、拖拽等操作,selenium提供了ActionChains类来进行处理。

2、执行原理:当你调用ActionChains的方法时,不会立即执行,而是会将所有的操作按顺序存放在一个队列里,当你调用perform()方法时,队列中的事件会依次执行。

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
driver=webdriver.Chrome()
driver.get('http://....')
source=driver.find_element_by_id('id1')
target=driver.find_element_by_id('id2')
ActionChains(driver).drag_and_drop(source, target).perform()  #拼图操作:从起点移动到终点
 

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

3、举例

3.1、点击:单击、双击、右击

e1=driver.find_element_by_css_selector('#onC')  #单击元素

e2=driver.find_element_by_css_selector('#dbonC')  #双击元素

e3=driver.find_element_by_css_selector('#menuOnC')  #右击元素ActionChains(driver).click(e1).double_click(e2).context_click(e3).perform()  #先单击、再双击、再右击

3.2、移动:系统中鼠标移动到某个元素上,或悬浮到e1元素后才会出现e2元素并点击e2元素

e1=driver.find_element_by_css_selector('#a')

e2=driver.find_element_by_css_selector('#dis1')

driver.execute_script('window.scrollTo(0,0);')  #这一行可以不加,是因为我的元素需要显示在页面最上方

ActionChains(driver).move_to_element(e1).click(e2).perform()  #移动到e1元素上后,e2元素的点击按钮才会出现,进行了一次点击操作

如果只移动到e1元素:ActionChains(driver).move_to_element(e1).perform()

ActionChains(driver).move_to_element_with_offset(e1, 100, -50).perform() # 移动到距离e1元素坐标(100,-50)的点

3.3、拖拽:目前项目中遇到了拼图操作、连线操作

e1=driver.find_element_by_css_selector('#a')

e2=driver.find_element_by_css_selector('#b')

ActionChains(driver).drag_and_drop(e1,e2).perform()   #1、从e1处拖拽到e2处,目前在拼图操作有用到(知道目的元素)

ActionChains(driver).drag_and_drop_by_offset(e1,'180','120').perform()  #2、和1相同,从e1处拖拽到坐标(180,120)的地方(不知道目的元素)

ActionChains(driver).click_and_hold(e1).release(e2).perform()    #3、从e1处按住不放,拖到e2处松手,目前用在连线操作ActionChains(driver).click_and_hold(e1).move_to_element(e2).release().perform()    #4、和3相同ActionChains(driver).click_and_hold(e1).move_by_offset('180','120').release().perform()    #5、和3、4相同,从e1移动到坐标(180,120)

之前看到过一个博客,关于登录的时候需要用到滑块登录:

ActionChains(driver).drag_and_drop_by_offset(e1,int(random.random()*180)+50,0).perform() #别人博客上看到的滑块登录,目前还没有使用过

3.4、按键的用法:目前还没有使用到,后续补充

selenium做UI自动化时,模拟鼠标各种操作的ActionChains的用法的更多相关文章

  1. 使用appium+python做UI自动化的demo

    使用appium+python做UI自动化的demo 案例使用的知乎app,下载最新的知乎apk,存在了电脑上,只需要配置本机上app目录,不需要再配置appPackage和appActivity # ...

  2. selenium之浏览器、元素、鼠标等操作总结

    1    控制浏览器 Selenium 主要提供的是操作页面上各种元素的方法,但它也提供了操作浏览器本身的方法,比如浏览器的大小以及浏览器后退.前进按钮等. 1.1  控制浏览器窗口大小 在不同的浏览 ...

  3. python模拟鼠标拖动操作的方法

    本文实例讲述了python模拟鼠标拖动操作的方法.分享给大家供大家参考.具体如下: pdf中的书签只有页码,准备把现有书签拖到一个目录中,然后添加自己页签.重复的拖动工作实在无趣,还是让程序帮我实现吧 ...

  4. UI自动化时,解决selenium中无法点击Element:ElementClickInterceptedException

    在跑自动化时,页面上有2个下拉框,两个下拉框无论屏蔽哪一段都会成功,但是同时放开跑时会报错,百度给的解释是上面的下拉框元素覆盖了下面下拉框的元素定位,才会导致报错 百度的解决办法有2种: elemen ...

  5. selenium webdriver从安装到使用(python语言),显示等待和隐性等待用法,切换窗口或者frame,弹框处理,下拉菜单处理,模拟鼠标键盘操作等

    selenium的用法 selenium2.0主要包含selenium IDE 和selenium webDriver,IDE有点类似QTP和LoadRunner的录制功能,就是firefox浏览器的 ...

  6. selenium webdriver模拟鼠标键盘操作

    在测试使用Selenium webdriver测试WEB系统的时候,用到了模拟鼠标.键盘的一些输入操作. 1.鼠标的左键点击.双击.拖拽.右键点击等: 2.键盘的回车.回退.空格.ctrl.alt.s ...

  7. 小心!做 UI 自动化一定要跨过这些坑

    一 .引子 UI自动化,在移动互联网时代的今天,一直都是在各大测试社区最为火爆的一个TOPIC.甚至在测试同行面前一提起自动化,大家就会自然而然的问:“恩,你们是用的什么框架?appium?还是rob ...

  8. python+selenium封装UI自动化框架

    seleinum框架 框架的思想:  解决我们测试过程中的问题:大量的重复步骤,用自动化来实现    1)配置和程序的分离    2)测试数据和程序的分离    3)不懂编程的人员可以方便使用:使用的 ...

  9. selenium webdriver(4)---模拟鼠标键盘操作

    webdriver提供Actions来模拟鼠标悬浮.拖拽和键盘输入等操作,详细代码见org.openqa.selenium.interactions.Actions.本文通过几个实例来说明Action ...

随机推荐

  1. 三、HelloWorld

    1.创建Hello.java 文件, 2.输入内容 public class Hello{ //公共类 Hello public static void main(String[] args){ // ...

  2. 【SCOI2013】摩托车交易 - 最大生成树+树链剖分

    题目描述 mzry1992 在打完吊针出院之后,买了辆新摩托车,开始了在周边城市的黄金运送生意.在mzry1992 生活的地方,城市之间是用双向高速公路连接的.另外,每条高速公路有一个载重上限,即在不 ...

  3. 正规式转化为DFA

    https://www.bilibili.com/video/BV1dj411f7AR?p=50 例题:

  4. SpringCloudAlibaba-服务网关Gateway

    一:网关简介 在微服务架构中,一个系统会被拆分为很多个微服务.那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用.这样的话会产生很多问 ...

  5. JavaScript学习系列博客_33_JavaScript String对象

    String对象 在底层,字符串是以数组的形式保存的.比如说一个字符串"String"以["H","t","r",&qu ...

  6. SPSSAU数据分析思维培养系列3:分析思路篇

    本文章为SPSSAU数据分析思维培养的第3期文章. 上文讲解如何选择正确的分析方法,除了有正确的分析方法外,还需要把分析方法进行灵活运用.拿到一份数据,应该如何进行分析,总共有几个步骤,第一步第二步应 ...

  7. muduo源码解析10-logstream类

    FixedBuffer和logstream class FixedBuffer:noncopyable { }: class logstream:noncopyable { }: 先说一下包含的头文件 ...

  8. OI常用数学定理&方法总结

    组合数计算($O(n)$) https://www.cnblogs.com/linzhuohang/p/11548813.html Lucas定理 如果要计算很大的组合数,但模数较小,考虑这个方法 对 ...

  9. 【转】C# 利用反射根据类名创建类的实例对象

    原文地址:https://www.cnblogs.com/feiyuhuo/p/5793606.html “反射”其实就是利用程序集的元数据信息. 反射可以有很多方法,编写程序时请先导入 System ...

  10. “网络巨轮”BGP的高级装备(增强配置)

    引入 如下图在很多时候,BGP建立对等体的时候,要去建立大量的EBGP和IBGP对等体,IBGP还要全连接,这就给我们带来了大量重复的工作,路由表就会变得很庞大,区域内和区域之间就会很难管理,以下这些 ...