Regras Personalizadas
O recurso de regras personalizadas permite que você crie novas regras para testar e alterar comportamentos chave dentro das regras existentes.
AxeConf.customRules está obsoleto antes de uma mudança de forma na versão de outubro de 2026. Esta API ainda funciona exatamente como antes, mas agora emite um aviso do compilador e uma notificação no log de execução. Quaisquer substituições serão anunciadas nas notas de versão de outubro de 2026.
Vamos criar uma regra personalizada que verifica a propriedade de nome de uma visualização. Os critérios de resultado serão os seguintes:
- Não aplicável: o nome é nulo
- Falha: o nome não é nulo, mas está vazio
- Sucesso: o nome não é nulo e tem algum comprimento
Criando a Regra
-
Configure um novo objeto de classe que herda de
AxeRule. Dentro do inicializador, você pode configurar a regra para especificar o seguinte:- Qual padrão você está testando
- O impacto
- Um resumo da regra
class CustomRule: AxeRule { public init() { let ruleConfiguration = RuleConf(standard: AxeStandard.BEST_PRACTICE, impact: AxeImpact.MODERATE, summary: "Asserts that when name is present it is not empty.") super.init(ruleConf: ruleConfiguration) } } -
Em seguida, você precisará coletar as propriedades da visualização para testar. No nosso exemplo, precisamos acessar a propriedade de nome.
override func collectProps(for node: AxeView) -> AxeProps {
let axeProps = AxeProps()
axeProps.add([
.name: node.name
])
return axeProps
}
- Por fim, especificaremos na função
runRuleo que estamos testando, para determinar se a regra foi bem-sucedida, falhou ou é considerada inaplicável.
override func runRule(_ props: AxeProps) throws -> AxeStatus {
guard let name = props.get(.name, withType: String.self) else { return .INAPPLICABLE }
if !name.isEmpty {
return AxeStatus.PASS
} else {
return AxeStatus.FAIL
}
}Adicionar ao Axe DevTools
Depois de escrever a lógica para sua regra personalizada, adicione-a à lista de regras que o Axe DevTools conhece ajustando a configuração. Você deve definir as configurações antes que qualquer teste seja executado e após a autenticação.
axe?.configuration.customRules.insert(CustomRule())Exemplo Completo
class CustomRule: AxeRule {
public init() {
let ruleConfiguration = RuleConf(standard: AxeStandard.BEST_PRACTICE,
impact: AxeImpact.MODERATE,
summary: "Asserts that when name is present it is not empty.")
super.init(ruleConf: ruleConfiguration)
}
override func collectProps(for node: AxeView) -> AxeProps {
let axeProps = AxeProps()
axeProps.add([
.name: node.name
])
return axeProps
}
override func runRule(_ props: AxeProps) throws -> AxeStatus {
guard let name = props.get(.name, withType: String.self) else { return .INAPPLICABLE }
if !name.isEmpty {
return AxeStatus.PASS
} else {
return AxeStatus.FAIL
}
}
}
