Referencia de la API de JavaScript del Navegador para Axe DevTools para Web
Discute las APIs de JavaScript del Navegador para Axe DevTools para Web y su uso
Introducción
La API de Axe DevTools está diseñada para ser una mejora sobre la generación anterior de APIs de accesibilidad. Ofrece los siguientes beneficios:
- Funciona en cualquier navegador moderno
- Diseñada para trabajar con la infraestructura de pruebas existente
- Funciona localmente; no es necesaria una conexión a un servidor de terceros
- Realiza la verificación de violaciones en múltiples niveles de iframes anidados
- Proporciona una lista de reglas y elementos que pasaron la verificación de accesibilidad, asegurando que las reglas se han ejecutado en todo el documento
Comenzando
Esta sección describe brevemente cómo usar las APIs de Axe DevTools para analizar el contenido de páginas web y devolver un objeto JSON que lista cualquier violación de accesibilidad encontrada.
La API de Axe DevTools se puede utilizar como parte de un proceso más amplio que se realiza en muchas, si no todas, las páginas de un sitio web. La API analiza el contenido de las páginas web y devuelve un objeto JSON que lista cualquier violación de accesibilidad encontrada. Aquí está cómo empezar:
- Cargar la página en el sistema de pruebas
- Opcionalmente, configurar las opciones de la API de JavaScript (
AxeDevTools.configure) - Llamar a la API de JavaScript para análisis (
AxeDevTools.run) - Ya sea asegurar los resultados o guardarlos para procesarlos más tarde
Referencia de la API
Visión general
Las APIs de Axe DevTools se proporcionan en el archivo JavaScript axe-devtools.js. Debe incluirse 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 regla se compone de sub-pruebas. Cada sub-prueba se devuelve en un array de 'verificaciones'
- El
"helpUrl"en el objeto de resultados enlaza con una descripción más amplia del problema de accesibilidad y la remediación sugerida. Todos los enlaces apuntan a las páginas de ayuda de Deque University.
AxeDevTools.init
Esta API no está disponible a través de ninguno de los enlaces específicos de lenguaje como @axe-devtools/script-builder, ya que esos enlaces tienen sus propias APIs para lograr lo mismo.
Propósito
Inicializa la API de Axe DevTools para utilizar uno de los conjuntos de reglas estándar integrados.
Descripción
Inicializa el motor de Axe DevTools, reemplazando el conjunto de reglas predeterminado y habilitando uno de los subconjuntos de reglas estándar.
Deberías usar ya sea AxeDevTools.configure o AxeDevTools.init pero no ambos, ya que se sobrescribirán.
Sinopsis
AxeDevTools.init(ruleSetID);
Parámetros
-
ruleSetID- opcional Cadena que identifica el conjunto de reglas. Los valores válidos actuales son:- 508
- en301549
- rgaav4
- ttv5
- wcag2
- wcag21
- wcag22
- wcag2aaa
- wcag21aaa
- wcag22aaa
Devuelve: indefinido
AxeDevTools.ruleSets
Esta API no está disponible a través de ninguno de los enlaces específicos de lenguaje como @axe-devtools/script-builder, ya que esos enlaces tienen sus propias APIs para lograr lo mismo.
Propósito
Un array de las definiciones de conjuntos de reglas estándar
Descripción
Proporciona acceso directo al array de definición de conjuntos de reglas estándar. El array consiste en objetos de 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 arreglo para encontrar la definición del conjunto de reglas de 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
Obtener información sobre todas las reglas en el 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 usadas para filtrar las reglas devueltas. Si se omite, devolverá todas las reglas.
Devuelve: Array de reglas que coinciden con el filtro de entrada, donde cada entrada tiene un formato de {ruleId: <id>, description: <desc>}
El conjunto actual de etiquetas soportadas se enumera en la siguiente tabla:
| Nombre de la Etiqueta | Estándar 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 |
| RGAAv4 | RGAA Versión 4 |
| TTv5 | Trusted Tester v5 |
| mejores-prácticas | Mejores prácticas respaldadas por Deque |
Ejemplo 1
En este ejemplo, pasamos las etiquetas WCAG 2 A y AA en AxeDevTools.getRules para recuperar solo esas reglas. La llamada a la función devuelve un array de reglas.
Llamada: 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
Configurar el formato de los datos utilizados por Axe DevTools. Esto se puede usar para agregar nuevas reglas, las cuales deben ser registradas con la biblioteca para ejecutarse.
Descripción
El usuario especifica el formato de la estructura JSON pasada al callback de 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- mixto (opcional) Usado para establecer la marca de lahelpUrls.brand- cadena (opcional) establece la cadena de la marca--predeterminado: "worldspace"application- cadena (opcional) establece la cadena de la aplicación--predeterminado: "AxeDevToolsAPI"
reporter- Usado para establecer el formato de salida que la funciónAxeDevTools.runenviará a la función de devolución de llamadav1para usar el formato de la versión anterior:AxeDevTools.configure({ reporter: "v1" });v2para usar el formato de la versión actual:AxeDevTools.configure({ reporter: "v2" });
checks- Usado para añadir verificaciones a la lista de verificaciones usadas por reglas o para sobrescribir las propiedades de verificaciones existentes.- El atributo verificaciones es un arreglo de objetos de verificación.
- Cada objeto de verificación puede contener los siguientes atributos:
id- cadena (requerido). Esto identifica de forma única la verificación. Si la verificación ya existe, cualquier propiedad de verificación proporcionada será sobrescrita. Las propiedades a continuación marcadas requerido si nuevo son opcionales cuando la verificación es sobrescrita.evaluate- función (requerido si nuevo). Esta es la función que implementa la funcionalidad de la verificación.after- función (opcional). Esta función se llama para verificaciones que operan a nivel de página para procesar los resultados de los iframes.options- mixto (opcional). Este objetooptionsse pasa a la funciónevaluatey está destinado a ser usado para configurar verificaciones. Es la propiedad más común que se pretende sobrescribir para verificaciones existentes.matches- cadena (opcional). Esta cadena de selector CSS filtrará los nodos pasados a la funciónevaluate.enabled- booleano (opcional, predeterminadotrue). Esto indica si la verificación está encendida o apagada de forma predeterminada. Las verificaciones que están apagadas no son evaluadas, incluso cuando son incluidas en una regla. Sobrescribir esto es una forma común de desactivar una verificación en particular en varias reglas.
rules- Usado para agregar reglas al conjunto existente de reglas o sobrescribir las propiedades de reglas existentes. El atributoruleses un arreglo de objetosrule. Cada objetorulepuede contener los siguientes atributos:id- cadena (requerido). Esto identifica de forma única la regla. Si la regla ya existe, será sobrescrita con cualquier atributo proporcionado. Los atributos a continuación que están marcados como requeridos solo son requeridos para nuevas reglas.selector- cadena (opcional, predeterminado*). Un selector CSS usado para identificar los elementos pasados a la regla para evaluación.excludeHidden- booleano (opcional, predeterminadotrue). Esto indica si los elementos ocultos deben ser pasados a la regla para 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 opera solo cuando el ámbito es toda la página. Un ejemplo de una regla como esta es la regla omitir enlace. No se recomienda sobrescribir esta propiedad a menos que la implementación también se cambie.any- arreglo (opcional, predeterminado[]). Esta es la lista de verificaciones que deben todas aprobarse o hay una violación.all- arreglo (opcional, predeterminado[]). Esta es la lista de verificaciones que, si alguna falla, generará una violación.none- arreglo (opcional, predeterminado[]). Esta es la lista de verificaciones que, si ninguna pasa, generará una violación.tags- arreglo (opcional, predeterminado[]). Una lista de las etiquetas que clasificar 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 de WCAG 2, el párrafo de la Sección 508 y los criterios de éxito de 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, predeterminado*). Un selector CSS que excluirá los elementos que no coincidan con él.
Retorna: Nada
AxeDevTools.reset
Propósito
Restablecer la configuración a la configuración predeterminada.
Descripción
Sobrescribir cualquier llamada previa a AxeDevTools.configure o AxeDevTools.reset y restablecer la configuración a la configuración predeterminada.
Esto no no cancelará el registro de cualquier regla o verificación nueva que haya sido registrada pero restablecerá la configuración a la configuración predeterminada para todo lo demás.
Sinopsis
AxeDevTools.reset();
Parámetros
Ninguno
Retorna: indefinido
AxeDevTools.run
Propósito
Analizar la página actualmente cargada.
Descripción
Ejecuta varias reglas contra la página HTML proporcionada y devuelve la lista de problemas resultantes.
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. Esto típicamente será eldocumento un selector específico como el nombre de clase, ID, selector, etc.options: (opcional) Conjunto de opciones pasadas a reglas o verificaciones, 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 seanullo un resultado de error como el primer parámetro, y el objeto de resultados cuando el análisis se ha completado con éxito oundefinedsi no fue así.
Parámetro context
Por defecto, AxeDevTools.run analizará todo el documento. El objeto context es un parámetro opcional que especifica qué elemento debe y cuál no debe analizarse. Puede pasar uno de los siguientes:
- Una referencia a un elemento que representa la porción del documento que debe ser analizada
- Ejemplo: Para limitar el análisis al elemento
<div id="content">:document.getElementById("content")
- Ejemplo: Para limitar el análisis al elemento
- Una NodeList tal como la devuelta por
document.querySelectorAll. - Un selector CSS que selecciona la porción del documento que debe ser analizada. 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 ID de elemento (por ejemplo,
#tag)
- Un selector CSS como nombre de clase (por ejemplo,
- Un objeto de inclusión-exclusión (ver abajo)
Objetos include y exclude
El objeto de inclusión-exclusión es un objeto JSON con dos atributos: include y exclude. Se requiere al menos include o exclude. Si solo se especifica exclude, include por defecto abarcará todo el document.
- Un nodo, o
- Un arreglo de arreglos de selectores CSS
En la mayoría de los casos, los arreglos contendrán solo un selector CSS. Se requieren múltiples selectores CSS solo 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 el o los iframes, y el n-ésimo selector selecciona la región o regiones dentro del iframe.
Ejemplos de Parámetro context
-
Incluir el primer ítem en la NodeList
$fixturepero excluir su primer hijo{ include: $fixture[0], exclude: $fixture[0].firstChild } -
Incluir el elemento con el ID de
fixpero excluir cualquierdivdentro de él{ include: [['#fix']], exclude: [['#fix div']] } -
Incluir todo el documento excepto cualquier estructura cuyo padre contenga la clase
exclude1oexclude2{ exclude: [['.exclude1'], ['.exclude2']]; }
Parámetro options
El parámetro options es una forma flexible de configurar cómo opera AxeDevTools.run. Los diferentes modos de operación son:
- Ejecutar todas las reglas correspondientes a uno de los estándares de accesibilidad.
- Ejecutar todas las reglas definidas en el sistema excepto por la lista de reglas especificadas.
- Ejecutar un conjunto específico de reglas provistas como una lista de IDs de reglas.
Ejemplos de Parámetro options
-
Ejecutar solo Reglas para un estándar de accesibilidad
Hay ciertos estándares definidos que se pueden usar para seleccionar un conjunto de reglas. Los estándares definidos y la cadena de etiqueta se definen de la siguiente manera:
Nombre de Etiqueta Estándar 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 Probador de Confianza v5 mejores-prácticas Mejores prácticas respaldadas por Deque Para ejecutar solo las reglas de WCAG 2.0 Nivel A, especifique
optionscomo:{ runOnly: { type: "tag", values: ["wcag2a"] } }Para ejecutar tanto las reglas de WCAG 2.0 Nivel A como Nivel AA, debe especificar tanto
wcag2acomowcag2aa:{ runOnly: { type: "tag", values: ["wcag2a", "wcag2aa"] } } -
Ejecutar solo una lista especificada de reglas
Si solo desea ejecutar ciertas reglas, especifique las opciones como:
{ runOnly: { type: "rule", values: [ "ruleId1", "ruleId2", "ruleId3" ] } }Este ejemplo ejecutará solo las reglas con el id de
ruleId1,ruleId2yruleId3. No se ejecutará ninguna otra regla. -
Ejecutar todas las reglas habilitadas excepto una lista de reglas
La operación predeterminada para
AxeDevTools.runes ejecutar todas las reglas de WCAG 2.0 Nivel A y Nivel AA. Si ciertas reglas deben deshabilitarse para no ejecutarse, especifiqueoptionscomo:{ "rules": { "color-contrast": { enabled: false }, "valid-lang": { enabled: false } } }Este ejemplo deshabilitará las reglas con el ID
color-contrastovalid-lang. Todas las demás reglas se ejecutarán. La lista de IDs de regla válidos se especifica en la sección a continuación. -
Ejecutar un conjunto modificado de reglas usando etiquetas y activación de reglas
Un conjunto modificado puede definirse combinando
runOnlycontypeconfigurado a 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 del nivel A excepto
valid-lang, y también incluirá la regla de contraste de color de nivel AA. -
Ejecutar solo algunas etiquetas, pero excluir otras
La opción
runOnlypuede aceptar un objeto con una propiedadincludeyexclude. Solo se ejecutarán las 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 primero incluye todas las reglas
wcag2aywcag2aa. Todas las reglas etiquetadas comoexperimentalson luego eliminadas de las reglas a ejecutar.
Parámetro callback
El parámetro callback es una función que se llamará cuando la función asincrónica AxeDevTools.run se complete. La función callback recibe dos parámetros. El primer parámetro será un error lanzado dentro de Axe DevTools si AxeDevTools.run no puede completarse. 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 el callback no fue definido, Axe DevTools devolverá una promesa en su lugar. Sin embargo, Axe DevTools no incluye 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 de promesas, le sugerimos que use el callback proporcionado por AxeDevTools.run en su lugar.
Resultado error
Esto será bien null o un objeto que es una instancia de Error. Si consistentemente recibe errores, por favor reporte este problema a Deque Systems.
Objeto results
La función de callback pasada como el tercer parámetro de AxeDevTools.a11yCheck se ejecuta en el objeto results. Este objeto tiene dos componentes: un arreglo passes y un arreglo violations. El arreglo passes lleva un registro de todas las pruebas aprobadas y de la información detallada sobre cada prueba. Esto lleva a pruebas más eficientes, especialmente con pruebas manuales, ya que el usuario puede determinar fácilmente las pruebas ya aprobadas. De manera similar, el arreglo violations lleva un registro de todas las pruebas fallidas y de la información detallada sobre cada una.
url
La URL de la página que se probó.
timestamp
La fecha y hora en que se completó el análisis.
Arreglo passes y violations
description- Una cadena de texto que describe lo que la regla hacehelp- 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 violación. Puede ser uno de menor, moderada, grave, o crítica si la regla falló onullsi la verificación pasó.tags- Un arreglo de etiquetas asignadas a esta regla. Las etiquetas pueden usarse en el objetooptionpara seleccionar qué reglas se ejecutan (vea Parámetro de Opciones arriba).nodes- Una matriz de todos los elementos que la regla probóhtml- Un fragmento de HTML del elementoimpact- La gravedad de la infracción. Puede ser una de leve, moderado, grave o crítico si la prueba falló onullsi la verificación fue exitosa.target- Una matriz de selectores donde cada elemento corresponde a un nivel de iframe o frame. Si hay un iframe o frame, debe haber dos entradas entarget. Si hay tres niveles de iframe, deben haber cuatro entradas entarget.any- Una matriz de verificaciones donde al menos una debe haber pasado. Cada entrada en la matriz contiene:id- Identificador único para esta verificación. Los IDs de verificación pueden ser los mismos que los IDs de las reglas.impact- La gravedad de la verificación. Puede ser una de leve, moderado, grave o crítico. Cada verificación que es parte de una regla puede tener diferentes impactos. El impacto más alto de todas las verificaciones que fallan se informa para la regla.message- La descripción de por qué esta verificación pasó 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 verificación. Por ejemplo, una infracción de verificación de ID duplicada enumeraría los otros selectores con el mismo ID duplicado. Cada entrada en la matriz contiene la siguiente información:target- Una matriz de selectores para el nodo relacionadohtml- El código fuente HTML del nodo relacionado
all- Una matriz de verificaciones realizadas donde todas deben haber pasado. Cada entrada en la matriz contiene la misma información que la matrizany.none- Una matriz de verificaciones realizadas donde ninguna debe haber pasado. Cada entrada en la matriz contiene la misma información que la matrizany.
Ejemplo Dos
En este ejemplo, pasaremos el selector para todo el documento, sin pasar opciones, lo que significa que se ejecutarán todas las reglas habilitadas, y tendremos una función de devolución de llamada simple que registra el objeto completo de resultados en el registro de la consola:
AxeDevTools.run(document, function (err, results) {
if (err) throw err;
console.log(results);
});matriz passes
-
passes[0]...help-"Elements must have sufficient color contrast"helpURL-"https://dequeuniversity.com/courses/html-css/visual-layout/color-contrast"id-"color-contrast"nodestarget[0]-"#js_off-canvas-wrap > .inner-wrap >.kinja-title.proxima.js_kinja-title-desktop"
-
passes[1]...
En el ejemplo anterior, la matriz passes contiene dos entradas correspondientes a las dos reglas probadas. El primer elemento en 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-desktopEl elemento seleccionado por target[0] fue verificado para 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 fueron ejecutadas.
matriz violations
-
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"nodestarget[0]"post_5919997 > .row.content-wrapper > .column > span > iframe"*target[1]"#u_0_1 > .pluginConnectButton > .pluginButtonImage > button"
-
violations[1]...
The violations array contains one entry for a test that checks if buttons have valid alternate text (the button-name rule). This first entry in the array has the help, helpUrl, and id fields.
The target array demonstrates how we specify the selectors when the node specified is inside an iframe or frame. The first element in the target array (target[0]) specifies the selector to the iframe containing the button. The second element in the target array (target[1]) specifies the selector to the actual button but starts from inside the iframe selected in target[0].
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 el objeto completo de resultados en el registro de la consola:
In this example, we pass the selector for the entire document, enable two additional best practice rules, and have a simple callback function that logs the entire results object to the console log:
AxeDevTools.run(
document,
{
rules: {
'heading-order': { enabled: true },
'label-title-only': { enabled: true }
}
},
function (err, results) {
if (err) throw err;
console.log(results);
}
);