Regras Personalizadas
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
- 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
) {
}- 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)
}- Por fim, especificaremos na função
runRuleo que estamos testando para determinar se a regra foi bem-sucedida ou falhou. Para coletar propriedades dos valores analisados, use o método auxiliar:propCollectorno 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")
}
}