Regras Personalizadas

This page is not available in the language you requested. You have been redirected to the English version of the page.
Link to this page copied to clipboard
Not for use with personal data

O recurso de regras personalizadas permite criar novas regras para testar e alterar comportamentos chave dentro das regras existentes.

Vamos criar uma regra personalizada que verifica a propriedade de nome de uma visualização. Os critérios de resultado serão os seguintes:

  • Falha: o nome está vazio.
  • Sucesso: o nome tem algum comprimento.

Criando a Regra

  1. Configure um novo objeto de classe que herda de AxeRule. Você pode configurar a regra dentro do inicializador para especificar o seguinte:
  • Qual padrão você está testando
  • A categoria da regra
  • Os critérios de sucesso
  • O impacto
  • Um resumo da regra
class CustomVisibleTextRule : AxeRule(
    AxeWcagStandard.WCAG_2A.text,
    AxeCategory.STRUCTURE.text,
    AxeSuccessCriteria.WCAG_132.text,
    AxeImpact.MINOR.value,
    "Ensure AT and non-AT users have the same experience of understanding labels",
    false
) {
    
}
  1. Determine se a regra se aplica à visualização garantindo que o texto visível não seja nulo.
override fun isApplicable(axeView: AxeView): Boolean {
    val visibleText = axeView.text
    return visibleText != null && super.isApplicable(axeView)
}
  1. Por fim, especificaremos na função runRule o que estamos testando para determinar se a regra foi bem-sucedida ou falhou. Para coletar propriedades dos valores analisados, use o método auxiliar: propCollector no exemplo abaixo.
override fun runRule(axeView: AxeView): RunRuleResult {
    val runRuleResult = super.runRule(axeView)
    if (runRuleResult.status.isNotEmpty()) {
        return runRuleResult
    }

    val visibleText = propCollector(Visible Text, axeView.test)

    visibleText?.let {
        return when (it.isNotEmpty()) {
            true -> RunRuleResult(AxeStatus.PASS, "All visible texts are present")
            false -> RunRuleResult(AxeStatus.FAIL, "All visible texts are not present")
        }
    }

    return RunRuleResult(AxeStatus.INCOMPLETE, "Need review")
}

Adicionar ao axe DevTools

Uma vez que a regra personalizada esteja pronta, adicione-a à lista de regras do objeto axe DevTools inicializado e defina as configurações antes de executar os testes.

val axe = AxeDevTools()

init {
    axe.addCustomRule(CustomVisibleTextRule::class.java)
} 

Exemplo Completo de Regra Personalizada

class CustomVisibleTextRule: AxeRule(
    AxeWcagStandard.WCAG_2A.text,
    AxeCategory.STRUCTURE.text,
    AxeSuccessCriteria.WCAG_132.text,
    AxeImpact.MINOR.value,
    "Ensure AT and non-AT users have the same experience of understanding labels",
    false
) {
    override fun isApplicable(axeView: AxeView): Boolean {
        val visibleText = axeView.text
        return visibleText != null && super.isApplicable(axeView)
    }

    override fun runRule(axeView: AxeView): RunRuleResult {
        val runRuleResult = super.runRule(axeView)
        if (runRuleResult.status.isNotEmpty()) {
            return runRuleResult
        }

        val visibleText = propCollector(Visible Text, axeView.text)

        visibleText?.let {
            return when (it.isNotEmpty()) {
                true -> RunRuleResult(AxeStatus.PASS, "All visible texts are present")
                false -> RunRuleResult(AxeStatus.FAIL, "All visible texts are not present")
            }
        }

        return RunRuleResult(AxeStatus.INCOMPLETE, "Need review")
    }
}