測試

測試無障礙功能的重要方法是手動測試:開啟 TalkBack 或切換控制功能等無障礙服務,並檢查所有功能是否正常運作。這可讓您直接深入分析有輔助功能需求的使用者,可能會如何體驗您的應用程式。

除了手動驗證外,您也應使用自動化測試,在持續變更應用程式時,標記任何可能影響使用者體驗的潛在問題。

現有的 Compose 測試 API 可讓您編寫自動化測試,與語意元素互動,並斷言 UI 中定義的屬性。

無障礙檢查

如要進行自動化無障礙測試,您也可以使用無障礙測試架構,這是 Espresso 中無障礙功能檢查工具和無障礙檢查的基礎架構,可從 Compose 1.8.0 開始自動執行一些無障礙相關檢查。

如要啟用檢查,請新增 ui-test-junit4-accessibility 依附元件,在 AndroidComposeTestRule 中呼叫 enableAccessibilityChecks(),並觸發動作或 tryPerformAccessibilityChecks:

@Rule
@JvmField
val composeTestRule = createAndroidComposeRule<ComponentActivity>()

@Test
fun noAccessibilityLabel() {
    composeTestRule.setContent {
        Box(
            modifier = Modifier
                .size(50.dp, 50.dp)
                .background(color = Color.Gray)
                .clickable { }
                .semantics {
                    contentDescription = ""
                }
        )
    }

    composeTestRule.enableAccessibilityChecks()

    // Any action (such as performClick) will perform accessibility checks too:
    composeTestRule.onRoot().tryPerformAccessibilityChecks()
}

這項特定測試失敗,並顯示例外狀況和訊息,指出該項目可能沒有無障礙服務可讀取的標籤。

其他可用的檢查項目包括顏色對比度、觸控目標大小過小,或元素遍歷順序等無障礙問題。

如果您將 View 與 Compose 混合使用,且已使用 AccessibilityValidator,或需要設定一個,可以在規則中設定:

@Test
fun lowContrastScreen() {
    composeTestRule.setContent {
        Box(
            modifier = Modifier
                .fillMaxSize()
                .background(color = Color(0xFFFAFBFC)),
            contentAlignment = Alignment.Center
        ) {
            Text(text = "Hello", color = Color(0xFFB0B1B2))
        }
    }

    // Optionally, set AccessibilityValidator manually
    val accessibilityValidator = AccessibilityValidator()
        .setThrowExceptionFor(
            AccessibilityCheckResult.AccessibilityCheckResultType.WARNING
        )

    composeTestRule.enableAccessibilityChecks(accessibilityValidator)

    composeTestRule.onRoot().tryPerformAccessibilityChecks()
}

除了手動測試外,您也可以使用 Compose API 和無障礙功能測試架構進行自動化測試,在開發程序初期偵測可能發生的問題。