无障碍测试基础

说实话,刚入行那几年,我对无障碍测试的态度就是「有空再说」。直到有一次,一个视力障碍用户在网上公开吐槽我们产品,说他们团队花了半小时都完成不了一个注册流程——我才意识到,这不是小毛病,是硬伤。

从那以后,我不管做哪层测试,都会在脑里过一遍:这个功能,如果用户只看键盘操作,能走通吗?如果看不清颜色,信息会丢失吗?说白了,无障碍测试不是附加题,是合格线。

WCAG 标准——无障碍测试的金科玉律

聊无障碍,绕不开 WCAG(Web Content Accessibility Guidelines)。目前最常用的是 2.1 版,2.2 版也在逐步普及。它的核心归纳起来就四个词:可感知、可操作、可理解、健壮——业内常叫 POUR 原则。

  • 可感知:信息必须能以用户能感知的方式呈现。比如图片加替代文本,视频配字幕。
  • 可操作:所有交互组件必须能被用户操作。比如键盘能访问所有功能,点击区域够大。
  • 可理解:内容和界面要清晰、一致、可预测。比如错误提示要指明具体问题,不要只报个「系统出错」。
  • 健壮:内容要能被各种用户代理(包括辅助技术)可靠解析。比如使用语义化的 HTML,不要滥用 div。

WCAG 还划分了三个达标等级:

等级说明常见检查项示例
A(最低)必须满足,否则部分用户无法访问所有非文本内容有替代文本;纯键盘可操作
AA(中)大多数项目的合规目标颜色对比度 ≥ 4.5:1;文本可缩放至 200%
AAA(最高)最严格,但不是所有内容都能做到手语翻译;无背景音乐;对比度 ≥ 7:1

我个人习惯是把 AA 作为默认目标。AAA 有些要求太苛刻(比如纯文本无背景音),只能在特定场景里追求。但 A 级是底线,一个都不能落。

课代表记法:把 WCAG 四个原则当成测试 checklist 的四大板块,每个板块下再挂 A/AA/AAA 的测试用例。这样分层管理,不容易遗漏。

无障碍测试的意义——不止是「好人好事」

很多团队觉得无障碍是「给盲人用的」,其实这是误解。你想想看,一个手臂骨折的人只能用键盘操作;一个在嘈杂环境里的用户听不到语音提示——这些都是无障碍覆盖的场景。

从业务角度:忽视无障碍,等于放弃全球 15% 的残障用户群体。这是真金白银。

从法律角度:欧美有 ADA、EAA,国内有《无障碍环境建设法》。被告的案例越来越多,一旦出事,赔偿和声誉损失远大于前期开发成本。

从技术角度:无障碍测试往往能提前暴露代码耦合问题。我在一个项目中测 aria 属性时,发现组件库里有个事件绑定写错了,导致键盘事件冒泡异常——修复后,普通用户的点击响应也快了 30%。

所以别再觉得接无障碍是搞慈善。它跟性能测试、安全测试一样,是产品品质的硬指标。

常见无障碍问题类型——我踩过的坑

下面这几类,是我在项目中遇到频率最高的。每一条背后都有真实血泪史。

1. 颜色对比度不足

浅灰文字配白背景,看着挺「高级」,但弱视用户根本看不清。规范要求:普通文本对比度 ≥ 4.5:1,大文本(≥18px 或 ≥14px 加粗) ≥ 3:1。

工具推荐:用 Chrome DevTools 的「颜色选择器」直接看对比度值,或者装 axe DevTools 扩展,自动标注问题。

2. 键盘陷阱

弹出模态框后,Tab 跳不出去了——这是我最常遇到的问题。我曾经排查一个日历组件,发现开发者把焦点硬绑定在弹层内,但忘记处理 Esc 键和关闭按钮的焦点返回。结果用户只能强制刷新页面。

检查方法很简单:用 Tab 键从头走一遍流程,看是否丢焦点、死循环。记住,所有鼠标操作必须能用键盘等价完成。

3. 表单标签缺失或错误

<input> 没有关联的 <label>,屏幕阅读器只会播报「编辑框」,用户根本不知道要填什么。正确做法是:

<label for="email">邮箱地址</label>
<input type="email" id="email" name="email">

别偷懒用 aria-label 代替 label——前者对鼠标用户没帮助,而且多个浏览器支持不一致。

4. 动态内容更新无提示

单页应用里经常有「加载成功」的 toast 提示,或者列表自动刷新。如果只用视觉闪烁(比如颜色变化),屏幕阅读器用户完全不知情。需要用 aria-live 区域告诉辅助技术:这里的内容变了。

<div aria-live="polite" id="announce"></div>
// 更新文字时,屏幕阅读器会自动播报
document.getElementById('announce').innerText = '数据已更新'

5. 错误提示不明确

「输入有误」四个字,谁都看不懂。无障碍要求:错误提示要带上具体字段名和修复建议。比如「密码最少 8 位,至少包含一个数字」而不是简单标红。

注意:不要只依赖颜色或图标来提示错误。色盲用户看不出红色,纯图标用户可能不知道含义。一定要配合文本说明。

一张图理清无障碍测试的知识结构

下面这张 SVG 图,帮你把本章核心要点串在一起。从左到右:先熟悉 WCAG 四大原则,然后对照常见的五类问题类型,最后回到测试的意义——形成一个闭环。

无障碍测试核心要素 可感知 可操作 可理解 健壮 颜色对比度不足 键盘陷阱 表单标签缺失 动态更新无提示 错误提示不明确 法律合规 用户体验 代码质量 提示:每个绿色节点都可以拆成具体的测试用例,挂在 WCAG 对应的原则下

这张图里的「常见问题类型」只是冰山一角。实际测试中,你还会遇到焦点管理混乱、ARIA 属性过度使用、视频无字幕等问题。但万变不离其宗——回到 WCAG 的四个原则去排查,总有一条能对上。

我的个人习惯:每测一个功能,我都先在脑子里过一遍 POUR,然后对着那五类高频问题逐一扫。虽然不能保证 100% 覆盖,但能堵住 90% 的痛点。

记住,无障碍测试的核心不是「把所有问题都找出来」,而是 让每一位用户都有平等的机会去完成他们想做的事。这不是口号,是工程师的本分。