Referencia de la API de JavaScript del navegador para axe DevTools for Web
Se analizan las API de JavaScript del navegador para axe DevTools for Web y su uso.
Introducción
La API de axe DevTools está diseñada para ser una mejora con respecto a la generación anterior de API de accesibilidad. Proporciona los siguientes beneficios:
- Funciona en cualquier navegador moderno
- Diseñado para funcionar con la infraestructura de pruebas existente
- Se ejecuta localmente; no es necesaria conexión a un servidor de terceros
- Realiza comprobaciones de violaciones en múltiples niveles de iframes anidados
- Proporciona una lista de reglas y elementos que pasaron la verificación de accesibilidad, lo que garantiza que las reglas se hayan ejecutado en todo el documento.
Comenzando
Esta sección describe brevemente cómo utilizar las API de DevTools de axe para analizar el contenido de la página web y devolver un objeto JSON que enumera todas las violaciones de accesibilidad encontradas.
La API de DevTools de axe se puede utilizar como parte de un proceso más amplio que se realiza en muchas, si no en todas, las páginas de un sitio web. La API analiza el contenido de la página web y devuelve un objeto JSON que enumera todas las violaciones de accesibilidad encontradas. Aquí te explicamos cómo empezar:
- Cargar página en el sistema de pruebas
- Opcionalmente, establezca las opciones de configuración para la API de JavaScript (
AxeDevTools.configure
) - Llame a la API de JavaScript 'analyze' (
AxeDevTools.run
) - O bien haga afirmaciones contra los resultados o guárdelos para su procesamiento posterior
Referencia de la API
Visión general
Las API de axe DevTools se proporcionan en el archivo JavaScript axe-devtools.js
. Debe estar incluido en la página web bajo prueba. Los parámetros se envían como parámetros de función de JavaScript. Los resultados se devuelven en formato JSON.
Notas de la API
- Una prueba de reglas se compone de subpruebas. Cada subprueba se devuelve en un array de 'verificaciones'
- El
"helpUrl"
en el objeto de resultados lleva a una descripción más amplia del problema de accesibilidad y a una solución sugerida. Todos los enlaces apuntan a las páginas de ayuda de la Universidad Deque.
AxeDevTools.init
Esta API no está disponible a través de ninguna de las vinculaciones específicas del lenguaje, como @axe-devtools/script-builder, ya que esas vinculaciones tienen sus propias API para lograr lo mismo.
Propósito
Inicialice la API de axe DevTools para utilizar uno de los conjuntos de reglas estándar integrados.
Descripción
Inicializa el motor axe DevTools, anulando el conjunto de reglas predeterminado y habilitando uno de los subconjuntos de reglas estándar.
Debes utilizar AxeDevTools.configure
o AxeDevTools.init
, pero no ambos, ya que se sobrescribirán entre sí.
Sinopsis
AxeDevTools.init(ruleSetID);
Parámetros
-
ruleSetID
- opcional Cadena que identifica el conjunto de reglas. Los valores válidos actuales son:- 508
- en301549
- ttv5
- wcag2
- wcag21
- wcag22
- wcag2aaa
- wcag21aaa
- wcag22aaa
Devuelve: undefined
AxeDevTools.ruleSets
Esta API no está disponible a través de ninguno de los enlaces específicos del lenguaje, como @axe-devtools/script-builder, ya que esos enlaces tienen sus propias API para lograr lo mismo.
Propósito
Un arreglo de definiciones de conjuntos de reglas estándar
Descripción
Proporciona acceso directo al arreglo de definición del conjunto de reglas estándar. El arreglo consta de objetos JavaScript con la siguiente estructura:
{
id: String identifier for the rule set,
defn: Object containing the rule set definition
}
Ejemplo Uno
Cómo filtrar el array para encontrar la definición del conjunto de reglas WCAG 2 nivel A y AA.
var rsets = AxeDevTools.ruleSets;
var wcag2 = rsets.filter(function (item) {
return item.id === 'wcag2';
})[0].defn;
AxeDevTools.getRules
Propósito
Para obtener información sobre todas las reglas del sistema.
Descripción
Devuelve una lista de todas las reglas con su ID y descripción.
Sinopsis
AxeDevTools.getRules([Tag Name 1, Tag Name 2...]);
Parámetros
tags
- opcional Array de etiquetas utilizadas para filtrar las reglas devueltas. Si se omite, devolverá todas las reglas.
Devuelve: Array de reglas que coinciden con el filtro de entrada y cada entrada tiene un formato de {ruleId: <id>, description: <desc>}
El conjunto actual de etiquetas admitidas se enumera en la siguiente tabla:
Nombre de la etiqueta | Norma de accesibilidad |
---|---|
wcag2a | WCAG 2.0 Nivel A |
wcag2aa | WCAG 2.0 Nivel AA |
wcag2aaa | WCAG 2.0 Nivel AAA |
wcag21a | WCAG 2.1 Nivel A |
wcag21aa | WCAG 2.1 Nivel AA |
wcag21aaa | WCAG 2.1 Nivel AAA |
wcag22a | WCAG 2.2 Nivel A |
wcag22aa | WCAG 2.2 Nivel AA |
wcag22aaa | WCAG 2.2 Nivel AAA |
section508 | Sección 508 |
EN-301-549 | EN 301 549 |
TTv5 | Trusted Tester v5 |
best-practice | Mejores prácticas avaladas por Deque |
Ejemplo 1
En este ejemplo, introducimos las etiquetas WCAG 2 A y AA a AxeDevTools.getRules
para recuperar solo esas reglas. La llamada de función devuelve un array de reglas.
Llamar: AxeDevTools.getRules(['wcag2aa', 'wcag2a']);
Datos devueltos:
[
{ ruleId: "area-alt", description: "Checks the <area> elements of image…" },
{ ruleId: "aria-allowed-attr", description: "Checks all attributes that start…" },
{ ruleId: "aria-required-attr", description: "Checks all elements that contain…" },
…
]
AxeDevTools.configure
Propósito
Para configurar el formato de los datos utilizados por axe DevTools. Esto se puede usar para agregar nuevas reglas, que deben registrarse en la biblioteca para ejecutarse.
Descripción
El usuario especifica el formato de la estructura JSON pasada al callback AxeDevTools.run
.
Sinopsis
AxeDevTools.configure({
branding: {
brand: String,
application: String
},
reporter: 'option',
checks: [Object],
rules: [Object]
});
Parámetros
configurationOptions
- Objeto de opciones donde los pares nombre/valor válidos son:branding
- de tipo mixto (opcional) Se utiliza para establecer la marca delhelpUrls
.brand
- string (opcional) establece la cadena de marca--predeterminado: "worldspace"application
- cadena (opcional) establece la cadena de la aplicación—predeterminado: "AxeDevToolsAPI"
reporter
- Se utiliza para establecer el formato de salida que pasará la funciónAxeDevTools.run
a la función de devolución de llamadav1
para utilizar el formato de la versión anterior:AxeDevTools.configure({ reporter: "v1" });
v2
para utilizar el formato de la versión actual:AxeDevTools.configure({ reporter: "v2" });
checks
- Se utiliza para agregar verificaciones a la lista de verificaciones utilizadas por las reglas o para anular las propiedades de las verificaciones existentes.- El atributo checks es una matriz de objetos de verificación.
- Cada objeto de verificación puede contener los siguientes atributos:
id
- cadena (obligatoria). Esto identifica de forma única la verificación. Si la verificación ya existe, se anularán todas las propiedades de verificación suministradas. Las propiedades a continuación marcadas como requeridas si es nuevo son opcionales cuando se anula la verificación.
evaluate
- (requerida si es nueva). Esta es la función que implementa la funcionalidad de la validación. -Funciónafter
- (opcional). Esta función se llama para las validaciones que operan a nivel de página para procesar los resultados de los iframes.options
- mixto (opcional). Esteoptions
objeto se pasa a laevaluate
función y está destinado a ser utilizado para configurar comprobaciones. Es la propiedad más común que se pretende anular en las comprobaciones existentes.matches
- cadena (opcional). Esta cadena de selector CSS filtrará los nodos pasados a laevaluate
función.enabled
- booleano (opcional, predeterminadotrue
). Esto indica si la verificación está activada o desactivada de forma predeterminada. No se evalúan las comprobaciones desactivadas, incluso cuando se incluyen en una regla. Sobrescribir esto es una forma común de deshabilitar una verificación particular en múltiples reglas.
rules
- Se utiliza para agregar reglas al conjunto de reglas existente o anular las propiedades de las reglas existentes. El atributorules
es una matriz derule
objetos. Cadarule
objeto puede contener los siguientes atributos:id
- cadena (obligatoria). Esto identifica la regla de forma única. Si la regla ya existe, se sobrescribirá con cualquier atributo suministrado. Los atributos a continuación que están marcados como obligatorios solo son necesarios para las reglas nuevas.selector
- cadena (opcional, predeterminada*
). Un selector CSS utilizado para identificar los elementos pasados a la regla para su evaluación.excludeHidden
- booleano (opcional, predeterminadotrue
). Esto indica si los elementos ocultos deben pasarse a la regla para su evaluación.enabled
- booleano (opcional, predeterminadotrue
). Si la regla está activada (un atributo común para sobrescribir).pageLevel
- booleano (opcional, predeterminadofalse
). Esto indica si la página funciona solo cuando el alcance es la página completa. Un ejemplo de una regla como esta es la regla de salto de enlace . No se recomienda anular esta propiedad a menos que también se cambie la implementación.any
- array (opcional, predeterminado[]
). Esta es la lista de verificaciones que todos deben pasar o habrá una violación.all
- array (opcional, por defecto[]
). Esta es la lista de comprobaciones que, si alguna falla, generarán una violación.none
- array (opcional, por defecto[]
). Esta es una lista de las comprobaciones que, si ninguna pasa, generarán una violación.tags
- array (opcional, por defecto[]
). Una lista de las etiquetas que clasifican la regla. En la práctica, debe proporcionar algunas etiquetas válidas o la evaluación predeterminada no invocará la regla. La convención es incluir el estándar (WCAG 2 y/o sección 508), el nivel WCAG 2, el párrafo de la Sección 508 y los criterios de éxito WCAG 2. Las etiquetas se construyen convirtiendo todas las letras a minúsculas, eliminando espacios y puntos, y concatenando el resultado. Por ejemplo, el criterio de éxito 1.1.1 de WCAG 2 A se convertiría en ["wcag2a", "wcag111"]matches
- cadena (opcional, predeterminada*
). Un selector CSS que excluirá los elementos que no coincidan con él.
Devuelve: Nada
AxeDevTools.reset
Propósito
Restablecer la configuración a la configuración predeterminada.
Descripción
Sobrescriba cualquier llamada anterior a AxeDevTools.configure
o AxeDevTools.reset
y restablezca la configuración a la configuración predeterminada.
Esto no anulará el registro de ninguna regla o comprobación nueva que se haya registrado, pero restablecerá la configuración a la configuración predeterminada para todo lo demás.
Sinopsis
AxeDevTools.reset();
Parámetros
Ninguno
Devuelve: undefined
AxeDevTools.run
Propósito
Analizar la página cargada actualmente.
Descripción
Ejecuta varias reglas en la página HTML proporcionada y devuelve la lista de problemas resultante.
Sinopsis
AxeDevTools.run(context, options, callback);
Parámetros para AxeDevTools.run
context
: (opcional) Define el alcance del análisis: la parte del DOM que desea analizar. Normalmente será eldocument
o un selector específico como el nombre de la clase, ID, selector, etc.options
: (opcional) Conjunto de opciones pasadas a reglas o comprobaciones, modificándolas temporalmente. Esto contrasta conAxeDevTools.configure
, que es más permanente. Ver arriba para más informacióncallback
: (opcional) La función de devolución de llamada que recibe ya seanull
un resultado de error como primer parámetro, y el objeto de resultados cuando el análisis se completó correctamente oundefined
si no se completó.
context
Parámetro
De forma predeterminada, AxeDevTools.run
probará todo el documento. El objeto context
es un parámetro opcional que especifica qué elemento se debe probar y cuál no. Se puede pasar una de las siguientes:
- Una referencia de elemento que representa la parte del documento que debe analizarse
- Ejemplo: Para limitar el análisis al elemento
<div id="content">
:document.getElementById("content")
- Ejemplo: Para limitar el análisis al elemento
- Una lista de nodos como la devuelta por
document.querySelectorAll
. - Un selector CSS que selecciona la parte del documento que debe analizarse. Esto incluye:
- Un selector CSS como nombre de clase (por ejemplo,
.classname
) - Un selector CSS como nombre de nodo (por ejemplo,
div
) - Un selector CSS de un identificador de elemento (por ejemplo,
#tag
)
- Un selector CSS como nombre de clase (por ejemplo,
- Un objeto de inclusión-exclusión (ver más abajo)
include
y objetos exclude
El objeto de inclusión-exclusión es un objeto JSON con dos atributos: include
y exclude
. Se requiere either include
o exclude
. Si solo se especifica exclude
, include
se establecerá por defecto a todo el document
.
- Un nodo, o
- Una matriz de matrices de selectores CSS
En la mayoría de los casos, las matrices contendrán solo un selector CSS. Solo se requieren varios selectores CSS si desea incluir o excluir regiones de una página que estén dentro de iframes (o iframes dentro de iframes dentro de iframes). En este caso, los primeros n-1 selectores seleccionan los iframes y el selector n-ésimo selecciona las regiones dentro de los iframes.
context
Ejemplos de parámetros
-
Incluir el primer elemento en la NodeList pero excluir su primer hijo
$fixture
{ include: $fixture[0], exclude: $fixture[0].firstChild }
-
Incluir el elemento con el ID de
fix
pero excluir cualquierdiv
dentro de él{ include: [['#fix']], exclude: [['#fix div']] }
-
Incluya todo el documento excepto cualquier estructura cuyo padre contenga la clase
exclude1
oexclude2
{ exclude: [['.exclude1'], ['.exclude2']]; }
options
Parámetro
El parámetro options
es una forma flexible de configurar cómo funciona AxeDevTools.run
. Los diferentes modos de funcionamiento son:
- Ejecutar todas las reglas correspondientes a uno de los estándares de accesibilidad.
- Ejecutar todas las reglas definidas en el sistema excepto la lista de reglas especificada.
- Ejecutar un conjunto específico de reglas proporcionadas como una lista de identificadores de reglas.
options
Ejemplos de parámetros
-
Ejecutar solo reglas para un estándar de accesibilidad
Existen ciertos estándares definidos que pueden utilizarse para seleccionar un conjunto de reglas. Los estándares y la cadena de etiquetas se definen de la siguiente manera:
Nombre de la etiqueta Norma de accesibilidad wcag2a WCAG 2.0 Nivel A wcag2aa WCAG 2.0 Nivel AA wcag2aaa WCAG 2.0 Nivel AAA wcag21a WCAG 2.1 Nivel A wcag21aa WCAG 2.1 Nivel AA wcag21aaa WCAG 2.1 Nivel AAA wcag22a WCAG 2.2 Nivel A wcag22aa WCAG 2.2 Nivel AA wcag22aaa WCAG 2.2 Nivel AAA section508 Sección 508 EN-301-549 EN 301 549 TTv5 Trusted Tester v5 best-practice Mejores prácticas avaladas por Deque Para ejecutar solo reglas WCAG 2.0 Nivel A, especifique como:
options
{ runOnly: { type: "tag", values: ["wcag2a"] } }
Para ejecutar las reglas WCAG 2.0 Nivel A y Nivel AA, debe especificar tanto
wcag2a
comowcag2aa
:{ runOnly: { type: "tag", values: ["wcag2a", "wcag2aa"] } }
-
Ejecutar solo una lista específica de reglas
Si solo desea ejecutar determinadas reglas, especifique opciones como:
{ runOnly: { type: "rule", values: [ "ruleId1", "ruleId2", "ruleId3" ] } }
Este ejemplo solo ejecutará las reglas con el id de
ruleId1
,ruleId2
yruleId3
. No se aplicará ninguna otra regla. -
Ejecutar todas las reglas habilitadas excepto una lista de reglas
La operación predeterminada para
AxeDevTools.run
es ejecutar todas las reglas WCAG 2.0 Nivel A y Nivel AA. Si se debe deshabilitar la ejecución de ciertas reglas, especifíquelooptions
de la siguiente manera:{ "rules": { "color-contrast": { enabled: false }, "valid-lang": { enabled: false } } }
Este ejemplo deshabilitará las reglas con el ID
color-contrast
ovalid-lang
. Todas las demás reglas se ejecutarán. La lista de ID de reglas válidas se especifica en la sección siguiente. -
Ejecutar un conjunto modificado de reglas utilizando etiquetas y activación de reglas
Se puede definir un conjunto modificado combinando
runOnly
contype
establecido en las etiquetas deseadas y usando la opciónrules
. Esto le permite incluir reglas con etiquetas no especificadas y excluir reglas con la etiqueta o etiquetas especificadas.{ runOnly: { type: "tag", values: ["wcag2a"] }, "rules": { "color-contrast": { enabled: true }, "valid-lang": { enabled: false } } }
Este ejemplo incluye todas las reglas de nivel A excepto
valid-lang
, y también incluirá la regla de contraste de color de nivel AA. -
Ejecutar sólo algunas reglas, pero excluir otras
La opción
runOnly
puede aceptar un objeto con propiedadinclude
yexclude
. Solo se ejecutarán aquellas comprobaciones que coincidan con una etiqueta incluida, excepto aquellas que compartan una etiqueta de la lista de exclusión.{ runOnly: { type: 'tags', value: { include: ['wcag2a', 'wcag2aa'], exclude: ['experimental'] } } }
Este ejemplo incluye primero reglas
wcag2a
ywcag2aa
. Luego, todas las reglas etiquetadas comoexperimental
se eliminan de las reglas a ejecutar.
callback
Parámetro
El parámetro callback
es una función que se llamará cuando se complete la función AxeDevTools.run
asíncrona. A la función callback
se le pasan dos parámetros. El primer parámetro será un error generado dentro de Axe DevTools si AxeDevTools.run
no se puede completar. Si axe DevTools se completó correctamente, el primer parámetro será nulo y el segundo parámetro será el objeto de resultados.
Devolver Promesa
Si no se definió el callback, axe DevTools devolverá una promesa en su lugar. Sin embargo, axe DevTools no polyfill la biblioteca de promesas. Por lo tanto, en sistemas sin soporte para promesas, esta función no está disponible. Si no está seguro de si los sistemas en los que necesitará axe DevTools tienen soporte para promesas, le sugerimos que utilice el callback proporcionado por AxeDevTools.run
en su lugar.
error
Resultado
Esto será null
o un objeto que es una instancia de Error
. Si recibe errores constantemente, informe este problema a Deque Systems.
results
Objeto
La función de devolución de llamada pasada como tercer parámetro de AxeDevTools.a11yCheck
se ejecuta en el objeto results
. Este objeto tiene dos componentes: una matriz passes
y una matriz violations
. La passes
matriz realiza un seguimiento de todas las pruebas aprobadas e información detallada sobre cada prueba. Esto conduce a pruebas más eficientes, especialmente con pruebas manuales, ya que el usuario puede determinar fácilmente las pruebas ya aprobadas. De manera similar, la violations
matriz mantiene un registro de todas las pruebas fallidas e información detallada sobre cada una de ellas.
url
La URL de la página que se probó.
timestamp
La fecha y hora en que se completó el análisis.
passes
y violations
matriz
description
- Una cadena de texto que describe lo que hace la reglahelp
- Texto de ayuda que describe la prueba que se realizóhelpUrl
- Una URL que proporciona más información sobre los detalles de la violación. Enlaces a una página en el sitio de la Universidad Deque.id
- Un identificador único para la regla; ver la lista de reglasimpact
- La gravedad de la infracción. Puede ser menor, moderado, grave o crítico si la regla falló onull
si la comprobación fue exitosa.tags
- Un array de etiquetas asignadas a esta regla. Las etiquetas se pueden usaroption
en el objeto para seleccionar qué reglas se ejecutan (consulte Parámetro de opciones arriba).nodes
- Un array de todos los elementos que la regla probóhtml
- Un fragmento de HTML del elementoimpact
- La gravedad de la infracción. Puede ser menor, moderado, grave o crítico si la prueba falló onull
si la comprobación pasó.target
- Una matriz de selectores donde cada elemento corresponde a un nivel de iframe o marco. Si hay un iframe o marco, debe haber dos entradas entarget
. Si hay tres niveles de iframe, debería haber cuatro entradas entarget
.any
- Una serie de validaciones donde al menos una debe haber sido aprobada. Cada entrada del Array contiene:id
- Identificador único para esta comprobación. Los identificadores de validación pueden ser los mismos que los identificadores de reglas.impact
- La gravedad de la validación. Puede ser menor, moderado, grave o crítico. Cada verificación que forma parte de una regla puede tener diferentes impactos. Para la regla, se informa el mayor impacto de todas las comprobaciones que fallan.message
- La descripción de por qué esta verificación se aprobó o falló.data
- Información adicional y opcional específica del tipo de verificación. Por ejemplo, una verificación de contraste de color incluiría el color de primer plano, el color de fondo, la relación de contraste, etc.relatedNodes
- Una matriz opcional de información sobre otros nodos relacionados con esta comprobación. Por ejemplo, una violación de verificación de identificación duplicada enumeraría los otros selectores con la misma identificación duplicada. Cada entrada de la matriz contiene la siguiente información:target
- Un arreglo de selectores para el nodo relacionadohtml
- La fuente HTML del nodo relacionado
all
- Un arreglo de comprobaciones realizadas donde todas deben haber sido aprobadas. Cada entrada en el arreglo contiene la misma información que elany
arreglo.none
- Un arreglo de comprobaciones realizadas donde todas deben no haber sido aprobadas. Cada entrada en el arreglo contiene la misma información que elany
arreglo.
Ejemplo Dos
En este ejemplo, pasaremos el selector del documento completo, no proporcionaremos opciones, lo que significa que se ejecutarán todas las reglas activadas, y tendremos una función de callback simple que registra el objeto completo de resultados en el log de la consola:
AxeDevTools.run(document, function (err, results) {
if (err) throw err;
console.log(results);
});
passes
array
-
passes[0]
...help
-"Elements must have sufficient color contrast"
helpURL
-"https://dequeuniversity.com/courses/html-css/visual-layout/color-contrast"
id
-"color-contrast"
nodes
target[0]
-"#js_off-canvas-wrap > .inner-wrap >.kinja-title.proxima.js_kinja-title-desktop"
-
passes[1]
...
En el ejemplo anterior, la passes
matriz contiene dos entradas correspondientes a las dos reglas probadas. El primer elemento de la matriz describe una verificación de contraste de color. Los campos help
, helpUrl
y id
se devuelven para cada entrada en la matriz passes
. La matriz target
tiene un elemento con un valor de:
#js_off-canvas-wrap > .inner-wrap >.kinja-title.proxima.js_kinja-title-desktop
El elemento seleccionado por target[0]
fue verificado en cuanto a la regla de contraste de color y pasó.
Cada entrada subsiguiente en la matriz de pases tiene el mismo formato pero detallará las diferentes reglas que se ejecutaron.
violations
array
-
violations[0]
help
-"<button> elements must have alternate text"
helpURL
-"https://dequeuniversity.com/courses/html-css/forms/form-labels#id84_example_button"
id
-"button-name"
nodes
target[0]
"post_5919997 > .row.content-wrapper > .column > span > iframe"
*target[1]
"#u_0_1 > .pluginConnectButton > .pluginButtonImage > button"
-
violations[1]
...
La matriz violations
contiene una entrada para una prueba que verifica si los botones tienen texto alternativo válido (la norma button-name
). Esta primera entrada en la matriz tiene los campos help
, helpUrl
y id
.
La matriz target
demuestra cómo especificamos los selectores cuando el nodo especificado está dentro de un iframe
o frame
. El primer elemento de la matriz target
(target[0]
) especifica el selector para el iframe
que contiene el botón. El segundo elemento de la matriz target
(target[1]
) especifica el selector del botón real, pero comienza desde dentro del iframe seleccionado en target[0]
.
Cada entrada subsiguiente en la matriz de violaciones tiene el mismo formato pero detallará las reglas que generaron violaciones de accesibilidad.
Ejemplo Tres
En este ejemplo, pasamos el selector para todo el documento, habilitamos dos reglas de mejores prácticas adicionales y tenemos una función de devolución de llamada simple que registra todo el objeto de resultados en el registro de la consola:
AxeDevTools.run(
document,
{
rules: {
'heading-order': { enabled: true },
'label-title-only': { enabled: true }
}
},
function (err, results) {
if (err) throw err;
console.log(results);
}
);