Axe DevTools RSpec
Instalación y uso de la gema axe-devtools-rspec para pruebas de accesibilidad basadas en RSpec
La gema axe-devtools-rspec proporciona matchers personalizados para evaluar si una página dada está axe limpia.
Esta gema se extiende sobre pasos proporcionados por la gema axe-core-rspec.
Configuración y uso
Asegúrate de tener acceso a Deque's registry. Si no, consulta el setup documentation.
Para configurar la gema RSpec, sigue estos pasos:
- Agrega
axe-devtools-rspeca tu archivo Gemfile o gemspec y ejecutabundle install.
gem "axe-devtools-rspec"spec.add_dependency "axe-devtools-rspec"- Requiere
axe-rspec, que extiendeRSpeccon matchers personalizados. Idealmente, esto se especificaría en el archivospec/spec_helper.rb.
require 'axe-rspec'- Usa la gema con el WebDriver de tu elección.
API
Matcher - Estar libre de errores de axe (be_axe_clean)
Para construir una verificación de accesibilidad RSpec con axe, comienza con expect(page).to be_axe_clean y añade cualquier cláusula necesaria. (El objeto page proviene de tu WebDriver elegido.)
Matcher - Ser auditado por accesibilidad (be_audited_for_accessibility)
Para construir una verificación de accesibilidad RSpec con axe, comienza con expect(page).to be_audited_for_accessibility y añade cualquier cláusula encadenable necesaria.
expect(page).to be_audited_for_accessibilityCláusulas
Las cláusulas son métodos encadenables para el matcher personalizadado be_axe_clean. Las cláusulas configurables permiten una mayor granularidad con las pruebas y las expectativas.
within- Cláusula de inclusión
La cláusula within especifica qué elementos de la página deben ser verificados. Se debe proporcionar un CSS selector válido. La cláusula within acepta un solo selector, una lista de selectores, o un hash que describe iframes con selectores.
Para más información, consulta el context parameter documentation.
Ejemplos:
# Simple selector
expect(page).to be_axe_clean.within '#selector1'
# Compound selector
# Include all elements with the class 'selector2' inside the element with id 'selector1'
expect(page).to be_audited_for_accessibility.within '#selector1 .selector2'
# Multiple selectors
# Include the element with id 'selector1' *and* all elements with class 'selector2'
expect(page).to be_audited_for_accessibility.within '#selector1', '.selector2'
# IFrame selector
# Include the element with id 'selector1' inside the IFrame with id 'frame1'
expect(page).to be_axe_clean.within iframe: '#frame1', selector: '#selector1'
# Multiple IFrame selectors
# Include the element with id 'selector1' inside the IFrame with id 'frame1'
# Include the element with id 'selector2' inside the IFrame with id 'frame2'
expect(page).to be_audited_for_accessibility.within(
{iframe: '#frame1', selector: '#selector1'},
{iframe: '#frame2', selector: '#selector2'}
)
# Simple selectors *and* IFrame selector
# Include the element with id 'selector1' *and* all elements with class 'selector2'
# Include the element with id 'selector3' inside the IFrame with id 'frame'
expect(page).to be_audited_for_accessibility.within '#selector1', '.selector2', iframe: '#frame', selector: '#selector3'
# Nested IFrame selectors
# Include the element selector1 inside the IFrame with id 'frame2',
# inside the IFrame with id 'frame1'
expect(page).to be_axe_clean.within(iframe: '#frame1', selector:
{iframe: '#frame2', selector: '#selector1'}
)excluding- Cláusula de exclusión
La cláusula excluding especifica qué elementos del documento deben ser ignorados. Se debe proporcionar un CSS selector válido. La cláusula excluding acepta un solo selector, una lista de selectores, o un hash que describe iframes con selectores.
Para más información, consulta el context parameter documentation.
Ejemplos:
# Simple selector
expect(page).to be_audited_for_accessibility.excluding '#selector1'
# Compound selector
# Exclude all elements with the class 'selector2' inside the element with id 'selector1'
expect(page).to be_axe_clean.excluding '#selector1 .selector2'
# Multiple selectors
# Exclude the element with id 'selector1' *and* all elements with class 'selector2'
expect(page).to be_audited_for_accessibility.excluding '#selector1', '.selector2'
# IFrame selector
# Exclude the element with id 'selector1' inside the IFrame with id 'frame1'
expect(page).to be_axe_clean.excluding iframe: '#frame1', selector: '#selector1'
# Multiple IFrame selectors
# Exclude the element with id 'selector1' inside the IFrame with id 'frame1'
# Exclude the element with id 'selector2' inside the IFrame with id 'frame2'
expect(page).to be_axe_clean.excluding(
{iframe: '#frame1', selector: '#selector1'},
{iframe: '#frame2', selector: '#selector2'}
)
# Simple selectors with IFrame selector
# Exclude the element with id 'selector1' *and* all elements with class 'selector2'
# Exclude the element with id 'selector3' inside the IFrame with id 'frame'
expect(page).to be_audited_for_accessibility.excluding '#selector1', '.selector2', iframe: '#frame', selector: '#selector3'
# Nested IFrame selectors
# Exclude the element selector1 inside the IFrame with id 'frame2',
# inside the IFrame with id 'frame1'
expect(page).to be_axe_clean.excluding(iframe: '#frame1', selector:
{iframe: '#frame2', selector: '#selector1'}
)according_to- Cláusula de estándar de accesibilidad (Tag)
La cláusula according_to especifica qué estándar (o estándares) de accesibilidad se deben usar para verificar la página. Los estándares de accesibilidad se especifican por nombre. La cláusula according_to acepta una sola etiqueta, o una lista de etiquetas.
Los tag names are documented aceptables así como un complete listing of rules que corresponde a cada etiqueta.
# Single standard
expect(page).to be_audited_for_accessibility.according_to :wcag2a
# Multiple standards
expect(page).to be_axe_clean.according_to :wcag2a, :section508checking- Cláusula de reglas de verificación
La cláusula checking especifica qué reglas adicionales verificar además de las etiquetas especificadas (si las hay) o el conjunto de reglas predeterminado. La cláusula checking acepta una sola regla, o una lista de reglas.
Para más información, consulta el rules documentation para una lista de IDs de reglas válidos.
# Checking a single rule
expect(page).to be_axe_clean.checking :label
# Checking multiple rules
expect(page).to be_axe_clean.checking :label, :tabindex
# Example specifying an additional best practice rule in addition to all rules in the WCAG2A standard
expect(page).to be_audited_for_accessibility.according_to(:wcag2a).checking(:tabindex)checking_only- Cláusula de reglas exclusivas
La cláusula checking_only especifica qué reglas verificar exclusivamente. Usar este matcher excluye todas reglas fuera de la lista.
# Checking a single rule
expect(page).to be_axe_clean.checking_only :label
# Checking multiple rules
expect(page).to be_audited_for_accessibility.checking_only :label, :tabindexskipping- Cláusula de omisión de reglas
La cláusula skipping especifica qué reglas omitir. Esto permite que se proporcione un estándar de accesibilidad (a través de la cláusula de etiqueta) mientras se ignora una regla particular. Las reglas se especifican por IDs de reglas separados por comas.
Para más información, consulta el rules documentation para una lista de IDs de reglas válidos.
# Skipping a single rule
expect(page).to be_axe_clean.skipping :label
# Skipping multiple rules
expect(page).to be_audited_for_accessibility.skipping :label, :tabindex
# Example specifying an additional best practice rule in addition to all rules in the WCAG2A standard
expect(page).to be_axe_clean.according_to(:wcag2a).skipping(:label)Cláusulas disponibles solo para el matcher - Ser auditado por accesibilidad
El comparador ser_auditado_para_accesibilidad ofrece soporte para dos cláusulas adicionales.
according_to_ruleset- Cláusula del conjunto de reglas
La cláusula del conjunto de reglas según_el_conjunto_de_reglas ayuda a especificar un único conjunto de reglas (por ejemplo, 508, wcag2, wcag2.1) para ser utilizado en la verificación de la página.
expect(page)
.to be_audited_for_accessibility
.according_to_ruleset('wcag2.1')logging_results- Cláusula de registros de resultados
Para registrar los resultados del comparador base y las cláusulas, invoque el método encadenable registro_de_resultados como se muestra a continuación.
expect(page)
.to be_audited_for_accessibility
.logging_results({
output_directory: 'attest-results',
test_machine: 'Jenkins CI Server',
test_suite_name: 'Landing Page',
ui_state: 'Page Load',
user_agent: 'Headless Chrome'
})Interoperabilidad entre cláusulas
Todas las cláusulas descritas pueden combinarse y encadenarse con métodos. A continuación se encuentran algunos ejemplos.
expect(page).to be_axe_clean.within('.main', '.header').excluding('.footer')
expect(page).to be_audited_for_accessibility.excluding('#sidebar').according_to(:wcag2a, :wcag2aa).skipping(:color-contrast)
expect(page).to be_axe_clean.within('.main').checking_only :document-title, :label
expect(page).to be_audited_for_accessibility.according_to(:best-practice).checking(:aria-roles, :definition-list)Uso avanzado de la API
Consulte advanced usage para ver cómo configurar la API para:
- Reglas personalizadas
- Ruta personalizada a la fuente de axe
- Grabación de uso
- Reportes
