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 :

  • Échec : le nom est vide.
  • Succès : le nom n'est pas vide.

Création de la règle

  1. Créer un nouvel objet de classe qui hérite de AxeRule.

Vous pouvez configurer la règle dans l'initialiseur pour spécifier les éléments suivants :

  • À quelle norme faites-vous vos tests ?
  • La catégorie de la règle
  • Les critères de réussite
  • L'impact
  • Un résumé de la règle
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. Déterminez si la règle s'applique à la vue en vous assurant que le texte visible n'est pas nul.
override fun isApplicable(axeView: AxeView): Boolean {
    val visibleText = axeView.text
    return visibleText != null && super.isApplicable(axeView)
}
  1. Enfin, nous spécifierons dans la runRule fonction ce que nous testons pour déterminer si la règle a réussi ou échoué. Pour collecter les propriétés des valeurs analysées, utilisez la méthode d'assistance : propCollector dans l'exemple ci-dessous.
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")
}

Ajouter à Axe DevTools

Une fois la règle personnalisée prête, ajoutez-la à la liste des règles de l'objet axe DevTools initialisé et définissez les configurations avant l'exécution de tout test.

val axe = AxeDevTools()

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

Exemple complet de règle personnalisée

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