通过测试无障碍功能,我们可以从用户的角度体验我们的应用,并发现原本可能忽略的易用性问题。无障碍功能测试可以挖掘出改进机会,使我们的应用变得功能更强大且更多样,造福于所有用户,包括残障用户。
为了获得最佳效果,请使用本文档中介绍的所有方法:
- 手动测试 : 使用 Android 无障碍服务与我们的应用互动。
- 使用分析工具进行测试 : 使用各种工具发现改进应用无障碍功能的机会。
- 自动化测试 : 在 Espresso 和 Robolectric 中开启无障碍功能测试。
- 用户测试: 从与我们的应用互动的真实用户那里获得反馈。
手动测试
手动测试能让我们从用户的角度体验应用。Android AccessibilityService 对象会改变应用内容呈现给用户的方式以及用户与内容互动的方式。通过使用无障碍服务与我们的应用互动,我们可以像用户一样体验应用。
TalkBack
TalkBack 是 Android 的内置屏幕阅读器。开启 TalkBack 后,用户无需查看屏幕即可与 Android 设备互动。视障用户在使用我们的应用时可能需要依赖于 TalkBack。
开启 TalkBack
- 打开设备的
设置
应用。 - 转到 无障碍,然后选择 TalkBack。
- 在 TalkBack 屏幕的顶部,按 开启/关闭 即可开启 TalkBack。
- 在确认对话框中,选择 确定 以确认权限。
注意: 首次启用 TalkBack 时,系统会启动教程。如果以后想再次打开该教程,请依次转到 设置 > 无障碍 > TalkBack > 设置 > 启动 TalkBack 教程。
使用 TalkBack 浏览应用
开启 TalkBack 后,我们可以通过以下两种常见方式导航:
- 线性导航: 快速向左或向右滑动即可按顺序浏览屏幕元素。点按任意位置两次即可选择。
- 触摸浏览 : 在屏幕上拖动手指即可让系统读出手指轻触的内容。点按任意位置两次即可选择。
如需使用 TalkBack 浏览应用,请完成以下步骤:
- 打开我们的应用。
- 按顺序滑动浏览各个元素。
- 在浏览过程中,注意下面几个问题:
- 每个元素的语音反馈是否恰当地传达了其内容或用途?(了解如何 编写有意义的标签。)
- 朗读内容是简洁明了,还是过于冗长?
- 我们能否轻松完成主要工作流程?
- 我们能否通过滑动浏览每个元素?
- 如果出现提醒或其他临时消息,TalkBack 能否朗读出来?
如需了解详情和提示,请参阅 TalkBack 用户文档。
可选: TalkBack 开发者设置
TalkBack 开发者设置可让我们轻松使用 TalkBack 测试应用。
如需查看或更改开发者设置,请完成以下步骤:
- 打开设备的
设置
应用。 - 转到 无障碍,然后选择 TalkBack。
- 依次选择 设置 > 高级设置 > 开发者设置:
- 日志输出级别: 选择 详细。
- 显示语音输出: 开启此设置即可在屏幕上查看 TalkBack 语音输出。
开关控制
开关控制
可让用户使用开关 (而不是触摸屏) 与 Android 设备互动。开关分为以下几种: AbleNet、Enabling Devices、RJ Cooper 或 Tecla* 等出售的辅助技术设备;外部键盘按键;或者按钮。对于有运动障碍的用户,此服务非常有用。
*Google 不对这些公司或他们的产品给予认可。
开启 开关控制
配置 开关控制
的一种简单方式是使用两个开关。一个开关被指定为 下一项
开关,用于在屏幕上移动焦点;第二个是 选择
开关,用于选择焦点所在的元素。如需使用这种双开关方法,我们可以使用任意一对硬件按键。
注意: 我们使用
开关控制的体验会因所用的工具和软件而异:
- 如果我们使用外部开关 (如键盘),还需要执行其他设置步骤。例如,我们需要重新启用软键盘。如需了解详情,请参阅 开关控制用户文档
- 如果我们使用的是 TalkBack 5.1 或更高版本,则可以使用设置向导配置
开关控制。如需使用此向导 (而不是执行以下步骤),请依次转到设置 > 无障碍 > 开关控制 > 设置 > 打开开关控制设置。
在设置 开关控制
时,如需将音量调低键用作 下一项
开关,并将音量调高键用作 选择
开关,请完成以下步骤:
- 确保 TalkBack 已关闭。
- 打开设备的
设置
应用。 - 转到 无障碍 并选择 开关控制,然后选择 设置。
- 在
开关控制偏好设置
屏幕中,确保 自动扫描 功能已关闭。 - 将音量调低键用作
下一项
开关:- 依次轻触 指定扫描按键 > 下一项 。
- 对话框打开后,按音量调低键。此时,对话框会显示 KEYCODEVOLUMEDOWN。
- 轻触 确定 ,确认并退出该对话框。
- 将音量调高键用作
选择
开关:- 轻触
选择
。 - 对话框打开后,按音量调高键。此时,对话框会显示 KEYCODEVOLUMEUP。
- 轻触 确定,确认并退出该对话框。
- 轻触
- 如需返回
开关控制偏好设置
,请按返回按钮。 - 可选: 如果我们使用的是 TalkBack 5.1 或更高版本,则可以选择 语音反馈来开启语音反馈。
- 如需返回
开关控制
主屏幕,请按返回按钮。 - 在
开关控制
屏幕的顶部,按 开启/关闭 即可开启开关控制
。 - 在确认对话框中,选择 确定 以确认权限。
通过 开关控制
浏览应用
如需通过 开关控制
浏览我们的应用,请完成以下步骤:
- 打开我们的应用。
- 如需开始扫描,请按
下一项
开关 (音量调低按钮)。 - 继续按
下一项
开关,直到找到我们想要选择的项。 - 如需选择突出显示的项,请按
选择
开关 (音量调高按钮)。 - 在浏览过程中,注意下面几个问题:
- 我们能否轻松完成主要工作流程?
- 如果存在文本或其他输入内容,我们能否轻松添加和修改内容?
- 这些项只有在我们可以对它们执行操作时才会突出显示吗?
- 每项是否只能突出显示一次?
- 可通过触摸屏手势使用的所有功能是否也可作为
开关控制
中的可选控件或自定义操作使用? - 如果我们使用的是 TalkBack 5.1 或更高版本,并且已开启语音反馈,那么每个元素的语音反馈是否恰当地传达了其内容或用途?了解如何 编写有意义的标签。
可选: 通过组选择来查看所有可扫描项
组选择是一种 开关控制
导航方法,可让我们同时查看所有的可扫描项。借助此选项,我们可以快速检查屏幕上是否突出显示了正确的元素。
如需开启组选择,请完成以下步骤:
- 打开设备的
设置
应用。 - 转到 无障碍 并选择 开关控制,然后选择 设置。
- 在
开关控制偏好设置
屏幕中,确保自动扫描功能已关闭。 - 依次选择 扫描方法 > 组选择。
- 轻触 指定用来控制扫描的开关。
- 确保 组选择开关 1 和组选择开关 2 下的文本表明已经为这两者各指定了一个开关。如果我们已经按照相应的步骤 开启
开关控制
,则应该已指定音量按钮。
如需通过组选择使用 开关控制
来浏览我们的应用,请完成以下步骤:
- 按
选择
键 (音量调高按钮) 以突出显示当前屏幕上的所有可操作项。注意下面几个问题:- 是否仅突出显示了可操作项?
- 是否突出显示所有可操作项?
- 突出显示的项的密度是否合理?
- 转到其他屏幕以清除突出显示效果。
如需详细了解用户如何使用组选择进行导航,请参阅 开关控制
使用提示。
其他服务
Android 提供了一些其他工具来测试应用的无障碍功能。
盲文提示
Google 盲文提示 是一款应用,可让用户通过蓝牙将可刷新的盲文显示屏连接到 Android 设备。盲文提示
可与 TalkBack 配合使用,共同打造兼具语音和盲文的使用体验。
如需使用盲文显示屏测试我们的应用,请了解如何 安装并开启 盲文提示
。
如需查看 盲文提示
呈现的盲文 (和 ASCII 转换),而不连接盲文显示屏,我们可以使用 盲文提示
设置中的叠加选项:
- 打开设备的
设置
应用。 - 转到 无障碍,然后选择 盲文提示。
- 依次选择 设置 > 开发者选项 > 在屏幕上显示盲文输出。
Voice Access
Voice Access 可让用户通过语音指令控制 Android 设备。搭载 Android 5.0 (API 级别 21) 及更高版本的设备提供 Voice Access。如需使用 Voice Access 测试我们的应用,请了解如何 开始使用 Voice Access。
分析工具
使用分析工具进行测试可以发现手动测试可能会错失的无障碍功能改进机会。
无障碍功能扫描仪
无障碍功能扫描仪 应用会扫描我们的屏幕,并提供改进应用无障碍功能的建议。无障碍功能扫描仪使用 无障碍功能测试框架,并在查看内容标签、可点击项、对比度等内容后提供具体建议。
我们已在 Android Studio 中集成了 Android 无障碍功能测试框架,用于帮助我们查找布局中的无障碍功能问题。如需启动该工具的面板,请点击布局编辑器中的错误报告按钮 。
了解详情:
Google Play 上的发布前测试报告
如果我们在 Google Play 上分发应用,便可查看应用的 发布前测试报告。在我们通过 Google Play 管理中心 将应用上传 到发布渠道不久后,Google Play 会生成此报告。发布前测试报告也可在 Google Play 管理中心内找到,它显示了 Google Play 对我们的应用执行的测试的结果。
具体而言,Google Play 会使用 无障碍功能测试框架 运行无障碍功能测试。这些测试的结果将显示在应用的发布前测试报告的 无障碍 标签页上的一个表格中。
该表格将改进机会分为以下几类:
触摸目标大小
应用中的某些互动元素的可聚焦区域 (即 触摸目标大小) 小于建议的值。
低对比度
对某个文本元素和该元素后面的背景使用的一对颜色的 色彩对比度 低于建议的值。
内容标签
某些界面元素没有 描述给定元素用途的标签。
实现
为界面元素分配了某些属性,这使得系统的无障碍服务更难以正确解读元素。例如,为 可修改的 View 标签 定义说明,以及使用与元素的逻辑排列方式不匹配的元素 遍历顺序。
在该表格后面,发布前测试报告显示了应用的快照。这些快照呈现了各个类别中改进应用无障碍功能的首要机会。选择屏幕截图后,我们可以查看更多详细信息,包括建议的改进和一个更完整的列表,其中列出了我们可以在应用中的哪些位置应用同样的改进。
下图显示了一个表格的示例,它显示在 Google Play 中发布前测试报告的无障碍 标签页上。此图还包含应用的一个快照,它显示了下一项 按钮的触摸目标大小小于建议的值。
△ 发布前测试报告的 无障碍 标签页上的摘要表格 (左) 和屏幕截图 (右)示例
UI Automator 查看器
uiautomatorviewer
工具提供了一个方便的 GUI,可扫描和分析 Android 设备上当前显示的界面组件。我们可以使用 UI Automator 检查布局层次结构,并查看在设备前台显示的界面组件的属性。利用此信息,我们可以创建更精细的测试。例如,通过创建与特定可见属性匹配的界面选择器来做到这一点。该工具位于 Android SDK 的 tools 目录中。
在无障碍功能测试中,此工具对于调试使用其他测试方法发现的问题很有用。例如,如果手动测试发现某个视图应包含却未包含可朗读的文本,或者某个视图不应获得却获得了焦点,我们可以使用该工具帮助找出错误的来源。
如需详细了解 UI Automator 查看器,请参阅 测试多个应用的界面。
Lint
Android Studio 会显示有关各种无障碍功能问题的 lint 警告,并提供指向源代码中包含这些问题的位置的链接。在以下示例中,一张图片缺少 contentDescription
属性。缺少内容说明会导致生成以下消息:
[Accessibility] Missing 'contentDescription' attribute on image
下图举例说明了此消息在 Android Studio 中是什么样子的:
△ Android Studio 中显示缺少 contentDescription 属性的消息
如果屏幕阅读器等无障碍服务的用户在应用内遇到这张图片,他们将无法理解该图片的含义。
自动测试
Android 平台支持多个测试框架 (包括 Espresso 和 Robolectric),每个框架都允许我们创建并运行自动化测试,以评估应用的无障碍功能。
如需通过视频简要了解如何使用 Espresso 和 Robolectric 进行无障碍功能测试,请观看以下视频 (从 31 分 54 秒到 34 分 19 秒):
Espresso
Espresso 是一个 Android 测试库,旨在打造简单快捷的界面测试体验。它可让我们与应用中的被测界面组件互动,并断言会发生某些行为或满足特定条件。
本部分介绍如何使用 Espresso 运行无障碍功能检查。
启用检查
我们可以使用 AccessibilityChecks 类启用和配置无障碍功能测试:
import androidx.test.espresso.accessibility.AccessibilityChecks
@RunWith(AndroidJUnit4::class)
@LargeTest
class MyWelcomeWorkflowIntegrationTest {
init {
AccessibilityChecks.enable()
}
}
默认情况下,当我们执行 ViewActions
中定义的任何视图操作时,系统都会运行检查。每次检查都包括执行操作所在的视图以及所有后代视图。我们可以在每次检查期间评估屏幕的整个视图层次结构,方法是将 true
传入 setRunChecksFromRootView()
,如以下代码段所示:
AccessibilityChecks.enable().setRunChecksFromRootView(true)
抑制结果的子集
Espresso 针对应用运行无障碍功能检查后,我们可能会发现一些有助于改进应用的无障碍功能,但无法马上进行处理的结果。为了防止 Espresso 测试因这些结果而不断失败,我们可以暂时忽略它们。无障碍功能测试框架 (ATF) 使用 setSuppressingResultMatcher()
方法提供此功能,该方法指示 Espresso 抑制满足给定匹配器表达式的所有结果。
如果我们对应用所做的更改可以改进无障碍功能的一个方面,让 Espresso 尽可能多地显示无障碍功能其他方面的结果会有好处。因此,最好仅抑制已知的具体改进机会。
如果我们暂时抑制无障碍功能测试的某些结果,打算以后再处理,切勿意外抑制类似的结果。因此,请使用作用域较小的 匹配器。为此,选择的匹配器应确保只有在给定的结果满足以下 每项 无障碍功能检查的条件时,Espresso 才会抑制该结果:
- 某种类型的无障碍功能检查,如用于检查触摸目标大小的无障碍功能检查。
- 用于评估特定界面元素 (如按钮) 的无障碍功能检查。
ATF 定义了多个匹配器,以帮助我们定义要在 Espresso 测试中显示的结果。以下示例抑制了与单个 TextView 元素的色彩对比度相关的检查的结果。元素的 ID 为 countTV。
AccessibilityChecks.enable().apply {
setSuppressingResultMatcher(
allOf(
matchesCheckNames(`is`("TextContrastViewCheck")),
matchesViews(withId(R.id.countTV))
)
)
}
Robolectric
⚠️ 警告 : Robolectric 4.5 中已移除此功能,请改用 Espresso 或 无障碍功能扫描仪 应用。
Robolectric 是一个开源 Android 测试库,可让我们在 JVM 上测试真实的 Android 代码,而无需启动模拟器。了解 如何开始使用 Robolectric。
注意 : 使用 Robolectric 进行界面测试存在一些缺点,因此除了此工具之外,我们还应使用其他形式的测试。例如,对于触摸目标大小和重复的可点击项,Robolectric 无法给出可靠的结果。为了检测这些问题,不妨考虑使用 无障碍功能扫描仪 应用。
抑制已知问题
首次针对 Robolectric 启用检查时,我们可能会遇到许多无法立即处理的问题。我们可以为希望抑制的结果设置匹配器来抑制这些错误。如需了解详情,请参阅 Robolectric 中提供的 AccessibilityUtil 类的 setSuppressingResultMatcher() 方法的文档。
用户测试
与本指南中的其他测试方法一样,用户测试可以提供有关应用易用性的具体且宝贵的深入分析。
为了找到可以测试我们的应用的用户,请使用如下方法:
- 与为残障人士提供培训的当地组织、学院或大学联系。
- 在我们的社交圈中询问。可能会有残障人士愿意提供帮助。
- 询问用户测试服务机构 (如 usertesting.com),看看他们能否邀请残障用户测试我们的应用。
- 加入无障碍功能论坛 (如 Accessibility 或 Eyes-free),邀请志愿者试用我们的应用。
如需更多提示,请观看以下视频的用户测试部分 (从 31 分 10 秒到 44 分 51 秒):
欢迎您持续关注谷饭网,及时了解更多Google 开发技术和产品更新等资讯动态。
谷饭原创编/译文章,作者:脉脉不得语,转载请注明出处来自谷饭,并加入本文链接: https://www.goofan.com/2022/11/test-your-apps-accessibility/。