Escribir pruebas de Hamcrest
Uso de Hamcrest Emparejadores con axe DevTools
Prerrequisitos
Para escribir pruebas de accesibilidad y producir resultados, ya debe haber creado un archivo de prueba con axe DevTools y su elección de Selenium WebDriver preimportado y preinicializado. Si aún no lo has hecho, lee esta guía sobre cómo hacerlo.
Se ha proporcionado un conjunto de matchers para realizar pruebas de accesibilidad a través de Hamcrest usando Selenium WebDriver. Estos comparadores se pueden utilizar en un marco de pruebas unitarias o en pasos de Cucumber personalizados.
Elegir 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 independientemente del nivel de accesibilidad de la página escaneada.
Redacción de pruebas
Para los ejemplos restantes, se muestra el método isAxeClean para abreviar, pero ambos métodos funcionan indistintamente. Con los 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 get y scan sin tener que crear nuevas instancias de los controladores. Para escanear diferentes estados de una página, puedes manipularla utilizando la API del controlador web y luego ejecutar un nuevo escaneo.
Referencia adicional
Hay varios métodos de encadenamiento disponibles 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. Para abreviar, todos los métodos encadenados están vinculados con isAxeClean(), pero son intercambiables con isAuditedForAccessibility().
Estándares de accesibilidad
Deque ofrece un método encadenado, según el cual se puede especificar directamente qué estándares de pruebas de accesibilidad se utilizan en un escaneo.
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.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 |
TTv5 | Trusted Tester v5 |
best-practice | Mejores prácticas avaladas por Deque |
Si no está seguro de qué estándar es para usted, lea la documentación de axe-core para saber qué reglas están asociadas con qué estándar o contáctenos a través de su representante de Deque o nuestra mesa de ayuda. Para obtener una lista completa de las reglas que se aplican a cada estándar, consulte esta página en Descripciones de las reglas
Para utilizar un único estándar, simplemente agregue el método de cadena 'according to' y pase el estándar deseado.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a"));
Además de utilizar un estándar de prueba, hay dos formas de escanear contra dos o más estándares de prueba. Ambos funcionan de forma idéntica.
assertThat(axedriver, isAxeClean().accordingTo("wcag2a", "section508"));
assertThat(axedriver, isAxeClean().accordingTo("wcag2a").accordingTo("section508"));
Alcance
Deque ofrece dos métodos en cadena para ayudar a delimitar los escaneos. El método within() modifica el escaneo para escanear únicamente la página dentro de los límites del selector que se le pasa. El método excluding() funciona al revés. Altera el escaneo para ignorar el contenido dentro del selector que se le pasa. Los siguientes ejemplos muestran el método within(), pero el método excluding() funciona de manera idéntica.
De forma más sencilla, la afirmación se modifica con un selector.
assertThat(axedriver, isAxeClean().within("#selector1"));
También son posibles los selectores compuestos. En el siguiente ejemplo, solo se escanean los elementos con el selector 2 dentro del selector 1
assertThat(axedriver, isAxeClean().within("#selector1 .selector2"));
Hay tres formas de realizar una selección múltiple, o seleccionar múltiples ámbitos para realizar pruebas. En todos estos ejemplos, los elementos se encuentran dentro del selector 1 y el selector 2 .
assertThat(axedriver, isAxeClean().within("#selector1, .selector2"));
assertThat(axedriver, isAxeClean().within("#selector1", ".selector2"));
assertThat(axedriver, isAxeClean().within("#selector1").within(".selector2"));
Para poder realizar un alcance dentro de un IFrame, se debe declarar un selector de IFrame. El alcance que se escaneará dentro del IFrame se pasa como parámetro adicional.
assertThat(axedriver, isAxeClean().within(new IFrameSelector("#frame1", "#selector1")));
La definición del ámbito 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 IFrame separados por comas.
assertThat(axedriver, isAxeClean().within(new IFrameSelector("#frame1", "selector1"),
new IFrameSelector("#frame2", "#selector2")));
También es posible definir el ámbito dentro de IFrames anidados. Este ejemplo muestra la definición del ámbito de un escaneo 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 IFrame. Para que esto funcione, se requiere un objeto 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 posibilidad de modificar qué reglas se utilizan en un escaneo. Hay tres formas de modificar las reglas que se utilizan. Estas incluyen: verificar reglas adicionales fuera del conjunto de reglas estándar para el escaneo, no verificar reglas dentro del conjunto de reglas estándar para el escaneo, y verificar solo aquellas reglas que se especifican explícitamente.
Para obtener una lista completa de las etiquetas de reglas válidas que puede usar con estos métodos y lo que prueban, lea la documentación sobre reglas
Para comprobar reglas adicionales, utilice el método de comprobación. Para probar una sola regla adicional, simplemente pase la etiqueta de la regla al método de comprobación
assertThat(axedriver, isAxeClean().checking("label"));
De manera similar a los otros métodos de cadena, se pueden verificar múltiples reglas adicionales con el método de comprobación de dos maneras:
assertThat(axedriver, isAxeClean().checking("label", "tabindex"));
assertThat(axedriver, isAxeClean().checking("label").checking("tabindex"));
El método de comprobación 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 mediante el método de omisión. Funciona de forma idéntica al método de verificación, excepto que omite reglas en lugar de agregarlas.
assertThat(axedriver, isAxeClean().skipping("label"));
También se puede utilizar para omitir varias reglas.
assertThat(axedriver, isAxeClean().skipping("label", "tabindex"));
assertThat(axedriver, isAxeClean().skipping("label").skipping("tabindex));
Por último, también se puede utilizar 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 desean reglas específicas. El método de comprobación exclusiva modifica el escaneo para verificar únicamente aquellas reglas que se le pasan explícitamente. Además, este método no se encadenará con el método de selección de estándares de accesibilidad. Para comprobar solo una única regla:
assertThat(axedriver, isAxeClean().checkingOnly("label"));
Este método también se puede utilizar para comprobar varias 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 puede utilizar con estos métodos y lo que prueban, lea la documentación sobre reglas.
Ignorar las infracciones
Es posible configurar el escaneo para ignorar instancias específicas de violaciones. Para ello se utiliza el método de ignorancia. Funciona pasando los selectores de los elementos que desea ignorar como un arreglo, junto con la regla que violan.
assertThat(axedriver, isAxeClean().ignoring("[\".sidebar\", \"#branded-content\"]", "color-contrast"));
Servicio de uso
Obtenga información sobre las tendencias de uso de axe DevTools dentro de su organización
De forma predeterminada, el servicio de utilización está deshabilitado y la URL predeterminada es https://usage.deque.com
.
Variables de entorno
Este método permite a los usuarios cambiar valores específicos del servicio de utilización a través de variables de entorno.
Variable ambiental | Tipo | Descripción |
---|---|---|
AXE_IS_LOGGED_IN | Booleano | Si el usuario ha iniciado sesión en la aplicación bajo prueba |
AXE_KEYCLOAK_ID | Cadena | El ID de keycloak del usuario que inició sesión |
AXE_USUARIO_ID | Cadena | El nombre del usuario que ejecuta la prueba. |
AXE_SESSION_ID | Cadena | Descripción de la sesión de prueba |
AXE_USER_STATUS | Cadena | El estado del usuario |
AXE_USER_JOB_ROLE | Cadena | El título/rol del individuo que realiza la prueba |
AXE_DISTINCT_ID | Cadena | Identificación distintiva de un usuario individual |
AXE_IS_DEV_INSTANCE | Booleano | Si la aplicación bajo prueba está en una instancia de desarrollo |
ORGANIZACIÓN_AXE | Cadena | La organización del usuario: organización de datos a escala de toda la empresa |
APLICACIÓN AXE | Cadena | El nombre de la aplicación bajo prueba |
AXE_METRICS_URL | Cadena | La URL a la que se envían los datos de uso |
AXE_TRACK_USAGE | Booleano | Si se capturan o no datos de uso |
Próximos pasos
Para un uso posterior de los resultados del análisis de axe DevTools, como los informes, consulte la documentación del paquete Java Selenium de axe DevTools
Solución de problemas
Si tiene problemas al configurar su prueba de accesibilidad, comuníquese directamente con su representante de Deque, contáctenos a través de nuestra mesa de soporte o envíenos un correo electrónico. Estaremos encantados de ayudarle a poner en marcha sus esfuerzos de pruebas de accesibilidad.