Os aplicativos mobile podem ajudar as pessoas a realizar tarefas diárias. No entanto, pessoas com deficiência podem enfrentar várias barreiras ao usar os recursos desses dispositivos se eles não fornecerem acessibilidade adequada.

Os desenvolvedores de software desempenham um papel crucial na promoção de melhorias de acessibilidade digital, e os testes automatizados podem ajudá-los.

O Kit de Testes de Acessibilidade Automatizados para Aplicativos Android (AATK) consiste em uma coleção de testes de acessibilidade automatizados projetados para serem executados com o Robolectric. Isso permite que sejam executados como testes locais, sem a necessidade de um dispositivo físico ou emulado.

Este kit foi desenvolvido com foco nos problemas de acessibilidade mais comuns e nos widgets mais usados, onde muitos problemas de acessibilidade tendem a ocorrer.

O que você aprenderá

Ao realizar este codelab, você será capaz de:

  1. configurar um projeto existente para usar o AATK
  2. escrever alguns testes de acessibilidade com poucas linhas
  3. executar os testes, identificando e corrigindo problemas de acessibilidade

Pré-requisitos

Não é necessário nenhum conhecimento prévio sobre acessibilidade ou testes automatizados para realizar este codelab. No entanto, assumimos que você:

  1. possui o Android Studio instalado em seu ambiente de desenvolvimento
  2. seja capaz de baixar o projeto do GitHub e abrir no Android Studio

O app Counter

Neste codelab, você trabalhará com um aplicativo existente, o Counter, derivado do Google Codelabs. Este aplicativo permite aos usuários rastrear, incrementar e decrementar uma contagem numérica. Embora o aplicativo seja simples, você descobrirá que ele tem alguns problemas de acessibilidade que podem dificultar que usuários com deficiência interajam com ele.

Você será orientado a executar três testes do AATK para identificar esses problemas rapidamente e corrigi-los. Além disso, você poderá escrever e executar outros testes por conta própria.

Clonando e abrindo o projeto

Você pode obter o código-fonte da versão inicial do aplicativo neste link. Clone o repositório e abra Counter no Android Studio.

Configure o projeto para usar o AATK

Siga os seguintes passos para preparar o projeto para adicionar testes de acessibilidade automatizados:

  1. Edite o arquivo build.gradle da raíz, adicionando a seguinte linha na lista de repositories.
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
    
  2. Configure seu arquivo build.gradle no nível do aplicativo para habilitar a execulção de testes com o Robolectric e o AATK, atualizando os testOptions e adicionando as dependências necessárias. Primeiro, adicione a diretiva testOptions com as seguintes linhas, dentro da diretiva android, assim:
    android{
        ...
        testOptions {
            // Usado para testar elementos dependentes do Android na pasta de teste
            unitTests.includeAndroidResources  = true
            unitTests.returnDefaultValues = true
        }
    }
    
    Em seguida, adicione estas duas dependências como testImplementation:
    dependencies {
        ...
        testImplementation 'org.robolectric:robolectric:4.9'
        testImplementation 'com.github.AALT-Framework:android-accessibility-test-kit:v1.0.0-alpha'
        ...
    }
    
  1. Depois de fazer essas alterações, sincronize seu projeto para garantir que elas entrem em vigor.

Criar a classe de teste

  1. No Android Studio, abra o painel Project e encontre esta pasta:
  1. Clique com o botão direito na pasta counter e selecione New > Java Class
  2. Nomeie como MainActivityTest. Assim você saberá que esta classe de teste se refere à MainActivity.

Configurar a classe de teste

Com a classe MainActivityTest gerada e aberta, comece a configurá-la para executar os testes AATK.

  1. Anote o escopo da classe para executar com RoboletricTestRunner.
  2. Declare um atributo privado para manter o rootView e o AccessibilityTestRunner.
  3. Declare uma propriedade pública para o ErrorCollector.
  4. Adicione um método setUp da seguinte forma:
    @Before
    public void setUp() {
        MainActivity activity = Robolectric.buildActivity(MainActivity.class).create().get();
    
        // Obtenha a view raiz da hierarquia de exibição
        rootView = activity.getWindow().getDecorView().getRootView();
        runner = new AccessibilityTestRunner(collector);
    }
    
  5. Neste ponto, seu MainActivityTest deve estar assim:
    @RunWith(RobolectricTestRunner.class)
    public class MainActivityTest {
        private View rootView;
        private AccessibilityTestRunner runner;
    
        @Rule
        public ErrorCollector collector = new ErrorCollector();
    
        @Before
        public void setUp() {
            MainActivity activity = Robolectric.buildActivity(MainActivity.class).create().get();
    
            // Obtenha a view raiz da hierarquia de exibição
            rootView = activity.getWindow().getDecorView().getRootView();
            runner = new AccessibilityTestRunner(collector);
        }
    }
    

Adicione um método de teste para cada teste de acessibilidade que deseja executar. Começaremos com a verificação da taxa de contraste de cores.

Crie um teste para verificar a taxa de contraste de cores

Uma taxa de contraste adequada ajuda os usuários a identificar melhor o conteúdo do aplicativo. Uma relação de contraste de pelo menos 4,5:1 deve ser usada.

Você pode utilizar o teste de taxa de contraste do AATK (TestAdequateContrastRatio) da seguinte forma:

  1. Adicione um método de teste. Procure seguir boas convenções para nomenclatura de testes. Por exemplo: deve_UsarTaxaDeContrasteAdequada
  2. Chame o método runAccessibilityTest do executor do kit, passando como parâmetro a view raíz e uma nova instância do teste desejado.
        @Test
        public void deve_UsarTaxaDeContrasteAdequada(){
            runner.runAccessibilityTest(rootView, new TestAdequateContrastRatio());
        }
    
  3. Execute seu teste. Clique com o botão direito do mouse sobre o nome do método e selecione Run MainActivityTest.deve_UsarTaxaDeContrasteAdequada
  4. No painel Run, clique duas vezes em deve_UsarTaxaDeContrasteAdequada para ver os resultados. Você notará a mensagem de erro, a identificação View, a taxa esperada e a taxa atual.
  5. Abra o arquivo res/layout/activity_main.xml, encontre o TextView e altere android:textColor="@color/grey" para android:textColor="@color/darkGrey".
  6. Volte ao item 3 para refazer o teste e ver se ele passou.

Agora que já criou seu primeiro teste, você pode adicionar outros. A seguir, iremos sugerir mais dois exemplos. Consulte a documentação do AATK para consultar todos os testes disponíveis.

Crie um teste para verificar conteúdos não textuais sem descrição alternativa

Todo conteúdo não textual deve ter uma descrição de texto alternativa. Isso permite que um leitor de tela possa identificar corretamente o conteúdo.

Para esse teste, você irá utilizar o teste de texto alternativo do AATK (TestMustHaveAlternativeText), assim como fez para o teste de contraste.

  1. Adicione um método de teste. Por exemplo: deve_ConterAlternativaTextual
  2. Chame o método runAccessibilityTest do executor do kit, passando como parâmetro a view raíz e uma nova instância do teste desejado.
        @Test
        public void deve_ConterAlternativaTextual(){
            runner.runAccessibilityTest(rootView, new TestMustHaveAlternativeText());
        }
    
  3. Execute seu teste. Verifique os resultados. Realize as correções. Reexecute o teste.

Crie um teste para verificar o tamanho dos alvos de toque

Todos os elementos de interação devem ter no mínimo 48x48dp.

Para esse teste, você irá utilizar o teste de texto alternativo do AATK (TestTouchTargetSize), assim como fez para os testes anteriores.

  1. Adicione um método de teste. Por exemplo: deve_AlvoDeToquePossuirTamanhoMinimo
  2. Chame o método runAccessibilityTest do executor do kit, passando como parâmetro a view raíz e uma nova instância do teste desejado.
        @Test
        public void deve_AlvoDeToquePossuirTamanhoMinimo(){
            runner.runAccessibilityTest(rootView, new TestTouchTargetSize());
        }
    
  3. Execute seu teste. Verifique os resultados. Realize as correções. Reexecute o teste.

Obrigado por sua participação!

Lembre-se de retornar ao questionário para concluir última etapa desta pesquisa.