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 ...
随机推荐
- C语言基础知识:几种特殊的函数宏封装方式
函数宏介绍 函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销. 函数宏本质上为宏,可以直接进行定义,例如: #define INT ...
- 以注解的方式实现api和provider
1.provider import com.alibaba.dubbo.config.annotation.Service; import facade.EchoService; import com ...
- SpringBoot 整合邮件oh-my-email 实现发送邮件功能
导读 最近手头上要负责整个Message Gateway服务的搭建,涉及到:微信推送(点我直达).短信.邮件等等,到github上发现有个微型的开源邮件框架,整理下来,以备项目中使用到,到时候应该会使 ...
- jdk从1.8降到jdk1.7失败
1.将JAVA_HOME:的路径更改为1.7的相关路径,例如我的:C:\Java\jdk1.7.0_80 2.此时查看版本:Java -version,如果是1.8的版本,就把path路径下的%JAV ...
- NetSuite实现pdf打印中的条形码的功能
2020-11-27 提起NS,在程序员这一块应该不怎么被人知道,算是比较小众的一门技术了,毕竟Netsuite兴起的时间算不上早,进入中国的时间更晚,除了从事这一块的程序员,可能都没有见过,恰好我是 ...
- go语言之---数组(array)和切片(slice)
一.数组 1.什么是数组? 1.数组是一系列同一类型数据的集合 2.数组中包含的每个数据被称为数组元素 3.一个数组中包含的元素个数成为数组长度 4.数组的长度是固定的 5.一个数组可以由零个或者多个 ...
- 第3.3节 强大的Python列表
一. 列表切片操作补充 列表切片支持所有序列切片的方法,以倒序切片和步长大于1的情况再举例验证一下: l=[1,2,3,4,5] l[::2] #结果[1, 3, 5] l[-1::2] #结果[5] ...
- 老猿学5G扫盲贴:推荐三篇介绍HTTP2协议相关的文章
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 5G中的服务化接口调用都是基于HTTP2协议的,老 ...
- PyQt(Python+Qt)学习随笔:QScrollBar以及QAbstractSlider滚动条部件功能详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 在Designer输入部件中Horizo ...
- Python中迭代循环使用比较多的range函数的作用
range函数用于生成一个不可变的数字序列可迭代对象,类型为range,该数字序列通常用于在 for 循环中循环指定的次数. 具体可参考:<Python中与迭代相关的函数>的详细介绍 老猿 ...