Reglas personalizadas
Not for use with personal data
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
runRule
ció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:propCollector
en 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")
}
}