Reglas personalizadas

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 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

  1. 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
) {
    
}
  1. 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)
}
  1. 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")
    }
}