Escribir pruebas de Selenium
Utilice axe DevTools Java Selenium
Esta configuración de axe DevTools no se vincula inherentemente a ninguna biblioteca de afirmaciones. Esto permite realizar pruebas de accesibilidad sencillas, así como una personalización completa de las pruebas y su uso con afirmaciones personalizadas.
Prerrequisitos
Para poder utilizar axe DevTools Java Selenium y producir resultados con él, debe haber creado previamente un archivo de prueba con axe DevTools y haber importado e inicializado el Selenium WebDriver de su elección. Si no ha completado este paso, primero lea esta guía sobre cómo hacerlo.
Ejecutar un escaneo
Con esta configuración, ejecutar un escaneo de accesibilidad básico requiere solo tres líneas de código. En su archivo de prueba, reemplace <URL> Con la dirección web deseada de la página que desea probar. Los resultados del escaneo se guardan en la results
variable
webdriver.get("<URL>");
Results results = axeSelenium.run(axedriver);
webdriver.quit();
Uso de los resultados del escaneo
Una vez que haya ejecutado el análisis, es posible que desee hacer algo con los resultados. La opción más sencilla es imprimir los resultados en la consola.
System.out.print(results);
También puede utilizar los resultados para comprobar si hay violaciones de accesibilidad. La forma más sencilla de hacerlo es con una declaración como esta:
if (!results.violationFree()) {
//do something, like throw an exception
}
Para obtener más información sobre cómo utilizar el objeto de resultados para escribir pruebas personalizadas, consulte la página sobre uso de los resultados.
Archivo de prueba de muestra
Este archivo de prueba funciona con los mismos bloques de construcción cubiertos en importar e inicializar así como en la guía para escribir pruebas en esta página.
import com.deque.html.axedevtools.selenium.*;
import com.deque.html.axedevtools.selenium.results.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class Example {
public static void main(final String[] args) {
AxeSelenium axeselenium = new AxeSelenium();
WebDriver webdriver = new ChromeDriver();
AxeDriver axedriver = new AxeDriver(wd);
webdriver.get("<URL>");
Results results = axeselenium.run(axedriver);
webdriver.quit();
if (!results.violationFree()) {
int violationCount = results.getViolations().size();
System.out.printf("Found %d violations!\n", violationCount);
System.exit(1);
}
System.out.println("No violations found!");
}
}
En este ejemplo, se utilizan Chrome y ChromeDriver. Esto se puede sustituir por cualquier otro controlador y navegador de Selenium. Si este archivo de prueba encuentra algún problema de accesibilidad, imprime la cantidad de violaciones encontradas y sale con el código de estado 1 (error). Para utilizar este archivo de prueba en su propio entorno, deberá agregar una URL a la línea
webdriver.get("<URL>");
Referencia adicional
Además del uso básico descrito anteriormente, axe DevTools Java Selenium proporciona varios métodos de encadenamiento para modificar la forma en que se ejecuta el escaneo. Estos métodos pueden modificar el alcance del escaneo y el conjunto de reglas según cualquier configuración deseada. De forma predeterminada, se escanea toda la página y se verifica si hay violaciones de accesibilidad de acuerdo con las pautas WCAG 2.0 nivel AA. Una nota importante es que las llamadas posteriores al método de ejecución sobrescribirán cualquiera de las preferencias de los métodos de cadena a continuación. Los cambios realizados en el alcance o en las reglas no persisten en múltiples escaneos utilizando estos métodos chan.
Alcance
De forma predeterminada, se escanea toda la página. Sin embargo, axe DevTools admite la capacidad de escanear partes específicas de una página con sus métodos de encadenamiento de alcance. Estos métodos de alcance cambian efectivamente el "área de superficie" de la página que se va a escanear a las áreas objetivo deseadas. Además, está disponible un método para ignorar violaciones. "Definir el alcance de" la página con este método no reduce el área del escaneo, pero ignorará las violaciones de un tipo específico dentro del área especificada y seguirá escaneando el área en busca de otras posibles violaciones. Todos estos métodos funcionan según los selectores CSS. El área de cada selector CSS en una página determinada se puede determinar utilizando el widget "inspeccionar elemento" de las herramientas para desarrolladores de su navegador.
Métodos de determinación del alcance
Como se explicó anteriormente, estos métodos cambian efectivamente el área de superficie de la página que se va a escanear. Hay dos métodos en esta categoría, un método "inclusivo" y un método "exclusivo". Pueden encadenarse mutuamente para crear múltiples áreas aisladas y áreas excluidas de superficie de escaneo.
Alcance - Inclusión
El método de cadena de alcance de inclusión modifica el escaneo para que solo se ejecute dentro del área de página especificada por los selectores CSS que se le pasan. Hay varias formas de utilizar el método including: ámbito único, ámbito múltiple, ámbito compuesto y ámbito IFrame.
Este método se puede utilizar con un solo selector de la siguiente manera:
axeselenium.including("#selector1").run(axedriver);
Este escaneo solo se ejecutará dentro del alcance del selector 1
Puede configurar un escaneo con múltiples alcances:
axeselenium.including("#selector1").including("#selector2").run(axedriver);
Este llamado escaneará dentro del alcance del selector 1 y el selector 2. Pueden estar separados por comas o declararse en una cláusula de inclusión separada.
El alcance compuesto se puede lograr con la siguiente sintaxis:
axeselenium.including("#selector1 .selector2").run(axedriver);
Este alcance compuesto da como resultado que solo se escaneen los elementos con el selector 2 dentro del selector 1. Esto se configura al no separar los selectores con comas.
Para delimitar el alcance dentro de un IFrame, se puede pasar un List<String>
. El alcance que se escaneará dentro del IFrame se pasa como parámetro adicional.
axeselenium.including(Arrays.asList(new String[] {"#frame1", "#selector1"})).run(axedriver);
Este escaneo se ejecuta en elementos dentro del selector 1, que está dentro del IFrame 1.
La definición del ámbito dentro de múltiples IFrames funciona de la misma manera que la selección múltiple estándar. Simplemente llame including
de nuevo.
axeselenium.including(Arrays.asList(new String[] {"#frame1", "#selector1"}))
.including(Arrays.asList(new String[] {"#frame2", "#selector2"})).run(axedriver);
Este escaneo se ejecuta solo dentro del selector 1 dentro del marco 1 y del selector 2 dentro del marco 2.
También es posible definir el ámbito dentro de IFrames anidados:
axeselenium.including(Arrays.asList(new String[] {"#frame1", "#frame2", "#selector1"})).run(axedriver);
Este escaneo se ejecuta dentro del ámbito del selector 1 dentro del marco 2, que a su vez está dentro del marco 1.
Alcance - Exclusión
Además del método including encadenado, esta API tiene un método de exclusión. Este método modifica el escaneo para que solo se escaneen los elementos fuera del alcance especificado. Su configuración y uso son idénticos al método including, así que consulte la sección anterior para obtener más detalles y ejemplos de cómo se puede utilizar. Un detalle importante a recordar es que los métodos including y excluding se pueden encadenar entre sí para crear ámbitos complejos de manera mucho más sencilla que utilizando solo include o exclude.
Este ejemplo muestra una forma de emparejar los métodos within y excluding:
axeselenium.including("#selector1").excluding("#selector2").run(axedriver);
Este escaneo se ejecuta solo en la parte de la página que está dentro del selector 1 que no está también dentro del selector 2.
Alcance - Ignorar infracciones
El último método en cadena relacionado con la definición del ámbito es el método de ignorar resultados. Este método no altera el alcance general del escaneo, pero ignorará las violaciones de un tipo específico dentro de un alcance específico. Funciona pasando los selectores de los elementos que desea ignorar como un arreglo, junto con la regla que violan.
axeselenium.ignoring("[\".sidebar\", \"#branded-content\"]", "color-contrast").run(axedriver);
Este escaneo ignorará las violaciones de contraste de color dentro de la sección de la barra lateral y la sección de contenido de marca.
Reglas
Hay tres formas de modificar la configuración de reglas para cada escaneo. Estos diferentes métodos permiten diferentes niveles de granularidad al seleccionar reglas para realizar pruebas. El método de conjunto de reglas de menor granularidad selecciona un conjunto de reglas o un grupo más grande de reglas según los estándares de accesibilidad comunes. El método de estándares de reglas con un nivel de granularidad ligeramente mayor, también conocido como etiquetas, selecciona reglas en función de en qué áreas de un estándar de accesibilidad más amplio se encuentran. Finalmente, hay tres opciones de configuración con una regla a la vez. En conjunto, estos métodos de cadena le permiten ajustar su escaneo para ejecutar con precisión las reglas que desea.
Para obtener información sobre las reglas de axe-core, visita la página de descripción general del conjunto de reglas.
Selección del conjunto de reglas
Este método selecciona reglas por su asociación más agregada: un conjunto de reglas. Un conjunto de reglas es una colección de todas las reglas que pertenecen a un estándar de accesibilidad de toda la industria. Conjuntos de reglas para WCAG 2.0, 2.1 y 2.2; ADA Sección 508; Trusted Tester v5; y EN 301 549. Además, las reglas de mejores prácticas se pueden habilitar con un indicador booleano.
Los conjuntos de reglas a menudo se componen de varias etiquetas, que son reglas agrupadas por distinciones más específicas. Por ejemplo, el conjunto de reglas contiene todas las reglas etiquetadas como wcag2
reglas WCAG 2.0 nivel A, wcag2a
reglas WCAG 2.0 nivel AA y wcag2aa
reglas WCAG 2.0 nivel AAA. wcag2aaa
Utilice esta opción cuando desee seleccionar un conjunto de reglas sin modificar.
axeselenium.forRuleset("wcag2.1").run(axedriver);
Este escaneo se ejecutará únicamente con reglas WCAG 2.1.
Para habilitar las reglas de mejores prácticas, utilice la segunda forma de forRuleset
.
axeselenium.forRuleset("wcag2.1", true).run(axedriver);
Selección estándar
El método de cadena o la etiqueta de estándar de accesibilidad permite un poco más de granularidad dentro de los conjuntos de reglas de axe-core. Para las reglas basadas en WCAG, este método le permite seleccionar solo reglas etiquetadas como nivel A o nivel AA. Esta lista desglosa los nombres de etiquetas disponibles y sus estándares correspondientes.
Esta opción es particularmente útil cuando solo se prueba una parte específica de un conjunto de reglas, por ejemplo, solo las reglas de nivel A según WCAG 2.0.
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 bien no se define explícitamente como parte de ningún estándar de accesibilidad, ofrecemos una serie de reglas que llamamos "mejores prácticas". Si bien no es estrictamente necesario, probar con estas reglas ayudará a que su sitio web sea lo más equitativo posible en su uso.
Se puede seleccionar un único estándar de la siguiente manera:
axeselenium.accordingTo("wcag2a").run(axedriver);
Este análisis se ejecutará únicamente con reglas etiquetadas según el nivel A de WCAG 2.0
Además, se pueden especificar varias etiquetas para seleccionar múltiples estándares de accesibilidad:
axeselenium.accordingTo("wcag2a", "section508").run(axedriver);
Estos escaneos ejecutarán las reglas etiquetadas bajo WCAG 2.0 nivel A y la Sección 508 de ADA.
Selección de reglas
Finalmente, puedes modificar tu conjunto de reglas mediante una sola regla. Para obtener información sobre los nombres de todas las reglas de axe-core y lo que prueba cada regla, consulte la documentación de descripciones de las reglas de axe-core.
Estos métodos funcionan bien cuando el grupo final de reglas deseado solo se diferencia de un conjunto de reglas o estándar/etiqueta existente en unas pocas reglas individuales. Para crear un conjunto de reglas completamente personalizado, consulte nuestras opciones de reglas personalizadas.
Comprobación de reglas adicionales
El método de cadena de verificación le permite agregar reglas adicionales para probar además de su conjunto de reglas estándar.
Este método se puede utilizar para comprobar una sola regla adicional:
axeselenium.checking("label").run(axedriver);
Donde el escaneo se ejecuta con el conjunto de reglas predeterminado además de la regla "label".
También se puede utilizar para comprobar varias reglas adicionales de dos maneras diferentes:
axeselenium.checking("label", "tabindex").run(axedriver);
axeselenium.checking("label").checking("tabindex").run(axedriver);
Donde el escaneo se ejecuta con el conjunto de reglas predeterminado además de las reglas "label" y "tabindex".
También se puede utilizar para agregar una o varias reglas a una etiqueta específica:
axeselenium.accordingTo("wcag2a").checking("tabindex").run(axedriver);
Donde el escaneo se ejecuta probando contra las reglas WCAG 2.0 nivel A, con el agregado de la regla "tabindex".
Saltarse reglas
De manera similar al método de verificación, el método de salto cambia las reglas predeterminadas que serán utilizadas por las reglas especificadas. Sin embargo, en lugar de agregarlo al conjunto de reglas, el método de salto elimina las reglas especificadas de las utilizadas para probar la página. Su configuración y uso son idénticos al método de verificación, así que consulte la sección anterior para obtener más detalles y ejemplos sobre cómo usarlo. Un detalle importante para recordar es que los métodos de verificación y omisión se pueden encadenar entre sí para crear conjuntos de reglas personalizados de manera mucho más sencilla que utilizando solo los métodos de verificación o de ignoración.
axeselenium.accordingTo("wcag2a").checking("tabindex").skipping("label").run(axedriver);
Este ejemplo muestra una prueba de escaneo contra las reglas de nivel A de WCAG 2.0, con la adición de la regla "tabindex" y la eliminación de la regla "label".
Comprobación solamente
El método de solo verificación verifica únicamente las reglas especificadas. Cualquier regla no especificada explícitamente no se incluirá en el escaneo.
Este método de cadena se puede utilizar para especificar una sola regla:
axeselenium.checkingOnly("tabindex").run(axedriver);
Donde el escaneo se ejecuta solo con la regla "tabindex".
También se puede utilizar para especificar más de una regla de estas dos maneras:
axeselenium.checkingOnly("label", "tabindex").run(axedriver);
axeselenium.checkingOnly("label").checkingOnly("tabindex").run(axedriver);
Donde el escaneo se ejecuta solo con las reglas "label" y "tabindex".
Deshabilitar las pruebas iframe
En páginas volátiles, los iframes pueden causar problemas. Es necesario inyectar Axe en cada iframe y
Configurado de la misma manera en cada iframe. Si se agregan o eliminan iframes mientras está AxeSelenium::run
Al probar su página, es posible que se produzcan excepciones o un comportamiento inesperado. Como un
A prueba de fallos, AxeSelenium
expone un método para deshabilitar toda interacción de iframe AxeSelenium::disableIframeTesting
.
Cuando está habilitado, axe-core no se inyectará en iframes en la página, ni se ejecutará en dichos iframes. Solo se comprobará la página de nivel superior.
Se puede utilizar de la siguiente manera:
axeselenium.disableIframeTesting().run(axedriver);
No se recomienda el uso de este método. Siempre es mejor esperar a que tu página se estabilice antes de pasarla a AxeSelenium::run
.
Servicio de uso
Obtenga información sobre las tendencias de uso de axe DevTools dentro de su organización
El servicio de uso se puede configurar a través de variables de entorno o métodos en tiempo de ejecución. Cuando se utilizan ambos, se utilizan los valores de los métodos. Nota: no todos los campos de datos del servicio de uso se pueden configurar a través de métodos.
De forma predeterminada, el servicio de uso está deshabilitado y los resultados de URL predeterminados se envían a 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 |
Habilitar seguimiento
Este método permite a los usuarios optar por enviar o no datos al servicio de uso.
.enableTracking(boolean state)
Establecer URL de seguimiento
Este método permite a los usuarios cambiar a dónde se envían los datos de las métricas de uso. El valor predeterminado es https://usage.deque.com
.setTrackingUrl(String url)
Establecer ID distinto
Este método permite a los usuarios cambiar la identificación distinta que se almacena/usa.
.setDistinctId(String distinctId)
Próximos pasos
Una vez que esté escribiendo pruebas con axe DevTools, lea más sobre cómo usar los resultados para escribir pruebas personalizadas más detalladas, o lea sobre cómo usar el generador de informes para generar informes de los análisis de accesibilidad.
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.