Testes

Uma forma essencial de testar a acessibilidade é o teste manual: ativar os serviços de acessibilidade, como o TalkBack ou o acesso com interruptor, e verificar se tudo funciona como esperado. Isso fornece insights diretos sobre como os usuários com necessidades de acessibilidade podem usar seu aplicativo.

Além da verificação manual, use testes automatizados para sinalizar possíveis problemas que possam afetar a experiência do usuário ao fazer mudanças contínuas no app.

As APIs de teste do Compose permitem que você escreva testes automatizados que interagem com elementos semânticos e declaram as propriedades definidas na interface.

Verificações de acessibilidade

Para testes de acessibilidade automatizados, você também pode usar o Framework de testes de acessibilidade, o mesmo framework que alimenta o Scanner de acessibilidade e as verificações de acessibilidade no Espresso, para realizar algumas verificações relacionadas à acessibilidade automaticamente, começando com o Compose 1.8.0.

Para ativar as verificações, adicione a dependência ui-test-junit4-accessibility, chame enableAccessibilityChecks() no AndroidComposeTestRule e acione uma ação ou 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()
}

Esse teste específico falha com uma exceção e uma mensagem de que o item pode não ter um rótulo legível para os serviços de acessibilidade.

Outras verificações disponíveis procuram problemas de acessibilidade com contraste de cores, tamanho pequeno da área de toque ou ordem de apresentação dos elementos.

Se você estiver misturando visualizações com o Compose e já estiver usando um AccessibilityValidator ou precisar configurar um, defina-o na regra:

@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()
}

Em combinação com testes manuais, os testes automatizados que usam as APIs do Compose e o Framework de Teste de Acessibilidade podem ajudar a detectar possíveis problemas no início do processo de desenvolvimento.