当前位置: 首页 > news >正文

Appium 3.x安卓按键与通知栏操作全指南

Appium 3.x 小白必看:安卓按键与通知栏操作完全指南 + KeyCode 大全(逐行代码讲解)

前言

在 Appium 自动化测试中,除了点击屏幕上的元素,我们还经常需要模拟实体按键(如音量键、返回键)、控制通知栏、查看手机网络状态等。
本文专门为刚接触 Appium 的小白设计,用最直白的语言 + 一行代码一行注释的方式,带你掌握这些“隐形操作”。
文中所有代码基于Appium 3.x + Python Client 5.x,在真机(Android 9)上亲测通过。结尾还附上Android KeyCode 速查大全,方便你随时复制使用。

本文为个人原创学习笔记,发布于 CSDN 仅作技术交流;Appium 遵循 Apache 2.0 开源协议。


一、环境准备(通用模板,逐行注释)

importtimefromappiumimportwebdriverfromappium.options.commonimportAppiumOptions# ---------- 设备与 APP 配置 ----------caps={"platformName":"Android",# 系统平台:Android"appium:platformVersion":"9",# 系统版本:Android 9"appium:deviceName":"VOG-AL00",# 设备名,务必与 adb devices 输出一致"appium:automationName":"UiAutomator2",# 自动化引擎"appium:appPackage":"com.android.settings",# 应用包名:系统设置"appium:appActivity":"com.android.settings.SubSettings",# 启动 Activity"appium:noReset":True,# 不重置应用数据,保持上次状态}# 把配置装入 AppiumOptionsoptions=AppiumOptions()options.load_capabilities(caps)# 创建会话,连接到本地 Appium Server(默认端口 4723)driver=webdriver.Remote("http://127.0.0.1:4723",options=options)# 设置全局隐式等待 5 秒,每次找元素都会在这个时间内重试driver.implicitly_wait(5)

二、场景一:打开和关闭通知栏(完整代码 + 逐行解释)

# 1. 向下滑动打开通知栏(Appium 内置方法,比手动滑更稳定)driver.open_notifications()# 2. 等待 3 秒,方便肉眼确认通知栏已展开time.sleep(3)# 3. 按下安卓返回键(KeyCode = 4),通知栏会自动收起driver.press_keycode(4)# 4. 再次等待 3 秒,确保界面恢复到应用time.sleep(3)# 5. 结束整个自动化会话,释放资源driver.quit()

知识点

  • open_notifications()专门用于展开安卓通知栏,无需自己计算坐标滑动。
  • 返回键的 KeyCode 固定为4,无论实体键还是导航栏虚拟键都一样。
  • press_keycode()只模拟“按一下”,长按需用long_press_keycode()

三、场景二:关闭应用、查看网络、调节音量(逐行注释)

# 1. 强制关闭“设置”应用,效果等同于在多任务界面划掉卡片driver.execute_script("mobile: terminateApp",{"appId":"com.android.settings"})# 2. 打印当前网络连接状态(返回一个整数)print(driver.network_connection)# 返回值含义:0=飞行模式,1=仅移动数据,2=仅WIFI,6=移动数据+WIFI# 3. 按一下音量+键(KeyCode = 24),音量增加一格driver.press_keycode(24)time.sleep(3)# 等待 3 秒观察音量条# 4. 再按一次音量+键,音量再增加一格driver.press_keycode(24)time.sleep(3)# 5. 按一下音量-键(KeyCode = 25),音量减小一格driver.press_keycode(25)time.sleep(3)# 6. 再按一次音量-键driver.press_keycode(25)time.sleep(3)# 7. 退出会话driver.quit()

知识点

  • mobile: terminateApp是 Appium 3.x 推荐关闭应用的方式,比旧版driver.close_app()更可靠。
  • network_connection是只读属性,返回的数字可用来判断当前网络模式。
  • 音量键 KeyCode 固定为24(+)25(-),同理媒体控制也有对应 KeyCode。

四、为什么不用set_network_connection()设置飞行模式?

很多新手尝试用driver.set_network_connection(1)切换飞行模式时会遇到报错:

Unknown command: data

这是因为 Appium 底层需要通过 ADB 执行cmd phone data disable,而部分模拟器(如雷电)或定制系统阉割了该命令。
解决方案:改用 ADB 命令或直接 UI 自动化点击飞行模式开关,这样任何设备都能稳定运行。


五、Android KeyCode 常用速查大全

下面列出自动化测试中最常碰到的按键码,直接复制 KeyCode 传入press_keycode()即可。

按键名称KeyCode功能说明
主页键 (HOME)3回到桌面
返回键 (BACK)4返回上一页、关闭通知栏/弹窗
拨号键 (CALL)5打开拨号盘
挂断键 (ENDCALL)6挂断电话
音量+ (VOLUME_UP)24增大媒体/铃声音量
音量- (VOLUME_DOWN)25减小音量
电源键 (POWER)26锁屏/唤醒屏幕
相机键 (CAMERA)27启动相机或拍照
清除键 (CLEAR)28清除输入框文字
字母 A ~ Z29 ~ 54A=29,依次递增,Z=54
数字 0 ~ 97 ~ 160=7,9=16
回车/确认 (ENTER)66确定、发送、搜索
退格/删除 (DEL)67删除前一个字符
空格 (SPACE)62输入空格
Tab 键61切换焦点
菜单键 (MENU)82旧设备菜单键
搜索键 (SEARCH)84呼出搜索
通知栏展开83部分系统可用,但推荐open_notifications()
多任务/概览键 (APP_SWITCH)187查看最近任务(Android 9+)
媒体 播放/暂停85控制音乐播放/暂停
媒体 停止86停止播放
媒体 下一首87切换到下一首
媒体 上一首88切换到上一首
媒体 快进90快进
媒体 快退89快退
音量静音164切换静音模式(部分系统)
切换输入法228弹出输入法选择器

更完整的列表可查阅 Android KeyEvent 官方文档。


六、新手避坑与实用技巧

  1. press_keycode只模拟按下,不模拟长按
    长按电源键等操作必须使用driver.long_press_keycode(26)

  2. 通知栏展开失败?
    检查应用是否占用了全屏,或者改用open_notifications(),它是官方封装好的方法,稳定性最高。

  3. 音量调节后看不到效果?
    音量条出现时间极短,加time.sleep(2~3)或截图验证即可。

  4. 关闭应用后如何重新打开?
    使用driver.activate_app("com.android.settings")可以把应用重新拉回前台。

  5. deviceName必须与adb devices输出一模一样
    别随手写个"VOG-AL00"就完事,必须先从命令行运行adb devices确认设备序列号。

  6. 模拟器不支持set_network_connection
    碰到Unknown command: data错误时,就别死磕代码了,直接用 ADB 命令或界面操作飞行模式。


七、总结与学习建议

本文用两个最常见的场景,把 Appium 中的按键模拟、通知栏控制、网络状态获取讲透了。
对于刚入门的小白,只要记住这几个 KeyCode 和对应方法,就能完成大部分手机系统级操作:

  • 返回:press_keycode(4)
  • 主页:press_keycode(3)
  • 音量加/减:press_keycode(24)/25
  • 通知栏:driver.open_notifications()
  • 网络状态:driver.network_connection
  • 关闭应用:mobile: terminateApp

保存好这篇笔记,以后写自动化脚本时直接复制模板,再根据 KeyCode 大全调用你需要的按键,效率直接翻倍!


版权与参考说明

  1. 本文为个人原创学习笔记,所有代码与案例均为实操整理,发布于 CSDN 仅作技术交流;
  2. Appium 为开源自动化测试框架,遵循 Apache 2.0 开源协议;
  3. 参考资料:Appium 官方文档、Android KeyEvent。
http://www.cnnetsun.cn/news/3532678.html

相关文章:

  • Silverstripe Framework 文件上传:安全处理图片与文档的完整方案
  • Wand-Enhancer深度解析:本地化游戏修改器的架构揭秘与实战指南
  • OpenDCAI/OpenWorldLib中的推理模块:多模态理解与空间推理的实现指南
  • AI菜谱生成精准度突破临界点:基于2176组家庭实测数据的微调框架(含私有食材知识图谱构建法)
  • 审计Excel底稿怎么解析?openpyxl、商业组件与云端渲染的兼容与成本对比
  • 深入解析eHRPWM同步与相位控制:多模块电源与电机驱动核心
  • 飞秒激光工程化OER催化剂:晶格氧活化新机制
  • OpenFlow在数据中心负载均衡中的实践与优化
  • C++字符串加密算法实现:从凯撒加密到动态位移的编程实践
  • 执法记录仪实时图传物联网卡在群体性活动高并发下限速问题解决方案
  • NoFences桌面整理:3分钟彻底解决Windows桌面混乱问题的免费开源方案
  • SpringBoot+Vue超市管理系统毕业设计:从零部署到核心功能测试
  • Power BI数据建模性能优化:从粒度设计到关系管控的四大专业策略
  • Marker:智能PDF转Markdown工具的高效自动化解决方案
  • XUnity Auto Translator完全指南:3步解决Unity游戏语言障碍的终极方案
  • 深入解析DRA7xxP SoC内存映射:L3_INSTR调试与L4外设寻址实战
  • 游戏AI行为树:节点设计与执行流程的实现
  • 深入解析R3nzSkin:英雄联盟内存级换肤工具的技术实现与安全架构
  • 使用Docker部署项目(本地windows环境项目)
  • 如何在Windows电脑上完美使用Switch控制器:BetterJoy终极指南
  • 数据科学团队建设三大支柱:数据、产品、生产
  • 【UDQ正弦PWM】单相统一功率因数变流器控制、单相VSI或交直变流器以统一功率因数模式运行、控制器采用不平衡d-q控制在同步参考框架中实现研究附Simulink仿真
  • AI时代软件工程师的范式转移与多Agent协作
  • 深入解析EDMA3控制器:从寄存器配置到实战避坑指南
  • 虚幻引擎逆向工程利器:UnrealMappingsDumper 使用指南与实战心得
  • Unity批量重命名终极解决方案:Mulligan Renamer完全指南
  • 乙醛脱氢酶活性检测:从酒精代谢到干细胞研究的微量化革命
  • Unity批量重命名终极指南:如何用Mulligan Renamer快速整理游戏资源
  • 播音主持培训,差别不在名气而在本地化适配
  • C++ string类深度解析:从内存管理到性能优化实战