在 appium2.0 之前,在移动端设备上的触屏操作,单手指触屏和多手指触屏分别是由 TouchAction 类,Multiaction 类实现的。

在 appium2.0 之后,这 2 个方法将会被舍弃。

"[Deprecated] 'TouchAction' action is deprecated. Please use W3C actions instead."

1、w3c action 是什么?

在 w3c 的 actions 当中,将输入源分为了三类:

  1. 键盘类 - Key
  2. 指针类 - Pointer
  3. None

对于 Pointer 指针类输入源,共有 3 种:Mouse 鼠标、Touch 触屏、Pen 笔触

输入源,是提供输入事件的虚拟设备。

每一个输入源,都是一个输入 id,输入源 type。与真实设备一样,每一个输入源都有状态的,有输入事件。

在 python selenium 的源码当中,selenium/common/actions/input_devices.py 里 InputDevices 类定义了输入源类。

1、空输入源(null input source)

提供以下行为:

pause:不做任何操作一段时间,或者动作的持续时间

2、键盘输入源(key input source)

提供以下行为:

KeyDown:按下某个键

KeyUp:释放某个键

在 python selenium 的源码当中,selenium/common/actions/key_input.py 里 KeyInput 类定义了按钮输入源类。

3、指针输入源(pointer input source),提供以下行为:

PointerDown:按下鼠标键,或者触屏或者触屏笔触屏

PointerUp:松开鼠标键,或者手离开屏幕,或者触屏笔离开屏幕

PointerMove:移动到屏幕某个点

PointerCancel:删除某个指针操作

在 python selenium 的源码当中,selenium/common/actions/pointer_input.py 里 PointerInput 类定义了指针输入源类。

4、在输入源基础上,定义了键盘操作类 KeyActions

在 python selenium 的源码当中,selenium/common/actions/key_actions.py 里 KeyActions 类定义了键盘操作类。

5、在输入源基础上,定义了鼠标/触屏操作 PointerActions 类:

在 python selenium 的源码当中,selenium/common/actions/pointer_actions.py 里 PointerActions 类定义了鼠标/触屏操作类。

汇总一下上面几个类:

6、ActionBuilder 类

初始化方法:

  1. 输入源设备列表,会放 2 个输入源:鼠标输入源、键盘输入源。
  2. 有 2 个私有属性:键盘操作对象(KeyActions 类实例化**)**,鼠标/触屏操作对象(PointerActions 类实例化)

属性:key_action,pointer_action

在 ActionChains 类当中,就是通过这 2 个属性来调用鼠标和键盘的操作的。

添加新的输入源:add_key_input,add_pointer_input

2、ActionChains 类

selenium 中的鼠标操作类,鼠标行为都是使用的 ActionBuilder 类。

初始化:

3、单点触控 - ActionChains 类

直接使用 ActionChains 类里的,w3c_actions 去实现。

比如 appium 当中的 swipe 滑屏方法:

移动到某一个坐标点 → 按下 → 移动到另一个坐标点 → 释放

4、多点触控 - ActionChains 类

多点触控,是个单点触控操作同时发生,比如 2 个手指,同时在屏幕上进行滑动操作。

仍然是 ActionChains 类,不过需要在里面,添加新的单点触控操作。

actions = ActionChains(driver)
# 输入源设备列表为空
actions.w3c_actions.devices = []# 添加一个新的输入源到设备到中,输入源类型为Touch
new_input = actions.w3c_actions.add_pointer_input('touch', f'finger{finger}')
# 输入源的动作:移动到某个点,按下,移动到另外一点,释放
new_input.create_pointer_move(x=start_x, y=start_y)
new_input.create_pointer_down(MouseButton.LEFT)
new_input.create_pause(duration / 1000)
new_input.create_pointer_move(x=end_x, y=end_y)
new_input.create_pointer_up(MouseButton.LEFT)# 以此类推,可以添加多个输入源操作到设备当中。可以是鼠标操作,也可以是触屏,按键等操作

比如,对百度地图 app 进行放大操作的代码如下:

from time import sleep
from appium import webdriverfrom selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.mouse_button import MouseButton#我要在android7.1.2设备上,打开百度地图app
desired_caps = {
"automationName":"UiAutomator2",
"platformName":"Android",
"platformVersion":"7.1.2",
"deviceName":"HuaWei",
"noReset":True,
"appPackage":"com.baidu.BaiduMap",
"appActivity":"com.baidu.baidumaps.WelcomeScreen",
"systemPort": 8225,
"newCommandTimeout": 1200
}#先连接appium server。传递指令。 appium server连接地址
driver = webdriver.Remote('<http://127.0.0.1:4723/wd/hub>', desired_caps)sleep(20)#获取设备的大小 - size
size_dict = driver.get_window_size()# ==========放大地图:从地图中心分别向对角线滑动放大 - 2个手指同时执行滑动操作  ==================
actions = ActionChains(driver)
#输入源设备列表为空
actions.w3c_actions.devices = []# ========== 第1个手指:从正中心向右上角滑动  ==================
#添加一个新的输入源到设备到中,输入源类型为Touch,id为finger0
new_input = actions.w3c_actions.add_pointer_input('touch','finger0')
#输入源的动作:移动到某个点,按下,移动到另外一点,释放
new_input.create_pointer_move(x=size_dict["width"] * 0.5, y=size_dict["height"] * 0.5)
new_input.create_pointer_down(MouseButton.LEFT)
new_input.create_pause(0.2) # 200ms
new_input.create_pointer_move(x=size_dict["width"] * 0.9, y=size_dict["height"] * 0.1)
new_input.create_pointer_up(MouseButton.LEFT)# ========== 第2个手指:从正中心向左下角滑动  ==================
#添加一个新的输入源到设备到中,输入源类型为Touch。id为finger1
new_input = actions.w3c_actions.add_pointer_input('touch','finger1')
#输入源的动作:移动到某个点,按下,移动到另外一点,释放
new_input.create_pointer_move(x=size_dict["width"] * 0.5, y=size_dict["height"] * 0.5)
new_input.create_pointer_down(MouseButton.LEFT)
new_input.create_pause(0.2) # 200ms
new_input.create_pointer_move(x=size_dict["width"] * 0.1, y=size_dict["height"] * 0.9)
new_input.create_pointer_up(MouseButton.LEFT)#执行动作
actions.perform()

喜欢对你有帮助的话记得加个关注不迷路哦

个人主页有领取方式,可以领取到一些个人收集的软件测试工具、面试题、资料包,无偿的,需要的私信小编“资料或许对你有帮助!

点击链接领取

[软件测试全套基础/进阶/转行资料]

感谢各位大大的阅读

新鲜出炉:appium2.0+ 单点触控和多点触控新的解决方案相关推荐

  1. EasyMoney 绿色免费 家庭财务软件v1.0 新鲜出炉~~~

    EasyMoney 家庭财务软件v1.0 新鲜出炉~~~ EasyMoney 财务软件使用帮助 前言:系统概述         EasyMoney是一款专为家庭或个人量身打造的在线账务管理系统.帮助个 ...

  2. 一文掌握明年物联网传感器市场!2022中国AIoT产业全景图谱报告新鲜出炉

    来源:传感器专家网 物联网产业是传感器应用最广泛的领域之一,研发新型传感器,做传感器市场,都不能不考虑物联网产业的需求. 2021年随着COVID-19 病毒的存在已常态化,防疫抗疫进入了拉锯阶段:波 ...

  3. 新鲜出炉!20款好看的英文字体下载

    字体是设计作品的重要组成部分,相比图形化元素,字体更能够清晰的表达含义.字体的运用是一门学问,使用恰当的字体作为设计元素能够达到事半功倍的效果.这里给大家分享20款新鲜出炉的好看的英文字体,可以免费下 ...

  4. Silverlight 3正式版新鲜出炉

    [IT168资讯]Silverlight 3正式版(版本号3.0.40624.0)已经新鲜出炉,将于今日正式发布.今日在See the light网站将举行线上发布活动,播放视频Keynote和技术演 ...

  5. golang debug 配置_新鲜出炉的golang日志库

    新鲜出炉的golang日志记录库 https://github.com/zxysilent/logs​github.com 功能 日志等级 DEBUG.INFO.WARN.ERROR.FATAL 每天 ...

  6. Vue vben admin - 新鲜出炉的高颜值管理后台UI框架,基于 Vue3 和 Ant Design Vue

    基于Vue3.0 / Vite / Ant Design 等火热开源项目构建,新鲜出炉,值得关注. 关于 Vue vben admin Vue Vben Admin 是一个基于 Vue3.0.Vite ...

  7. 812计算机专业排名,新鲜出炉2019年美国大学计算机工程专业排名榜单 麻省位居首位!...

    原标题:新鲜出炉2019年美国大学计算机工程专业排名榜单 麻省位居首位! 近些年,中国留美学生人数已经超过了60万人,其中就读工程学和计算机专业的人数占据了30%, 计算机工程专业作为计算机和工程的交 ...

  8. 新鲜出炉的一款SpringBoot +Vue的考试系统

    一.考试系统简介 新鲜出炉的一款SpringBoot +Vue的考试系统,支持多种题型:选择题.多选题.判断题.填空题.综合题以及数学公式.支持在线考试,教师在线批改试卷. 二.项目架构 后端技术栈 ...

  9. ap计算机科学a 5分,新鲜出炉2019年AP考试5分率分析,尝鲜版来啦~~

    原标题:新鲜出炉2019年AP考试5分率分析,尝鲜版来啦~~ 近日,Colleage board 官方的twitter ,陆续公布了2019年度部分AP科目的5分率及考试情况.7-8月CB官方会更新所 ...

  10. 五万字前端面试宝典——前端百题斩(上)新鲜出炉

    从2021年5月9号开始更新<前端百题斩>,目前终于取得了阶段性成果,<前端百题斩>上册已经更新完毕,内容包括JS基础篇.浏览器篇.网络篇,共计50个章节,5万多字.关注公众号 ...

最新文章

  1. arm linux嵌入式网络控制系统,基于ARMLinux的嵌入式网络控制系统的研究与设计
  2. c语言 判断一个图是否全连通_基于云平台的全链路大规模网络连通性检测系统详解...
  3. 怎么通过路径藏值,然后通过js,jq获取页面路径带过来的值
  4. 【bzoj1507】[NOI2003]Editor
  5. Base64 编码/解码器
  6. VS远程Linux项目附加pthread
  7. 结合element-ui封装的一个分页函数
  8. eclipse中输入@符号自动提示Annotation
  9. Eureka的元数据
  10. python自动交易app_股票自动交易Python下单接口
  11. Android如何显示音标
  12. Ubuntu16.04下网易云音乐点击图标打不开——已解决
  13. 计算机网络网络层——学习笔记
  14. Excel中多行一致分类序列号
  15. 线性时不变因果系统的判断方法
  16. 天津web前端培训,BAT会去哪里招好前端?
  17. neo4j的搭建和实例使用
  18. mysql导入SQL表变少了
  19. 筑本T8神奇魔轮 专卖网站(全国货到付款,7天无条件退货)
  20. Python计算代码的执行时间

热门文章

  1. c#报错 :System . Invalid Operation Exception:“线程间操作无效: 从不是创建控件的线程访问它
  2. 九龙证券|铁锂电池是什么?铁锂电池的工作原理和优点介绍
  3. 电商页面设计 只需懂六个字
  4. 皇室战争android换到苹果嘛,皇室战争怎么切换账号 苹果端和安卓端切换账号方法介绍...
  5. python爬虫之正则表达式-1
  6. matlab东大教授_辽宁省普通高等学校本科教学管理平台
  7. 日麻十七步:关于如何从34张牌中取13张牌组成最大番数听牌
  8. 【JavaScript】性能优化
  9. 计算钱币(Java)
  10. 想要年薪百万,阿里Sentinel支持RESTful接口都搞不定?