news 2026/7/20 11:34:42

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/20 11:34:16

Silverstripe Framework 文件上传:安全处理图片与文档的完整方案

Silverstripe Framework 文件上传:安全处理图片与文档的完整方案 【免费下载链接】silverstripe-framework Silverstripe Framework, the MVC framework that powers Silverstripe CMS 项目地址: https://gitcode.com/gh_mirrors/si/silverstripe-framework …

作者头像 李华
网站建设 2026/7/20 11:32:35

Wand-Enhancer深度解析:本地化游戏修改器的架构揭秘与实战指南

Wand-Enhancer深度解析:本地化游戏修改器的架构揭秘与实战指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 在游戏修改工具领域&…

作者头像 李华
网站建设 2026/7/20 11:31:34

OpenDCAI/OpenWorldLib中的推理模块:多模态理解与空间推理的实现指南

OpenDCAI/OpenWorldLib中的推理模块:多模态理解与空间推理的实现指南 【免费下载链接】OpenWorldLib 前沿世界模型的统一推理代码库 项目地址: https://gitcode.com/OpenDCAI/OpenWorldLib 在人工智能领域,世界模型正成为理解复杂物理世界的核心技…

作者头像 李华
网站建设 2026/7/20 11:28:35

深入解析eHRPWM同步与相位控制:多模块电源与电机驱动核心

1. 项目概述与核心价值在数字电源和电机控制领域,尤其是当我们面对多模块、多相位的复杂拓扑结构时,一个核心的挑战是如何让多个PWM(脉冲宽度调制)信号像一支训练有素的乐队一样,既能保持统一的节拍,又能根…

作者头像 李华