Regole personalizzate
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
- 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
) {
}
- 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)
}
- 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")
}
}