无障碍功能检查

通过测试无障碍功能,您可以从整个用户群(包括具有无障碍功能需求的用户)的角度体验您的应用。这种形式的测试能够发掘出让应用功能更强大、用途更广的机会。

本页介绍了如何向现有的 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. 用于评估特定界面元素(如按钮)的无障碍功能检查。

ATF 定义了多个匹配器,以帮助您定义要在 Espresso 测试中显示的结果。以下示例会抑制与单个 TextView 元素的色彩对比度相关的检查结果。元素的 ID 为 countTV

Kotlin

AccessibilityChecks.enable().apply {
        setSuppressingResultMatcher(
                allOf(
                    matchesCheckNames(`is`("TextContrastViewCheck")),
                    matchesViews(withId(R.id.countTV))
                )
        )
}

Java

AccessibilityValidator myChecksValidator = AccessibilityChecks.enable();
Matcher<? super AccessibilityViewCheckResult> myChecksMatcher =
        Matchers.allOf(matchesCheckNames(is("TextContrastViewCheck")),
                       matchesViews(withId(R.id.countTV)));
myChecksValidator.setSuppressingResultMatcher(myChecksMatcher);