测试应用的无障碍功能

通过无障碍功能测试,您可以从用户的角度体验您的应用,并发现您可能忽略的易用性问题。无障碍功能测试可以揭示机会,让您的应用对所有用户(包括残障人士)都更强大、更通用。

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

  • 手动测试:使用 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. 日志输出级别:选择“详细”。
    2. 显示语音输出:开启此设置可在屏幕上查看 TalkBack 语音输出。

切换控制

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

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

开启切换控制

配置切换控制的一种方法是使用两个开关。一个开关指定为“下一项”开关,用于在屏幕上移动焦点,第二个“选择”开关用于选择聚焦的元素。要使用此双开关方法,您可以使用任何一对硬件按键。

要将音量减键设置为“下一项”开关,将音量加键设置为“选择”开关来设置切换控制,请完成以下步骤

  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