Regole personalizzate

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 funzionalità delle regole personalizzate consente di creare nuove regole da testare e di modificare i comportamenti chiave all'interno delle regole esistenti.

Creiamo una regola personalizzata che controlla la proprietà nome di una vista. I criteri di risultato saranno i seguenti:

  • Errore: il nome è vuoto.
  • Riuscito: il nome ha una certa lunghezza.

Creazione della regola

  1. Imposta un nuovo oggetto di classe che eredita da AxeRule.

È possibile impostare la configurazione della regola all'interno dell'inizializzatore per specificare quanto segue:

  • Con quale standard stai effettuando il test
  • La categoria della regola
  • I criteri di successo
  • L'impatto
  • Un riassunto della regola
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. Determina se la regola si applica alla vista assicurandoti che il testo visibile non sia nullo.
override fun isApplicable(axeView: AxeView): Boolean {
    val visibleText = axeView.text
    return visibleText != null && super.isApplicable(axeView)
}
  1. Infine, specificheremo nella runRule funzione su cosa stiamo eseguendo il test per determinare se la regola ha avuto successo o meno. Per raccogliere le proprietà dei valori analizzati, utilizzare il metodo helper: propCollector nell'esempio seguente.
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")
}

Aggiungi a axe DevTools

Una volta pronta la regola personalizzata, aggiungila all'elenco delle regole dell'oggetto axe DevTools inizializzato e imposta le configurazioni prima di eseguire qualsiasi test.

val axe = AxeDevTools()

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

Esempio di regola personalizzata completa

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