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 que você crie 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:

  • 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

  1. 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)
        }
    }
  2. 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
   }
  1. Por fim, vamos especificar na função runRule o que estamos testando, para determinar se a regra teve sucesso, 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 conhecidas pelo axe DevTools ajustando a configuração. Você deve definir as configurações antes de qualquer teste ser 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
        }
    }
}