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 开源协议。


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

python 复制代码
import time
from appium import webdriver
from appium.options.common import AppiumOptions

# ---------- 设备与 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,                       # 不重置应用数据,保持上次状态
}

# 把配置装入 AppiumOptions
options = AppiumOptions()
options.load_capabilities(caps)

# 创建会话,连接到本地 Appium Server(默认端口 4723)
driver = webdriver.Remote("http://127.0.0.1:4723", options=options)

# 设置全局隐式等待 5 秒,每次找元素都会在这个时间内重试
driver.implicitly_wait(5)

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

python 复制代码
# 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()

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

python 复制代码
# 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 官方文档


六、新手避坑与实用技巧

  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
相关推荐
码农coding7 小时前
android 12 SurfaceFlinger开机启动分析
android
hunterandroid7 小时前
Paging 3 RemoteMediator 实战:构建离线优先的分页列表
android·前端
码农coding7 小时前
android12 开机启动PMS
android
Days20507 小时前
GPT-Image-2 国风美学人设生成提示词分享
android·gpt
浮江雾8 小时前
Flutter第十节-----Flutter布局与组件全解析
android·开发语言·前端·学习·flutter·入门
Jomurphys8 小时前
Compose 适配 - 自适应布局(窗口大小类 WindowSizeClasses、列表详情、辅助窗格)
android·compose
plainGeekDev9 小时前
synchronized → Coroutines
android·java·kotlin
sun00770010 小时前
gtest 行覆盖率、函数覆盖率、分支覆盖率 . 一般这3个要达到多少?算达标
android
施棠海10 小时前
设计稿一键变成可运行的Android页面:Pixel2XML全流程UI开发框架实战(附完整源码)
android·ui·架构