欢迎参加我们将于 6 月 3 日举行的 #Android11:Beta 版发布会

测试应用的无障碍功能

通过测试无障碍功能,您可以从用户的角度体验应用,并发现可能忽略的易用性问题。借助无障碍功能测试,您有机会针对所有用户(包括残障用户)提升应用的实用性和灵活性。

为了获得最佳效果,请使用本文档中介绍的所有方法:

  • 手动测试:使用 Android 无障碍服务与应用进行互动。
  • 使用分析工具进行测试:使用各种工具发现有哪些值得改进的应用无障碍功能。
  • 自动化测试:在 Espresso 中开启无障碍功能测试,以及
  • 用户测试:获取与您的应用进行互动的真实用户的反馈。

手动测试

手动测试能让您从用户的角度体验应用。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 开发者设置可让您轻松使用 TalkBack 测试应用。

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

  1. 打开设备的“设置”应用。
  2. 转到无障碍,然后选择 TalkBack。
  3. 依次选择设置 > 开发者设置

    1. 日志输出级别:选择详细
    2. 显示语音输出:开启此设置即可在屏幕上查看 TalkBack 语音输出。

开关控制

“开关控制”可让用户使用开关(而不是触摸屏)与 Android 设备互动。开关分为以下几种:AbleNet、Enabling Devices、RJ Cooper 或 Tecla* 等出售的辅助技术设备;外部键盘按键;或者按钮。对于有运动障碍的用户,此服务非常有用。

* Google 不对这些公司或他们的产品给予认可。

开启“开关控制”

配置“开关控制”的一种简单方式是使用两个开关。一个开关被指定为“下一项”开关,并在屏幕上移动焦点,第二个“选择”开关可用于选择焦点所在的元素。要使用这种双开关方法,您可以使用任意一对硬件按键。

注意:您使用“开关控制”的体验会因所用的工具和软件而异:

  • 如果您使用外部开关(例如键盘),还需要执行其他设置步骤。例如,您需要重新启用软键盘。如需了解详情,请参阅开关控制用户文档
  • 如果您使用的是 TalkBack 5.1 或更高版本,则可以使用设置向导配置“开关控制”。要使用此向导(而不是执行以下步骤),请依次转到设置 > 无障碍 > 开关控制 > 设置 > 打开“开关控制”设置

在设置“开关控制”时,要使用音量调低键作为“下一项”开关,并将音量调高键作为“选择”开关,请完成以下步骤:

  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 提供了一些其他工具来测试应用的无障碍功能。

盲文提示

Google 盲文提示是一款应用,可让用户通过蓝牙将可刷新的盲文显示屏连接到 Android 设备。“盲文提示”可与 TalkBack 配合使用,共同打造将语音和盲文结合使用的体验。

要使用盲文显示屏测试您的应用,请了解如何安装并开启“盲文提示”

要查看“盲文提示”呈现的盲文(和 ASCII 转换),而无需连接盲文显示屏,您可以使用“盲文提示”设置中的叠加选项:

  1. 打开设备的“设置”应用。
  2. 转到无障碍,然后选择盲文提示。
  3. 依次选择设置 > 开发者选项 > 在屏幕上显示盲文输出

Voice Access

Voice Access 可让用户通过语音指令控制 Android 设备。搭载 Android 5.0(API 级别 21)及更高版本的设备提供 Voice Access。要通过 Voice Access 测试您的应用,请了解如何开始使用 Voice Access

分析工具

使用分析工具进行测试可以发现手动测试可能会错失的无障碍功能改进机会。

无障碍功能扫描仪

无障碍功能扫描仪应用会扫描您的屏幕,并提供改进应用无障碍功能的建议。无障碍功能扫描仪使用无障碍功能测试框架,并在查看内容标签、可点击项、对比度等内容后提供具体建议。

了解详情:

Google Play 上的发布前测试报告

如果您在 Google Play 上分发应用,则您可以访问应用的发布前测试报告。在您通过 Google Play 管理中心将应用上传到发布渠道不久后,Google Play 会生成此报告。该发布前测试报告也可在 Google Play 管理中心内找到,它显示了 Google Play 对您的应用执行的测试的结果。

具体而言,Google Play 会使用无障碍功能测试框架运行无障碍功能测试。这些测试的结果位于应用发布前测试报告的无障碍标签上的表格中。

该表格将具体改进机会分为以下几类:

轻触目标尺寸
应用中具有可聚焦区域(或轻触目标尺寸,小于建议值)的互动元素。
低对比度
文本元素和该元素的背景使用的颜色对的色彩对比度低于建议值的情况。
内容标签
不具有描述给定元素用途的标签的界面元素。
实现
分配给界面元素而导致系统的无障碍服务更难以正确解读元素的属性。例如,为可修改的 View 标签定义说明,以及使用与元素的逻辑排列方式不匹配的元素遍历顺序

在以下表格中,发布前测试报告显示了应用的快照。这些快照表示在各个类别中改进应用无障碍功能的首选机会。通过选择屏幕截图,您可以查看更多详细信息,包括建议的改进以及应用中可以应用相同改进的更加完整的位置列表。

图 1 显示了 Google Play 中发布前测试报告的无障碍标签上显示的表格示例。此图还包括应用的一个快照,显示了轻触目标尺寸小于建议值的下一项按钮。

发布前测试报告部分的屏幕截图
图 1. 发布前测试报告的无障碍标签中的摘要表格(左)和屏幕截图(右)示例

UI Automator 查看器

uiautomatorviewer 工具提供了一个方便的 GUI,用于扫描和分析 Android 设备上当前显示的界面组件。您可以使用 UI Automator 检查布局层次结构,并查看在设备前台显示的界面组件的属性。利用这些信息,您可以通过创建与特定可见属性匹配的界面选择器(举例而言)来创建更精细的测试。该工具位于 Android SDK 的 tools 目录中。

在无障碍功能测试中,此工具有助于调试使用其他测试方法发现的问题。例如,如果手动测试生成了一个应具有而未具有可读文本的视图,或者生成了一个不应获得而获得焦点的视图,则您可以使用该工具确定错误的来源。

要详细了解 UI Automator 查看器,请参阅测试多个应用的界面

Lint

Android Studio 会显示有关各种无障碍功能问题的 Lint 警告,并提供指向源代码中包含这些问题的位置的链接。在以下示例中,一张图片缺少 contentDescription 属性。缺少内容说明会生成以下消息:

    [Accessibility] Missing 'contentDescription' attribute on image
    

图 2 演示了此消息在 Android Studio 中的示例显示效果:

消息的屏幕截图
图 2. Android Studio 中的消息显示缺少 contentDescription 属性

如果屏幕阅读器等无障碍服务的用户在应用内遇到这张图片,他们将无法理解该图片的含义。

自动化测试

Android 平台支持多个测试框架(包括 EspressoRobolectric),每个框架都允许您创建并运行用于评估应用无障碍功能的自动化测试。

要观看使用 Espresso 和 Robolectric 进行无障碍功能测试的视频概览,请观看以下视频(从 31 分 54 秒到 34 分 19 秒):包容性设计和测试:让您的应用使用起来更没有障碍 - 2016 年 Google I/O 大会

Espresso

Espresso 是一个 Android 测试库,旨在打造简单快捷的界面测试体验。它可让您与应用内进行测试的界面组件进行互动,并断言某些行为的发生或者特定条件已满足。

启用检查

您可以通过 AccessibilityChecks 检查来启用和配置无障碍功能测试:

Kotlin

    AccessibilityChecks.enable()
    

Java

    AccessibilityChecks.enable();
    

默认情况下,系统会在您执行 ViewActions 中定义的任何视图操作时运行检查。该检查包括执行操作的视图以及所有的子级视图。您可以使用以下代码检查屏幕的整个视图层次结构:

Kotlin

    AccessibilityChecks.enable().setRunChecksFromRootView(true)
    

Java

    AccessibilityChecks.enable().setRunChecksFromRootView(true);
    

如需查看更多代码示例,请参阅这些示范性测试

抑制已知问题

首次启用检查时,您可能会遇到许多无法立即处理的问题。您可以通过为希望抑制的结果设置匹配器,抑制这些问题导致的测试失败。为此,请通过调用 AccessibilityChecks 类的 enable() 方法获取 AccessibilityValidator 对象,然后使用返回的 AccessibilityValidator 对象的 setSuppressingResultMatcher() 方法配置抑制匹配器。

在以下示例中,与资源 ID 为 "overflow"View 对象的轻触目标尺寸相关的所有问题均会被抑制:

Kotlin

    val validator: AccessibilityValidator = AccessibilityChecks.enable().apply {
        setSuppressingResultMatcher(
                allOf(
                        matchesCheckNames(`is`("TouchTargetSizeViewCheck")),
                        matchesViews(withId(R.id.my_overflow))
                )
        )
    }
    

Java

    AccessibilityValidator validator = AccessibilityChecks.enable();
    Matcher<AccessibilityViewCheckResult> myMatcher =
            allOf(
                    matchesCheckNames(is("TouchTargetSizeViewCheck")),
                    matchesViews(withId(R.id.my_overflow)));
    validator.setSuppressingResultMatcher(myMatcher);
    

Robolectric

Robolectric 是一个开源 Android 测试库,可让您在 JVM 上测试真正的 Android 代码,无需启动模拟器。了解如何开始使用 Robolectric

抑制已知问题

首次针对 Robolectric 启用检查时,您可能会遇到许多无法立即处理的问题。您可以通过为希望抑制的结果设置匹配器来抑制这些错误。如需了解详情,请参阅 Robolectric 中提供的 AccessibilityUtil 类的 setSuppressingResultMatcher() 方法的文档。

用户测试

与本指南中的其他测试方法一样,用户测试可以提供有关应用易用性的具体且宝贵的深入分析。

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

  1. 与为残障人士提供培训的当地组织、学院或大学联系。
  2. 在您的社交圈中询问。可能会有残障人士愿意提供帮助。
  3. 询问用户测试服务(例如,usertesting.com ),看看他们能否邀请残障用户测试您的应用。
  4. 加入无障碍功能论坛(例如,AccessibilityEyes-free),并请求志愿者试用您的应用。

要了解更多提示,请观看以下视频的用户测试部分(从 31 分 10 秒到 44 分 51 秒):幕后花絮:Android 无障碍功能的新变化 - 2016 年 Google I/O 大会