【UI自动化测试】11_Appium高级手势API _TouchAction
文章目录一、高级手势TouchAction介绍二、①轻敲2.1 方法2.2 轻敲-示例2.2.1 轻敲-传入元素2.2.2 轻敲-传入坐标三、②按下和抬起3.1 方法3.2 按下和抬起-示例3.2.1 按下-示例3.2.2 按下和抬起-示例四、③等待4.1 方法4.2 等待-示例五、④长按5.1 方法5.2 长按-示例六、⑤移动6.1 方法6.2 移动-示例6.2.1 方式1-移动6.2.2 方式2-移动等待一、高级手势TouchAction介绍TouchAction 可以实现一些针对手势的操作比如滑动、长按、拖动等。我们可以将这些基本手势组合成一个相对复杂的手势。比如我们解锁手机或者一些应用软件都有手势解锁的这种方式。fromappium.webdriver.common.touch_actionimportTouchAction# ①创建TouchAction对象touch_actionTouchAction(driver)# ②高级手势对象提供所想执行的手势方法touch_action.手势方法# ③执行手势touch_action.perform()# 或者TouchAction(driver).手势方法.perform()二、①轻敲轻敲模拟手指对某个元素或坐标按下并快速抬起。比如固定点击100, 100的位置。2.1 方法# ①创建TouchAction对象touch_actionTouchAction(driver)# ②调用轻敲,元素对象或坐标二选一touch_action.tap(elementNone,xNone,yNone)# element元素 、xy坐标二者选其一# ③执行手势touch_action.perform()# 换个写法TouchAction(driver).tap(elementNone,xNone,yNone).perform()2.2 轻敲-示例打开《设置》轻敲 “WLAN”2.2.1 轻敲-传入元素# 1、导包importtimefromappiumimportwebdriverfromappium.webdriver.common.touch_actionimportTouchAction# 这个python类AppiumBy继承自By类用于定义不同的定位策略常量以便在Appium自动化测试中定位元素fromappium.webdriver.common.appiumbyimportAppiumBy# 导入AppiumBy# 2、配置启动参数desired_caps{}# 手机参数desired_caps[platformName]Androiddesired_caps[platformVersion]5.1desired_caps[deviceName]1# 应用参数desired_caps[appPackage]com.android.settingsdesired_caps[appActivity]com.android.settings.Settingsdesired_caps[unicodeKeyboard]True# 使用自带输入法输入中文时填Truedesired_caps[resetKeyboard]True# 执行完程序恢复原来输入法# 3、创建APP驱动对象driverwebdriver.Remote(http://localhost:4723/wd/hub,desired_caps)# 隐式等待driver.implicitly_wait(30)# 4、业务操作# 需求 打开《设置》完成以下步骤# 轻敲 “WLAN”wlan_buttondriver.find_element(AppiumBy.XPATH,//*[textWLAN]) # ①. 创建touchaction对象 touch_action TouchAction(driver) # ②. 调用想要执行的动作 touch_action touch_action.tap(wlan_button) # ③. 使用perform执行动作 touch_action.perform() TouchAction(driver).tap(wlan_button).perform()time.sleep(5)# 5、关闭APPdriver.quit()2.2.2 轻敲-传入坐标# 1、导包importtimefromappiumimportwebdriverfromappium.webdriver.common.touch_actionimportTouchAction# 这个python类AppiumBy继承自By类用于定义不同的定位策略常量以便在Appium自动化测试中定位元素fromappium.webdriver.common.appiumbyimportAppiumBy# 导入AppiumBy# 2、配置启动参数desired_caps{}# 手机参数desired_caps[platformName]Androiddesired_caps[platformVersion]5.1desired_caps[deviceName]1# 应用参数desired_caps[appPackage]com.android.settingsdesired_caps[appActivity]com.android.settings.Settingsdesired_caps[unicodeKeyboard]True# 使用自带输入法输入中文时填Truedesired_caps[resetKeyboard]True# 执行完程序恢复原来输入法# 3、创建APP驱动对象driverwebdriver.Remote(http://localhost:4723/wd/hub,desired_caps)# 隐式等待driver.implicitly_wait(30)# 4、业务操作# 需求 打开《设置》完成以下步骤# 轻敲 “WLAN”TouchAction(driver).tap(x550,y550).perform()# WLAN坐标不同模拟器坐标可能不同time.sleep(5)# 5、关闭APPdriver.quit()三、②按下和抬起按下和抬起模拟手指一直按下模拟手指抬起。可以用来组合成轻敲或长按的操作。3.1 方法# ①创建TouchAction对象touch_actionTouchAction(driver)# ②调用按下,元素对象或坐标二选一touch_action.press(elementNone,xNone,yNone)# # element元素 、xy坐标二者选其一# ③调用抬起touch_action.release()# ④执行手势touch_action.perform()# 换个写法:TouchAction(driver).press(elementNone,xNone,yNone).perform()# 按下TouchAction(driver).release().perform()# 抬起TouchAction(driver).press(x550,y550).release().perform()# 按下和抬起3.2 按下和抬起-示例3.2.1 按下-示例需求使用坐标的形式按下 WLAN 550, 5502 秒后按下550, 550的位置# 1、导包importtimefromappiumimportwebdriverfromappium.webdriver.common.touch_actionimportTouchAction# 2、配置启动参数desired_caps{}# 手机参数desired_caps[platformName]Androiddesired_caps[platformVersion]5.1desired_caps[deviceName]1# 应用参数desired_caps[appPackage]com.android.settingsdesired_caps[appActivity]com.android.settings.Settingsdesired_caps[unicodeKeyboard]True# 使用自带输入法输入中文时填Truedesired_caps[resetKeyboard]True# 执行完程序恢复原来输入法# 3、创建APP驱动对象driverwebdriver.Remote(http://localhost:4723/wd/hub,desired_caps)# 隐式等待driver.implicitly_wait(30)# 4、业务操作# 需求 打开《设置》完成以下步骤# 使用坐标的形式按下 WLAN 550, 5502 秒后按下550, 550的位置TouchAction(driver).press(x550,y550).perform()time.sleep(2)TouchAction(driver).press(x550,y550).perform()time.sleep(5)# 5、关闭APPdriver.quit()3.2.2 按下和抬起-示例需求使用坐标的形式按下 WLAN 550, 5502 秒后按下550, 550的位置并抬起。# 1、导包importtimefromappiumimportwebdriverfromappium.webdriver.common.touch_actionimportTouchAction# 2、配置启动参数desired_caps{}# 手机参数desired_caps[platformName]Androiddesired_caps[platformVersion]5.1desired_caps[deviceName]1# 应用参数desired_caps[appPackage]com.android.settingsdesired_caps[appActivity]com.android.settings.Settingsdesired_caps[unicodeKeyboard]True# 使用自带输入法输入中文时填Truedesired_caps[resetKeyboard]True# 执行完程序恢复原来输入法# 3、创建APP驱动对象driverwebdriver.Remote(http://localhost:4723/wd/hub,desired_caps)# 隐式等待driver.implicitly_wait(30)# 4、业务操作# 需求 打开《设置》完成以下步骤# 使用坐标的形式按下 WLAN 550, 5502 秒后按下550, 550的位置并抬起。TouchAction(driver).press(x550,y550).perform()time.sleep(2)TouchAction(driver).press(x550,y550).release().perform()time.sleep(5)# 5、关闭APPdriver.quit()四、③等待思考时间等待模拟手指等待在执行下一步时等待一段指定时间。比如按下后等待 5 秒之后再抬起。4.1 方法# 模拟手指暂停到当前动作指定时间。TouchAction(driver).wait(mstime).perform()# ms暂停的毫秒数4.2 等待-示例需求使用坐标的形式点击WLAN 550, 6502 秒后按下550, 550的位置暂停 2 秒并抬起。# 1、导包importtimefromappiumimportwebdriverfromappium.webdriver.common.touch_actionimportTouchAction# 2、配置启动参数desired_caps{}# 手机参数desired_caps[platformName]Androiddesired_caps[platformVersion]5.1desired_caps[deviceName]1# 应用参数desired_caps[appPackage]com.android.settingsdesired_caps[appActivity]com.android.settings.Settingsdesired_caps[unicodeKeyboard]True# 使用自带输入法输入中文时填Truedesired_caps[resetKeyboard]True# 执行完程序恢复原来输入法# 3、创建APP驱动对象driverwebdriver.Remote(http://localhost:4723/wd/hub,desired_caps)# 隐式等待driver.implicitly_wait(30)# 4、业务操作# 需求 打开《设置》完成以下步骤# 使用坐标的形式点击 WLAN 550, 6502 秒后按下550, 550的位置暂停 2 秒并抬起。TouchAction(driver).tap(x550,y550).perform()time.sleep(2)TouchAction(driver).press(x550,y550).wait(2000).release().perform()time.sleep(5)# 5、关闭APPdriver.quit()五、④长按长按模拟手指对元素或坐标的长按操作。【比如长按某个按钮弹出菜单。长按APP图标可以卸载应用】5.1 方法长按 按下.等待.抬手# 模拟手指对元素或坐标的长按操作 【duration长按时间毫秒】TouchAction(driver).long_press(elNone,duration1000).perform()# 按元素TouchAction(driver).long_press(xNone,yNone,duration1000).perform()# 按坐标5.2 长按-示例需求使用坐标的形式点击 WLAN 550, 5502 秒后长按550, 550的位置持续 2 秒。# 1、导包importtimefromappiumimportwebdriverfromappium.webdriver.common.touch_actionimportTouchAction# 2、配置启动参数desired_caps{}# 手机参数desired_caps[platformName]Androiddesired_caps[platformVersion]5.1desired_caps[deviceName]1# 应用参数desired_caps[appPackage]com.android.settingsdesired_caps[appActivity]com.android.settings.Settingsdesired_caps[unicodeKeyboard]True# 使用自带输入法输入中文时填Truedesired_caps[resetKeyboard]True# 执行完程序恢复原来输入法# 3、创建APP驱动对象driverwebdriver.Remote(http://localhost:4723/wd/hub,desired_caps)# 隐式等待driver.implicitly_wait(30)# 4、业务操作# 需求 打开《设置》完成以下步骤# 使用坐标的形式点击 WLAN 550, 5502 秒后长按550, 550的位置持续 2 秒。TouchAction(driver).tap(x550,y550).perform()time.sleep(2)TouchAction(driver).long_press(x550,y550,duration2000).perform()time.sleep(5)# 5、关闭APPdriver.quit()六、⑤移动移动模拟手指移动操作比如手势解锁需要先按下再移动。6.1 方法# 模拟手指对元素或坐标的移动操作TouchAction(driver).move_to(elNone,xNone,yNone).perform()# 移动、等待TouchAction(driver).move_to(elNone,xNone,yNone).wait(mstime)6.2 移动-示例1、在手势解锁中画一个如下图的案例。2、《设置》— 安全 —选择屏幕锁定方式—图案3、在安卓当中每一个界面基本上都会有一个独立的名字在程序中的应用参数进行修改能直接进入。4、图案的包名和界面名 com.android.settings/.ChooseLockPattern5、使用uiautomatorviewer来获取图案坐标。6.2.1 方式1-移动importtimefromappiumimportwebdriverfromappium.webdriver.common.touch_actionimportTouchAction desired_capsdict()# 手机参数desired_caps[platformName]Androiddesired_caps[platformVersion]5.1desired_caps[deviceName]192.168.56.101:5555# 应用参数desired_caps[appPackage]com.android.settingsdesired_caps[appActivity].ChooseLockPattern# 获取driverdriverwebdriver.Remote(http://localhost:4723/wd/hub,desired_caps)# 如果代码过长可以使用回车进行换行# 换行的时候默认会多一个 右斜线 是正常的# 如果不希望出现这个 右斜线 可以将整句代码用括号括起来然后再使用回车换行即可TouchAction(driver).press(x175,y720).move_to(x536,y714).move_to(x902,y716).\ move_to(x902,y1077).move_to(x536,y1077).move_to(x175,y1075).\ move_to(x536,y1435).release().perform()time.sleep(5)driver.quit()6.2.2 方式2-移动等待# 1、导包importtimefromappiumimportwebdriverfromappium.webdriver.common.touch_actionimportTouchAction# 2、配置启动参数desired_caps{}# 手机参数desired_caps[platformName]Androiddesired_caps[platformVersion]5.1desired_caps[deviceName]1# 应用参数desired_caps[appPackage]com.android.settingsdesired_caps[appActivity].ChooseLockPatterndesired_caps[unicodeKeyboard]True# 使用自带输入法输入中文时填Truedesired_caps[resetKeyboard]True# 执行完程序恢复原来输入法# 3、创建APP驱动对象driverwebdriver.Remote(http://localhost:4723/wd/hub,desired_caps)# 隐式等待driver.implicitly_wait(30)# 4、业务操作# 如果代码过长可以使用回车进行换行# 换行的时候默认会多一个 右斜线 是正常的# 如果不希望出现这个 右斜线 可以将整句代码用括号括起来然后再使用回车换行即可TouchAction(driver).press(x175,y720).wait(1000).move_to(x536,y714).wait(1000).\ move_to(x902,y716).wait(1000).move_to(x902,y1077).wait(1000).\ move_to(x175,y1075).wait(1000).move_to(x536,y1435).wait(1000).perform()time.sleep(5)# 5、关闭APPdriver.quit()

相关新闻

【大模型从零开始】小规模 Transformer 训练的最佳实践一览

【大模型从零开始】小规模 Transformer 训练的最佳实践一览

一、先定目标:什么叫「小规模 Transformer」 推荐你从这个最小可用但不玩具的配置开始: 层数:2–4 层头数:2–4 头隐藏维度:128 / 256前馈维度:4hidden(标准)最大长度:12…

2026/7/7 0:53:49 阅读更多 →
排队免单:9个月8000店的商业密码

排队免单:9个月8000店的商业密码

走在商业街上,你是否注意到一个现象:排队最长的店,不一定东西最好吃,但一定最会“玩”?排队免单,这个起源于街头促销的简单玩法,正在演变成一套完整的商业操作系统。它凭什么让一个品牌9个月开出…

2026/5/17 3:42:35 阅读更多 →
车智赢APP登录协议逆向分析(核心算法篇)

车智赢APP登录协议逆向分析(核心算法篇)

本次分析的目标是“车智赢”APP(版本v5.6.1)的登录协议。通过抓包,我们确定了登录请求(https://dealercloudapi.che168.com/tradercloud/sealed/login/login.ashx)的关键参数在于请求体中的 _sign、pwd和 udid。本文将…

2026/7/6 15:38:40 阅读更多 →

最新新闻

免费前端开发库认证终极指南:从零到专业的三步进阶法

免费前端开发库认证终极指南:从零到专业的三步进阶法

免费前端开发库认证终极指南:从零到专业的三步进阶法 【免费下载链接】freeCodeCamp freeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free. 项目地址: https://gitcode.com/GitHub_Trending/fr/free…

2026/7/7 0:47:42 阅读更多 →
结构化方法:自顶向下的“拆解术“

结构化方法:自顶向下的“拆解术“

结构化方法:自顶向下的"拆解术" 开篇:从拆快递中学到的智慧 你有没有这样的经历? 收到一个巨大的快递,打开一看,里面有无数个小包裹,每个小包裹里还有更小的包裹,层层嵌套。 这种"从大到小、层层分解"的方式,就是结构化方法的核心思想。 什么…

2026/7/7 0:43:41 阅读更多 →
并发编程核心概念辨析

并发编程核心概念辨析

一、背景:CPU 多级缓存架构为了读者在阅读后序章节时,有更清晰、更形象的认知,这里放上现代 CPU 缓存的典型结构。一图胜千言,不多赘述,仅陈述以下要点:一颗 CPU,往往有多个核心(cor…

2026/7/7 0:43:41 阅读更多 →
如何识别PARP14

如何识别PARP14

一、PARP14的基础概述聚腺苷二磷酸核糖聚合酶14(PARP14,Poly(ADP-ribose) polymerase 14),也被称为PARP-4,是PARP家族中的一个重要成员。PARP家族包括多个聚腺苷二磷酸核糖聚合酶,它们在细胞的多个关键过程…

2026/7/7 0:39:40 阅读更多 →
Java毕设选题推荐:基于 SpringBoot 的教学过程考核评价系统的设计与实现 基于 SpringBoot 的课程阶段性考核管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】

Java毕设选题推荐:基于 SpringBoot 的教学过程考核评价系统的设计与实现 基于 SpringBoot 的课程阶段性考核管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/7 0:37:39 阅读更多 →
综合项目三:Web全栈应用从零部署

综合项目三:Web全栈应用从零部署

在当今的互联网时代,掌握全栈开发与部署能力是每一位后端开发者、DevOps 工程师乃至独立开发者的核心竞争力。然而,很多初学者在完成代码编写后,却在部署环节频频碰壁——服务器环境配置、域名解析、HTTPS 证书、负载均衡、日志监控……这些“最后一公里”的问题往往比写代码…

2026/7/7 0:35:38 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻