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 ~ Z | 29 ~ 54 | A=29,依次递增,Z=54 |
| 数字 0 ~ 9 | 7 ~ 16 | 0=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 官方文档。
六、新手避坑与实用技巧
press_keycode只模拟按下,不模拟长按
长按电源键等操作必须使用driver.long_press_keycode(26)。通知栏展开失败?
检查应用是否占用了全屏,或者改用open_notifications(),它是官方封装好的方法,稳定性最高。音量调节后看不到效果?
音量条出现时间极短,加time.sleep(2~3)或截图验证即可。关闭应用后如何重新打开?
使用driver.activate_app("com.android.settings")可以把应用重新拉回前台。deviceName必须与adb devices输出一模一样
别随手写个"VOG-AL00"就完事,必须先从命令行运行adb devices确认设备序列号。模拟器不支持
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 大全调用你需要的按键,效率直接翻倍!
版权与参考说明
- 本文为个人原创学习笔记,所有代码与案例均为实操整理,发布于 CSDN 仅作技术交流;
- Appium 为开源自动化测试框架,遵循 Apache 2.0 开源协议;
- 参考资料:Appium 官方文档、Android KeyEvent。