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方法的更多相关文章

  1. Java&Selenium智能等待方法封装

    Java&Selenium智能等待方法封装 ExpectedConditions方法还有很多,自然也可以继续扩展很多 package util; import org.openqa.selen ...

  2. Java&Selenium 模拟键盘方法封装

    Java&Selenium 模拟键盘方法封装 package util; import java.awt.AWTException; import java.awt.Robot; import ...

  3. Java&Selenium控制滚动条方法封装

    Java&Selenium控制滚动条方法封装 package util; import org.openqa.selenium.JavascriptExecutor; import org.o ...

  4. Java&Selenium 模拟鼠标方法封装

    Java&Selenium 模拟鼠标方法封装 package util; import org.openqa.selenium.By; import org.openqa.selenium.W ...

  5. selenium的定位方法-单元素定位

    selenium自动化测试中,提供了单个元素定位方法,多个元素定位方法,2种方式都是根据元素属性:ID.NAME.CLASS_NAME.TAG_NAME.CSS_SELECTOR.XPATH.LINK ...

  6. Selenium -- ActionChains().move_by_offset() 卡顿的解决方法

    测试运行时间 运行时间 发现每次0.5秒,此时需要修改默认的时间 打开Python安装目录下的Lib\site-packages\selenium\webdriver\common\actions\p ...

  7. selenium定位元素方法汇总

    #打开网页前三步 from selenium import webdriver driver=webidriver.Chrome() driver.get("https://www.baid ...

  8. selenium采用xpath方法识别页面元素

    有些HTML页面中的元素中属性较少,经常有找不到id.class.name等常用属性的时候,这个时候xpath.css就能很好的识别到我们的元素. Firefox和chrome浏览器中均有xpath. ...

  9. selenium各种定位方法(转)

    selenium使用 Xpath CSS JavaScript jQuery的定位方法 (治疗selenium各种定位不到,点击不了的并发症) 2017年07月28日 22:47:36 阅读数:369 ...

随机推荐

  1. 【mq读书笔记】mq producer启动流程

    创建MQClientInstance实例.这里有个实例缓存 clienrId为客户端IP+instance+(unitname)注意到之前把instance替换为进程id,是为了instance为默认 ...

  2. 万字长文深度剖析面向对象的javascript

    目录 简介 什么是对象 构造函数 构造函数的特点 new命令的原理 prototype对象 Object的prototype操作 Object.getPrototypeOf Object.setPro ...

  3. Appium之测试微信小程序

    坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:Oschina.云+社区.知乎等各大平台都有. 目录 一.往期回顾 二.测试微信小程序 1.准备工作 2.操作步骤 3.注意 4.强制设置安卓的进程 ...

  4. 第9.3节 Python的文件行读取:readline

    一. 语法 readline(size=-1) readline函数顾名思义就是从文件内读取一行,用来处理文本文件读取的典型方法之一,但readline可不只是读取文本文件,也能读取二进制文件,只是在 ...

  5. PyQt(Python+Qt)学习随笔:Qt Designer中QAbstractButton派生按钮部件autoRepeat、autoRepeatDelay、autoRepeatInterval属性

    autoRepeat.autoRepeatDelay.autoRepeatInterval这三个属性为一组属性,用于控制按钮的按下事件是否重复.重复的频次等. autoRepeat 如果启用了auto ...

  6. ThreadLocal原理记录,别被坑了!!

    简介 ThreadLocal的用处 ThreadLocal是为了将数据记录一份到某个线程里,确保该数据线程安全 例如数据库的Connection放入ThreadLocal,一个事务会用到很多DAO,但 ...

  7. 【题解】「CF1182B」Plus from Picture

    这是一道超级水的模拟 + 简单搜索. 说说思路: 先找到中心点,就是自己和上下左右都为 * 的. 上下左右上的所有 * 都删掉,然后再看看有没有多余的 * 如果有输出 NO 否则输出 YES. 比如说 ...

  8. AcWing 276. I-区域

    题目链接 设 \(0\) 为单调伸长, \(1\) 为单调伸短. 设 \(f[i][j][l][r][x(0 / 1)][y (0 / 1)]\) 为第 \(i\) 行,已经选出\(j\)个格子,第\ ...

  9. 题解-Little C Loves 3 III

    Little C Loves 3 III 给定 \(n\) 和序列 \(a_0,a_1,\dots,a_{2^n-1}\) 和 \(b_0,b_1,\dots,b_{2^n-1}\),求序列 \(c_ ...

  10. Java集合源码分析(六)——ConcurrentHashMap

    目录 简介 源码分析 父类 接口 字段 内部类 1.链表节点结构 2.树根结构 3.树节点结构 方法 1.构造方法 2.基本并发方法 3.初始化表数组的操作 4.修改添加元素 5.统计元素数量 6.扩 ...