Reglas personalizadas
La función de reglas personalizadas le permite crear nuevas reglas para probar y cambiar comportamientos clave dentro de las reglas existentes.
Creemos una regla personalizada que compruebe la propiedad 'nombre' de una vista. Los criterios de resultado serán los siguientes:
- Fallo: el nombre está vacío.
- Éxito: el nombre tiene cierta longitud.
Creación de la regla
-
Crear un nuevo objeto de clase que herede de
AxeRule. Puede configurar la configuración de reglas dentro del inicializador para especificar lo siguiente:- ¿Contra qué estándar estás haciendo la prueba?
- La categoría de la regla
- Los criterios de éxito
- El impacto
- Un resumen de la regla
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 ) { } -
Determine si la regla se aplica a la vista asegurándose de que el texto visible no sea nulo.
override fun isApplicable(axeView: AxeView): Boolean { val visibleText = axeView.text return visibleText != null && super.isApplicable(axeView) } -
Por último, especificaremos en la fun
runRuleción qué estamos probando para determinar si la regla tuvo éxito o falló. Para recopilar propiedades de los valores analizados, utilice el método auxiliar:propCollectoren el ejemplo siguiente.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") }
Agregar a Axe DevTools
Una vez que la regla personalizada esté lista, agréguela a la lista de reglas del objeto axe DevTools inicializado y establezca las configuraciones antes de ejecutar cualquier prueba.
val axe = AxeDevTools()
init {
axe.addCustomRule(CustomVisibleTextRule::class.java)
} Ejemplo completo de regla personalizada
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")
}
}