无障碍测试概述:为什么你必须现在就关注它

说实话,我以前带团队的时候,每次提到「无障碍测试」,总有人觉得这是「加分项」,不是「必选项」。直到有一次我们交付的产品被一家大型金融机构退回——原因是他们的采购条款里硬性要求 WCAG 2.1 AA 合规。那个项目,我们加班重写了将近一半的前端代码。

从那以后,我养成了一个习惯:每个需求评审里,必须有人问一句「这个交互,盲人怎么用?」。这不是政治正确,这是工程硬约束。今天我们就从最基础的东西讲起。

什么是无障碍测试

无障碍测试,说白了就是检查你的产品能不能被「所有人」使用——包括那些视力不好、听不见、手抖、或者只能用键盘操作的人。

你可能会想:「我的用户都是正常人啊」。但你想想看,一个正常人也会遇到以下场景:

  • 在嘈杂的地铁里看视频,需要字幕
  • 眼睛盯着投影开会时,用键盘操作幻灯片
  • 临时手受伤,只能用语音控制手机

所以无障碍不是「给少数人开小灶」,而是让产品在任何场景下都好用。我建议把它当成一种质量属性,和性能、安全一样重要。

定义:无障碍测试是验证软件产品是否遵循无障碍标准(如 WCAG)的测试活动,覆盖感知、操作、理解、兼容四个维度。

为什么重要?聊聊我踩过的坑

曾经有一次,我们的页面按钮没有正确设置 aria-label,导致屏幕阅读器读出来的内容是「按钮,未标记」。客户那边的视障用户直接投诉到 CEO 那里。嗯,那次复盘会上我脸都绿了。

无障碍测试的重要性可以归结为四点:

维度 为什么重要 我见过的真实案例
法律合规 多国立法要求数字产品必须无障碍 一家 SaaS 公司因为没有提供无障碍声明,被用户起诉
用户覆盖面 全球约 15% 的人口有某种形式的残疾 淘宝、京东的无障碍版本每年服务上千万用户
SEO 与性能 语义化 HTML 提升搜索引擎抓取效率 修复 alt 属性后,我们站点的图片搜索流量涨了 12%
工程质量 无障碍要求促使代码更健壮 强制用键盘导航后,我们发现了很多焦点管理 bug

注意:不要等到产品快上线了才补无障碍测试。我在项目中遇到过最惨的情况是:开发完成发现所有表单都没有 label,三千多个 input 要挨个改。那周我们团队每天加班到十一点。

WCAG 标准简介——我们用什么来判合规

WCAG(Web Content Accessibility Guidelines)是目前全球最权威的无障碍指南,现在是 2.2 版本,但企业里普遍要求 2.1 AA 级别。它把无障碍需求分成四个原则,简称「POUR」:

  1. Perceivable(可感知)——信息必须能通过至少一种感官接收。比如图片加 alt、视频加字幕。
  2. Operable(可操作)——所有交互都必须能通过多种方式完成。比如键盘能访问所有功能,不要有 3 秒以上的时间限制。
  3. Understandable(可理解)——内容与界面必须清晰一致。比如错误的提示要明确、导航要统一。
  4. Robust(健壮)——代码必须能被各类辅助技术正确解析。比如使用标准的语义标签而不是 <div onclick>。

每个原则下又细分成成功标准(Success Criteria),A 级是基本要求,AA 级是大多数企业的合规目标,AAA 级是最严格但实际应用的少。我建议团队先把目标定在 AA 级,跑一趟再考虑要不要冲 AAA。

无障碍测试在 CI 中的位置

你可能会问:为什么非要放到 CI/CD 里?我个人习惯是:能自动化的坚决不手工。以前我们做无障碍测试靠 QA 用 JAWS 朗读器逐个页面跑,一个版本测下来要三天。后来用 axe-core + Puppeteer 集成到流水线里,每次 PR 合并前自动扫描,阻塞的问题直接在 MR 上标红。

下面的图可以帮你理解无障碍测试在企业级 CI 中的整体位置:

企业级无障碍CI测试流程 开发阶段 测试&发布阶段 静态分析 eslint-plugin-jsx-a11y / axe-linter 组件级测试 jest + jest-axe 校验 role / aria 集成扫描 Cypress + cypress-axe 全流程检查 视觉回归(无障碍) 对比焦点高亮/对比度变化 端到端无障碍审计 Puppeteer + axe-core 全页面扫描 结果报告&阻断 生成HTML报告,违规即PR失败

避坑指南:我在刚开始做无障碍 CI 时犯过一个错——把所有违规都设为「阻断」。结果构建天天失败,开发怨声载道。后来我改成:A 级违规直接阻塞,AA 级违规预警但不阻塞,通过 PR 注释给开发参考。效果好了很多。

本章知识结构一览

知识点 核心内容 实战切入点
无障碍测试定义 验证产品是否可被所有人使用 从给一个按钮加 aria-label 开始
四大价值 法律、用户、SEO、质量 写合规声明文档,查风险点
WCAG 原则 可感知、可操作、可理解、健壮 用 axe DevTools 扫描任意页面
CI 集成方式 静态分析 → 单元 → 集成 → E2E 写第一个 axe-core 脚本