可访问性测试让您可以从用户的角度体验您的应用,并发现您可能错过的可用性问题。可访问性测试可以揭示使您的应用更强大、更适合所有用户(包括残疾用户)的机会。
为了获得最佳效果,请使用本文档中描述的所有方法
- 手动测试:使用 Android 辅助功能服务与您的应用交互。
- 使用分析工具进行测试:使用工具发现改进应用可访问性的机会。
- 自动化测试:在 Espresso 和 Robolectric 中启用可访问性测试。
- 用户测试:收集与您的应用交互的人员的反馈。
手动测试
手动测试让您站在用户的角度。Android AccessibilityService
对象会更改应用内容向用户呈现的方式以及用户与内容交互的方式。通过使用辅助功能服务与您的应用交互,您可以体验用户使用应用时的感受。
TalkBack
TalkBack 是 Android 内置的屏幕阅读器。启用 TalkBack 后,用户无需查看屏幕即可与 Android 设备交互。视力障碍用户可能会依赖 TalkBack 来使用您的应用。
启用 TalkBack
- 打开设备的“设置”应用。
- 导航到“辅助功能”,然后选择“TalkBack”。
- 在 TalkBack 屏幕顶部,按下“打开/关闭”以启用 TalkBack。
- 在确认对话框中,选择“确定”以确认权限。
使用 TalkBack 探索您的应用
启用 TalkBack 后,有两种常见的导航方式
- 线性导航:快速向右或向左滑动以按顺序浏览屏幕元素。双击任意位置以选择当前屏幕元素。
- 通过点击探索:用手指拖动屏幕以听到手指下方的内容。双击任意位置以选择当前元素。
要使用 TalkBack 探索您的应用,请完成以下步骤
- 打开您的应用。
- 按顺序滑动浏览每个元素。
在导航时,查找以下问题
- 每个元素的语音反馈是否能恰当地传达其内容或用途?了解如何编写有意义的标签。* 公告是否简洁明了,还是过于冗长?
- 您能否轻松完成主要工作流程?
- 您能否通过滑动访问每个元素?
- 如果出现警报或其他临时消息,是否会将其大声朗读?
有关更多信息和提示,请参阅TalkBack 用户文档。
可选:TalkBack 开发者设置
TalkBack 开发者设置使您可以更轻松地使用 TalkBack 测试您的应用。
要查看或更改开发者设置,请完成以下步骤
- 打开设备的“设置”应用。
- 导航到“辅助功能”,然后选择“TalkBack”。
选择“设置 > 高级设置 > 开发者设置”。
- 日志输出级别:选择“详细”。
- 显示语音输出:启用此设置可在屏幕上查看 TalkBack 语音输出。
切换访问
切换访问允许用户使用开关而不是触摸屏与 Android 设备交互。开关有多种类型:AbleNet、Enabling Devices、RJ Cooper 或 Tecla* 等辅助技术设备;外部键盘按键;或按钮。此服务对运动障碍用户很有帮助。
* Google 不认可这些公司或其产品。
启用切换访问
一种配置切换访问的方法是使用两个开关。一个开关指定为“下一个”开关,用于在屏幕上移动焦点,第二个“选择”开关用于选择焦点元素。要使用此双开关方法,您可以使用任何一对硬件按键。
若要使用音量减键作为“下一步”开关,并使用音量加键作为“选择”开关来设置切换访问,请完成以下步骤。
- 确保已关闭 TalkBack。
- 打开设备的“设置”应用。
- 导航到**辅助功能**,然后选择**切换访问**,再选择**设置**。
- 在“切换访问首选项”屏幕上,确保已关闭**自动扫描**。
使用音量减键作为您的“下一步”开关。
- 点击**分配扫描键 > 下一步**。
- 当对话框打开时,按下音量减键。对话框会显示 KEYCODE_VOLUME_DOWN。
- 点击**确定**以确认并退出对话框。
使用音量加键作为您的“选择”开关。
- 点击选择。
- 当对话框打开时,按下音量加键。对话框会显示 KEYCODE_VOLUME_UP。
- 点击**确定**以确认并退出对话框。
点击返回按钮返回到“切换访问首选项”。
可选:如果您使用的是 TalkBack 5.1 或更高版本,您可以选择**语音反馈**以开启语音反馈。
点击返回按钮返回到“切换访问”主屏幕。
在“切换访问”屏幕顶部,按下**开/关**以开启切换访问。
在确认对话框中,选择“确定”以确认权限。
使用切换访问探索您的应用。
若要使用切换访问探索您的应用,请完成以下步骤。
- 打开您的应用。
- 按下“下一步”键(音量减键)开始扫描。
- 继续按下“下一步”,直到到达您要选择的项目。
- 按下“选择”键(音量加键)选择突出显示的项目。
在导航时,查找以下问题
- 您能否轻松完成主要工作流程?
- 如果您有文本或其他输入,您可以轻松添加和编辑内容吗?
- 只有当您可以对项目执行操作时,才会突出显示该项目吗?
- 每个项目只突出显示一次吗?
- 通过触摸屏手势可用的所有功能是否也作为可选择的控件或切换访问中的自定义操作提供?
- 如果您使用的是 TalkBack 5.1 或更高版本,并且已开启语音反馈,则每个元素的语音反馈是否能适当地传达其内容或用途?了解如何编写有意义的标签。
可选:使用组选择查看所有可扫描项目。
组选择是一种切换访问导航方法,可让您一次查看所有可扫描项目。此选项允许您快速检查屏幕上是否突出显示了正确的元素。
若要开启组选择,请完成以下步骤。
- 打开设备的“设置”应用。
- 导航到**辅助功能**,然后选择**切换访问**,再选择**设置**。
- 在“切换访问首选项”屏幕上,确保已关闭**自动扫描**。
- 选择**扫描方法 > 组选择**。
- 点击**分配扫描开关**。
- 确保**组选择开关 1**和**组选择开关 2**下的文本显示已为每个开关分配了开关。如果您按照本文档中的步骤开启切换访问,则音量按钮已分配。
若要使用切换访问和组选择探索您的应用,请完成以下步骤。
按下“选择”键(音量加键)以突出显示当前屏幕上所有可操作的项目。查找以下问题。
- 只有可操作的项目才会突出显示吗?
- 所有可操作的项目都已突出显示吗?
- 突出显示项目的密度是否合理?
导航到不同的屏幕以清除突出显示。
若要详细了解用户如何使用组选择进行导航,请参阅使用切换访问的提示。
语音访问
语音访问允许用户使用语音命令控制搭载 Android 系统的设备。语音访问适用于运行 Android 5.0(API 级别 21)及更高版本的设备。若要使用语音访问测试您的应用,请了解如何开始使用语音访问。
使用分析工具进行测试
分析工具可以发现您在手动测试中可能错过的改进辅助功能的机会。
Compose UI 检查
在 Compose 预览中激活 Compose UI 检查模式,以使 Android Studio 自动审核您的 Compose UI 中的辅助功能问题。Android Studio 通过突出显示问题面板中的问题(例如,大屏幕上拉伸的文本或对比度低的颜色)来检查您的 UI 是否在不同的屏幕尺寸下都能正常工作。
辅助功能扫描器
辅助功能扫描器应用会扫描您的屏幕,并建议改进应用辅助功能的方法。辅助功能扫描器使用辅助功能测试框架,并在查看内容标签、可点击项目、对比度等后提供具体的建议。
Android 辅助功能测试框架已集成到 Android Studio 中,可帮助您查找布局中的辅助功能问题。若要启动面板,请点击布局编辑器中的错误报告按钮!。
图 1. 辅助功能扫描器的演示。
若要了解更多信息,请参阅以下资源。
Google Play 上的预发布报告
如果您在 Google Play 上发布您的应用,则可以访问应用的预发布报告。在您使用 Google Play Console 将应用上传到发布渠道后不久,Google Play 就会生成此报告。预发布报告(也可在 Google Play Console 中找到)显示了 Google Play 对您的应用执行的测试结果。
特别是,Google Play 使用辅助功能测试框架运行辅助功能测试。这些测试的结果显示在应用的预发布报告的“辅助功能”选项卡上的表格中。
该表格将改进机会组织到以下类别中。
- 触摸目标尺寸
- 应用中具有可聚焦区域或触摸目标尺寸小于推荐尺寸的可交互元素。
- 对比度低
- 文本元素及其后面背景所用颜色对的颜色对比度比率低于推荐值的情况。
- 内容标签
- 没有描述元素用途的标签的 UI 元素。
- 实现
- 分配给 UI 元素的属性,这些属性使系统辅助功能服务难以正确解释这些元素。例如,为可编辑的
View
标签定义说明,以及使用与元素逻辑排列不匹配的元素遍历顺序。
在表格后面,预发布报告显示了应用的快照。这些快照代表了每个类别中改进应用辅助功能的最佳机会。选择屏幕截图以查看更多详细信息,包括建议的改进以及可以在应用中应用相同改进的其他位置的完整列表。
图 2 显示了 Google Play 中预发布报告的“辅助功能”选项卡上显示的表格示例。此图还包括应用的一个快照,显示“下一步”按钮的触摸目标尺寸小于推荐尺寸。
UI Automator 查看器
uiautomatorviewer
工具提供了一个方便的 GUI,用于扫描和分析当前显示在搭载 Android 系统的设备上的 UI 组件。您可以使用 UI Automator 检查布局层次结构,并查看设备前景中可见的 UI 组件的属性。此信息允许您创建更细粒度的测试,例如,通过创建与特定可见属性匹配的 UI 选择器。该工具位于 Android SDK 的tools
目录中。
在辅助功能测试中,此工具可用于调试使用其他测试方法发现的问题。例如,如果手动测试显示某个视图缺少所需的语音文本,或者某个视图在不应该获得焦点时获得了焦点,则可以使用此工具帮助找到问题根源。
若要详细了解 UI Automator 查看器,请参阅使用 UI Automator 编写自动化测试。
Lint
Android Studio 会显示各种辅助功能问题的 Lint 警告,并提供指向源代码中相关位置的链接。在以下示例中,图像缺少contentDescription
属性。缺少的内容说明会导致以下消息。
[Accessibility] Missing 'contentDescription' attribute on image
图 3 显示了此消息在 Android Studio 中的显示方式示例。
自动化测试
Android 平台支持多种测试框架,例如 Espresso,它允许您创建和运行评估应用辅助功能的自动化测试。
Espresso
Espresso 是一个 Android 测试库,旨在使 UI 测试快速且简单。它允许您与应用中正在测试的 UI 组件交互,并断言某些行为是否发生或是否满足特定条件。
要观看 Espresso 可访问性测试的视频概述,请观看以下视频从 31:54 分到 34:19 分:包容性设计与测试:使您的应用更易于访问 - Google I/O 2016。
本节介绍如何使用 Espresso 运行可访问性检查。
启用检查
您可以使用 AccessibilityChecks
类启用和配置可访问性测试。
Kotlin
import androidx.test.espresso.accessibility.AccessibilityChecks @RunWith(AndroidJUnit4::class) @LargeTest class MyWelcomeWorkflowIntegrationTest { init { AccessibilityChecks.enable() } }
Java
import androidx.test.espresso.accessibility.AccessibilityChecks; @RunWith(AndroidJUnit4.class) @LargeTest public class MyWelcomeWorkflowIntegrationTest { @BeforeClass public void enableAccessibilityChecks() { AccessibilityChecks.enable(); } }
默认情况下,当您执行 ViewActions
中定义的任何视图操作时,检查就会运行。每个检查都包含执行操作的视图以及所有后代视图。您可以通过将 true
传递到 setRunChecksFromRootView()
来评估屏幕的整个视图层次结构,如下面的代码片段所示。
Kotlin
AccessibilityChecks.enable().setRunChecksFromRootView(true)
Java
AccessibilityChecks.enable().setRunChecksFromRootView(true);
抑制结果子集
Espresso 在您的应用上运行可访问性检查后,您可能会发现一些改进应用可访问性的机会,但您无法立即解决这些问题。为了防止 Espresso 测试因这些结果而持续失败,您可以暂时忽略它们。可访问性测试框架 (ATF) 使用 setSuppressingResultMatcher()
方法提供此功能,该方法指示 Espresso 抑制所有满足给定匹配器表达式的结果。
当您对应用进行更改以解决可访问性的一个方面时,Espresso 最好能显示尽可能多的其他可访问性方面的结果。因此,最好只抑制特定的已知改进机会。
当您暂时抑制计划稍后解决的可访问性测试结果时,务必不要意外地抑制类似的结果。为此,请使用范围较窄的匹配器。为此,请选择一个 匹配器,以便仅当结果满足以下每个可访问性检查时,Espresso 才会抑制给定结果。
- 特定类型的可访问性检查,例如检查触摸目标大小的检查。
- 评估特定 UI 元素(例如按钮)的可访问性检查。
ATF 定义了多个匹配器,以帮助您定义在 Espresso 测试中显示哪些结果。以下示例抑制与单个 TextView
元素的颜色对比度相关的检查结果。元素的 ID 为 countTV
。
Kotlin
AccessibilityChecks.enable().apply { setSuppressingResultMatcher( allOf( matchesCheck(TextContrastCheck::class.java), matchesViews(withId(R.id.countTV)) ) ) }
Java
AccessibilityValidator myChecksValidator = AccessibilityChecks.enable() .setSuppressingResultMatcher( allOf( matchesCheck(TextContrastCheck.class), matchesViews(withId(R.id.countTV))));
用户测试
除了本指南中的其他测试方法外,用户测试还可以提供有关应用可用性的具体且有价值的见解。
要查找可以测试您的应用的用户,请使用以下方法
- 联系当地组织、学院或大学,这些组织或大学为残疾人士提供培训。
- 询问您的社交圈。可能有一些残疾人士愿意提供帮助。
- 询问用户测试服务(例如 usertesting.com)是否可以测试您的应用并包含残疾人士。
- 加入可访问性论坛(例如 Accessible),并请求志愿者尝试您的应用。
有关更多提示,请观看以下视频的用户测试部分,从 31:10 分到 44:51 分:幕后:Android 可访问性新增功能 - Google I/O 2016。