appium2.0+同时实现多点触控和单点触控的多种方法

若未了解单点触控,可先大概了解一下动作构建器Actionbuilder的PointerActions操作
appium2.0+之PointerActions详解

以下放大图片的示例在夜神模拟器上进行。

一、多点触控

1. 多点触控核心实现逻辑

(1)创建一个用于管理用户交互动作的 动作链对象/动作构建对象
(2)多指针创建:通过add_pointer_input创建多个 touch 类型的虚拟手指
(3) 定义多个虚拟手指的同步动作序列
(4)统一执行perform,实现多点触控

2. 执行时间逻辑

动作按 “时间轴” 执行,而非代码顺序,在同一个ActionBuilderActionChains中,两个手指(finger1finger2)是否会 “同时运行”,不取决于代码的编写顺序,而取决于动作的 “时间线设置”—— 即通过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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值