前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何测试你做的项目的可访问性

如何测试你做的项目的可访问性

作者头像
苏南
发布于 2020-12-16 02:56:05
发布于 2020-12-16 02:56:05
2K13
举报
文章被收录于专栏:漫画前端漫画前端

点击上方“IT平头哥联盟”,选择“置顶或者星标”

编者按:本文作者:安佳,360 搜索事业部的前端开发工程师,W3C CSS 工作组成员。

站在 Web 开发的角度,一提到网站的可访问性,可能大部分人最想知道的就是:如何评判一个网站的可访问性的好坏?是否有自动化的检测工具可用,可以很直接地指出问题所在和改进策略?

本篇文章就来聊聊这个话题,主要包括:

  1. 自动化测试工具
  2. 手动测试的方法和工具
  3. 可访问性需要覆盖的特性列表

一、自动化测试工具

比较常用的四个工具:

  • axe-core(https://github.com/dequelabs/axe-core) 是一个用于测试 Web UI 可访问性的引擎。可以将它合并到自动化测试套件中,在命令行中运行
  • 浏览器扩展 aXe(https://chrome.google.com/webstore/detail/axe/lhdoppojpmngadmnindnejefpokejbdd?utm_source=chrome-ntp-icon) 或者 WAVE(https://chrome.google.com/webstore/detail/wave-evaluation-tool/jbbplnpkjmmeebjpijfedlgcdilocofh?utm_source=chrome-ntp-icon)
  • Chrome 插件 Lighthouse(https://chrome.google.com/webstore/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk?utm_source=chrome-ntp-icon),它内置了 axe-core,也能提供可访问性检测
  • Chrome 开发者工具里也内置了可访问性检测,见 Audits 面板(它内置了 Lighthouse)

我们就以 Chrome 开发者工具里的 Audits 面板为例,看看自动化检测工具都提供了哪些功能。

下图是 Audits 面板:

用它检测360课程培训(https://www.so.com/zt/training.html#/?q=%E4%BC%9A%E8%AE%A1&srcg=a11y)页面,审计结果如下:

结果涵盖了以下五个方面:

  1. 对比度
  2. 表单控件的名字和标签
  3. 需要手动检查的项目
  4. 通过的测试项
  5. 未应用到的项

1. 对比度

对比度属于可阅读范畴,检测结果显示“背景色和前景色没有足够的对比度”(点击 文本元素必须与背景有足够的颜色对比度(https://dequeuniversity.com/rules/axe/3.3/color-contrast)查看更多)。

呃,修改这个...似乎有点难度,因为绿白是360搜索的主题配色。那有没有什么“曲线救国”的方式呢?答案是有的,高对比度模式。至少我们可以做到,在开启高对比度模式的时候,页面 UI 仍然是可见&可用的。比如安装了 Chrome 插件 高对比度模式(https://chrome.google.com/webstore/detail/high-contrast/djcfdncoelnlbldjfhinnjlhdjlikmph),开启“增加对比度”后,页面长这个样子:

大家也可以尝试其它选项,比如翻转颜色。高对比度模式,可以开启操作系统级别的,也可以开启应用程序级别的。

2. 表单控件的名字和标签

检测结果显示“表单元素没有关联的标签”(点击 input 元素必须要有标签(https://dequeuniversity.com/rules/axe/3.3/label)查看更多)。

一般情况,表单控件需要有以下信息:

  • Role 角色,比如是编辑文本、单选框、复选框、还是按钮
  • Name/Label 名字,用来说明字段的含义。比如要输入的是“姓名”,还是“城市名”;要选择的是“性别”还是“日期”
  • State 状态,比如下拉框是否展开,单选框或多选框的选项是否被选中
  • Value 值

这些信息都会传给无障碍树,以方便辅助技术更好地“理解”页面。无障碍树类似 DOM 树,只是 DOM 树是给网页的渲染引擎用的,而无障碍树是给辅助技术用的。比如,下图就是一个简化版的无障碍树。

3. 需要手动检查的项目

自动化检测的 cases 覆盖不全可访问性的所有特性,需要我们手动测试。包括:键盘焦点的顺序是否合理、可交互元素是否易于理解、是否有键盘陷阱、自定义组件是否也易于理解和使用等等。详见下图。

机器的自动化检测有覆盖不到的情况,也不难理解,毕竟“可访问性”本身就是为了方便“人”使用。需要手动检查的项目,我们在第二小节中介绍。

4. 通过的测试项

通过的测试项,包括:按钮有可访问的名字、文档有标题、id 唯一、图片有alt属性等等。详见下图。

5. 未应用到的项

自动化工具只能检测可访问性问题的子集,因此手工测试必不可少。

二、手动测试的方法和工具

关于手动测试,重点和大家分享三点:键盘的可访问性、屏幕阅读器、缩放功能。

键盘的可访问性

重点关注页面上的所有可交互元素,须同时满足以下两点:

  • 元素可被选中,当按Tab键时
  • 元素可交互,当按Enter/空格/箭头键/Esc键时

我们继续以 360课程培训(https://www.so.com/zt/training.html#/?q=%E4%BC%9A%E8%AE%A1&srcg=a11y)为例,下面是手动测试的结果:

页面

可交互的元素

Tab键可被选中

可交互

说明

头部

logo

通过

通过

按Enter跳转至列表页

input 框

通过

通过

按Enter可执行搜索

“搜一下”按钮

通过

通过

按Enter可执行搜索

筛选区

课程

通过

不通过

1. 按Enter键,打开弹层2. 按方向键,在弹层里选择元素3. 按Esc键,关闭弹层

形式

通过

通过 80%

按Enter可进行筛选可优化为:1. 按Tab进入下一个筛选项“级别”2. 按Tab+Shift进入上一个筛选项3. 按箭头键可在本层内的选项前后移动“不限/线上/线下”4. 按空格键可触发筛选交互

级别/设置/周期

同上

已选条件

通过

通过 10%

1. 按Enter键重新筛选2. 但此时,键盘焦点丢失

列表区

图像/标题/按钮

通过

通过

按Enter跳转至其它页面

翻页区

按钮

通过

通过 80%

1. 按Enter触发翻页2. 按Tab进行下一项3. 按Tab+Shift进入上一项同理,可优化成“形式”的交互

屏幕阅读器

操作系统都有自带的屏幕阅读器,我们就直接用它了。比如 Mac 上的 VoiceOver(https://webaim.org/articles/voiceover/),在“系统偏好设置/辅助功能/VoiceOver” 中启用它。

首先简单介绍下它的键盘操作,更多信息可查看上面截图里的“使用指南”。

  • 在运行 VoiceOver 时,普通的键盘操作保持不变。比如TAB Shift+TAB 箭头键 空格键 Enter等
  • CMD+L 跳到地址栏,可输入URL
  • CTRL+Option+U:打开 Web Router,即导航面板
  • 在打开 Web Router 的情况下:
    • CTRL + Option + ← ↑ ↓ →:浏览内容
    • CTRL + Option + CMD + H:逐个标题向前移动
    • CTRL + Option + CMD + H + Shift:逐个标题向后移动

本次重点和大家分享下它的 Web Router,即导航面板。它主要有四种导航形式:按标题导航、按页面结构导航、按表单元素导航、按链接导航。

以下是 360课程培训(https://www.so.com/zt/training.html#/?q=%E4%BC%9A%E8%AE%A1&srcg=a11y)页面上四种导航的截图:

按标题

按页面结构

按表单控件

按链接

我们发现,导航信息还是有一些不足的。比如:

  • 按“页面结构”导航时,信息有点单薄。比如我想告诉屏幕阅读器用户,页面有搜索区域、筛选区域、列表区域和翻页区域
  • 按“页面结构”导航时,有混入不恰当的信息。比如“导航”,它其实是按钮式的翻页区域
  • 按“表单空间”导航时,不够全面。页面应该告诉用户还有个“筛选”区
  • 按“链接”导航时,呃...里面就有点一言难尽了。因为它混入了“筛选”区的表单信息,也混入了“翻页”区的按钮区

当用户第一次登录他们不熟悉的页面时,更倾向于用标题导航和页面结构导航;当他们熟悉了之后,按表单控件和按链接导航有利于提高他们的导航效率。

缩放功能

对于视觉障碍的用户,有时需要使用放大镜来阅读页面。这里介绍两种:

  • 页面缩放:浏览器自带的缩放功能
  • 设置大字体:浏览器里设置字号。比如chrome://settings/里的字号可以设置“特小、小、中、大、特大”

360课程培训(https://www.so.com/zt/training.html#/?q=%E4%BC%9A%E8%AE%A1&srcg=a11y)网站是支持页面缩放的,感兴趣的小伙伴可以在线试用。

三、可访问性需要覆盖的特性列表

现在,我们对网站的可访问性有了更具象的认识。良好的页面可访问性,需要(至少)涵盖以下特性:

  • 足够的对比度
  • 表单控件需要有角色、名字或标签、状态
  • 良好的键盘可访问性:所有可交互的元素可被键盘选中、可与键盘交互;不可交互的元素可以不被聚焦
  • 使用恰当的标题和链接、良好的页面结构
  • 页面支持缩放

总结

本文主要讲了两部分,第一部分是可访问性的自动化测试工具,重点介绍了 Chrome 开发者工具的 Audits 面板;第二部分是手动测试网站的可访问性,包括键盘可访问性、屏幕阅读器的导航、页面缩放。

虽然自动化工具只测试了可访问性特性的一个子集,但它能帮助我们检测很多琐碎的细节,同时它也给出了非常全面的参考信息,里面的“learn more”链接非常贴心。

键盘可访问性和页面缩放,功能比较直观,理解起来也没有歧义,这部分完全可以通过 Web 开发人员的自测满足,测试量也不大。

让屏幕阅读器提供精简、准确的信息也是非常重要的,但这部分需要我们结合着屏幕阅读器的使用再进一步细化。

下一步

本文里其实已经暴露出了几个可访问性问题了,诸如已选条件的bug、自定义下拉框/弹层的键盘可访问性、屏幕阅读器导航信息不精准。这些需要通过 HTML 语义化和 ARIA 技术来解决,如何修复这些问题,咱们下回见~!

主要参考

https://developers.google.com/web/fundamentals/accessibility/

end -

用心分享 一起成长 做有温度的攻城狮

每天记得对自己说:你是最棒的!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 画漫画的程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
13 条评论
热度
最新
一下子就懂了
一下子就懂了
回复回复1举报
学习了
学习了
回复回复1举报
好文
好文
回复回复1举报
通俗易懂!深度好文
通俗易懂!深度好文
回复回复1举报
点赞!!!
点赞!!!
回复回复1举报
深入浅出,写的很透。👏
深入浅出,写的很透。👏
回复回复1举报
好文~
好文~
回复回复1举报
日常催更,请加大力度
日常催更,请加大力度
回复回复1举报
都是知识啊
都是知识啊
回复回复1举报
调理清晰通俗易懂
调理清晰通俗易懂
回复回复1举报
加载更多
推荐阅读
编辑精选文章
换一批
Android数据存储安全实践
Android操作系统自问世以来凭借其开放性和易用性成为当前智能手机的主流操作系统之一,作为与人们关系最密切的智能设备,越来越多的通讯录、短信、视频等隐私数据以明文的方式保存在手机中,这些数据虽然有锁屏密码或者指纹保护,但是由于Android系统自身的安全性,专业人士可以毫不费力的获取到手机数据镜像,个人隐私面临泄露风险。另一方面,日益繁荣的移动互联网应用也是基于用户数据和应用程序构成,如何保护这些用户数据安全性是应用发展的基石。随着人们对数据安全重视,如何更好地保护用户数据成为移动应用开发者的一大挑战。
FB客服
2018/10/25
3.5K0
Android数据存储安全实践
JuiceFS 数据加密原理
JuiceFS 作为分布文件系统,每天与海量的数据打着交道,因此数据的安全性尤为关键,今天就来介绍一下 JuiceFS 在数据加密方面所做的努力。
Juicedata
2021/12/27
8020
JuiceFS 数据加密原理
Pandas高级数据处理:数据加密与解密
在当今的数据驱动世界中,数据的安全性变得越来越重要。Pandas作为Python中用于数据分析的强大工具,不仅能够高效地处理和分析数据,还可以结合其他库实现数据的加密与解密。本文将由浅入深地介绍如何使用Pandas进行数据加密与解密,并探讨常见的问题、报错及其解决方案。
Jimaks
2025/02/10
1030
现代密码学实践指南[2015年]
本文介绍目前现代密码学的最先进技术, 前半部分主要翻译自 《Cryptographic Right Answers》,附上收集的资料,和byron个人的理解。
byronhe
2021/06/25
1.1K0
即时通讯安全篇(一):正确地理解和使用Android端加密算法
即时通讯是互联网的重要应用形态之一,安全性一直是开发者需要优先考虑的基础问题,并不是使用了加密就绝对安全了,如果加密函数使用不正确,加密数据很容易受到逆向破解攻击。如何正确地理解和使用加密技术则显的尤其重要。
JackJiang
2025/02/19
1320
即时通讯安全篇(一):正确地理解和使用Android端加密算法
盘点互联网巨头奉献的十大开源安全工具
Facebook等大型互联网公司推动的服务器与数据中心、大数据工具的开源化项目类似,当大型互联网公司们在超大规模基础设施运营方面面临的挑战超出技术厂商的能力时,这些巨头就选择反客为主,成为创新技术的推动者和提供者。同样的情况也在信息安全领域中发生着。不少大型互联网公司经常会将自己开发的顶级安全工具开源,推动整个互联网的安全发展。 本月早些时候安全牛曾介绍过Google开源的web安全测试工具Firing Range、Nogofail以及Facebook开源的Osquery等。 事实上不仅Google、F
小莹莹
2018/04/20
1.1K0
盘点互联网巨头奉献的十大开源安全工具
Android手机恢复出厂设置后,数据依然可恢复
如果你打算卖掉你的旧Android手机,建议你还是多考虑考虑……Android恢复出厂设置功能有一个漏洞,即使你恢复了出厂设置,黑客依然可以恢复你的登录密码、短信、邮件和图片。 恢复出厂设置后数据还在 剑桥大学的计算机研究员们对5个不同厂商的Android手机,发现超过五亿Android手机在恢复出厂设置后并没有完全擦除手机数据。“恢复出厂设置”功能是Android手机系统内置的功能,这被认为是在出售、回收手机时最重要的功能,用以擦除手机上的所有机密信息。但是,计算机研究人员发现,即使用户开启了全盘加密
FB客服
2018/02/06
4.2K0
Android手机恢复出厂设置后,数据依然可恢复
最佳安全实战:在 Java 和 Android 里用 AES 进行对称加密
原文作者:Patrick Favre-Bulle 原文地址:https://proandroiddev.com/security-best-practices-symmetric-encryption
未来守护者
2018/07/23
5.6K0
最佳安全实战:在 Java 和 Android 里用 AES 进行对称加密
PostgreSQL数据库透明数据加密概述
最近一段时间,一直在和PostgreSQL社区合作开发TDE(Transparent data encryption,透明数据加密)。研究了一些密码学相关的知识,并利用这些知识和数据库相结合。本文将会以数据库内核开发角度,从以下3个维度和大家讲述TDE。
王果壳
2019/09/30
2.9K0
PostgreSQL数据库透明数据加密概述
安卓应用安全指南 5.6.3 密码学 高级话题
在上面的示例代码中,我们展示了三种加密方法的实现示例,每种加密方法用于加密解密以及数据伪造的检测。 你可以使用“图 5.6-1”,“图 5.6-2”,根据你的应用粗略选择使用哪种加密方法。 另一方面,加密方法的更加精细的选择,需要更详细地比较各种方法的特征。 在下面我们考虑一些这样的比较。
ApacheCN_飞龙
2022/12/01
8310
开发过程中你都用到了哪些数据加密算法
在日常的开发过程中,主要使用的加密算法有摘要算法、对称加密算法和非对称加密算法。融合自己的理解和一些简单的示例,记录下来,便于日常查看。后期也会不断的更新该文章,由于平台问题,只能实时更新在个人博客地址,如有兴趣可以点底部左下角 击阅读原文 跳转到https://www.qqdeveloper.com/2019/08/28/data-encrypt/ 。由于个人对安全这块没有特别的系统化学习,如有错误,还望指正。
兔云小新LM
2019/08/29
7820
开发过程中你都用到了哪些数据加密算法
详解 RSA 非对称加密
随着互联网越来越渗透入我们生活的方方面面,各种私密信息在网络中传播,为了保证信息的真实可靠,在我们对其安全性的要求也越来越高,对此,加密是一个永远不过时的话题。非对称加密,全站HTTPS等,深入了解,总会遇到RSA加密算法。在一些特殊行业,如博主工作的互联网金融,RSA加密算法的重要性更是非同一般。
BUG弄潮儿
2022/12/05
1.7K0
嵌入式系统的数据存储与管理策略
嵌入式系统在现代生活中扮演着重要的角色,从智能家居设备到医疗设备和汽车控制系统,无处不在。随着这些系统变得越来越复杂,数据的存储和管理变得至关重要。本文将深入探讨嵌入式系统中数据存储与管理的策略,包括数据存储设备的选择、数据存储格式、数据备份和安全等方面。
一键难忘
2023/12/11
5240
数据库加密详解:全面保护你的数据
数据库加密是确保数据安全的重要手段之一。通过加密,可以防止未经授权的用户访问和读取敏感数据。本文将详细介绍如何在数据库中实施加密,包括加密类型、加密算法的选择、加密的最佳实践以及常见的注意事项。
VyrnSynx
2024/06/15
1.2K0
数据库加密详解:全面保护你的数据
fireeyee解剖新型Android恶意软件
总结 你是否下载安装过体积很大但是UI或者功能很少的Android应用程序?最近,FireEye实验室移动安全研究人员发现了一种新型的手机恶意软件,在看起来普通的应用下内嵌着加密过的附件程序,很好的隐藏了其进行恶意活动。 恶意app程序会伪装成Google Play商店,尤其是其图标完全模仿了主屏幕上Google Play的图标。一旦安装成功,黑客使用一个动态的DNS服务器和通过SSL协议的Gmail来搜集Android设备上的文本信息、签名证书和银行密码。 下面是主程序、附件程序、恶意代码之间的关系图:
FB客服
2018/02/02
1.4K0
fireeyee解剖新型Android恶意软件
MySQL 8.0.30 的数据加密有哪些变化?
MySQL 8.0.30于2022年7月26日正式发行。在这个版本里,除了为数据加密功能增加了KDF(Key Derivation Function),还为企业版发布了新的加密组件,以替代之前基于OpenSSL的UDF。
MySQLSE
2022/11/21
2K0
PHP官方现代化核心加密库 Sodium
Sodium crypto library是一个现代化的,易于使用的软件库,用于加密,解密,签名,密码散列等。
Tinywan
2024/08/19
2660
PHP官方现代化核心加密库 Sodium
SQL Server 数据加密功能解析
腾讯云数据库团队
2016/11/02
5.1K1
SQL Server 数据加密功能解析
Cloudera数据加密
加密是使用数字密钥对各种组件(例如文本,文件,数据库,密码,应用程序或网络数据包)进行编码的过程,因此只有适当的实体(用户,系统进程等)才能进行解码(解密) )项,然后查看,修改或添加到数据中。Cloudera提供了加密机制来保护持久保存在磁盘或其他存储介质上的数据(静态数据或简单地称为数据加密)以及在网络上移动时的数据(传输加密中的数据)。
大数据杂货铺
2020/02/11
2.5K0
Cloudera数据加密
Java - 深入理解加密解密和签名算法
Java应用接口安全性问题可能来源于多个方面,包括但不限于数据加密、身份验证、访问控制、输入验证等。下面我会对这些问题进行详细分析,并提供相应的解决方案和最佳实践。
小小工匠
2024/05/25
4190
Java - 深入理解加密解密和签名算法
推荐阅读
相关推荐
Android数据存储安全实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档