mcpField
G
github-a11y-scanner

github-a11y-scanner

github.com/community-access测试与质量429207 次安装今天更新
代码仓库

关于 github-a11y-scanner

面向 GitHub Accessibility Scanner 的集成参考资料,帮助识别扫描工作流并解析扫描器创建的问题。它说明配置项、结果缓存、增量跟踪及与本地扫描的关联方式。

主要功能

  1. 01识别 GitHub Actions 扫描工作流
  2. 02整理扫描器配置项
  3. 03解析扫描器创建的问题
  4. 04跟踪新增、已修复和持续问题
  5. 05关联 CI 与本地扫描结果
  6. 06说明 Copilot 修复生命周期跟踪

适用场景

  1. 01检查仓库是否配置无障碍扫描器
  2. 02从扫描问题中提取 WCAG 和受影响元素
  3. 03比较 CI 扫描与本地扫描结果
  4. 04追踪 Copilot 提议的修复进度

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/community-access/accessibility-agents --skill github-a11y-scanner

安装后在 Claude Code 中输入/github-a11y-scanner确认已加载。

详细介绍

GitHub Accessibility Scanner 集成

什么是 GitHub Accessibility Scanner?

GitHub Accessibility Scanner(github/accessibility-scanner@v2)是 GitHub 官方的 Action,可用于:

  • 在无头浏览器中使用 axe-core 扫描在线 URL,查找无障碍障碍
  • 为每项发现的问题创建可跟踪的 GitHub Issue,其中包含受影响的元素、WCAG 准则和修复指导
  • 可选地将 Issue 分配给 GitHub Copilot,以获取 AI 驱动的修复建议并创建 PR
  • 跨运行缓存结果,以检测变化(新增、已修复、持续存在的问题)
  • 支持经过身份验证的扫描(通过 Playwright 身份验证上下文处理登录流程、SSO 和通行密钥)
  • 可选地截取屏幕截图并将其附加到已创建的 Issue

当前版本: v2(公开预览版)

检测 Scanner 是否存在

要确定仓库是否已配置 GitHub Accessibility Scanner:

检测工作流文件

搜索引用该 Scanner Action 的工作流文件:

# Search in .github/workflows/ for the scanner action reference
grep -rl "github/accessibility-scanner" .github/workflows/

要在 YAML 中匹配的模式:

- uses: github/accessibility-scanner@v2
工作流输入

找到 Scanner 工作流后,提取其配置:

输入必需说明
urls是要扫描的 URL 列表,每行一个
repository是创建 Issue 和 PR 的仓库(所有者/名称)
token是具有写入权限(contents、issues、PR 和 metadata)的细粒度 PAT
cache_key是用于跨运行缓存结果的文件名(例如,cached_results-mysite.json)
login_url否用于经过身份验证的扫描的登录页面 URL
username否用于身份验证的用户名
password否用于身份验证的密码(通过仓库密钥提供)
auth_context否复杂身份验证所需的 JSON 字符串(Playwright 会话状态)
skip_copilot_assignment否设为 true 可跳过将 Issue 分配给 Copilot
include_screenshots否设为 true 可截取屏幕截图(存储在 gh-cache 分支上)

解析 Scanner 创建的 Issue

Scanner 创建的 GitHub Issue 采用结构化格式。Agent 应解析以下字段:

Issue 标识

可通过以下方式识别 Scanner 创建的 Issue:

  1. 作者: 运行该工作流的 GitHub Actions 机器人
  2. 标签: Scanner 会应用标签对发现的问题进行分类(通常是与无障碍相关的标签)
  3. 正文结构: Issue 包含列出违规详情的结构化部分
Issue 正文结构

Scanner Issue 通常包含:

部分内容Agent 用途
违规标题违反的 axe-core 规则映射到 help-url-reference,以获取修复文档
WCAG 准则具体的 WCAG 成功准则用于严重性评分和合规性映射
受影响的元素失败元素的 CSS 选择器或 HTML 片段供 scanner-bridge 用于映射到源代码
影响级别Critical、Serious、Moderate 或 Minor直接映射到 Agent 严重性模型
修复指导如何修复问题Agent 专家会补充特定框架的修复方案
URL发现问题所在页面的 URL用于与本地 axe-core 扫描结果交叉引用
屏幕截图链接指向 gh-cache 分支上屏幕截图的链接(如已启用)纳入审计报告
严重性映射

Scanner 使用 axe-core 影响级别,可直接映射到 Agent 严重性模型:

Scanner 影响级别Agent 严重性分值权重
CriticalCritical-15(双来源)/-10(单一来源)
SeriousSerious-7(高置信度)
ModerateModerate-3(高置信度)
MinorMinor-1
axe-core 规则对应关系

扫描器在底层使用 axe-core。扫描器问题标题和违规 ID 对应于 help-url-reference 中已编录的 axe-core 规则。扫描器常报告的规则:

axe-core 规则 IDWCAG 标准常见描述
image-alt1.1.1图片必须提供替代文本
label1.3.1表单元素必须有标签
color-contrast1.4.3元素必须有足够的颜色对比度
link-name2.4.4链接必须有可辨识的文本
html-has-lang3.1.1<html> 元素必须有 lang 属性
button-name4.1.2按钮必须有可辨识的文本
document-title2.4.2文档必须有 <title> 元素
bypass2.4.1页面必须提供跳过重复内容块的方式
heading-order1.3.1标题级别应逐级递增
aria-allowed-attr4.1.2ARIA 属性必须适用于元素角色

缓存和差异检测

扫描器使用 cache_key 在不同工作流运行之间持久保存结果,从而实现差异跟踪:

状态含义
New在当前扫描中发现问题,但缓存结果中没有
Fixed缓存结果中有问题,但当前扫描未发现(问题已自动关闭)
Persistent当前扫描和缓存结果中都发现了问题
缓存键约定

设置扫描器集成时,请使缓存键符合 Agent 的约定:

  • 使用描述性名称:cached_results-{domain}-{branch}.json
  • 按分支扫描时包含分支上下文
  • 缓存以 GitHub Actions 构件的形式存储

与本地扫描的关联

双源置信度提升

当 GitHub Accessibility Scanner(CI)和本地 axe-core 扫描(Agent)发现相同问题时:

  1. 按规则 ID 匹配: 两个来源都使用 axe-core 规则 ID(例如 color-contrast、image-alt)
  2. 按 URL 匹配: 将扫描器问题中的已扫描 URL 与本地扫描目标进行比较
  3. 按元素匹配: 比较受影响元素的 CSS 选择器或 HTML 路径
  4. 提升置信度: 两个来源都确认的发现会自动获得 high 置信度
来源比较分析
情况解读操作
扫描器和本地扫描都发现高置信度——已由双方确认报告为高置信度,采用完整严重性权重
仅扫描器发现特定于环境或间歇性出现报告为中置信度,并注明“仅 CI 中发现”
仅本地扫描发现CI 上次扫描后新出现,或仅在本地存在的情况报告为中置信度,并注明“仅本地发现”
扫描器缓存中标记为“fixed”最近已修复在差异部分跟踪为已解决

Copilot 修复跟踪

当扫描器将问题分配给 GitHub Copilot 时:

修复生命周期
阶段GitHub 状态检测方式
创建问题已打开的问题,已分配给 Copilotassignee 包含 Copilot 机器人
提出修复有关联问题的已打开 PRPR 引用了问题编号,作者为 Copilot
审查修复PR 有审查评论PR 审查状态为 CHANGES_REQUESTED 或 APPROVED
合并修复PR 已合并,问题已关闭问题状态为 closed,关联 PR 已合并
拒绝修复PR 已关闭但未合并PR 状态为 closed,且未合并
查询 Copilot 修复状态
# Find scanner issues assigned to Copilot
repo:{REPO} is:issue is:open assignee:copilot label:accessibility

# Find Copilot PRs from scanner issues
repo:{REPO} is:pr author:copilot-swe-agent label:accessibility

# Find merged scanner fixes
repo:{REPO} is:pr is:merged author:copilot-swe-agent label:accessibility

结构化输出格式

当 scanner-bridge 规范化扫描器问题数据时,会以以下格式生成发现结果:

{
  "source": "github-a11y-scanner",
  "ruleId": "color-contrast",
  "wcagCriterion": "1.4.3",
  "wcagLevel": "AA",
  "severity": "serious",
  "confidence": "high",
  "url": "https://example.com/login",
  "element": "button.submit-btn",
  "description": "Element has insufficient color contrast ratio of 3.2:1 (expected 4.5:1)",
  "remediation": "Change the text color or background to achieve at least 4.5:1 contrast ratio",
  "githubIssue": {
    "number": 42,
    "url": "https://github.com/owner/repo/issues/42",
    "state": "open",
    "copilotAssigned": true,
    "fixPR": null
  },
  "screenshot": "https://github.com/owner/repo/blob/gh-cache/screenshots/login-contrast.png"
}

扫描器问题的搜索模式

按仓库搜索
repo:{OWNER}/{REPO} is:issue label:accessibility created:>{YYYY-MM-DD}
按扫描运行搜索

特定扫描运行中的问题具有相同的创建时间戳和批次模式。可按以下条件筛选:

  • 创建日期与工作流运行日期一致
  • 扫描器应用的通用标签集
跨仓库扫描器发现
user:{USERNAME} is:issue label:accessibility sort:created-desc
org:{ORGNAME} is:issue label:accessibility sort:created-desc

评论

支持 Markdown