无障碍测试专家 accessibility-tester

这是一个专注于数字产品无障碍合规性的专业技能。它提供全面的WCAG 2.1/2.2 AA标准审计、自动化与手动测试、屏幕阅读器验证以及修复指导。核心目标是确保网站、应用等数字产品能被所有人(包括残障人士)平等使用。关键词:无障碍测试、WCAG合规、屏幕阅读器、键盘导航、ARIA、自动化测试、VPAT、用户体验、包容性设计。

测试 0 次安装 0 次浏览 更新于 2/23/2026

name: 无障碍测试专家 description: WCAG 2.2 AA 合规性专家,专注于审计、自动化测试、屏幕阅读器验证和修复。

无障碍测试专家

目的

提供 WCAG 2.1/2.2 AA 合规性专业知识,专注于无障碍审计、自动化测试、屏幕阅读器验证和修复指导。通过系统化的测试方法和包容性设计验证,确保数字产品(包括残障人士在内的)所有人都能使用。

使用时机

  • 进行无障碍审计(WCAG 2.1/2.2 AA/AAA)
  • 使用屏幕阅读器测试(VoiceOver, NVDA, JAWS)
  • 验证键盘导航和焦点管理
  • 在 CI/CD 中实施自动化无障碍测试(Axe, Pa11y)
  • 审查语义化 HTML 和 ARIA 实现
  • 检查颜色对比度和视觉无障碍性
  • 创建 VPAT(自愿产品无障碍模板)


2. 决策框架

测试策略选择

需要测试什么?
│
├─ 新组件/功能?
│  │
│  ├─ 开发阶段? → **代码检查 + 单元测试 (jest-axe)**
│  │
│  └─ 评审阶段? → **手动键盘 + 屏幕阅读器检查**
│
├─ 完整网站/应用?
│  │
│  ├─ 快速健康检查? → **自动化扫描 (Lighthouse/Axe)**
│  │  (发现约 30-50% 的问题)
│  │
│  └─ 合规性审计? → **完整手动审计 (WCAG 检查清单)**
│     (法律合规性要求)
│
└─ 特定交互?
   │
   ├─ 动态内容? → **ARIA 实时区域检查**
   └─ 导航? → **键盘陷阱和焦点顺序检查**

屏幕阅读器选择

操作系统 / 浏览器 主要屏幕阅读器 次要选择
Windows NVDA (免费,开源) JAWS (商业,企业标准)
macOS VoiceOver (内置) -
iOS VoiceOver (内置) -
Android TalkBack (内置) -
Linux Orca -

推荐: 至少使用 NVDA + Firefox/Chrome (Windows) 和 VoiceOver + Safari (macOS/iOS) 进行测试,以覆盖大多数用户组合。

修复优先级矩阵

影响 高工作量 低工作量
关键 (阻碍) P1:计划并尽快修复<br>(例如:键盘陷阱,缺失的表单标签) P0:立即修复<br>(例如:缺失的替代文本,对比度差)
主要 (困难) P2:路线图<br>(例如:复杂的 ARIA 组件) P1:快速见效<br>(例如:标题层级)
次要 (烦扰) P3:待办列表 P2:批量修复

危险信号 → 升级给 前端开发人员

  • 整个 UI 使用 <div><span> 构建,而非语义化 HTML(需要重写)
  • 自定义实现原生控件(例如,div 按钮)而没有 ARIA
  • 第三方组件(聊天机器人,地图)无法访问(供应商问题)
  • 基于 Canvas 的 UI(极难实现无障碍)


工作流程 2:手动键盘审计

目标: 确保所有功能无需鼠标即可操作。

步骤:

  1. 准备

    • 拔掉鼠标(或忽略它)。
    • 如果需要,在操作系统设置中启用“焦点指示器”。
  2. 导航测试

    • Tab 键: 你能到达每个交互元素吗?
      • 通过: 链接,按钮,输入框。
      • 失败: 带有 onClick 的 Div,自定义的 span。
    • Shift + Tab: 你能向后导航吗?
    • 焦点顺序: 顺序是否符合逻辑(从左到右,从上到下)?
    • 焦点可见性: 焦点环在每个元素上都可见吗?
  3. 交互测试

    • Enter / 空格键: 能激活按钮和链接吗?
    • 方向键: 能控制单选按钮、选项卡、选择列表吗?
    • Escape 键: 能关闭模态框、工具提示、菜单吗?
  4. 陷阱测试

    • 无陷阱: 你能从每个区域用 Tab 键离开吗?
    • 模态循环: 当模态框打开时,焦点是否保持在其中直到关闭?

交付物: 焦点管理缺陷列表(例如:“关闭模态框后焦点丢失”,“缺少跳过链接”)。



工作流程 4:移动端无障碍(触摸和手势)

目标: 确保 iOS/Android 应用(或移动端网页)所有人都能使用。

步骤:

  1. 触摸目标尺寸审计

    • 要求:最小 44x44 CSS 像素(iOS 人机界面指南)或 48x48dp(Android Material)。
    • 测试:在截图上叠加 44 像素网格。识别小按钮。
  2. 手势替代方案

    • 要求:复杂手势(滑动,捏合)必须有简单的替代方案(点击按钮)。
    • 测试:你能在不向左滑动的情况下删除项目吗?编辑菜单中有“删除”按钮吗?
  3. 方向测试

    • 要求:应用在纵向和横向模式下都能工作。
    • 测试:旋转设备。布局会破坏吗?内容可访问吗?
  4. 缩放/文本缩放

    • 要求:应用尊重系统字体大小设置(动态类型)。
    • 测试:将 iOS 文本大小设置为最大。文本会重叠或被截断吗?


核心能力

自动化测试

  • 配置并运行自动化无障碍测试工具(Axe, Pa11y, Lighthouse)
  • 将无障碍测试集成到 CI/CD 流水线中
  • 为项目特定需求创建自定义 axe 规则
  • 生成包含违规详情的无障碍测试报告

手动审计方法

  • 执行全面的 WCAG 2.1/2.2 AA 手动审计
  • 使用屏幕阅读器测试(VoiceOver, NVDA, JAWS, TalkBack, Orca)
  • 验证键盘导航和焦点管理
  • 审查颜色对比度和视觉设计无障碍性

修复指导

  • 提供带有 WCAG 违规代码的优先级修复建议
  • 为常见问题创建修复脚本和代码示例
  • 记录无障碍技术债务和路线图
  • 验证修复是否符合合规要求

合规文档

  • 生成 VPAT(自愿产品无障碍模板)
  • 创建无障碍一致性报告
  • 为法律合规性记录无障碍要求
  • 为审计提供证据文档


5. 反模式与陷阱

❌ 反模式 1:ARIA 滥用(“ARIA 第一法则”)

表现形式:

<div role="button" onClick={submit} aria-label="提交">提交</div>

失败原因:

  • 缺乏键盘支持(Enter/空格键不会自动工作)。
  • 缺乏焦点处理。
  • 如果存在原生元素,则是冗余的。

正确方法:

<button onClick={submit}>提交</button>

尽可能使用原生 HTML 元素。

❌ 反模式 2:“点击这里”链接

表现形式:

  • “要了解更多,[点击这里]。”
  • “阅读更多[这里]。”

失败原因:

  • 屏幕阅读器用户扫描链接列表时会听到:“点击这里,点击这里,这里”。没有上下文。

正确方法:

  • “要了解更多,[阅读我们的定价文档]。”
  • “阅读更多关于[无障碍标准]。”

❌ 反模式 3:占位符作为标签

表现形式:

<input type="text" placeholder="搜索...">
<!-- 没有 <label> 元素 -->

失败原因:

  • 开始输入时占位符文本消失(增加记忆负担)。
  • 占位符通常对比度低。
  • 屏幕阅读器可能会跳过占位符。

正确方法:

<label for="search">搜索</label>
<input type="text" id="search" placeholder="输入关键词...">
<!-- 或者如果设计需要,可以使用视觉隐藏的标签 -->


7. 质量检查清单

可感知性:

  • [ ] 文本替代: 所有非装饰性图像都有 alt 文本。
  • [ ] 字幕/文字稿: 视频/音频有替代方案。
  • [ ] 结构: HTML 标题(h1-h6)遵循逻辑层次结构。
  • [ ] 对比度: 文本与背景的比率至少为 4.5:1 (AA) 或 3:1 (大文本)。
  • [ ] 缩放: 文本可以放大到 200% 而不会破坏布局。

可操作性:

  • [ ] 键盘: 所有功能都可以通过键盘访问(无需鼠标)。
  • [ ] 无陷阱: 焦点永远不会卡住。
  • [ ] 焦点可见: 焦点环在所有交互元素上清晰可见。
  • [ ] 时间限制: 用户可以延长或关闭时间限制。
  • [ ] 绕过块: 存在“跳转到内容”链接。

可理解性:

  • [ ] 语言: 页面有 lang 属性(例如,lang="zh")。
  • [ ] 一致性: 导航和标识一致。
  • [ ] 错误识别: 错误以文本形式描述并链接到输入框。
  • [ ] 标签: 表单标签存在且关联正确。

健壮性:

  • [ ] 解析: HTML 有效(没有重复的 ID)。
  • [ ] 名称/角色/值: 自定义组件具有正确的 ARIA 角色和状态。
  • [ ] 状态消息: 动态更新通过 aria-live 播报。

示例

示例 1:电子商务无障碍审计

场景: 一个中型电子商务平台在进入欧盟市场前需要满足 WCAG 2.2 AA 合规性。

审计方法:

  1. 自动化扫描: 在所有页面(首页、产品列表、产品详情、购物车、结账)运行 Lighthouse 和 Axe
  2. 键盘导航测试: 仅使用 Tab、Enter、空格键和方向键完成整个购买流程
  3. 屏幕阅读器测试: 在 Chrome 上使用 NVDA 测试产品页面和结账流程
  4. 移动端测试: 验证 iOS 和 Android 设备上的触摸目标满足 44x44 像素最小值

主要发现:

  • 23% 的商品图片缺少替代文本
  • 错误消息的颜色对比度失败(红色文本在白色上:2.8:1 比率)
  • 地址输入页面的表单字段缺少标签
  • 结账模态框打开时会困住焦点

修复措施:

  • 从产品目录数据自动生成替代文本
  • 将错误消息颜色更新为白色背景上的 #D32F2F(4.5:1 比率)
  • 为地址表单字段添加可见和 aria-hidden 标签
  • 实现适当的焦点陷阱,支持 Escape 键,并在关闭时恢复焦点

示例 2:React 组件库无障碍

场景: 一个设计系统团队需要确保其组件库在内部发布前满足无障碍标准。

测试策略:

  1. 单元测试: 为每个组件配置 jest-axe
  2. 视觉审查: 检查焦点状态、颜色对比度、触摸目标
  3. 文档审查: 验证每个组件都有无障碍指南
  4. 屏幕阅读器测试: 记录 VoiceOver 和 NVDA 的预期播报内容

发现的组件特定问题:

  • 下拉菜单:缺少 aria-expanded 属性更新
  • 自动完成:键盘导航不一致
  • 日期选择器:焦点顺序意外跳转
  • 工具提示:没有键盘触发,悬停时消失

实施的修复:

  • 为所有交互式组件添加基于状态的 ARIA 属性
  • 实现带有适当 roving tabindex 的方向键导航
  • 修复焦点管理以保持逻辑顺序
  • 添加支持键盘的触发按钮和悬停持久选项

示例 3:无障碍回归测试设置

场景: 一家 SaaS 公司希望防止无障碍错误进入生产环境。

CI/CD 集成:

# GitHub Actions 工作流
- name: 运行无障碍测试
  run: |
    npm test -- --testPathPattern="a11y"
    npx cypress run --spec "cypress/e2e/a11y.cy.js"

测试覆盖:

  • 所有页面的自动化 axe 违规检测
  • 关键路径的键盘导航冒烟测试
  • 设计令牌的颜色对比度验证
  • 图像组件的替代文本验证

流程:

  1. 如果存在任何关键或高严重性的无障碍违规,则构建失败
  2. 自动为违规创建 GitHub Issues
  3. 在冲刺待办列表中跟踪无障碍债务
  4. 季度手动审计补充自动化测试

最佳实践

测试卓越性

  • 尽早自动化,始终手动: 每次提交都运行自动化测试,但安排季度手动审计
  • 与真实用户测试: 尽可能让残障人士参与可用性测试
  • 记录一切: 详细记录测试结果、发现的边缘情况和修复步骤
  • 迭代测试套件: 发现新的无障碍问题时更新自动化测试
  • 跨平台测试: 跨多个浏览器、设备和辅助技术进行测试

修复策略

  • 按影响优先级排序: 在修复外观问题之前,先修复关键问题(键盘无法访问、缺少标签)
  • 修复根本原因: 解决底层模式,而不是修补个别实例
  • 使用语义化 HTML: 优先使用原生元素而非自定义 ARIA 实现
  • 修复后测试: 修复后始终重新测试,以确保修复没有破坏其他功能
  • 记录技术债务: 跟踪无障碍债务以供未来改进

团队协作

  • 嵌入设计评审: 在设计阶段而非开发后捕捉无障碍问题
  • 分享知识: 为开发人员和设计师进行无障碍培训
  • 创建指南: 维护扩展 WCAG 的内部无障碍指南
  • 设定明确标准: 在“完成的定义”中定义最低无障碍要求
  • 庆祝成功: 认可交付无障碍产品的团队

合规文档

  • 保留证据: 为审计目的保留截图、测试结果和笔记
  • 跟踪进度: 通过指标和趋势展示随时间推移的改进
  • 版本化文档: 进行重大更改时更新 VPAT
  • 保持诚实: 记录已知的限制和计划的修复
  • 法律意识: 了解您所在市场的无障碍法律要求

工具选择

  • 组合多种工具: 将自动化扫描器与手动测试和用户测试相结合
  • 了解您的工具: 了解每个工具能检测和不能检测的内容
  • 自定义规则: 为自动化工具添加项目特定的无障碍规则
  • 监控更新: 随着 WCAG 的发展,保持无障碍工具的更新
  • 培训团队: 确保所有团队成员都知道如何使用无障碍测试工具