【UI自动化测试】12_Appium手机操作 _手机操作API 📅 发布时间:2026/7/11 12:19:29 👁️ 浏览次数: 文章目录一、获取分辨率1.1 方法名1.2 获取分辨率-示例二、手机截图2.1 方法2.2 手机截图-示例三、获取和设置手机网络3.1 方法3.2 示例3.2.1 获取手机网络-示例3.2.2 设置手机网络-示例3.2.3 判断当前网络-示例四、发送键到设备4.1 方法4.2 发送键到设备-示例五、操作通知栏5.1 方法5.2 操作通知栏-示例一、获取分辨率通过获取手机分辨率来动态计算滑动的起止坐标点1.1 方法名# 获取手机分辨率driver.get_window_size()# 返回值-字典-里面有两个key。分别是 width 和 height-宽和高的值是int类型的1.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、业务操作# 获取当前设备的分辨率print(driver.get_window_size())# {width: 1080, height: 1920}print(driver.get_window_size()[width])# 1080print(type(driver.get_window_size()[width]))# class inttime.sleep(5)# 5、关闭APPdriver.quit()二、手机截图有些自动化的操作可能没有反应但并不报错。此时我们就可以将操作过后的关键情况截图留存。后期也可以根据图片发现问题。2.1 方法# 参数filename指定路径下指定格式的图片driver.get_screenshot_as_file(filename)# 如果直接写了文件名则会默认保存在项目目录下2.2 手机截图-示例打开设置页面截图当前页面保存到当前目录命名为screen.pngimporttimefromappiumimportwebdriver 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].Settings# 获取driverdriverwebdriver.Remote(http://localhost:4723/wd/hub,desired_caps)# 截图driver.get_screenshot_as_file(screen.png)# 保存在项目目录下# driver.get_screenshot_as_file(/Users/ggk/Desktop/screen.png) # 保存在桌面下time.sleep(5)driver.quit()三、获取和设置手机网络视频应用在使用流量看视频的时候大部分都会提示用户正在是否继续播放。作为测试人员我们可能需要用自动化的形式来判断是否有对应的提示。即用流量的时候应该有提示不用流量的时候应该没有提示。3.1 方法# 获取手机网络driver.network_connection# 设置手机网络# 参数 connectionType网络类型driver.set_network_connection(connectionType)3.2 示例3.2.1 获取手机网络-示例获取当前网络类型并打印importtimefromappiumimportwebdriver 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].Settings# 获取driverdriverwebdriver.Remote(http://localhost:4723/wd/hub,desired_caps)# # 获取当前网络print(driver.network_connection)# 6time.sleep(5)driver.quit()结果对照defset_network_connection(self,connection_type:int)-int:Sets the network connectiontype.Android only.Possible values:-----------------------------------------------|Value(Alias)|Data|Wifi|Airplane Mode||0(None)|0|0|0|-----------------------------------------------|1(Airplane Mode)|0|0|1|-----------------------------------------------|2(Wifi only)|0|1|0|-----------------------------------------------|4(Data only)|1|0|0|-----------------------------------------------|6(All network on)|1|1|0|-----------------------------------------------classConnectionType:NO_CONNECTION0AIRPLANE_MODE1WIFI_ONLY2DATA_ONLY4ALL_NETWORK_ON63.2.2 设置手机网络-示例设置当前设备为飞行模式importtimefromappiumimportwebdriver 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].Settings# 获取driverdriverwebdriver.Remote(http://localhost:4723/wd/hub,desired_caps)# 获取当前网络print(driver.network_connection)# 设置当前网络driver.set_network_connection(1)time.sleep(5)driver.quit()3.2.3 判断当前网络-示例importtimefromappiumimportwebdriver# 网络的类型建议使用系统提供的类型fromappium.webdriver.connectiontypeimportConnectionType 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].Settings# 获取driverdriverwebdriver.Remote(http://localhost:4723/wd/hub,desired_caps) # 不推荐要使用这种注释写好 if driver.network_connection 4: # 4data only print(1) else: print(0) # 推荐的ifdriver.network_connectionConnectionType.DATA_ONLY:print(1)else:print(0)time.sleep(5)driver.quit()四、发送键到设备模拟按 “返回键” “home键” 等操作比如很多应用有按两次返回键退出应用的功能如果这个功能需要我们做自动化那么一定会用到这个方法。4.1 方法# 发送键到设备driver.press_keycode(keycode,metastateNone)# keycode发送给设备的关键代码# metastate关于被发送的关键代码的元信息一般为默认值参考的keycodehttps://blog.csdn.net/feizhixuan46789/article/details/168014294.2 发送键到设备-示例需求点击三次音量加再点击返回再点击两次音量减。importtimefromappiumimportwebdriver 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].Settings# 获取driverdriverwebdriver.Remote(http://localhost:4723/wd/hub,desired_caps)# 发送键到设备# 需求三次音量 返回 两次音量-driver.press_keycode(24)# 音量time.sleep(2)driver.press_keycode(24)# 音量time.sleep(2)driver.press_keycode(24)# 音量time.sleep(2)driver.press_keycode(4)# 返回键time.sleep(2)driver.press_keycode(25)# 音量-time.sleep(2)driver.press_keycode(25)# 音量-time.sleep(2)time.sleep(5)driver.quit()五、操作通知栏测试即时通信类软件的时候如果 A 给 B 发送一条消息B 的通知栏肯定会显示对应的消息。我们想通过通知栏来判断 B 是否收到消息一定要先操作手机的通知栏。注意appium官方并没有为我们提供关闭通知的api那么现实生活中怎么关闭就怎样操作就行。比如手指从下往上滑动或者按返回键5.1 方法# 打开手机通知栏driver.open_notifications()# 关闭手机通知栏driver.press_keycode(4)# 返回键5.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、业务操作# 打开通知栏driver.open_notifications()time.sleep(3)# 关闭通知栏driver.press_keycode(4)time.sleep(5)# 5、关闭APPdriver.quit()
手动修改vs工具降AI率:毕业论文用哪种方式更好? 手动修改vs工具降AI率:毕业论文用哪种方式更好? 两种选择摆在面前 论文AIGC率偏高,怎么降下来?摆在你面前的基本上就两条路: 路线A:自己手动修改。 不花钱,但要花时间和精力。 路线B:… 2026/7/9 17:16:02
接口测试基础:Postman的使用 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、Postman 介绍Postman是一款高效、功能强大的接口测试工具,开发人员和测试人员可以使用Postman发送各种HTTP请求,用户可以查看和分析响应… 2026/7/9 7:27:14
OpenClaw内置Mem0,让Agent更省token、更智能 一、引言 众所周知,OpenClaw的强大在于其灵活的Skills生态和高效的大模型决策能力,作为个人智能助手,它可以在轻松在个人电脑上部署,并且接入飞书等常用聊天工具,实现方便的智能体验。 不过,OpenClaw内置的默认记忆插件仅基于文件记录操作,虽然能快速接入记忆能力,但会… 2026/7/11 14:29:30
CyclOne vs 传统管理工具:6大核心优势让资源管控更高效 CyclOne vs 传统管理工具:6大核心优势让资源管控更高效 【免费下载链接】CyclOne One-stop resource full-cycle management platform. 项目地址: https://gitcode.com/openeuler/CyclOne 前往项目官网免费下载:https://ar.openeuler.org/ar/ Cy… 2026/7/11 21:04:32
终极配置管理指南:aops-vulcanus Config类的5个实用技巧 终极配置管理指南:aops-vulcanus Config类的5个实用技巧 【免费下载链接】aops-vulcanus A basic tool libraries of aops, including logging, configure and response, etc. 项目地址: https://gitcode.com/openeuler/aops-vulcanus 前往项目官网免费下载&… 2026/7/11 21:04:32
SAP MM 采购入库单打印:基于MIGO事务的3种自定义输出方案与配置 SAP MM采购入库单打印技术全解:从MIGO事务到三种自定义方案实战在SAP MM模块的日常操作中,采购入库单打印功能看似基础却暗藏玄机。作为仓储管理的核心环节,它不仅关系到物料追溯的准确性,更是财务核算的重要依据。本文将深入剖析… 2026/7/11 21:04:32
告别龟速下载!9大网盘直链解析神器LinkSwift深度体验指南 告别龟速下载!9大网盘直链解析神器LinkSwift深度体验指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天… 2026/7/11 21:02:30
宋光宗赵惇:懦弱失德的南宋平庸帝王 一、人物介绍赵惇(1147年-1200年),南宋第三位皇帝,宋孝宗赵昚第三子,史称宋光宗。他与勤政图强的父亲截然相反,性格懦弱多疑、心智孱弱,在位期间毫无治国魄力。受制于皇后干政、惧内… 2026/7/11 21:00:30
Qt Widgets 架构与开发入门第四章-第六章 第 4 章 布局管理 写 GUI 时,不要用绝对坐标摆控件,而是把控件交给布局管理器(layout)。窗口一缩放、字体一换、翻译一切换,布局能自动调整,而绝对坐标会立刻崩盘。 4.1 布局的核心思想 List item 布局管理器负责两件事: 分配几何:根据每个子控件的 sizeHint() / sizePolicy() … 2026/7/11 20:56:29
5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符] 5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载… 2026/7/11 0:00:11
工业信号干扰处理与FOD4216光耦应用实战 1. 工业环境中的信号干扰挑战在工业自动化领域,信号采集的准确性直接关系到整个控制系统的可靠性。典型的工业现场充斥着各种干扰源:大功率电机启停产生的电磁干扰、变频器工作产生的高频噪声、继电器触点火花放电,以及长距离传输引入的共模干… 2026/7/11 0:00:11
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构) 摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计… 2026/7/11 0:00:11
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/11 14:53:30
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/11 12:30:52
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/11 15:29:59