Escribir pruebas con Hamcrest
Redacción de pruebas de accesibilidad usando validadores de Hamcrest con Axe DevTools para Web para Java
Uso de validadores de Hamcrest con Axe DevTools
Requisitos previos
Para escribir pruebas de accesibilidad y obtener resultados, debe haber creado previamente un archivo de prueba con Axe DevTools y su elección de Selenium WebDriver preimportado y preinicializado. Si aún no lo ha hecho, lea esta guía para saber cómo hacerlo.
Se ha proporcionado un conjunto de validadores para pruebas de accesibilidad a través de hamcrest usando Selenium WebDriver. Estos validadores se pueden usar en un marco de prueba unitaria o en pasos personalizados de cucumber.
Eligiendo un método de escaneo
Como se ve en las declaraciones de importación, hay dos métodos de escaneo de accesibilidad. El primero, isAxeClean, lanzará una excepción y detendrá las pruebas si se encuentran violaciones. El segundo, isAuditedForAccessibility, no detendrá las pruebas ni lanzará una excepción sin importar el nivel de accesibilidad de la página escaneada.
Escribiendo Pruebas
Para los ejemplos restantes, se muestra el método isAxeClean por brevedad, pero ambos métodos funcionan de manera intercambiable. Con sus objetos WebDriver y AxeDriver instanciados e inicializados, crear un escaneo es tan simple como agregar estas dos líneas de código a un método de prueba. Reemplace $URL con la URL deseada de la página que desea escanear.
webDriver.get("$URL");
assertThat(axedriver, isAxeClean());Al probar varias páginas, puede repetir el proceso de obtención y escaneo sin tener que crear nuevas instancias de los controladores. Para escanear diferentes estados de una página, puede manipular la página usando la API de webdriver y luego ejecutar un nuevo escaneo.
Referencia Adicional
Están disponibles varios métodos de encadenamiento para modificar la forma en que se escanea la página. Estos métodos incluyen cláusulas de exclusión/inclusión o alcance y modificaciones de estándares de accesibilidad, reglas de accesibilidad y conjuntos de reglas de accesibilidad. Por brevedad, todos los métodos de encadenamiento están acoplados con isAxeClean(), pero son intercambiables con isAuditedForAccessibility().
Estándares de Accesibilidad
Deque ofrece un método de encadenamiento, according to, que puede especificar directamente qué estándares de prueba de accesibilidad son utilizados por un escaneo.
| 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.0 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 | Probador de Confianza v5 |
| mejores-practicas | Mejores prácticas avaladas por Deque |
Si no está seguro de qué estándar es para usted, lea la documentación de axe-core sobre qué reglas están asociadas con cuál estándar, o contáctenos a través de su representante de Deque o nuestro centro de ayuda. Para una lista completa de qué reglas aplican a cada estándar, consulte esta página sobre Descripciones de Reglas
Para usar un estándar único, simplemente agregue el método de encadenamiento according to y pase su estándar deseado
assertThat(axedriver, isAxeClean().accordingTo("wcag2a"));Además de usar un estándar de prueba, hay dos maneras de escanear utilizando dos o más estándares de prueba. Ambos funcionan de manera idéntica.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a", "section508"));
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").accordingTo("section508"));Ámbito
Deque ofrece dos métodos encadenados para ayudar a delimitar los escaneos. El método within() modifica el escaneo para que solo analice la página dentro de los límites del selector que se le pasa. El método excluding() funciona de manera opuesta. Modifica el escaneo para ignorar el contenido dentro del selector que se le pasa. Los ejemplos a continuación muestran todos el método within(), pero el método excluding() funciona de manera idéntica.
La forma más simple, la aserción se modifica con un solo selector
assertThat(axedriver, isAxeClean().within("#selector1")); También son posibles los selectores compuestos. En el ejemplo a continuación, solo se escanean los elementos con el selector 2 dentro del selector 1
assertThat(axedriver, isAxeClean().within("#selector1 .selector2"));Hay tres formas de lograr una selección múltiple, o seleccionar múltiples ámbitos para probar dentro. En todos estos ejemplos, los elementos dentro del selector 1 y selector 2.
assertThat(axedriver, isAxeClean().within("#selector1, .selector2"));
assertThat(axedriver, isAxeClean().within("#selector1", ".selector2"));
assertThat(axedriver, isAxeClean().within("#selector1").within(".selector2"));Para delimitar dentro de un IFrame, se debe declarar un selector de IFrame. El ámbito que se va a escanear dentro del IFrame se pasa como un parámetro adicional.
assertThat(axedriver, isAxeClean().within(new IFrameSelector("#frame1", "#selector1")));Delimitar dentro de múltiples IFrames funciona de la misma manera que la selección múltiple estándar. Simplemente cree dos o más selectores de IFrame separados por comas.
assertThat(axedriver, isAxeClean().within(new IFrameSelector("#frame1", "selector1"),
new IFrameSelector("#frame2", "#selector2")));También es posible delimitar dentro de IFrames anidados. Este ejemplo muestra el escaneo del ámbito dentro del selector 1 de un IFrame que está dentro de un segundo IFrame.
assertThat(axedriver, isAxeClean().within(
new IFrameSelector("#frame1",
new IFrameSelector("#frame2", "#selector1"))));Finalmente, es posible establecer múltiples ámbitos dentro de una página así como dentro de un IFame. Para que esto funcione, se requiere un objeto de selector de elementos.
assertThat(axedriver, isAxeClean().within(
new ElementSelector("#selector1"),
new ElementSelector("#selector2"),
new IFrameSelector("#frame", "selector3")));Selección de Reglas
La API también ofrece la capacidad de modificar qué reglas se utilizan en un escaneo. Hay tres formas de modificar qué reglas se utilizan. Estas son: verificar reglas adicionales fuera del conjunto estándar de reglas para el escaneo, no verificar reglas dentro del conjunto estándar de reglas para el escaneo y verificar solo aquellas reglas específicamente especificadas.
Para obtener una lista completa de las etiquetas de reglas válidas que puedes usar con estos métodos y lo que prueban, lee la documentación sobre reglas
Para comprobar reglas adicionales, utiliza el método checking. Para probar una sola regla adicional, simplemente pasa la etiqueta de la regla al método checking
assertThat(axedriver, isAxeClean().checking("label"));Similar a los otros métodos encadenados, se pueden verificar varias reglas adicionales con el método checking de dos maneras:
assertThat(axedriver, isAxeClean().checking("label", "tabindex"));
assertThat(axedriver, isAxeClean().checking("label").checking("tabindex"));El método checking también se puede encadenar con un método de selección de reglas.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").checking("tabindex"));También existe la opción de omitir reglas de un escaneo. Esto es posible a través del método skipping. Funciona de manera idéntica al método checking excepto que deja reglas fuera en lugar de agregarlas.
assertThat(axedriver, isAxeClean().skipping("label"));También puede usarse para omitir múltiples reglas.
assertThat(axedriver, isAxeClean().skipping("label", "tabindex"));
assertThat(axedriver, isAxeClean().skipping("label").skipping("tabindex));Finalmente, también puede usarse con un método de selección de reglas.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").skipping("#label"));El último método se utiliza cuando solo se quieren reglas específicas. El método checking only modifica el escaneo para verificar solo aquellas reglas específicamente pasadas a él. Además, este método no se encadenará con el método de selección de estándares de accesibilidad. Para verificar solo una regla:
assertThat(axedriver, isAxeClean().checkingOnly("label"));Este método también se puede usar para verificar múltiples reglas de dos maneras.
assertThat(axedriver, isAxeClean().checkingOnly("label", "tabindex"));
assertThat(axedriver, isAxeClean().checkingOnly("label").checkingOnly("tabindex"));Para obtener una lista completa de las etiquetas de reglas válidas que puedes usar con estos métodos y lo que prueban, lee la documentación sobre reglas.
Ignorar Violaciones
Es posible configurar el escaneo para ignorar instancias específicas de violaciones. Para hacer esto, se utiliza el método ignoring. Funciona pasando los selectores de los elementos que deseas ignorar como un arreglo, junto con la regla que violan.
assertThat(axedriver, isAxeClean().ignoring("[\".sidebar\", \"#branded-content\"]", "color-contrast"));Servicio de Uso
Obtén información sobre las tendencias de uso de Axe DevTools dentro de tu organización
Por defecto, el servicio de uso está habilitado y la URL por defecto es https://usage.deque.com. Establezca la variable de entorno AXE_TRACK_USAGE en false para desactivarlo. Si sus eventos de uso no llegan a Deque, defina explícitamente la variable de entorno AXE_METRICS_URL.
Variables de entorno
Estas variables de entorno te permiten configurar el servicio de uso y cambiar las propiedades de los eventos reportados.
| Nombre | Tipo | Puede sobrescribir | Descripción |
|---|---|---|---|
AXE_DISTINCT_ID |
Cadena | — | Un identificador UUID que permanece igual para el usuario registrado (a menos que se regenere). En Ruby, esta variable se llama DEQUE_DISTINCT_ID. |
AXE_INCLUDE_TEST_RESULTS |
Booleano | — | Configúrelo en true para incluir los resultados completos de axe-core en el objeto testResults de cada evento (el valor predeterminado es false). Compatible solo con el CLI y las API de Node.js. |
AXE_METRICS_URL |
Cadena | — | La URL del punto final de uso de REST (el valor predeterminado es https://usage.deque.com) |
AXE_TRACK_USAGE |
Booleano | — | Configúrelo en false para desactivar la generación de informes del servicio de uso. El informe está habilitado de forma predeterminada. |
AXE_APPLICATION |
Cadena | falso | La aplicación que se utilizó para verificar errores de accesibilidad |
AXE_DEV_INSTANCE |
Booleano | verdadero | Indica si este evento es producto de las acciones de un desarrollador de software. Útil para marcar y luego eliminar eventos registrados durante el desarrollo o las pruebas. |
AXE_DEPARTMENT |
Cadena | verdadero | El departamento del usuario dentro de la organización |
AXE_KEYCLOAK_ID |
Cadena | falso | El ID de Keycloak del usuario |
AXE_LOGGED_IN |
Booleano | falso | Registra si el usuario está conectado a la aplicación bajo prueba |
AXE_ORGANIZATION |
Cadena | verdadero | La organización del usuario. Para que su uso aparezca en Axe Reports, configúrelo con el ID de su organización (contacte a Deque para obtenerlo). |
AXE_SESSION_ID |
Cadena | falso | Un UUID que identifica la sesión del usuario |
AXE_USER_ID |
Cadena | falso | La identidad específica de un usuario, como una dirección de correo electrónico, nombre o ID de inicio de sesión. Axe Reports cuenta usuarios únicos a partir de este valor. |
AXE_USER_JOB_ROLE |
Cadena | falso | El rol laboral del usuario |
AXE_USER_STATUS |
Cadena | falso | Información de estado que desea asociar con el usuario |
Próximos Pasos
Para un uso más detallado de los resultados de tu escaneo con Axe DevTools, como la generación de informes, consulta la documentación del paquete Java Selenium de Axe DevTools
Solución de Problemas
Si experimentas problemas al configurar tus pruebas de accesibilidad, contacta directamente a tu representante de Deque, contáctanos a través de nuestra mesa de soporte, o envíanos un correo electrónico. Estamos encantados de ayudar a que tus esfuerzos de pruebas de accesibilidad despeguen.
