无障碍功能检查

通过测试无障碍功能,您可以从整个用户群(包括具有无障碍功能需求的用户)的角度体验应用。这种形式的测试让您有机会提升应用的实用性和灵活性。

本文介绍了如何为您的现有 Espresso 测试添加无障碍功能检查。如需详细了解无障碍功能,请参阅无障碍功能指南

启用检查

您可以使用 AccessibilityChecks 类启用和配置无障碍功能测试。

Kotlin

    import androidx.test.espresso.contrib.AccessibilityChecks

    @RunWith(AndroidJUnit4::class)
    @LargeTest
    class MyWelcomeWorkflowIntegrationTest {
        companion object {
            @Before @JvmStatic
            fun enableAccessibilityChecks() {
                AccessibilityChecks.enable()
            }
        }
    }
    

Java

    import androidx.test.espresso.contrib.AccessibilityChecks;

    @RunWith(AndroidJUnit4.class)
    @LargeTest
    public class MyWelcomeWorkflowIntegrationTest {
        @Before
        public static 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);