Selenium ActionChains、TouchAction方法
ActionChains和TouchAction可以用来模拟点击、双击、滑动等事件。ActionChains用于执行PC端的鼠标移动、按键、拖拽等事件;TouchActions用法与ActionChains类似,可以用来模拟PC和移动端的点击、滑动、拖拽等手势操作。
ActionChains和TouchAction都是将动作存储在队列中,然后执行perform()方法,按队列顺序执行动作。
ActionChains
有两种执行方式
链式:
ActionChains(driver).move_to_element(element).click(element).perform()
分布式:
actions=ActionChains(driver)
actions.move_to_element(element)
actions.click(element)
actions.perform()
例一:点击,右键,双击操作
测试页面:http://sahitest.com/demo/clicks.htm

python代码:
self.driver.get("http://sahitest.com/demo/clicks.htm")
click = self.driver.find_element_by_xpath("//*[@value='click me']")
doubleclick = self.driver.find_element_by_xpath("//*[@value='dbl click me']")
rightclick = self.driver.find_element_by_xpath("//*[@value='right click me']")
action= ActionChains(self.driver)
action.click(element_click)
action.context_click(element_rightclick)
action.double_click(element_doubleclick)
action. perform()
例二:移动鼠标到某个元素上
将鼠标移动到“新闻”后进行点击

python代码:
self.driver.get("http://www.baidu.com")
ele = self.driver.find_element_by_link_text("新闻")
action = ActionChains(self.driver)
action.move_to_element(ele)
action.click()
action.perform()
例三:通过像素坐标点击页面
使用move_by_offset()方法实现点击页面,像素坐标可以使用截图工具来获取。
python代码:
ActionChains(self.driver).move_by_offset(x, y).click().perform() #左键点击
ActionChains(self.driver).move_by_offset(x, y).context_click().perform() #右键点击
例四:模拟键盘输入
模拟键盘输入可以使用win32api模块,也可以用 selenium的WebElement对象的send_keys()方法来实现:
element = self.driver.find_element_by_id(element) element.send_keys(**"test"**) element.send_keys(Keys.BACK_SPACE) assert element.get_attribute("value") == "tes"
ActionChains类也可以模拟键盘输入:
Action = ActionChains(driver) action.send_keys(Keys.BACK_SPACE) # 回退
action.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL) # CTRL+A
action.perform() # 执行
测试页面:http://sahitest.com/demo/label.htm

在文本框1中输入内容,然后将文本框1的内容复制粘贴到文本框2
self.driver.get("http://sahitest.com/demo/label.htm")
ele1 = self.driver.find_element_by_xpath("/htmL/body/label[1]/input")
ele2 = self.driver.find_element_by_xpath("/html/body/label[2]/table/tbody/tr/td[2]/input")
ele1.click()
action= ActionChains(self.driver)
action.send_keys("testing").pause(1)
action.send_keys(Keys.SPACE).pause(1) # 空格
action.send_keys("1").pause(1)
action.send_keys(Keys.BACK_SPACE) #回退
action.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL) #CTRL+A
action.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL) #CTRL+C
action.key_down(Keys.CONTROL,ele2).send_keys('v').key_up(Keys.CONTROL) #CTRL+V
action.send_keys(Keys.BACK_SPACE).perform()
例五:拖拽
测试页面:http://sahitest.com/demo/dragDropMooTools.htm

python代码
self.driver.get("http://sahitest.com/demo/dragDropMooTools.htm")
drag_ele = self.driver.find_element_by_id("dragger")
Item1 = self.driver.find_element_by_xpath("/htmL/body/div[2]")
Item2 = self.driver.find_element_by_xpath("/html/body/div[3]")
Item3 = self.driver.find_element_by_xpath("/html/body/div[4]")
action= ActionChains(self.driver)
action.drag_and_drop(drag_ele, Item1).pause(1) # 方法1
action.click_and_hold(drag_ele).release(Item2).pause(1)# 方法2
action.click_and_hold(drag_ele).move_to_element(Item3).release()# 方法3
action.perform()
TouchAction
ActionChains无法操作H5页面,TouchAction可以对H5页面进行操作,实现点击,滑动,拖拽,模拟手势等各种操作。
手势控制方法
double_tap 双击
flick 滑动
flick_element 从某个元素位置开始滑动
long_press 长按
move 手势移动指定偏移
Perform 执行
release 释放手势
scroll 点击并滚动
scroll_from_element 从某个元素位置开始手势点击并滚动(向下滑动为负数,向上滑动为正数)
flick_element——从某个元素位置开始手势滑动(负数:向上滑动,正数:向下滑动)
tap 在指定元素上点击
tap_and_hold 在指定元素上点击但不释放
例一:点击、滑动
百度搜索关键字,tap方法点击百度一下,滑动到底部,点击下一页
python代码:
self.driver.get("http://www.baidu.com")
input = self.driver.find_element_by_id("kw")
search = self.driver.find_element_by_id("su")
input.send_keys("test")
action = TouchActions(self.driver)
action.tap(search)
action.perform()
action.scroll_from_element(input, 0, 10000).perform()
next = self.driver.find_element_by_link_text("下一页 >")
next.click()
总结
ActionChains和TouchAction实现了鼠标和键盘的模拟输入,更详细的介绍可以参考官方文档 https://selenium-python.readthedocs.io/api.html。
--THE END--
文章标题:Selenium ActionChains、TouchAction方法
本文作者:hiyo
本文链接:https://hiyong.gitee.io/posts/selenium-actionchains-touchaction/
欢迎关注公众号:「测试开发小记」及时接收最新技术文章!
Selenium ActionChains、TouchAction方法的更多相关文章
- Java&Selenium智能等待方法封装
Java&Selenium智能等待方法封装 ExpectedConditions方法还有很多,自然也可以继续扩展很多 package util; import org.openqa.selen ...
- Java&Selenium 模拟键盘方法封装
Java&Selenium 模拟键盘方法封装 package util; import java.awt.AWTException; import java.awt.Robot; import ...
- Java&Selenium控制滚动条方法封装
Java&Selenium控制滚动条方法封装 package util; import org.openqa.selenium.JavascriptExecutor; import org.o ...
- Java&Selenium 模拟鼠标方法封装
Java&Selenium 模拟鼠标方法封装 package util; import org.openqa.selenium.By; import org.openqa.selenium.W ...
- selenium的定位方法-单元素定位
selenium自动化测试中,提供了单个元素定位方法,多个元素定位方法,2种方式都是根据元素属性:ID.NAME.CLASS_NAME.TAG_NAME.CSS_SELECTOR.XPATH.LINK ...
- Selenium -- ActionChains().move_by_offset() 卡顿的解决方法
测试运行时间 运行时间 发现每次0.5秒,此时需要修改默认的时间 打开Python安装目录下的Lib\site-packages\selenium\webdriver\common\actions\p ...
- selenium定位元素方法汇总
#打开网页前三步 from selenium import webdriver driver=webidriver.Chrome() driver.get("https://www.baid ...
- selenium采用xpath方法识别页面元素
有些HTML页面中的元素中属性较少,经常有找不到id.class.name等常用属性的时候,这个时候xpath.css就能很好的识别到我们的元素. Firefox和chrome浏览器中均有xpath. ...
- selenium各种定位方法(转)
selenium使用 Xpath CSS JavaScript jQuery的定位方法 (治疗selenium各种定位不到,点击不了的并发症) 2017年07月28日 22:47:36 阅读数:369 ...
随机推荐
- Java基础教程——继承
继承 一个类 可以 继承自 另一个类: 派生的类(子类)继承父类的方法和数据成员: 关键字:子类 extends 父类. public class 继承 { public static void ma ...
- 10种CSS3实现的loading动画,挑一个走吧?
这篇文章主要介绍了10种CSS3实现的loading动画,帮助大家更好的美化自身网页,完成需求,感兴趣的朋友可以了解下. HTML: 1 <body> 2 <div class=&q ...
- 怎么用fio测试存储性能
1 /// -rw=read(100%顺序读) -rw=write(100%顺序写) -rw=randread(100%随机读) -rw=randwrite(100%随机写), 2 ///-rw=rw ...
- JZOJ8月5日提高组反思
JZOJ8月5日提高组反思 再次炸了 虽然不是爆0 但也没差多少-- T1 想的DP 然后就打了 一开始是只能拿60的 后来想到了用前缀和优化 然后打完交了 最后一分钟测了一下空间 爆了 就赶紧把数组 ...
- linux搭建harbor与使用
条件:安装docker&docker-compose 如未安装,请看:linux离线安装docker + docker-compose harbor 1.下载 下载地址:https://git ...
- moviepy音视频剪辑:TextClip.list(font)和search搜索字体报错UnicodeDecodeError:utf-8 codec cannott decode byte 问题
☞ ░ 前往老猿Python博文目录 ░ 在moviepy2.0.0.Dev版本中,执行如下语句: from moviepy.editor import * TextClip.search('gb', ...
- PyQt(Python+Qt)学习随笔:QAbstractItemView的tabKeyNavigation属性
老猿Python博文目录 老猿Python博客地址 tabKeyNavigation属性为bool类型,用于控制视图中是否启用tab键和backtab(shift+tab)进行数据项之间的导航切换. ...
- sql black list 绕过
Black list is so weak for you,isn't it 姿势: return preg_match("/set|prepare|alter|rename|select| ...
- 团队作业3_需求改进&系统设计
一.需求&原型改进 1.需求改进: (1)发现问题:通过发布问卷调查及收集整理的形式发现用户的新需求: (2)修改需求:考虑新增提醒用户未完成事件的功能. 附:用户调查问卷(如下) 调研途 ...
- 使用darkarmour免杀mimikatz
darkarmour是一个可用来免杀exe的项目,github地址:https://github.com/bats3c/darkarmour 我们使用darkarmour来免杀mimikatz. ./ ...