Conceitos e implementação do Jetpack Compose
O teste de acessibilidade ajuda você a entender como seu app funciona da perspectiva do usuário e a encontrar problemas de usabilidade que, de outra forma, não verificaria. Esse tipo de teste pode revelar oportunidades para tornar seu app mais eficiente e versátil para todos os usuários, incluindo pessoas com deficiências.
Este documento descreve as seguintes abordagens:
- Testes com ferramentas de análise: use ferramentas para descobrir oportunidades de melhorar a acessibilidade do app.
- Teste automatizado: ative o teste de acessibilidade no Espresso e no Robolectric.
Como testar usando ferramentas de análise
As ferramentas de análise podem revelar oportunidades de melhoria da acessibilidade que você perderia com o teste manual.
Scanner de acessibilidade
O app Scanner de acessibilidade analisa sua tela e sugere formas de melhorar a acessibilidade do seu app. Ele usa o Framework de teste de acessibilidade (link em inglês) e oferece sugestões específicas depois de analisar marcadores de conteúdo, itens clicáveis, contraste e muito mais.
O Framework de teste de acessibilidade está integrado ao Android Studio para ajudar você a encontrar problemas de acessibilidade nos seus layouts. Para iniciar o painel, clique no botão de relatório de erros ! no Layout Editor.
Figura 1. Demonstração do Scanner de acessibilidade.
Para saber mais, consulte os seguintes recursos:
Visualizador do UI Automator
A ferramenta uiautomatorviewer oferece uma GUI conveniente para verificar e analisar
os componentes de interface exibidos no momento em um dispositivo Android. Você pode usar o UI Automator
para inspecionar a hierarquia de layouts e consultar as propriedades de componentes de interface
visíveis no primeiro plano do dispositivo. Essas informações permitem criar
testes mais refinados, por exemplo, um seletor de interface que corresponda
a uma propriedade visível específica. A ferramenta está localizada no diretório tools do SDK do Android.
Nos testes de acessibilidade, essa ferramenta é útil para depurar problemas encontrados usando outros métodos de teste. Por exemplo, se o teste manual revelar que uma visualização não tem texto que possa ser falado ou que uma visualização recebe foco indesejadamente, você poderá usar a ferramenta para encontrar a origem do problema.
Para saber mais sobre o Leitor do UI Automator, consulte Criar testes automatizados com o UI Automator.
Lint
O Android Studio mostra avisos de lint para vários problemas de acessibilidade e fornece
links para os locais relevantes no código-fonte. No exemplo
a seguir, falta um atributo contentDescription na imagem. A descrição
do conteúdo ausente resulta na seguinte mensagem:
[Accessibility] Missing 'contentDescription' attribute on image
A Figura 2 mostra um exemplo de como essa mensagem aparece no Android Studio:
contentDescription ausente.Testes automatizados
A Plataforma Android oferece suporte para vários frameworks de teste, como o Espresso, que permite criar e executar testes automatizados que avaliam a acessibilidade do app.
Espresso
O Espresso é uma biblioteca de testes do Android criada para fazer testes de interface de forma rápida e fácil. Ele permite que você interaja com componentes de interface em teste no seu app e declare que determinados comportamentos ocorrem ou que condições específicas são atendidas.
Para ter uma visão geral em vídeo dos testes de acessibilidade com o Espresso, assista ao vídeo a seguir do minuto 31:54 até o 34:19: Testes e design inclusivos: como tornar seu app mais acessível - Google I/O 2016.
Esta seção descreve como executar verificações de acessibilidade usando o Espresso.
Ativar verificações
Você pode ativar e configurar o teste de acessibilidade usando a
classe
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();
}
}
Por padrão, as verificações são executadas quando você realiza qualquer ação de visualização definida em
ViewActions. Cada
verificação inclui a visualização em que a ação é realizada, bem como
todas as visualizações descendentes. É possível avaliar toda a hierarquia de visualização de uma tela durante
cada verificação passando true para setRunChecksFromRootView(),
conforme mostrado no snippet de código a seguir:
Kotlin
AccessibilityChecks.enable().setRunChecksFromRootView(true)
Java
AccessibilityChecks.enable().setRunChecksFromRootView(true);
Suprimir subconjuntos de resultados
Depois que o Espresso executa verificações de acessibilidade, você pode encontrar várias
oportunidades de melhorar a acessibilidade do seu app que não podem ser solucionadas
imediatamente. Para evitar que os testes do Espresso falhem continuamente devido
a esses resultados, ignore-os temporariamente. O Framework de testes
de acessibilidade (ATF, na sigla em inglês) fornece essa funcionalidade usando o
método setSuppressingResultMatcher()
que instrui o Espresso a suprimir todos os resultados que satisfazem a expressão
matcher escolhida.
Quando você faz modificações no app que contemplam um aspecto da acessibilidade, o Espresso pode mostrar resultados para o máximo possível de outros aspectos da acessibilidade. Por esse motivo, é recomendável suprimir apenas oportunidades conhecidas específicas de melhoria.
Quando você suprimir temporariamente os resultados do teste de acessibilidade que planeja resolver posteriormente, é importante não suprimir acidentalmente as descobertas parecidas. Por esse motivo, use matchers com escopo limitado. Para fazer isso, escolha um matcher para que o Espresso suprima determinado resultado somente se ele atender a cada uma das seguintes verificações de acessibilidade:
- Verificações de acessibilidade de um determinado tipo, como aquelas que verificam o tamanho da área de toque.
- Verificações de acessibilidade que avaliam um determinado elemento da interface, como um botão.
O ATF define vários matchers
para ajudar você a definir quais resultados serão mostrados nos testes do Espresso. O exemplo
a seguir suprime os resultados de verificações relacionadas ao contraste de cor de
um único elemento TextView. O ID do elemento é 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))));