”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Cypress 自动化可访问性测试:综合指南

Cypress 自动化可访问性测试:综合指南

发布于2024-11-08
浏览:188

Automated Accessibility Testing with Cypress: A Comprehensive Guide

介绍

辅助功能是 Web 开发的一个重要方面,确保所有用户(包括残障人士)都可以与您的 Web 应用程序有效交互。自动化可访问性测试有助于在开发过程的早期识别和解决可访问性问题。在这篇文章中,我们将探讨如何使用 Cypress 实现自动化可访问性测试,利用 cypress-axe 等工具使您的应用程序更具包容性。

为什么可访问性很重要

  1. 法律合规性: 确保您的应用程序符合法律要求,例如《美国残疾人法案》(ADA) 和《网页内容可访问性指南》(WCAG)。
  2. 用户体验:改善所有用户(包括残障用户)的整体用户体验。
  3. 包容性: 展现对包容性和多样性的承诺,使您的应用程序可供更广泛的受众使用。
  4. SEO 优势: 改进搜索引擎优化,因为搜索引擎更青睐可访问的网站。

在 Cypress 中设置自动可访问性测试

为了在 Cypress 中执行自动化可访问性测试,我们将使用 cypress-axe 插件,它将 Axe 可访问性引擎与 Cypress 集成。

第 1 步:安装 Cypress 和 cypress-axe
首先,确保您的项目中安装了 Cypress。如果没有,可以使用以下命令安装:

npm install cypress --save-dev

接下来,安装cypress-axe插件:

npm install cypress-axe --save-dev

第2步:配置cypress-axe
在 cypress/support 目录中创建一个名为commands.js的新文件,并添加以下代码以导入和配置cypress-axe:

import 'cypress-axe';

Cypress.Commands.add('injectAxe', () => {
    cy.window({ log: false }).then(window => {
        let axe = require('axe-core');
        window.eval(axe.source);
    });
});

Cypress.Commands.add('checkA11y', (selector = null, options = null, violationCallback = null, skipFailures = false) => {
    cy.window({ log: false }).then(window => {
        let document = window.document;
        return axe.run(document, options).then(({ violations }) => {
            if (violations.length) {
                cy.wrap(violations, { log: false }).each(violation => {
                    let nodes = Cypress._.get(violation, 'nodes', []);
                    Cypress._.each(nodes, node => {
                        let target = Cypress._.get(node, 'target', []);
                        if (target.length) {
                            Cypress._.each(target, target => {
                                cy.wrap(target, { log: false }).then($target => {
                                    if (!skipFailures) {
                                        Cypress.log({
                                            name: 'a11y error!',
                                            message: violation.help,
                                            consoleProps: () => violation
                                        });

                                        violationCallback && violationCallback(violation);
                                    }
                                });
                            });
                        }
                    });
                });
            }
        });
    });
});

第 3 步:创建辅助功能测试
现在,让我们创建一个 Cypress 测试来检查网页的可访问性。在cypress/e2e目录中创建一个名为accessibility.spec.js的新文件并添加以下代码:

describe('Automated Accessibility Testing with Cypress', () => {
    beforeEach(() => {
        cy.visit('/');
        cy.injectAxe();
    });

    it('should have no detectable accessibility violations on load', () => {
        cy.checkA11y();
    });

    it('should have no detectable accessibility violations on specific elements', () => {
        cy.checkA11y('header');
        cy.checkA11y('main');
        cy.checkA11y('footer');
    });
});

在此示例中,我们对整个页面以及页眉、主要内容和页脚等特定元素执行可访问性检查。

自定义辅助功能检查

您可以通过提供选项和配置规则来自定义可访问性检查。例如,您可以忽略某些规则或仅运行特定检查。

示例:忽略特定规则

cy.checkA11y(null, {
    rules: {
        'color-contrast': { enabled: false }
    }
});

示例:运行特定检查

cy.checkA11y(null, {
    runOnly: {
        type: 'tag',
        values: ['wcag2a', 'wcag2aa']
    }
});

处理辅助功能违规

您可以通过提供回调函数来记录或处理违规行为来处理可访问性违规。例如:

cy.checkA11y(null, null, (violations) => {
    violations.forEach((violation) => {
        cy.log(`${violation.id} - ${violation.description}`);
        violation.nodes.forEach((node) => {
            cy.log(`Node: ${node.target}`);
        });
    });
});

可访问性测试的最佳实践

  1. 尽早集成:在开发过程中尽早集成可访问性测试,以更快地发现问题。
  2. 定期测试:作为 CI/CD 管道的一部分定期运行可访问性测试,以确保持续合规性。
  3. 教育您的团队: 教育您的开发团队了解无障碍最佳实践和指南。
  4. 使用手动测试:结合自动和手动测试以涵盖可访问性的所有方面,因为自动化工具可能无法捕获所有内容。

结论

使用 Cypress 和 cypress-axe 进行自动化可访问性测试是确保所有用户都可以访问您的 Web 应用程序的强大方法。通过将可访问性检查集成到测试过程中,您可以及早发现并修复问题,提供更好的用户体验并确保符合可访问性标准。遵循本指南中概述的最佳实践,使您的应用程序更具包容性和可访问性。

测试愉快!

版本声明 本文转载于:https://dev.to/aswani25/automated-accessibility-testing-with-cypress-a-comprehensive-guide-15eb?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 创建信息机器人:初学者指南(HTML/CSS、JavaScript、Gemini API)
    创建信息机器人:初学者指南(HTML/CSS、JavaScript、Gemini API)
    Table of Contents Introduction What is a Chatbot? Understanding the Problem Setting Up the Development Environment Understanding the Problem ...
    编程 发布于2024-11-09
  • Python 中的实例方法与类方法:什么时候应该使用“self”和“cls”?
    Python 中的实例方法与类方法:什么时候应该使用“self”和“cls”?
    深入研究类和实例方法的细微差别:Beyond Self 与 ClsPython 增强提案 (PEP) 8 建议使用“self”作为实例方法中的第一个参数,“cls”作为类方法中的第一个参数。这种区别源于这些方法在处理实例和类时所扮演的不同角色。实例方法:自我优势实例方法在实例的实例上调用班级。它们通...
    编程 发布于2024-11-09
  • 在 Python 中使用 bytes(n) 时,与数字转换的主要区别是什么?
    在 Python 中使用 bytes(n) 时,与数字转换的主要区别是什么?
    Python 中的字节对象:超越数字转换在 Python 中使用字节对象时,必须了解 bytes(n) 是如何转换的函数与数值转换不同。将整数 n 传递给 bytes(n) 不会返回 n 的二进制表示形式,而是创建一个长度为 n 且填充有空字节 (\x00) 的字节字符串。行为背后的基本原理此行为是...
    编程 发布于2024-11-09
  • 如何在 MySQL 中将纪元时间戳转换为人类可读的日期?
    如何在 MySQL 中将纪元时间戳转换为人类可读的日期?
    在 MySQL 中将纪元时间戳转换为人类可读的日期在 MySQL 中,纪元时间戳是日期和时间的数字表示形式。它是自 Unix 纪元(即 1970 年 1 月 1 日 00:00:00 UTC)以来的毫秒数。要将纪元时间戳转换为人类可读的日期,您可以使用 from_unixtime( ) 功能。该函数...
    编程 发布于2024-11-09
  • 如何使用 Pip 获取可用软件包版本列表:综合指南
    如何使用 Pip 获取可用软件包版本列表:综合指南
    如何使用 Pip 获取可用包版本列表:综合指南Pip 是一个广泛使用的 Python 包安装程序,提供了一个安装和管理 Python 包的有效方法。虽然它允许方便地安装特定的软件包版本,但在选择最佳版本之前可能有必要探索所有可能版本的综合列表。本文深入探讨了如何在各种 pip 版本中实现此目的。Pi...
    编程 发布于2024-11-09
  • ## **`std::vector::erase`返回的迭代器在删除后是否指向有效元素?**
    ## **`std::vector::erase`返回的迭代器在删除后是否指向有效元素?**
    std::vector 迭代器失效:详细解释std::vector 中迭代器失效的概念经常被讨论。需要澄清的是,通过 std::vector::erase 擦除向量元素会使严格位于已擦除元素之后的迭代器无效。但是,位于已擦除元素的确切位置的迭代器的有效性仍然不确定。从逻辑上讲,人们可能会假设该迭代器...
    编程 发布于2024-11-09
  • Python 开发人员如何增强调试技术以获得更高效的代码?
    Python 开发人员如何增强调试技术以获得更高效的代码?
    Python 中增强的调试技术增强 Python 中的调试过程对于寻求优化代码的开发人员至关重要。以下是一些帮助您完成此任务的宝贵提示:利用 PDB 模块PDB(Python 调试器)模块提供了全面的调试环境。通过将 pdb.set_trace() 集成到代码中,您可以在特定位置建立断点。这个灵活的...
    编程 发布于2024-11-09
  • AdaBoost - 集成方法,分类:监督机器学习
    AdaBoost - 集成方法,分类:监督机器学习
    Boosting Definition and Purpose Boosting is an ensemble learning technique used in machine learning to improve the accuracy of models...
    编程 发布于2024-11-09
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-11-09
  • 重新学习CS基础知识——实现队列
    重新学习CS基础知识——实现队列
    你曾经站在队列中吗,队列数据结构也做同样的事情。当你想在你最喜欢的自助餐厅点餐时,你站在队伍的最后,然后你就可以继续排队并离开。 CS 中的队列数据结构执行相同的功能。队列数据结构是先进先出的数据结构。队列数据结构可以使用两个基本函数 Enqueue 和 Dequeue 来构建,这两个函数基本上是...
    编程 发布于2024-11-09
  • 为 Angular 18 设置 linter 和 IDE
    为 Angular 18 设置 linter 和 IDE
    将 eslint、prettier、env 添加到应用程序中。 遗憾的是,Angular 默认情况下不会自行生成这一切。更改原理图可以提高数千个 Angular 项目的质量。 设置 eslint 9 连接 eslint: yarn ng add @angular-eslint/sch...
    编程 发布于2024-11-09
  • 使用 JavaScript 进行网页抓取和代理设置的初学者指南
    使用 JavaScript 进行网页抓取和代理设置的初学者指南
    使用JavaScript代码模拟用户操作,获取所需信息。包括模拟用户打开网页、点击链接、输入关键字等操作,并从网页中提取所需信息。 Javascript网页抓取的核心原理 使用JavaScript代码模拟用户操作来获取所需信息。包括模拟用户打开网页、点击链接、输入关键字等操作,并从网...
    编程 发布于2024-11-09
  • 在 Android 上运行 Llama:使用 Ollama 的分步指南
    在 Android 上运行 Llama:使用 Ollama 的分步指南
    Llama 3.2 最近在 Meta 开发者大会上推出,展示了令人印象深刻的多模式功能以及针对使用高通和联发科技硬件的移动设备进行优化的版本。这一突破使开发人员能够在移动设备上运行 Llama 3.2 等强大的 AI 模型,为更高效、私密和响应迅速的 AI 应用程序铺平道路。 Meta 发布了 Ll...
    编程 发布于2024-11-09
  • 如何在 Python 中格式化字符串以将它们对齐直列?
    如何在 Python 中格式化字符串以将它们对齐直列?
    以固定宽度打印字符串打印字符串时,将它们对齐成直列可以增强可读性。在 Python 中使用 format 或 f-string 提供了实现此目的的便捷方法。使用 str.format()str.format() 提供了一种简单的填充方法字符串。其语法包括占位符 {},后跟格式化表达式。对于左对齐,请...
    编程 发布于2024-11-09
  • 为什么微服务比单体架构重要
    为什么微服务比单体架构重要
    在当今快节奏的技术环境中,企业需要可扩展且灵活的解决方案来快速适应不断变化的需求。与传统的整体方法相比,这就是微服务架构的亮点。 1.什么是单体架构? 单体架构是一个单一的、统一的系统,其中所有组件都是互连和相互依赖的。这意味着对系统的任何更改或更新都需要重新构建和重新部署整个应用程...
    编程 发布于2024-11-09

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3