Volver al blog
desarrollofrontendastroaccesibilidadtestingguíatutorial

Accesibilidad Web — Por Qué tu Proyecto Necesita Tests aXe

TroncoCorp 3 min de lectura

Por qué la accesibilidad importa

La accesibilidad web no es una característica opcional ni un “nice to have”. Es un requisito fundamental de cualquier infraestructura digital soberana. Si tu plataforma no puede ser utilizada por todas las personas independientemente de sus capacidades, no es verdaderamente soberana.

En TroncoCorp, la accesibilidad es parte del ADN del desarrollo. No la tratamos como una fase de QA — la integramos desde el diseño y la verificamos con tests automatizados en cada build.

El stack: axe-core + Playwright

Para mantener la accesibilidad bajo control usamos dos herramientas:

  • axe-core: El motor de análisis de accesibilidad más completo. Detecta violaciones de WCAG 2.1 niveles A y AA.
  • Playwright: Framework de tests E2E que nos permite navegar por el sitio y ejecutar axe-core en cada página crítica.

La integración es sorprendentemente simple:

import AxeBuilder from '@axe-core/playwright';

test('página sin violaciones críticas', async ({ page }) => {
  await page.goto('/');
  const results = await new AxeBuilder({ page })
    .withTags(['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa'])
    .analyze();
  const critical = results.violations.filter(v => v.impact === 'critical');
  expect(critical).toEqual([]);
});

Lo que hemos aprendido

1. El atributo lang es crítico

Uno de los errores más comunes es hardcodear el idioma en el HTML. En nuestro Layout.astro teníamos:

<html lang="es">

Esto funciona para páginas en español, pero rompe la accesibilidad para lectores de pantalla en las versiones en inglés. La solución:

<html lang={locale}>

Donde locale se determina dinámicamente según la URL.

El enlace “Saltar al contenido principal” es esencial para navegación por teclado. Pero si tu sitio es multilingüe, debe adaptarse:

<a href="#main-content" class="skip-link">
  {locale === 'en' ? 'Skip to main content' : 'Saltar al contenido principal'}
</a>

3. Tests de contraste de color

El color-contrast es la violación más común en sitios oscuros. Especialmente con texto gris claro (color: rgba(255,255,255,0.5)) sobre fondo negro. Aunque es un problema conocido y aceptado en diseño oscuro (muchos sitios como Vercel, GitHub, o Discord tienen el mismo patrón), es importante ser consciente de ello.

Métricas de nuestro ecosistema

Actualmente ejecutamos tests axe-core en 15 páginas clave del ecosistema. Resultados:

  • 0 violaciones críticas en todas las páginas
  • Contraste de color: 54 nodos en academia, 8 en ecosistema, 7 en blog, 6 en galería, etc. (serious, no critical)
  • Link names: 126 nodos en blog (por enlaces sociales con iconos SVG)

Cada violación “serious” tiene una razón de diseño justificada y está documentada. El objetivo es reducir gradualmente estos números sin comprometer la identidad visual del ecosistema.

Cómo empezar

Si tienes un proyecto Astro y quieres añadir tests de accesibilidad:

  1. Instala las dependencias: npm install -D @axe-core/playwright @playwright/test
  2. Crea un test que analice tus páginas principales
  3. Configura CI para que falle si hay violaciones críticas
  4. Repite en cada PR

La accesibilidad no es un destino — es un proceso continuo. Cada mejora, por pequeña que sea, hace que tu infraestructura sea más soberana.

Compartir

EN