Ir al contenido

Arquitectura

Astur mantiene pequeña la experiencia de escribir tests y traslada el trabajo móvil costoso a agentes nativos de cada plataforma.

Test del usuario@astur-mobile/test
Runtime del corelocalizadores, esperas, aserciones
Protocoloselectores y comandos
Android
Driver de Androidciclo de vida con ADB
Agente UIAutomatorbúsqueda y acciones nativas
App de Androidapp bajo prueba
iOS
Driver de iOSciclo de vida con simctl y xcodebuild
Agente XCUITestbúsqueda y acciones nativas
App de iOSapp bajo prueba

La API pública sigue siendo al estilo Playwright:

await device.getByRole('button', { name: 'Sign in' }).tap();
await expect(device.getByText('Welcome')).toBeVisible();

El runtime que hay debajo se encarga de elegir el dispositivo, del ciclo de vida de la app, de la búsqueda nativa de localizadores, de las comprobaciones de accionabilidad, de los gestos, capturas, vídeo, trazas y del soporte para el Inspector y codegen.

El fichero fuente docs/architecture.md conserva diagramas Mermaid para quien lea el repositorio. La documentación pública en Astro usa una versión en MDX/CSS del mismo grafo, porque Starlight no renderiza bloques Mermaid sin añadir una integración específica.

Las pilas al estilo Appium suelen meter un servidor WebDriver entre el test y el framework de automatización nativo. Astur se ahorra esa capa extra de traducción de protocolo.

1El test llama a getByLabel("Login").tap()
2Astur envía un solo comando nativo: buscar, esperar, tocar
3El agente de la plataforma resuelve y actúa en local
4Astur recibe un resultado compacto, con tiempos y diagnósticos

Para las acciones habituales, Astur envía la intención una sola vez. El agente resuelve y actúa localmente, así que el host no tiene que descargar árboles de interfaz enormes una y otra vez solo para reintentar un localizador.

Astur sigue usando las herramientas de plataforma allí donde son la herramienta adecuada:

  • Ciclo de vida en Android: adb instala apps, lanza paquetes, hace capturas, graba vídeo y recoge logs.
  • Ciclo de vida en iOS: simctl, devicectl y xcodebuild gestionan simuladores, instalación y arranque de apps, capturas y el runner de XCUITest.
  • Interacción con elementos: los agentes nativos de Android e iOS resuelven búsquedas, esperas, toques, escritura, arrastres, deslizamientos y comandos de teclado.
  • Flutter (Android): cuando detecta un APK de Flutter, Astur lee el árbol de widgets en vivo a través del servicio Dart VM en lugar de UIAutomator, mientras ADB sigue encargándose del ciclo de vida y los gestos. Consulta Flutter y React Native.

Herramientas de ciclo de vida

Gestionan dispositivos, apps, capturas, vídeo y logs mediante ADB, simctl, devicectl y xcodebuild.

Agentes nativos persistentes

Ejecutan el sondeo de localizadores, las comprobaciones de accionabilidad y los gestos cerca del framework de interfaz de la plataforma.

Esta separación mantiene fiable el ciclo de vida sin meter comandos de shell lentos en el camino normal de interacción con elementos.

El Inspector de Astur usa el mismo runtime y el mismo modelo de selectores que los tests.

Pantalla en vivo
+
Árbol semántico
Ranking de localizadores
Código de @astur-mobile/test

El Inspector no se inventa un segundo sistema de localizadores. Cuando sugiere uno, graba un toque o exporta código, usa los mismos contratos de localizador —independientes de plataforma— que se ejecutan durante los tests.

  • Prefiere localizadores semánticos antes que coordenadas.
  • Mantén el sondeo nativo dentro del agente de la plataforma.
  • Usa capturas e instantáneas de la interfaz para diagnosticar, no como vía de control por defecto.
  • Mantén vivo un agente por worker de Playwright siempre que sea posible.
  • Reserva un dispositivo físico por worker; el paralelismo real exige varios dispositivos.
  • Cuando la configuración use un selector de dispositivo poco específico, deja que Astur elija uno disponible del conjunto local en vez de mandar a todos los workers al primero.
  • Reinicia o restablece la app entre specs solo cuando el aislamiento lo exija.
  • Mantén explícitos los requisitos de XCTest en iOS, en lugar de esconderlos detrás de WebDriver.

La mayoría de la gente instala:

Terminal window
npm install -D @astur-mobile/test astur-mobile

@astur-mobile/test aporta el fixture de Playwright y las aserciones. astur-mobile aporta la CLI, con doctor, devices, init, test y codegen. Los paquetes internos como @astur-mobile/core, @astur-mobile/android y @astur-mobile/ios se publican como paquetes npm normales para que el proyecto siga siendo modular, pero no deberías necesitar conectarlos a mano.