Escrever Testes com Hamcrest
Escrevendo testes de acessibilidade usando correspondentes Hamcrest com Axe DevTools para Web em Java
Usando Correspondentes Hamcrest com Axe DevTools
Pré-requisitos
Para escrever testes de acessibilidade e produzir resultados, você deve ter criado previamente um arquivo de teste com Axe DevTools e sua escolha de Selenium WebDriver pré-importada e pré-inicializada. Se ainda não fez isso, leia este guia sobre como fazê-lo.
Um conjunto de correspondentes foi fornecido para testes de acessibilidade através do hamcrest usando Selenium WebDriver. Esses correspondentes podem ser usados em um framework de teste de unidade ou em etapas personalizadas do cucumber.
Escolhendo um método de varredura
Como visto nas declarações de importação, existem dois métodos de varredura de acessibilidade. O primeiro, isAxeClean, lançará uma exceção e interromperá os testes se quaisquer violações forem encontradas. O segundo, isAuditedForAccessibility, não interromperá os testes nem lançará uma exceção, independentemente do nível de acessibilidade da página verificada.
Escrevendo Testes
Para os exemplos restantes, o método isAxeClean é mostrado para brevidade, mas ambos os métodos funcionam de forma intercambiável. Com seus objetos WebDriver e AxeDriver instanciados e inicializados, criar uma varredura é tão simples quanto adicionar estas duas linhas de código a um método de teste. Substitua $URL pela URL desejada da página que você deseja verificar.
webDriver.get("$URL");
assertThat(axedriver, isAxeClean());Ao testar múltiplas páginas, você pode repetir o processo de obter, escanear sem precisar criar novas instâncias dos drivers. Para escanear diferentes estados de uma página, você pode manipular a página usando a API do webdriver e então executar uma nova varredura.
Referência Adicional
Vários métodos de encadeamento estão disponíveis para modificar a forma como a página é verificada. Esses métodos incluem cláusulas de exclusão/inclusão ou escopo e modificações dos padrões de acessibilidade, regras de acessibilidade e conjuntos de regras de acessibilidade. Para brevidade, todos os métodos de encadeamento estão acoplados com isAxeClean(), mas são intercambiáveis com isAuditedForAccessibility().
Padrões de Acessibilidade
A Deque oferece um método de encadeamento, according to, que pode especificar diretamente quais padrões de teste de acessibilidade são usados por uma varredura.
| Nome da Tag | Padrão de Acessibilidade |
|---|---|
| wcag2a | WCAG 2.0 Nível A |
| wcag2aa | WCAG 2.0 Nível AA |
| wcag2aaa | WCAG 2.0 Nível AAA |
| wcag21a | WCAG 2.1 Nível A |
| wcag21aa | WCAG 2.1 Nível AA |
| wcag21aaa | WCAG 2.0 Nível AAA |
| wcag22a | WCAG 2.2 Nível A |
| wcag22aa | WCAG 2.2 Nível AA |
| wcag22aaa | WCAG 2.2 Nível AAA |
| section508 | Seção 508 |
| EN-301-549 | EN 301 549 |
| RGAAv4 | Versão 4 do RGAA |
| TTv5 | Testador Confiável v5 |
| melhores-práticas | Melhores práticas endossadas pela Deque |
Se você não tem certeza de qual padrão é para você, leia a documentação axe-core sobre quais regras estão associadas a qual padrão, ou entre em contato conosco através do seu representante Deque ou da nossa central de ajuda. Para uma lista completa das regras que se aplicam a cada padrão, veja esta página em Descrições de Regras
Para usar um único padrão, basta adicionar o método de encadeamento according to e passar o padrão desejado
assertThat(axedriver, isAxeClean().accordingTo("wcag2a"));Além de usar um padrão de teste único, existem duas maneiras de realizar verificações contra dois ou mais padrões de teste. Ambos funcionam de maneira idêntica.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a", "section508"));
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").accordingTo("section508"));Definindo Escopo
Deque oferece dois métodos encadeados para ajudar a definir escopos em escaneamentos. O método within() altera o escaneamento para que ele ocorra apenas dentro dos limites do seletor passado para ele. O método excluding() funciona de forma oposta. Ele altera o escaneamento para ignorar o conteúdo dentro do seletor passado para ele. Os exemplos abaixo mostram todos o método within(), mas o método excluding() funciona de maneira idêntica.
Mais simplesmente, a afirmação é modificada com um seletor
assertThat(axedriver, isAxeClean().within("#selector1")); Seletores compostos também são possíveis. No exemplo abaixo, apenas elementos com o seletor 2 dentro do seletor 1 são escaneados
assertThat(axedriver, isAxeClean().within("#selector1 .selector2"));Existem três maneiras de realizar seleção múltipla, ou selecionar múltiplos escopos para testar. Em todos esses exemplos, elementos dentro do seletor 1 e seletor 2.
assertThat(axedriver, isAxeClean().within("#selector1, .selector2"));
assertThat(axedriver, isAxeClean().within("#selector1", ".selector2"));
assertThat(axedriver, isAxeClean().within("#selector1").within(".selector2"));Para definir o escopo dentro de um IFrame, um seletor de IFrame deve ser declarado. O escopo a ser escaneado dentro do IFrame é passado como um parâmetro adicional.
assertThat(axedriver, isAxeClean().within(new IFrameSelector("#frame1", "#selector1")));Definir escopo dentro de múltiplos IFrames funciona da mesma forma que a seleção múltipla padrão. Basta criar dois ou mais seletores de IFrame separados por vírgulas.
assertThat(axedriver, isAxeClean().within(new IFrameSelector("#frame1", "selector1"),
new IFrameSelector("#frame2", "#selector2")));Também é possível definir escopo dentro de IFrames aninhados. Este exemplo mostra a definição de escopo de um escaneamento dentro do seletor 1 de um IFrame que está dentro de um segundo IFrame.
assertThat(axedriver, isAxeClean().within(
new IFrameSelector("#frame1",
new IFrameSelector("#frame2", "#selector1"))));Finalmente, é possível definir múltiplos escopos dentro de uma página assim como dentro de um IFrame. Para isso, é necessário um objeto seletor de elemento.
assertThat(axedriver, isAxeClean().within(
new ElementSelector("#selector1"),
new ElementSelector("#selector2"),
new IFrameSelector("#frame", "selector3")));Seleção de Regras
A API também oferece a capacidade de modificar quais regras são usadas em um escaneamento. Existem três maneiras de modificar quais regras são usadas. Estas são verificar regras adicionais fora do conjunto de regras padrão para o escaneamento, não verificar regras dentro do conjunto de regras padrão para o escaneamento, e verificar apenas as regras explicitamente especificadas.
Para uma lista completa das tags de regras válidas que você pode usar com esses métodos e o que elas testam, leia a documentação sobre regras
Para verificar regras adicionais, use o método checking. Para testar uma única regra adicional, basta passar o rótulo da regra para o método checking
assertThat(axedriver, isAxeClean().checking("label"));Semelhante aos outros métodos de cadeia, múltiplas regras adicionais podem ser verificadas com o método checking de duas maneiras:
assertThat(axedriver, isAxeClean().checking("label", "tabindex"));
assertThat(axedriver, isAxeClean().checking("label").checking("tabindex"));O método checking também pode ser encadeado com um método de seleção de regra.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").checking("tabindex"));Também existe a opção de omitir regras de um escaneamento. Isso é possível através do método skipping. Ele funciona de forma idêntica ao método checking, exceto que ele exclui regras em vez de adicioná-las.
assertThat(axedriver, isAxeClean().skipping("label"));Ele também pode ser usado para omitir múltiplas regras.
assertThat(axedriver, isAxeClean().skipping("label", "tabindex"));
assertThat(axedriver, isAxeClean().skipping("label").skipping("tabindex));Finalmente, ele também pode ser usado com um método de seleção de regra.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").skipping("#label"));O último método é usado quando apenas regras específicas são desejadas. O método checking only modifica o escaneamento para verificar apenas as regras explicitamente passadas para ele. Além disso, este método não será encadeado com o método de seleção de padrões de acessibilidade. Para verificar apenas uma única regra:
assertThat(axedriver, isAxeClean().checkingOnly("label"));Este método também pode ser usado para verificar múltiplas regras de duas maneiras.
assertThat(axedriver, isAxeClean().checkingOnly("label", "tabindex"));
assertThat(axedriver, isAxeClean().checkingOnly("label").checkingOnly("tabindex"));Para uma lista completa das tags de regras válidas que você pode usar com esses métodos e o que elas testam, leia a documentação sobre regras.
Ignorando Violações
É possível configurar o escaneamento para ignorar instâncias específicas de violações. Para fazer isso, usa-se o método ignoring. Ele funciona passando o(s) seletor(es) do(s) elemento(s) que se deseja ignorar como um array, juntamente com a regra que eles violam.
assertThat(axedriver, isAxeClean().ignoring("[\".sidebar\", \"#branded-content\"]", "color-contrast"));Serviço de Uso
Obtenha informações sobre as tendências de uso do Axe DevTools dentro da sua organização
Por padrão, o serviço de uso está desativado e a URL padrão é https://usage.deque.com.
Variáveis de Ambiente
Essas variáveis de ambiente permitem configurar o serviço de uso e alterar as propriedades dos eventos relatados.
| Nome | Tipo | Pode Sobrescrever | Descrição |
|---|---|---|---|
AXE_DISTINCT_ID |
String | — | Um identificador UUID que permanece o mesmo para o usuário logado (a menos que seja regenerado) |
AXE_METRICS_URL |
String | — | A URL do endpoint de uso REST |
AXE_TRACK_USAGE |
Boolean | — | Ativa o relatório de serviço de uso (padrão é false) |
AXE_APPLICATION |
String | false | O aplicativo que foi utilizado para verificar erros de acessibilidade |
AXE_DEV_INSTANCE |
Boolean | true | Indica se este evento é resultante das ações de um desenvolvedor de software. Útil para marcar e posteriormente remover eventos registrados durante o desenvolvimento ou teste. |
AXE_DEPARTMENT |
String | true | O departamento do usuário dentro da organização |
AXE_KEYCLOAK_ID |
String | false | O ID Keycloak do usuário |
AXE_LOGGED_IN |
Boolean | false | Registra se o usuário está logado na aplicação em teste |
AXE_ORGANIZATION |
String | true | A organização do usuário |
AXE_SESSION_ID |
String | false | Um UUID identificando a sessão do usuário |
AXE_USER_ID |
String | false | A identidade específica de usuário, como nome ou ID de login |
AXE_USER_JOB_ROLE |
String | false | O cargo do usuário |
AXE_USER_STATUS |
String | false | Informações de status que você deseja associar ao usuário |
Próximas Etapas
Para mais informações sobre como usar os resultados de suas análises Axe DevTools, como relatórios, consulte a documentação do pacote Axe DevTools Java Selenium
Solução de Problemas
Se você enfrentar problemas para configurar seus testes de acessibilidade, entre em contato diretamente com seu representante Deque, acesse nossa central de suporte, ou envie-nos um email. Estamos felizes em ajudar a impulsionar seus esforços de testes de acessibilidade.
