Règles personnalisées

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

La fonctionnalité de règles personnalisées vous permet de créer de nouvelles règles à tester et de modifier les comportements clés au sein des règles existantes.

Créons une règle personnalisée qui recherche la propriété de nom d’une vue. Les critères de résultat seront les suivants :

  • Non applicable : le nom est nul
  • Échec : le nom n'est pas nul mais est vide
  • Succès : le nom n'est pas nul et a une certaine longueur

Création de la règle

  1. Configurer un nouvel objet de classe qui hérite de AxeRule. Dans l'initialiseur, vous pouvez configurer la règle pour spécifier les éléments suivants :

    • La norme contre laquelle vous testez
    • L'impact
    • Un résumé de la règle
    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. Ensuite, vous devrez collecter les propriétés de la vue à tester. Pour notre exemple, nous devons accéder à la propriété name.

   override func collectProps(for node: AxeView) -> AxeProps {
        let axeProps = AxeProps()
        axeProps.add([
            .name: node.name
        ])

        return axeProps
   }
  1. Enfin, nous spécifierons dans la fonction ce que nous testons, pour déterminer si la règle a réussi, échoué ou est considérée comme inapplicable. runRule
    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
        }
    }

Ajouter à Axe DevTools

Une fois que vous avez écrit la logique de votre règle personnalisée, ajoutez-la à la liste des règles connues par axe DevTools en ajustant la configuration. Vous devez définir les configurations avant l’exécution de tout test et après l’authentification.

axe?.configuration.customRules.insert(CustomRule())

Exemple complet

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
        }
    }
}