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

用斧头自动可访问性检查

Feb 16, 2025 am 11:15 AM

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="用斧头自动可访问性检查" ></img> 元素具有替代文本或无角色或演示角色
确保每个表单元素都有一个标签
确保 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="用斧头自动可访问性检查" ></img> 元素具有替代文本或无角色或演示角色
确保每个表单元素都有一个标签
确保 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="用斧头自动可访问性检查" ></img> 元素具有替代文本或无角色或演示角色
确保每个表单元素都有一个标签
确保 tabindex 属性值不大于 0</code>
登录后复制
登录后复制
登录后复制

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

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

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

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热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

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

前端热敏纸小票打印遇到乱码问题怎么办? 前端热敏纸小票打印遇到乱码问题怎么办? Apr 04, 2025 pm 02:42 PM

前端热敏纸小票打印的常见问题与解决方案在前端开发中,小票打印是一个常见的需求。然而,很多开发者在实...

神秘的JavaScript:它的作用以及为什么重要 神秘的JavaScript:它的作用以及为什么重要 Apr 09, 2025 am 12:07 AM

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

谁得到更多的Python或JavaScript? 谁得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? 如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? Apr 04, 2025 pm 05:09 PM

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

JavaScript难以学习吗? JavaScript难以学习吗? Apr 03, 2025 am 12:20 AM

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

如何实现视差滚动和元素动画效果,像资生堂官网那样?
或者:
怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? 如何实现视差滚动和元素动画效果,像资生堂官网那样? 或者: 怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? Apr 04, 2025 pm 05:36 PM

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的演变:当前的趋势和未来前景 JavaScript的演变:当前的趋势和未来前景 Apr 10, 2025 am 09:33 AM

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

console.log输出结果差异:两次调用为何不同? console.log输出结果差异:两次调用为何不同? Apr 04, 2025 pm 05:12 PM

深入探讨console.log输出差异的根源本文将分析一段代码中console.log函数输出结果的差异,并解释其背后的原因。�...

See all articles