selenium做UI自动化时,模拟鼠标各种操作的ActionChains的用法
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的用法的更多相关文章
- 使用appium+python做UI自动化的demo
使用appium+python做UI自动化的demo 案例使用的知乎app,下载最新的知乎apk,存在了电脑上,只需要配置本机上app目录,不需要再配置appPackage和appActivity # ...
- selenium之浏览器、元素、鼠标等操作总结
1 控制浏览器 Selenium 主要提供的是操作页面上各种元素的方法,但它也提供了操作浏览器本身的方法,比如浏览器的大小以及浏览器后退.前进按钮等. 1.1 控制浏览器窗口大小 在不同的浏览 ...
- python模拟鼠标拖动操作的方法
本文实例讲述了python模拟鼠标拖动操作的方法.分享给大家供大家参考.具体如下: pdf中的书签只有页码,准备把现有书签拖到一个目录中,然后添加自己页签.重复的拖动工作实在无趣,还是让程序帮我实现吧 ...
- UI自动化时,解决selenium中无法点击Element:ElementClickInterceptedException
在跑自动化时,页面上有2个下拉框,两个下拉框无论屏蔽哪一段都会成功,但是同时放开跑时会报错,百度给的解释是上面的下拉框元素覆盖了下面下拉框的元素定位,才会导致报错 百度的解决办法有2种: elemen ...
- selenium webdriver从安装到使用(python语言),显示等待和隐性等待用法,切换窗口或者frame,弹框处理,下拉菜单处理,模拟鼠标键盘操作等
selenium的用法 selenium2.0主要包含selenium IDE 和selenium webDriver,IDE有点类似QTP和LoadRunner的录制功能,就是firefox浏览器的 ...
- selenium webdriver模拟鼠标键盘操作
在测试使用Selenium webdriver测试WEB系统的时候,用到了模拟鼠标.键盘的一些输入操作. 1.鼠标的左键点击.双击.拖拽.右键点击等: 2.键盘的回车.回退.空格.ctrl.alt.s ...
- 小心!做 UI 自动化一定要跨过这些坑
一 .引子 UI自动化,在移动互联网时代的今天,一直都是在各大测试社区最为火爆的一个TOPIC.甚至在测试同行面前一提起自动化,大家就会自然而然的问:“恩,你们是用的什么框架?appium?还是rob ...
- python+selenium封装UI自动化框架
seleinum框架 框架的思想: 解决我们测试过程中的问题:大量的重复步骤,用自动化来实现 1)配置和程序的分离 2)测试数据和程序的分离 3)不懂编程的人员可以方便使用:使用的 ...
- selenium webdriver(4)---模拟鼠标键盘操作
webdriver提供Actions来模拟鼠标悬浮.拖拽和键盘输入等操作,详细代码见org.openqa.selenium.interactions.Actions.本文通过几个实例来说明Action ...
随机推荐
- Flutter build apk 如何访问网络
将下列配置放到路径:your_project\android\app\src下的 main 文件夹下的 AndroidManifest.xml 和 profile 文件夹下的 AndroidManif ...
- Jmeter(二十一) - 从入门到精通 - JMeter断言 - 上篇(详解教程)
1.简介 最近由于宏哥在搭建自己的个人博客可能更新的有点慢.断言组件用来对服务器的响应数据做验证,常用的断言是响应断言,其支持正则表达式.虽然我们的通过响应断言能够完成绝大多数的结果验证工作,但是JM ...
- 【NOI2014】动物园 - KMP
题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法. 某天, ...
- 机器学习 | 详解GBDT在分类场景中的应用原理与公式推导
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...
- Java中实现十进制数转换为二进制的三种方法
第一种:除基倒取余法 这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2...依次循环,直到商为0结束,把余数倒着依次排列,就构成了转换后的二进制数 ...
- JavaScript学习系列博客_4_JavaScript中的数据类型
JavaScript中有6种数据类型 一.基本数据类型 - String 字符串 JS中的字符串需要使用引号引起来双引号或单引号都行 但是要注意的是某种引号嵌套使用的话,需要加上 \ 转义.比如说我们 ...
- Ubuntu图形桌面切换到命令行界面
Ubuntu提供两种进入方式,一个是我们平常最熟悉的图形界面形式,还有一种是纯命令行方式. 1.按 Ctrl + Alt + (F1~F6中的任意一个)即可进入纯命令行模式. 进入后,需要输入用户名, ...
- 【Flutter 实战】动画序列、共享动画、路由动画
老孟导读:此篇文章是 Flutter 动画系列文章第四篇,本文介绍动画序列.共享动画.路由动画. 动画序列 Flutter中组合动画使用Interval,Interval继承自Curve,用法如下: ...
- php 正则表达式匹配(持续更新)
正则表达式匹配网址: <?php header('Content-type:text/html;charset=utf-8'); $str = ' 百度http://www.baidu.com网 ...
- RCON 服务器命令协议
介绍 编辑 RCON是一种允许服务器管理员远程执行Minecraft命令的协议.在1.9pre4中引入,它基本上是Minecraft的Source RCON协议的实现. 格式 编辑 响应将使用您发送的 ...