赛普拉斯 12864_如何使用赛普拉斯自动化辅助功能测试

赛普拉斯 12864

In my previous post, I covered how to add screenshot testing in Cypress to ensure components don't unintentionally change over time.

在上一篇文章中 ,我介绍了如何在赛普拉斯中添加屏幕截图测试,以确保组件不会随时间变化。

Now, I will share how to automate accessibility tests with Cypress.

现在,我将分享如何与赛普拉斯自动执行辅助功能测试。

我们为什么要关心可访问性? (Why should we care about accessibility?)

Short answer: because it is the right thing to do.

简短答案:因为这是正确的做法。

Long answer: an accessible web can help people with disabilities improve their lives.

长答案:可访问的网络可以帮助残疾人改善生活。

There are different kinds of disabilities, including auditory, cognitive, neurological, physical, speech and visual. And our goal as product creators, engineers, and designers is to create experiences that include all people.

有多种类型的残疾,包括听觉,认知,神经,身体,语言和视觉。 我们作为产品创造者,工程师和设计师的目标是创造包括所有人的体验。

It is also important to mention that web accessibility also benefits people without disabilities.

同样重要的是要提的是网页易读也有利于残疾人。

For example, accessible sites help people with changing abilities due to ageing or people with slow Internet connections or those using devices with small screens.

例如,可访问的站点可以帮助因年龄增长或互联网连接速度缓慢或使用小屏幕设备的人而改变能力。

And a disability can also be temporary. For example, someone with a broken arm can't type and use a mouse at the same time.

残疾也可以是暂时的。 例如,手臂骨折的人不能同时键入和使用鼠标。

If you want to educate yourself about the topic, I can recommend the W3C Web Accessibility Initiative (W3C WAI) and The A11Y Project.

如果您想对这个主题进行自我教育,我可以推荐W3C Web Accessibility Initiative(W3C WAI)和A11Y Project 。

辅助功能测试技术 (Accessibility testing techniques)

There are different ways to test if your website/app is accessible. The W3C WAI has a list of 140+ tools to help you determine if your website/app meets accessibility guidelines.

有多种测试网站/应用程序是否可访问的方法。 W3C WAI 列出了140多种工具 ,可帮助您确定您的网站/应用是否符合辅助功能准则。

You can also add in your strategy:

您还可以添加策略:

  • Real user testing: companies like Fable connect you and people with disabilities so that your research and user testing can help you meet your compliance goals.

    真实的用户测试:像Fable这样的公司将您与残疾人联系起来,以便您的研究和用户测试可以帮助您实现合规性目标。

  • Browser extensions: axe is a recommended extension for Chrome, Firefox, and Edge that helps identify and resolve common accessibility issues.

    浏览器扩展: ax是Chrome,Firefox和Edge的推荐扩展,可帮助识别和解决常见的辅助功能问题。

The accessibility engine of axe is open-source and it can be used in different ways, as this post will show.

正如本文将显示的那样,ax的可访问性引擎是开源的 ,可以以不同的方式使用它。

开始之前 (Before we start)

I created a sample website to mimic a Component Library. It is a very simple website created with Tailwind CSS and hosted in Vercel and it documents 2 components: badge and button.

我创建了一个示例网站来模仿组件库。 这是一个使用Tailwind CSS创建的非常简单的网站,并托管在Vercel中,它记录了2个组件: badge和button 。

You can check out the source code on GitHub. The website is static and it is inside the public folder. You can see the website locally by running npm run serve and checking in the browser http://localhost:8000.

您可以在GitHub上查看源代码 。 该网站是静态的,并且位于public文件夹中。 您可以通过运行npm run serve并在浏览器中查看http:// localhost:8000来在本地查看该网站。

Sample website

添加柏树和柏树轴 (Adding Cypress and cypress-axe)

Start by cloning the example repository. Next, create a new branch and install cypress-axe, the package responsible for tying the axe engine to Cypress.

首先克隆示例存储库 。 接下来,创建一个新分支,并安装cypress-axe ,该软件包负责将斧头引擎绑定到Cypress。

git checkout -b add-cypress
npm install -D cypress cypress-axe

Next, create a cypress/support/index.js file containing:

接下来,创建一个包含以下内容的cypress/support/index.js文件:

import 'cypress-axe'

This import will inject all the functions we need for our tests.

此导入将注入我们测试所需的所有功能。

创建可访问性测试 (Creating the accessibility test)

Time to create the accessibility test. Here is the plan:

是时候创建可访问性测试了。 这是计划:

  1. Cypress will visit each page (badge and button) of the project.

    赛普拉斯将访问该项目的每个页面(徽章和按钮)。
  2. Cypress will test each example in the page. The Badge page has 2 examples (Default and Pill), while the Button page has 3 examples (Default, Pill and Outline).

    赛普拉斯将测试页面中的每个示例。 徽章页面有2个示例(默认和药丸),而按钮页面有3个示例(默认,药丸和轮廓)。

All these examples are inside an <div> element with a cypress-wrapper. This class was added with the only intention to identify what needs to be tested.

所有这些示例都在带有cypress-wrapper<div>元素内。 添加该类的唯一目的是确定需要测试的内容。

The first step is creating the Cypress configuration file (cypress.json):

第一步是创建赛普拉斯配置文件( cypress.json ):

{"baseUrl": "http://localhost:8000/","video": false
}

The baseUrl is the website running locally. As I mentioned before, npm run serve will serve the content of the public folder. The second option, video disables Cypress video recording, which won't be used in the project.

baseUrl是在本地运行的网站。 正如我前面提到的, npm run serve将服务内容public文件夹。 第二个选项, video禁用赛普拉斯的视频记录,该记录将不会在项目中使用。

Time to create the test. In cypress/integration/accessibility.spec.js, add:

是时候创建测试了。 在cypress/integration/accessibility.spec.js ,添加:

const routes = ['badge.html', 'button.html'];describe('Component accessibility test', () => {routes.forEach((route) => {const componentName = route.replace('.html', '');const testName = `${componentName} has no detectable accessibility violations on load`;it(testName, () => {cy.visit(route);cy.injectAxe();cy.get('.cypress-wrapper').each((element, index) => {cy.checkA11y('.cypress-wrapper',{runOnly: {type: 'tag',values: ['wcag2a'],},});});});});
});

In the code above, I am creating dynamic tests based in the routes array. The test will check each .cypress-wrapper element against WCAG 2.0 Level A rules.

在上面的代码中,我正在基于routes数组创建动态测试。 该测试将对照WCAG 2.0 A级规则检查每个.cypress-wrapper元素。

There are different standards / purposes, as the table below shows:

下表显示了不同的标准/目的:

Tag NameAccessibility Standard / Purpose
wcag2aWCAG 2.0 Level A
wcag2aaWCAG 2.0 Level AA
wcag21aWCAG 2.1 Level A
wcag21aaWCAG 2.1 Level AA
best-practiceCommon accessibility best practices
wcag***WCAG success criterion e.g. wcag111 maps to SC 1.1.1
ACTW3C approved Accessibility Conformance Testing rules
section508Old Section 508 rules
section508.*.*Requirement in old Section 508
标签名 无障碍标准/目的
wcag2a WCAG 2.0 A级
wcag2aa WCAG 2.0 AA级
wcag21a WCAG 2.1 A级
wcag21aa WCAG 2.1 AA级
best-practice 通用无障碍最佳做法
wcag*** WCAG成功标准,例如wcag111映射到SC 1.1.1
ACT W3C批准的可访问性一致性测试规则
section508 旧版508条规定
section508.*.* 旧版508节的要求

You can find more information about it in the axe-core docs.

您可以在axe-core docs中找到有关它的更多信息。

Last, let's create inside the package.json command to trigger the tests:

最后,让我们在package.json命令内部创建以触发测试:

{"test": "cypress"
}

From here, there are 2 options: run Cypress in headless mode with npm run cypress run or use the Cypress Test Runner with npm run cypress open.

从这里开始,有2个选项:使用npm run cypress run在无头模式下运行Cypress或在npm run cypress open使用Cypress Test Runner。

无头选项 (Headless option)

Using npm run test run, the output should be similar to the next image:

使用npm run test run ,输出应该类似于下一个图像:

Output of first test

The tests will pass since the components have no accessibility issues.

由于组件没有可访问性问题,因此测试将通过。

测试运行器选项 (Test Runner option)

Using npm run test open, Cypress Test Runner will be opened and you can follow step by step the tests.

使用npm run test open ,赛普拉斯Test Runner将被打开,您可以逐步进行测试。

Cypress Test Runner screenshot

Our first milestone is done. Let's merge this branch to master. If you want to see the work done so far, jump in my Pull Request.

我们的第一个里程碑已经完成。 让我们将该分支合并到master。 如果您想查看到目前为止已完成的工作,请进入我的请求请求 。

现实生活中的测试 (Testing in real life)

Imagine we are updating the website and we want to identify the buttons with ids. The id property must be unique in the document, as we can't have 2 elements with the same one. But we forgot about that and 3 buttons have the same id.

想象一下,我们正在更新网站,并且想要标识具有ID的按钮。 id属性在文档中必须是唯一的,因为我们不能有2个元素具有相同的元素。 但是我们忘记了这一点,并且3个按钮具有相同的ID。

Cypress will fail and the output will look something like this:

赛普拉斯将失败,并且输出将类似于以下内容:

Output of failed test

Let's improve the output of our tests by showing a table of found issues. First, let's create a new branch:

通过显示已发现问题的表格,让我们改善测试的输出。 首先,让我们创建一个新分支:

git checkout -b improve-cypress-tests

Next, create the cypress/plugins/index.js file with the following content:

接下来,使用以下内容创建cypress/plugins/index.js文件:

module.exports = (on, config) => {on('task', {log(message) {console.log(message)return null},table(message) {console.table(message)return null}})
}

This will execute code in Node via the task plugin event of Cypress. Next, let's go back to the accessibility.spec.js file and add the following function in the top of the file:

这将通过赛普拉斯的task插件事件在Node中执行代码。 接下来,让我们回到accessibility.spec.js文件,并在文件顶部添加以下功能:

const terminalLog = (violations) => {cy.task('log',`${violations.length} accessibility violation${violations.length === 1 ? '' : 's'} ${violations.length === 1 ? 'was' : 'were'} detected`)// pluck specific keys to keep the table readableconst violationData = violations.map(({ id, impact, description, nodes }) => ({id,impact,description,nodes: nodes.length}))cy.task('table', violationData)
}

The violations array contains all information about the failing elements. You can tweak this code to include, for instance, the element source code in the test output.

violations数组包含有关失败元素的所有信息。 您可以调整此代码以在测试输出中包括例如元素源代码。

Last, let's call the function inside the tests. Modify the checkA11y function to:

最后,让我们在测试中调用该函数。 将checkA11y函数修改为:

cy.checkA11y('.cypress-wrapper',{runOnly: {type: 'tag',values: ['wcag2a'],},},terminalLog,
);

When you run the test again, you'll get a table containing the issues reported by axe:

再次运行测试时,您将获得一个包含斧头报告的问题的表:

Output of failed test with a nice table

If you have any questions, please check the Pull request in Github.

如有任何疑问,请检查Github中的Pull请求 。

下一步 (Next steps)

From here, you can continue your journey toward making products more accessible. As some next steps, I would recommend:

从这里开始,您可以继续努力,使产品更易于使用。 作为下一步,我建议:

  • Adding these tests in your CI solution - I wrote about integrating Cypress inside Semaphore

    在您的CI解决方案中添加这些测试-我写过有关将Cypress集成到Semaphore中的信息

  • Finding the best way to customize the output of tests to improve troubleshooting issues

    寻找自定义测试输出以改善故障排除问题的最佳方法
  • Learning more about how axe works.

    了解有关斧头工作原理的更多信息。

I hope that you have learned that accessibility testing is not difficult and it doesn't require much to start. Automation powered by axe can definitely help us to create better user experiences for all people.

我希望您了解到可访问性测试并不困难,并且不需要太多的开始。 由斧头驱动的自动化绝对可以帮助我们为所有人创造更好的用户体验。

--

-

Questions? Comments? This post is also in my blog. If you like this content, follow me on Twitter and GitHub.

有什么问题吗 注释? 这篇文章也在我的博客中 。 如果您喜欢此内容,请在Twitter和GitHub上关注我。

翻译自: https://www.freecodecamp.org/news/automating-accessibility-tests-with-cypress/

赛普拉斯 12864

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android App 的主角:Activity

Android App 程序主要由4种类型组成&#xff1a; 1.Activity&#xff08;活动&#xff09;&#xff1a;主要负责屏幕显示画面&#xff0c;并处理与用户的互动。每个Android App至少都会有一个Activity&#xff0c;在程序一启动时显示主画面供用户操作。 2.Service&#xff08;后…

通过构建Paint App学习React Hooks

According to people in the know, React Hooks are hot, hot, hot. In this article, we follow Christian Jensens 14-part tutorial to find out about the basics of this new feature of React. Follow along to find out more! 据知情人士称&#xff0c;React Hooks很热&…

Npoi导出excel整理(附源码)

前些日子做了一个简单的winform程序&#xff0c;需要导出的功能&#xff0c;刚开始省事直接使用微软的组件&#xff0c;但是导出之后发现效率极其低下&#xff0c;绝对像web那样使用npoi组件&#xff0c;因此简单的进行了整理&#xff0c;包括直接根据DataTable导出excel及Data…

入库成本与目标成本对比报表中我学到的东西

1、SQL方面&#xff1a; &#xff08;1&#xff09;、用DECODE函数解决除数为零的情况 具体语法&#xff1a; DECODE&#xff08;参数&#xff0c;0&#xff0c;1&#xff0c;参数&#xff09; ->DECODE(TAB1.A8&#xff0c;0&#xff0c;1&#xff0c;TAB1.A8) &#xff08…

【小摘抄】关于C++11下 string各类用法(持续更新)

http://blog.csdn.net/autocyz/article/details/42391155 提供了最简单的详解 下列对本人近期开发中的一些心得体会进行摘抄 1.string按照字符进行截取 示例代码&#xff1a; string teststring "#12313#kajlkfdsa";//通讯消息示例&#xff0c;结合string的内置函数…

【VMware vSAN 6.6】5.5.Update Manager:vSAN硬件服务器解决方案

目录 1. 简介 1.1.适用于HCI的企业级存储2. 体系结构 2.1.带有本地存储的服务器2.2.存储控制器虚拟系统套装的缺点2.3.vSAN在vSphere Hypervisor中自带2.4.集群类型2.5.硬件部署选项3. 启用vSAN 3.1.启用vSAN3.2.轻松安装3.3.主动测试4. 可用性 4.1.对象和组件安置4.2.重新构建…

32位JDK和64位JDK

32位和64位系统在计算机领域中常常提及&#xff0c;但是仍然很多人不知道32位和64位的区别&#xff0c;所以本人在网上整理了一些资料&#xff0c;并希望可以与大家一起分享。对于32位和64位之分&#xff0c;本文将分别从处理器&#xff0c;操作系统&#xff0c;JVM进行讲解。 …

中小企业如何选择OA协同办公产品?最全的对比都在这里了

对于中小企业来说&#xff0c;传统的OA 产品&#xff0c;如泛微、蓝凌、致远、华天动力等存在价格高、使用成本高、二次开发难等特点&#xff0c;并不适合企业的协同管理。 国内OA市场也出现了一批轻便、低价的OA产品&#xff0c;本文针对以下几款适合中小企业的OA产品在功能、…

Elasticsearch学习(2)—— 常见术语

为什么80%的码农都做不了架构师&#xff1f;>>> cluster (集群)&#xff1a;一个或多个拥有同一个集群名称的节点组成了一个集群。每个集群都会自动选出一个主节点&#xff0c;如果该主节点故障&#xff0c;则集群会自动选出新的主节点来替换故障节点。 node (节点…

IntelliJ IDEA 运行 Maven 项目

1.官方文档说IntelliJ IDEA已经自身集成了maven&#xff0c;则不用劳心去下载maven 2.导入一个程序&#xff0c;看是否是maven程序的关键在于工程之中有没有pom.xml这个文件&#xff0c;比如这里 3.为这个工程配置好服务器3.1 点击“Edit Configurations”3.2 进入Run/Debug C…

资深老鸟整理,Java接口自动化测试总结,从0到1自动化...

这几年接口自动化变得越来越热门&#xff0c;相对比于UI自动化&#xff0c;接口自动化有一些优势 1&#xff09;运行比UI更稳定&#xff0c;让BUG更容易定位 2&#xff09;UI自动化维护成本太高&#xff0c;接口相对低一些 接口测试其实有很多方式&#xff0c;主要有两种&…

pdf 字体和图片抽取

2019独角兽企业重金招聘Python工程师标准>>> #安装mutoos sudo apt-get install mupdf-tools #抽取字体 mutool extract LTN20180531052_C.pdf 转载于:https://my.oschina.net/colin86/blog/1842412

扫盲丨关于区块链你需要了解的所有概念

扫盲丨关于区块链你需要了解的所有概念 如今存储信息的方式有什么问题&#xff1f; 目前&#xff0c;支配我们生活的数据大部分都储存在一个地方&#xff0c;不论是在私人服务器、云、图书馆或档案馆的纸上。大多数情况下这很好&#xff0c;但这也容易受到攻击。 最近有消息称&…

SpringBoot环境切换

2019独角兽企业重金招聘Python工程师标准>>> 1.在application.yml中配置&#xff0c;如果java -jar banke-boot-bd-api-0.0.1-SNAPSHOT.jar&#xff0c;那么就是已application-test作为启动的配置文件启动 spring: profiles: active: test 2.如果java -jar banke-bo…

[No0000B0]ReSharper操作指南1/16-入门与简介

安装指南 在安装之前&#xff0c;您可能需要检查系统要求。 ReSharper是一个VisualStudio扩展。它支持VisualStudio2010,2012,2013,2015和2017.安装完成后&#xff0c;您将在VisualStudio的主菜单中找到新的ReSharper条目。大多数ReSharper命令都可以在这个菜单中找到。但是&a…

数据结构学习笔记(一)——《大话数据结构》

第一章 数据结构绪论 基本概念和术语 数据 描述客观事物的符号&#xff0c;计算机中可以操作的对象&#xff0c;能被计算机识别并输入给计算机处理的符号的集合。包括整型、实型等数值类型和字符、声音、图像、视频等非数值类型。 数据元素 组成数据的、有一定意义的基本单位&a…

java的垃圾回收机制包括:主流回收算法和收集器(jvm的一个主要优化方向)

2019独角兽企业重金招聘Python工程师标准>>> java的垃圾回收机制是java语言的一大特色&#xff0c;解放了开发人员对内存的复杂控制&#xff0c;但如果你想要一个高级java开发人员&#xff0c;还是需要知道其机制&#xff0c;所谓不仅要会用还要知道其原理这样才能用…

@hot热加载修饰器导致static静态属性丢失(已解决)

react开发的时候&#xff0c;引入热加载&#xff0c;用了修饰器的引入方式&#xff0c;发现了一个很有意思的问题&#xff0c;网上并没有相关文章&#xff0c;所以抛出来探讨下。 一段很简单的测试代码。但是经过babel编码后&#xff0c;变得很有意思。假设编码成es2016&#x…

学习vue.js的自我梳理笔记

基本语法格式&#xff1a; <script> new Vue({ el: #app, data: { url: http://www.runoob.com } }) </script> 指令 【指令是带有 v- 前缀的特殊属性。】 判断 <p v-if"seen">现在你看到我了</p> 参数 <a v-bind:href"url"&…

Spring+jpaNo transactional EntityManager available

2019独角兽企业重金招聘Python工程师标准>>> TransactionRequiredException: No transactional EntityManager availableEntityManager执行以下方法(refresh, persist, flush, joinTransaction, remove, merge) 都需要需要事务if (transactionRequiringMethods.cont…