无障碍测试基础

做无障碍测试,说白了就是让产品能被所有人用——包括那些依赖TalkBack、屏幕放大、语音控制的用户。我自己的项目里,经常遇到团队觉得「无障碍测试就是走个过场」,结果上线后被视障用户骂到自闭。所以这一章,我们先把地基打牢。

核心目标:理解WCAG标准、Android测试分类以及手动vs自动的差异,为后续CI集成做准备。

1. WCAG标准——无障碍的「交通规则」

WCAG(Web Content Accessibility Guidelines)虽然是Web出身,但移动端照样适用。目前主流版本是2.1,2.2也在慢慢普及。它围绕四个原则展开:

  • 可感知(Perceivable):信息必须能被感知。比如图片加alt文字,视频配字幕。我记得有一次测试一个股票App,图表没有替代文本,TalkBack直接跳过,用户完全不知道走势——这就是典型的感知失败。
  • 可操作(Operable):所有操作必须能用。比如按钮不能用纯触摸手势,得支持键盘或切换控制。我遇到过某App的「滑动删除」完全没有备用方案,用TalkBack的人根本删不了消息。
  • 可理解(Understandable):界面和操作要符合直觉。比如错误提示要清晰,不要只弹个「Error 500」。一个反例:某登录页验证码采用随机旋转图片,正常人看着都懵,更别说认知障碍用户了。
  • 健壮性(Robust):兼容各种辅助技术。比如自定义控件要暴露正确的无障碍属性(contentDescription、role等)。Android上最常见的坑是 View 没有设置 importantForAccessibility="yes"。

避坑指南:我曾经天真地以为只用关注「可感知」,结果被用户投诉到PM那里。实际上四个原则缺一不可,尤其是健壮性,很多开发者自己写了个自定义View,结果TalkBack完全读不出来。

2. Android无障碍测试分类

Android测试大致可以按用户障碍类型来分。我习惯把测试归类成下面这张表,方便团队在计划时直接参考:

分类 目标用户 典型测试点 常用工具
视觉 盲人、低视力、色盲 TalkBack朗读、对比度、字体放大、色盲模式 TalkBack、Accessibility Scanner、Color Contrast Analyzer
听觉 听障、聋人 字幕、视觉提示(如闪光通知)、音量独立 Live Caption、Android Accessibility Suite
运动 帕金森、肢体不便 目标大小、手势替代、防误触 Switch Access、Touch Exploration
认知 阅读障碍、注意力缺陷 语言简洁、导航一致性、超时提示 人机工程评估、用户走查

你想想看,一个App可能同时影响几种用户。比如视频播放器:没有字幕影响听觉用户,按钮太小影响运动用户,启动闪白影响认知用户。所以别只盯着TalkBack测,其他分类也得覆盖。

3. 手动测试 vs 自动测试

很多人问我:「到底该用手动还是自动?」我的答案是:都得上,但分工不同。

手动测试:靠真人操作用户场景。比如我经常做的事:关掉屏幕用TalkBack走完整个注册流程,看看能否成功提交。手动测试能发现「逻辑问题」——自动工具很难判断「这声音描述听起来是否自然」。

自动测试:用代码验证规则。比如用Espresso的 AccessibilityChecks 检查所有 View 是否包含 contentDescription。自动测试适合「机械重复」的校验,速度极快,但无法感知上下文。

我把两者的区别整理成了对比表:

维度 手动测试 自动测试
测试频率 每周/每个特性版本 每次提交(CI触发)
发现的问题 用户体验、语义、流程卡点 属性缺失、对比度、焦点顺序
工具典型 TalkBack、Switch Access、真人走查 Accessibility Scanner、Robolectric + AccessibilityChecks、A11yTest
覆盖率 有限(少走几遍) 高(每屏都扫)
适合场景 复杂交互、动态内容、多步流程 静态布局、列表、表单字段

注意:自动测试永远无法完全替代手动。我曾见过团队只跑自动化,结果所有 View 都有 contentDescription,但 TalkBack 读出来是「按钮 按钮 按钮」——因为所有描述都是硬编码的 "按钮",毫无区分度。这种语义问题只有手动测才能发现。

那么,怎么把这两者融入到CI里呢?自动化的部分可以用Gradle任务在每次PR时跑一遍无障碍检查,拦截明显的低级错误;手动测试则放在发布前的验收阶段。具体怎么配,我们后面会详细讲。先记住一个原则:自动兜底,手动保质量。

无障碍测试知识体系 无障碍测试基础 WCAG 2.1/2.2 可感知 可操作 可理解 健壮性 Android无障碍测试分类 视觉 听觉 运动 认知 手动 vs 自动测试 手动测试 自动测试 CI集成策略 自动化检查(Gradle) 手动验收(发布前) 注意 自动不能替代手动 语义问题需人工走查

我习惯在项目开始时就用这张图给团队做培训。你看,从WCAG标准出发,分支到测试分类和测试方法,最后指向CI集成。清晰吧?接下来我们就沿着这个路径,一步步落地到具体工具和脚本里。