← 中文资源

简体中文版本

自动化无障碍测试

自动化 a11y 测试扫描渲染后的页面查找 WCAG 违规——对比度、标签、标题层级、ARIA 误用——覆盖可机械判定的子集,人工审计仍不可免。

阅读英文原文

概念定义

WCAG 成功标准分为机器可查规则与人工判断标准。自动化引擎编码前者并跑在真实 DOM 上——廉价、快速、且对自身覆盖上限诚实。

工作机制

引擎遍历无障碍树并应用规则:输入须有程序关联标签、图片须有可访问名称、标题须嵌套、颜色对须满足对比度、landmark 与 role 须合法。违规带严重级别与规则 id,可映射到文档。接入点:组件单测、跨路由跨状态的 e2e 扫描。

使用场景

持续运行——每次组件构建、CI 中每次页面渲染,且覆盖交互后状态。把规则引擎当作无障碍的编译器:违规像类型错误一样阻断合并。

常见误区

“axe 报绿即可访问”不成立:自动规则约抓到一半问题,判断型那一半需要人加读屏器。只扫默认路由状态会放过焦点陷阱里的对话框;删内容而不是选无障碍色板来消对比度告警是自欺;对比度规则读计算样式,文字背后的背景图能逃逸。“零违规但键盘不可用”是真实且常见的状态。

代码示例

button:focus-visible {
  outline: 3px solid #4f46e5;
  outline-offset: 2px;
}

button:focus:not(:focus-visible) {
  outline: none;
}
<div class="accordion">
  <h3>
    <button aria-expanded="true"
            aria-controls="panel-1"
            id="header-1">
      Section 1
    </button>
  </h3>
  <div role="region"
       aria-labelledby="header-1"
       id="panel-1">
    <p>Content for section 1</p>
  </div>
</div>

<div class="alert" role="alert" aria-live="assertive">
  Form submitted successfully!
</div>

<nav aria-label="Main navigation">
  <ul>
    <li><a href="/" aria-current="page">Home</a></li>
    <li><a href="/about">About</a></li>
    <li><a href="/contact">Contact</a></li>
  </ul>
</nav>

<button aria-busy="false"
        aria-describedby="save-help">
  Save Changes
</button>
<span id="save-help" class="visually-hidden">
  Saves all changes to your profile
</span>

<div role="status" aria-live="polite" class="sr-only">
  Loading content...
</div>

<input type="text"
       aria-label="Search products"
       aria-describedby="search-hint"
       placeholder="Search...">
<p id="search-hint">Type at least 3 characters</p>