搜索
首页web前端js教程用斧头自动可访问性检查

Automated Accessibility Checking with aXe

aXe: 自动化辅助功能测试,让网站更易访问

您上次设计网站时,花了多少时间和精力来确保残障人士也能访问?许多人可能回答是“没有”。然而,大量互联网用户由于难以辨别颜色、阅读文本、使用鼠标或浏览复杂的网站结构而难以访问网站。

由于检查和实施辅助功能解决方案需要付出努力,因此辅助功能问题常常被忽视。开发人员不仅必须熟悉底层标准,还必须不断检查是否满足这些标准。我们能否通过自动执行标准检查来简化辅助功能网站的开发?

本文将向您展示如何使用 aXe 库和一些相关的工具来自动检查和报告网站和应用程序中潜在的辅助功能问题。通过降低此类活动所需的工作量并自动化一些手动工作,我们可以为所有使用我们创建的内容的用户带来更好的结果。

aXe 简介

aXe 是一个自动化辅助功能测试库,旨在将辅助功能测试引入主流 Web 开发。axe-core 库是开源的,设计用于与不同的测试框架、工具和环境一起使用。例如,它可以在功能测试、浏览器插件或应用程序的开发版本中运行。它目前支持大约 55 条规则,用于检查网站的各个辅助功能方面。

为了快速演示该库的工作原理,让我们创建一个简单的组件并对其进行测试。我们不会创建一个完整的页面,而只是一个标题。

图片:CodePen 示例截图

在创建标题时,我们做了一些出色的设计决策:

  1. 我们将背景设置为浅灰色,链接设置为深灰色,因为这种颜色既优雅又时尚;
  2. 我们为搜索按钮使用了一个很酷的放大镜图标;
  3. 我们将搜索输入的 tab 索引设置为 1,以便用户打开页面时可以按 Tab 键并立即键入搜索查询。

不错,对吧?让我们看看从辅助功能的角度来看它是什么样的。我们可以从 CDN 添加 aXe 并将所有错误记录到浏览器控制台,方法如下:

axe.run(function (err, results) {
  if (results.violations.length) {
    console.warn(results.violations);
  }
});

如果您运行该示例并打开控制台,您将看到一个包含六个违规对象的数组,列出了我们遇到的问题。每个对象都描述了我们违反的规则、应责备的 HTML 元素的引用以及有关如何解决问题的帮助信息。

以下是一个违规对象示例,以 JSON 格式显示:

[
  {
    "id": "button-name",
    // ... (其余 JSON 数据)
  }
]

如果您只选择违规的描述,以下是它的内容:

<code>确保按钮具有清晰的文本
确保前景和背景颜色之间的对比度满足 WCAG 2 AA 对比度比率阈值
确保每个 HTML 文档都有一个 lang 属性
确保 <img  alt="用斧头自动可访问性检查" > 元素具有替代文本或无角色或演示角色
确保每个表单元素都有一个标签
确保 tabindex 属性值不大于 0</code>

事实证明,我们的设计决策并不那么出色:

  1. 我们选择的两种灰色阴影对比度不够,视力障碍者可能难以阅读
  2. 搜索按钮的放大镜图标没有为使用屏幕阅读器的人提供任何关于按钮用途的指示
  3. 搜索输入的 tab 索引打破了使用屏幕阅读器或键盘的人的常规导航流程,并使他们更难以访问菜单链接。

它还指出了我们没有想到的其他一些事情。总共执行大约 55 次不同的检查,包括来自不同标准指南和最佳实践的规则。

要查看错误列表,我们必须将脚本注入页面本身。虽然完全可行,但这并不方便。如果我们可以对任何页面执行这些检查而无需自己注入任何内容,那就更好了。最好使用众所周知的测试运行器。我们可以使用 Selenium WebDriver 和 Mocha 来做到这一点。

使用 Selenium WebDriver 运行 aXe

要使用 Selenium 运行 aXe,我们将使用 axe-webdriverjs 库。它提供了一个可以在 WebDriver 之上使用的 aXe API。

要设置它,让我们创建一个单独的项目并使用 npm init 命令初始化一个 npm 项目。您可以随意为它要求的所有内容保留默认值。要运行 Selenium,您需要安装 selenium-webdriver。我们将在 PhantomJS 中执行测试,因此我们也需要安装它。Selenium 需要 Node 版本 6.9 或更高版本,因此请确保您已安装它。

要安装软件包,请运行:

axe.run(function (err, results) {
  if (results.violations.length) {
    console.warn(results.violations);
  }
});

现在,我们需要安装 axe-core 和 axe-webdriverjs:

[
  {
    "id": "button-name",
    // ... (其余 JSON 数据)
  }
]

现在基础设施已设置好,让我们创建一个针对 sitepoint.com 运行测试的脚本(没什么个人恩怨,伙计们)。在项目文件夹中创建一个 axe.js 文件并添加以下内容:

<code>确保按钮具有清晰的文本
确保前景和背景颜色之间的对比度满足 WCAG 2 AA 对比度比率阈值
确保每个 HTML 文档都有一个 lang 属性
确保 <img  alt="用斧头自动可访问性检查" > 元素具有替代文本或无角色或演示角色
确保每个表单元素都有一个标签
确保 tabindex 属性值不大于 0</code>

要执行此测试,我们可以运行 node axe.js。我们无法从控制台运行它,因为我们已在本地项目中安装了 PhantomJS。我们必须将其作为 npm 脚本运行。为此,请打开 package.json 文件并更改默认测试脚本条目:

npm install phantomjs-prebuilt selenium-webdriver --save-dev

现在尝试运行 npm test。几秒钟后,您应该会看到 aXe 发现的违规行为列表。如果您没有看到任何违规行为,则可能意味着 SitePoint 在阅读本文后已修复了它们。

这比我们的初始方法更方便,因为我们不需要修改我们正在测试的页面,并且我们可以使用 CLI 方便地运行它们。但是,这样做的缺点是我们仍然需要执行单独的脚本才能运行测试。如果我们可以将其与我们的其余测试一起运行,那就更好了。让我们看看如何使用 Mocha 来实现这一点。

使用 Mocha 运行 aXe

Mocha 是最流行的测试运行器之一,因此它似乎是尝试使用 aXe 的一个不错的选择。但是,您应该能够以类似的方式将 aXe 集成到您最喜欢的测试框架中。让我们进一步构建我们的 Selenium 示例项目。

我们显然需要 Mocha 本身和一个断言库。Chai 怎么样?使用以下命令安装所有内容:

axe.run(function (err, results) {
  if (results.violations.length) {
    console.warn(results.violations);
  }
});

现在,我们需要将我们编写的 Selenium 代码包装在 Mocha 测试用例中。使用以下代码创建一个 test/axe.spec.js 文件:

[
  {
    "id": "button-name",
    // ... (其余 JSON 数据)
  }
]

测试将通过检查 results.violations 数组的长度是否等于 0 来执行非常基本的断言。要运行测试,请将测试脚本更改为调用 Mocha:

<code>确保按钮具有清晰的文本
确保前景和背景颜色之间的对比度满足 WCAG 2 AA 对比度比率阈值
确保每个 HTML 文档都有一个 lang 属性
确保 <img  alt="用斧头自动可访问性检查" > 元素具有替代文本或无角色或演示角色
确保每个表单元素都有一个标签
确保 tabindex 属性值不大于 0</code>

此练习的下一个逻辑步骤是在测试失败时生成更详细的错误报告。之后,将其与您最喜欢的 CI 环境集成以正确显示页面的结果也很有用。我将把这两件事留给读者作为练习,并继续介绍一些有用的附加 aXe 配置选项。

(后续内容,关于高级配置、总结和常见问题的部分,可以根据之前的输出进行类似的改写,保持内容一致性,并调整语句和段落结构,使之更流畅自然。)

以上是用斧头自动可访问性检查的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
C和JavaScript:连接解释C和JavaScript:连接解释Apr 23, 2025 am 12:07 AM

C 和JavaScript通过WebAssembly实现互操作性。1)C 代码编译成WebAssembly模块,引入到JavaScript环境中,增强计算能力。2)在游戏开发中,C 处理物理引擎和图形渲染,JavaScript负责游戏逻辑和用户界面。

从网站到应用程序:JavaScript的不同应用从网站到应用程序:JavaScript的不同应用Apr 22, 2025 am 12:02 AM

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。

Python vs. JavaScript:比较用例和应用程序Python vs. JavaScript:比较用例和应用程序Apr 21, 2025 am 12:01 AM

Python更适合数据科学和自动化,JavaScript更适合前端和全栈开发。1.Python在数据科学和机器学习中表现出色,使用NumPy、Pandas等库进行数据处理和建模。2.Python在自动化和脚本编写方面简洁高效。3.JavaScript在前端开发中不可或缺,用于构建动态网页和单页面应用。4.JavaScript通过Node.js在后端开发中发挥作用,支持全栈开发。

C/C在JavaScript口译员和编译器中的作用C/C在JavaScript口译员和编译器中的作用Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。 1)C 用于解析JavaScript源码并生成抽象语法树。 2)C 负责生成和执行字节码。 3)C 实现JIT编译器,在运行时优化和编译热点代码,显着提高JavaScript的执行效率。

JavaScript在行动中:现实世界中的示例和项目JavaScript在行动中:现实世界中的示例和项目Apr 19, 2025 am 12:13 AM

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

了解JavaScript引擎:实施详细信息了解JavaScript引擎:实施详细信息Apr 17, 2025 am 12:05 AM

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python vs. JavaScript:学习曲线和易用性Python vs. JavaScript:学习曲线和易用性Apr 16, 2025 am 12:12 AM

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版