测试您的应用的无障碍功能

进行无障碍功能测试可以让您从用户的角度体验您的应用,并发现您可能错过的可用性问题。无障碍功能测试可以揭示机会,使您的应用对所有用户(包括有残疾的用户)更加强大和通用。

为了获得最佳结果,请使用本文档中描述的所有方法

  • 手动测试: 使用 Android 无障碍功能服务与您的应用交互。
  • 使用分析工具进行测试: 使用工具来发现改善您的应用无障碍功能的机会。
  • 自动化测试: 在 Espresso 和 Robolectric 中启用无障碍功能测试。
  • 用户测试: 从与您的应用交互的人员那里获得反馈。

手动测试

手动测试让您站在用户的立场上。Android AccessibilityService 对象会改变您的应用内容向用户呈现的方式以及用户与内容交互的方式。通过使用无障碍功能服务与您的应用交互,您可以体验用户使用您的应用的方式。

TalkBack

TalkBack 是 Android 的内置屏幕阅读器。当 TalkBack 处于开启状态时,用户无需查看屏幕即可与他们的 Android 设备交互。有视力障碍的用户可能依赖 TalkBack 来使用您的应用。

开启 TalkBack

  1. 打开您设备的“设置”应用。
  2. 导航到 **无障碍功能**,然后选择 **TalkBack**。
  3. 在 TalkBack 屏幕的顶部,按 **开启/关闭** 开启 TalkBack。
  4. 在确认对话框中,选择 **确定** 确认权限。

使用 TalkBack 探索您的应用

开启 TalkBack 后,有两种常见的导航方式

  • 线性导航: 快速向右或向左滑动以按顺序浏览屏幕元素。双击任何位置以选择当前屏幕元素。
  • 通过点击探索: 将手指拖动到屏幕上以听到您手指下方的内容。双击任何位置以选择当前元素。

要使用 TalkBack 探索您的应用,请完成以下步骤

  1. 打开您的应用。
  2. 按顺序滑动浏览每个元素。
  3. 在您浏览时,请注意以下问题

    • 每个元素的语音反馈是否适当地传达了其内容或目的?了解如何 编写有意义的标签。* 公告是否简洁,还是过于冗长?
    • 您能否轻松完成主要工作流程?
    • 您能否通过滑动访问每个元素?
    • 如果出现警报或其他临时消息,它们是否会朗读出来?

有关更多信息和技巧,请参阅 TalkBack 用户文档

可选:TalkBack 开发者设置

TalkBack 开发者设置使您更轻松地使用 TalkBack 测试您的应用。

要查看或更改开发者设置,请完成以下步骤

  1. 打开您设备的“设置”应用。
  2. 导航到 **无障碍功能**,然后选择 **TalkBack**。
  3. 选择 **设置 > 高级设置 > 开发者设置**

    1. 日志输出级别: 选择 **VERBOSE**。
    2. 显示语音输出: 开启此设置,以在屏幕上查看 TalkBack 语音输出。

Switch Access

Switch Access 允许用户使用开关而不是触摸屏与 Android 设备交互。开关有几种类型:辅助技术设备(例如 AbleNet、Enabling Devices、RJ Cooper 或 Tecla* 出售的设备);外部键盘按键;或按钮。此服务对有运动障碍的用户很有帮助。

* Google 不认可这些公司或其产品。

开启 Switch Access

配置 Switch Access 的一种方法是使用两个开关。一个开关指定为“下一个”开关,它在屏幕上移动焦点,另一个“选择”开关选择焦点的元素。要使用这种双开关方法,您可以使用任何一对硬件键。

要使用音量减小键作为“下一步”开关和音量增大键作为“选择”开关来设置切换访问,请完成以下步骤

  1. 确保已关闭 TalkBack。
  2. 打开您设备的“设置”应用。
  3. 导航到 **无障碍**,选择 **切换访问**,然后选择 **设置**。
  4. 在切换访问首选项屏幕上,确保 **自动扫描** 已关闭。
  5. 使用音量减小键作为您的“下一步”开关

    1. 点击 **分配扫描键 > 下一步**。
    2. 当对话框打开时,按音量减小键。对话框显示 KEYCODE_VOLUME_DOWN。
    3. 点击 **确定** 以确认并退出对话框。
  6. 使用音量增大键作为您的“选择”开关

    1. 点击选择。
    2. 当对话框打开时,按音量增大键。对话框显示 KEYCODE_VOLUME_UP。
    3. 点击 **确定** 以确认并退出对话框。
  7. 点击后退按钮返回切换访问首选项。

  8. 可选:如果您使用的是 TalkBack 5.1 或更高版本,可以选择 **语音反馈** 来打开语音反馈。

  9. 点击后退按钮返回主切换访问屏幕。

  10. 在切换访问屏幕的顶部,按 **开/关** 打开切换访问。

  11. 在确认对话框中,选择 **确定** 确认权限。

使用切换访问浏览您的应用程序

要使用切换访问浏览您的应用程序,请完成以下步骤

  1. 打开您的应用。
  2. 按下您的“下一步”键(音量减小按钮)开始扫描。
  3. 继续按下“下一步”,直到到达您要选择的项目。
  4. 按下您的“选择”键(音量增大按钮)选择突出显示的项目。
  5. 在您浏览时,请注意以下问题

    • 您能否轻松完成主要工作流程?
    • 如果您有文本或其他输入,您是否可以轻松添加和编辑内容?
    • 只有当您能对项目执行操作时,项目才会被突出显示吗?
    • 每个项目只被突出显示一次吗?
    • 通过触摸屏手势可用的所有功能是否也作为可选控件或自定义操作在切换访问中可用?
    • 如果您使用的是 TalkBack 5.1 或更高版本,并且已打开语音反馈,每个元素的语音反馈是否能适当地传达其内容或目的?了解如何 编写有意义的标签

可选:使用组选择查看所有可扫描项目

组选择是一种切换访问导航方法,可让您一次查看所有可扫描项目。此选项可让您快速检查以查看屏幕上的正确元素是否已突出显示。

要打开组选择,请完成以下步骤

  1. 打开您设备的“设置”应用。
  2. 导航到 **无障碍**,选择 **切换访问**,然后选择 **设置**。
  3. 在切换访问首选项屏幕上,确保 **自动扫描** 已关闭。
  4. 选择 **扫描方法 > 组选择**。
  5. 点击 **分配扫描开关**。
  6. 确保 **组选择开关 1** 和 **组选择开关 2** 下面的文本显示已将开关分配给每个开关。如果您按照本文档中的步骤 打开切换访问,则音量按钮已分配。

要使用组选择使用切换访问浏览您的应用程序,请完成以下步骤

  1. 按下“选择”键(音量增大按钮)突出显示当前屏幕上的所有可操作项目。查找以下问题

    • 只有可操作的项目才会被突出显示吗?
    • 所有可操作的项目都会被突出显示吗?
    • 突出显示项目的密度是否有意义?
  2. 导航到另一个屏幕以清除突出显示。

要详细了解用户如何使用组选择导航,请参阅 使用切换访问的技巧

语音访问

语音访问 允许用户使用语音命令控制 Android 设备。语音访问适用于运行 Android 5.0(API 级别 21)或更高版本的设备。要使用语音访问测试您的应用程序,请了解如何 开始使用语音访问

使用分析工具进行测试

分析工具可以发现您可能在手动测试中遗漏的提高可访问性的机会。

Compose UI 检查

在 Compose 预览上激活 Compose UI 检查模式 以启用 Android Studio 自动审核您的 Compose UI 以查找可访问性问题。Android Studio 通过突出显示问题(例如,在大型屏幕上拉伸的文本或问题面板中的低色对比度)来检查您的 UI 是否跨不同屏幕尺寸正常工作。

点击 Compose UI 检查模式按钮以激活检查。
Compose UI 检查模式已激活,问题面板中显示了详细信息。
Compose UI 检查显示了您的 UI 在不同类型的色觉缺陷下的外观。

无障碍扫描仪

无障碍扫描仪 应用程序扫描您的屏幕,并建议提高应用程序可访问性的方法。无障碍扫描仪使用 无障碍测试框架,并在查看内容标签、可点击项目、对比度等内容后提供具体建议。

Android 无障碍测试框架已集成到 Android Studio 中,以帮助您查找布局中的可访问性问题。要启动面板,请点击错误报告按钮 ! 在布局编辑器中。

Demo of the Accessibility Scanner 图 1. 无障碍扫描仪演示。

要了解更多信息,请参阅以下资源

Google Play 上的预发布报告

如果您在 Google Play 上分发您的应用程序,则可以访问应用程序的 预发布报告。Google Play 在您使用 Google Play 管理中心将应用程序 上传到发布渠道 后不久生成此报告。预发布报告(也位于 Google Play 管理中心中)显示了 Google Play 对您的应用程序进行的测试结果。

特别是,Google Play 使用 无障碍测试框架 运行无障碍测试。这些测试的结果显示在您的应用程序预发布报告的 **无障碍** 选项卡上的表格中。

该表格将改进机会整理到以下类别中

触摸目标大小
应用程序中具有可聚焦区域或 触摸目标大小 的交互式元素小于推荐的大小。
低对比度
文本元素使用的颜色对与该元素后面的背景颜色对的 色对比度比 低于推荐的对比度。
内容标记
没有 描述元素目的的标签 的 UI 元素。
实现
分配给 UI 元素的属性使系统无障碍服务更难正确地解释这些元素。例如,为 可编辑的 View 标签 定义描述,以及使用与元素逻辑排列不匹配的元素 遍历顺序

在表格下方,预发布报告显示了应用程序的快照。这些快照代表每个类别中提高应用程序可访问性的最佳机会。选择一个屏幕截图以查看更多详细信息,包括建议的改进以及可在应用程序中应用相同改进的更完整的位置列表。

图 2 显示了 Google Play 中预发布报告的 **无障碍** 选项卡上显示的表格示例。此图还包括应用程序的其中一个快照,显示 **下一步** 按钮的触摸目标大小小于推荐大小。

An image showing the Pre-launch Accessibility report
图 2. 预发布报告的 **无障碍** 选项卡中的表格摘要示例(左)和屏幕截图(右)。

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 中的显示方式示例

An image showing Android Studio reporting a missing content description on some images.
图 3. Android Studio 中的消息,显示缺少 contentDescription 属性。

自动化测试

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 仅当给定结果满足以下 **所有** 可访问性检查时才抑制它。

  1. 特定类型的可访问性检查,例如检查触摸目标大小的检查。
  2. 评估特定 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))));

用户测试

除了本指南中的其他测试方法外,用户测试还可以提供有关应用可用性的具体且有价值的见解。

要查找可以测试您的应用的用户,请使用以下方法

  1. 联系当地为残疾人提供培训的组织、学院或大学。
  2. 询问您的社交圈。可能有愿意提供帮助的残疾人。
  3. 询问用户测试服务(例如 usertesting.com),他们是否可以测试您的应用程序并包括残疾人。
  4. 加入可访问性论坛(例如 Accessible),并请求志愿者尝试您的应用程序。

有关更多提示,请观看以下视频的用户测试部分(从第 31 分 10 秒到第 44 分 51 秒):幕后:Android 可访问性新功能 - Google I/O 2016