若未了解单点触控,可先大概了解一下动作构建器Actionbuilder的PointerActions操作
appium2.0+之PointerActions详解
以下放大图片的示例在夜神模拟器上进行。
一、多点触控
1. 多点触控核心实现逻辑
(1)创建一个用于管理用户交互动作的 动作链对象/动作构建对象
(2)多指针创建:通过add_pointer_input创建多个 touch 类型的虚拟手指
(3) 定义多个虚拟手指的同步动作序列
(4)统一执行perform,实现多点触控
2. 执行时间逻辑
动作按 “时间轴” 执行,而非代码顺序,在同一个ActionBuilder或ActionChains中,两个手指(finger1和finger2)是否会 “同时运行”,不取决于代码的编写顺序,而取决于动作的 “时间线设置”—— 即通过duration(持续时间)和pause(暂停时间)定义的动作时序。同一时间点的动作会 “并行执行”,不同时间点的动作会 “串行执行”。
二、单点触控+多点触控案例
代码执行前准备
- 命令行启动appium服务(版本2.19.0):
appium --address 127.0.0.1 --log-level debug --use-drivers uiautomator2
- 模拟器打开,命令行adb devices显示设备已连接

1. 方法1:建立两个Actionbuilder对象
逻辑:建立两个Actionbuilder对象,一个用来单点触控,一个用来多点触控
#!/usr/bin/env python
# encoding: utf-8
'''
@Author : 草木零
@Software: PyCharm
@File : class04_multiTouch.py
@Time : 2025/7/29 14:22
@desc : 多点触控示例,放大图片
多点触控核心实现:
通过创建两个PointerInput对象模拟两个手指(finger1和finger2)
actionbuilder通过add_pointer_input添加多个触控设备
手指添加操作,最后perform,实现多点触控
'''
from time import sleep
from appium import webdriver
from appium.options.android import UiAutomator2Options # 导入 Android 选项类
from selenium.webdriver.common.actions.action_builder import ActionBuilder
# 手机/模拟器,配置信息
desired_caps = {
"platformName": "Android",
"platformVersion": "7.1.2",
"deviceName": "127.0.0.1:62001",
"appPackage": "com.android.gallery3d",
# 获取包名、界面名:adb shell dumpsys window|findstr mCurrentFocus
"appActivity": "com.android.gallery3d.app.GalleryActivity",
"noReset": False
}
# 显式传入 options 参数(适用于必须使用高版本 Selenium 的场景)
# 将 desired_caps 转换为 Options 实例
options = UiAutomator2Options().load_capabilities(desired_caps)
# 传入 options 参数
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723',
options=options # 必须传入 options,替代原来的 desired_capabilities
)
# 获取窗口尺寸
window_size = driver.get_window_size() #返回dict格式的当前窗口屏幕尺寸
width = window_size['width'] # 获取宽度
height = window_size['height'] # 获取高度
# 第一根手指的移动位置
startX1 = width*0.6
startY1 = height*0.4
endX1 = width*0.9
endY1 = height*0.1
# 第二根手指移动位置
startX2 = width*0.4
startY2 = height*0.6
endX2 = width*0.1
endY2 = height*0.9
# 分为两个builder(推荐两个builder统一使用touch类型),第一个用来先执行单击操作后perform,第二个builder做多点触控两个手指同时操作
# 创建单点触控的builder
singleBuilder = ActionBuilder(driver)
singleAct = singleBuilder.add_pointer_input('touch', 'singleAct')
# 创建双指多点触控的Builder
zoomBuilder = ActionBuilder(driver)
finger1 = zoomBuilder.add_pointer_input('touch', 'finger1')
finger2 = zoomBuilder.add_pointer_input

最低0.47元/天 解锁文章
2362

被折叠的 条评论
为什么被折叠?



