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

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

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

1、w3c action 是什么?

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

键盘类 - Key

指针类 - Pointer

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 类

初始化方法:

输入源设备列表,会放 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()


资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

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

  1. android 单点跟长按的区别,单点触控和多点触控区别是什么?原理分析

    描述 导语:触屏手机.平板电脑等新型的智能设备的崛起,除了因为像安卓和ios这样的智能系统诞生的原因外,不可或缺的一个条件就是触摸屏幕的更新换代和多点触控技术的出现.下面我们就来介绍单点触控和多点触控 ...

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

    在 appium2.0 之前,在移动端设备上的触屏操作,单手指触屏和多手指触屏分别是由 TouchAction 类,Multiaction 类实现的. 在 appium2.0 之后,这 2 个方法将会 ...

  3. 精心筹备半年 :appium2.0+ 单点触控和多点触控新的解决方案

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

  4. 单点触控、多点触控和自定义控件的使用

    单点触控的使用 比如图片的位移.旋转,透明,缩放等. 多点触控的使用 Android多点触控的本质:需要LCD驱动和保存程序本身设计上的支持 市场上的应用:HTC.Motorota和Samsung等知 ...

  5. 【Android 应用开发】多点触控 ( 多点触控事件 | PointerId | PointerIndex | 坐标获取 | 触摸点个数 )

    文章目录 I . 多点触控事件 II . PointerId 与 PointerIndex 简介 III . 本次 PointerId 与 PointerIndex 获取 IV . PointerId ...

  6. Android多点触控之——MotionEvent(触控事件)

    今天晚上刚学习了一个多点触控的小程序,后面想对其做一个定制.在写的时候遇到很多问题,于是乎就查了一下API文档,又到网上查了一下高手的文章,最后自己又实践了一下.终于把多点触控事件监听的大概原理给弄清 ...

  7. 模拟Android多点触控

    Android多点触控 Android多点触控 多点触控实现思路 第一种adb shell input方式 第二种adb shell sendevent方式 多点触控实现思路   经过资料的查询,要在 ...

  8. Unity中单点和多点触控

    Input.touchCount获取当前的触摸点数目,若为1则是单点触控,大于1则是多点触控 点击事件用:Input.GetTouch(num).phase== TouchPhase.Began这样的 ...

  9. HTML5触摸事件(多点触控、单点触控)Demo

    HTML5的触摸API支持处理单点和多点的触摸事件处理. 接口 1.TouchEvent:代表了一个触摸事件. 主要属性: TouchEvent.changedTouches:一个TouchList对 ...

  10. 【unity3D】单点和多点触控

    总结: Input.touchCount获取当前的触摸点数目,若为1则是单点触控,大于1则是多点触控 点击事件用:Input.GetTouch(num).phase == TouchPhase.Beg ...

最新文章

  1. java 访问 网络swf_JAVA访问网络资源
  2. encoding - 如何将 Dart 的ByteData转换为字符串?
  3. mmap、munmap函数
  4. jQuery UI基础 学习笔记
  5. iOS 8 Metal Swift教程 :开始学习
  6. 脚注交叉引用序号不一样_利用Word的尾注来做参考文献的注释编号--解决编号加方括号,交叉引用,去除尾注上访横线等问题...
  7. 有了malloc/free为什么还要new/delete ?
  8. c++之string类详解
  9. Java IO学习7:打印流
  10. 温习一下嵌入式老鸟 (火哥) 的面试指南
  11. js获取局域网ip地址
  12. app逆向入门分析——破解某APP登陆请求参数
  13. 大智慧行情服务器文件夹,大智慧行情分析系统炒股软件常用三大菜单操作
  14. THREE加载模型FBX、OBJ、GLTF
  15. 夸奖对方代码写的好_不知道如何夸奖别人?五种赞美方式,让你得到你想不到的结果!...
  16. offer拿到手软的大佬,研究生三年是如何度过的?
  17. 2021-2027全球与中国空气监测设备市场现状及未来发展趋势
  18. Pr学习(3)AI CC2017/2018 如何破解?
  19. 疾病研究:DMD患者家庭理疗练习指南
  20. 360图书馆 JMX

热门文章

  1. 如何用计算机看苹果手机的文件,如何在电脑上管理iphone文件?
  2. JAVA测试人员考核_自动化测试的绩效考核
  3. 电脑开机出现警报音后提示要按F1才能进入的分析处理
  4. java中合并不同子目录下的txt文件(CHM转换成txt的过程)
  5. 2019 WordPress免费收费中文主题推荐 强迫症患者的救赎
  6. ubuntu下CHM阅读器
  7. hera(赫拉)任务调度系统--为数据平台打造的任务调度系统
  8. Matlab基础部分第一章 MATLAB概述第二章MATLAB基础知识
  9. 专访Blue Coat:移动恶意软件现状与趋势
  10. 绘制IRB1200机器人工作空间