Logo de QANode

Nodo Web Flow

El nodo Web Flow permite automatizar interacciones con páginas web usando selectores CSS, XPath, data-testid y texto. Es ideal cuando necesitas selectores tradicionales y control detallado sobre la localización de elementos.

Consejo: Si prefieres localizadores semánticos basados en accesibilidad (getByRole, getByLabel, etc.), usa el nodo Smart Locators.


Descripción General

PropiedadValor
Tipoweb-flow
CategoríaWeb
ColorAzul (#3b82f6)
Entradain
Salidaout

Configuración General

CampoTipoPredeterminadoDescripción
Modo de Sesiónnew / reusenewNueva sesión o reutilizar una existente
Session IDstringID de la sesión a reutilizar (cuando reuse)
HeadlessbooleantrueEjecutar sin interfaz gráfica visible
Estrategia de StorageinMemory / persistedinMemoryPersistir cookies/localStorage entre ejecuciones
Clave de StoragestringIdentificador del storage persistido
Navegadorchromium / firefox / webkitchromiumNavegador a usar en la ejecución
Dispositivodesktop / mobiledesktopModo de emulación
Viewportpreset o custom1920x1080Tamaño de ventana (modo Desktop)
Ancho / AltonumberDimensiones personalizadas (cuando custom)
Modelo de DispositivostringiPhone 14Dispositivo a emular (modo Mobile)

Navegador

ValorNavegador
chromiumChrome / Chromium (predeterminado)
firefoxFirefox
webkitSafari / WebKit

Firefox y WebKit se descargan automáticamente en el primer uso si no están instalados.

Dispositivo — Desktop

Presets de viewport disponibles:

PresetResolución
Full HD (predeterminado)1920 × 1080
2K2560 × 1440
4K3840 × 2160
Laptop1440 × 900
HD1366 × 768
WXGA1280 × 720
XGA1024 × 768
Personalizadoancho y alto libres

Dispositivo — Mobile

Usa perfiles reales de Playwright (viewport, user agent, escala de píxeles, touch). Modelos disponibles:

iOS: iPhone SE, iPhone 12, iPhone 13, iPhone 14, iPhone 14 Pro, iPhone 15, iPhone 15 Pro, iPad Mini, iPad (gen 9), iPad Pro 11

Android: Pixel 5, Pixel 7, Galaxy S8, Galaxy S9+, Galaxy Tab S4

En modo Mobile con Firefox, las opciones isMobile y hasTouch se eliminan automáticamente (no son compatibles con Firefox en Playwright). El viewport y el user agent del dispositivo se aplican igualmente.

Modo de Sesión

  • Nueva Sesión (new): Abre un nuevo navegador para cada ejecución. Ideal para pruebas aisladas.
  • Reutilizar Sesión (reuse): Usa una sesión de navegador ya abierta por otro nodo Web Flow/Smart Locators. Útil para dividir pruebas largas en múltiples nodos manteniendo el mismo navegador y cookies.

Estrategia de Storage

  • En Memoria (inMemory): Las cookies y el localStorage se descartan al final de la ejecución.
  • Persistido (persisted): Las cookies y el localStorage se guardan con una clave y pueden reutilizarse en ejecuciones futuras. Ideal para mantener sesiones de inicio de sesión entre ejecuciones.

Pasos (Web Steps)

El nodo Web Flow ejecuta una secuencia de pasos configurables. Cada paso representa una acción en el navegador.

Acciones Disponibles

AcciónColorDescripción
navigateAzulNavegar a una URL
clickAmarilloHacer clic en un elemento
typeVerdeEscribir texto en un campo
waitMoradoEsperar una condición o tiempo
assertRojoVerificar una condición en la página
extractCianExtraer datos de un elemento
hoverCianPasar el mouse sobre un elemento
scrollAmarilloDesplazar la página
refreshNaranjaRecargar la página
selectMoradoSeleccionar una opción de un dropdown
press-keyVerdePresionar una tecla
frameGrisAlternar entre frames/iframes

Estrategias de Selector

Web Flow usa estrategias de selector para localizar elementos en la página. Cada paso puede tener múltiples estrategias ordenadas por prioridad — si la primera no encuentra el elemento, se intenta con la siguiente.

EstrategiaDescripciónEjemplo
cssSelector CSS#login-button, .submit-btn, [data-testid="login"]
dataTestIdAtributo data-testidlogin-button
roleARIA rolebutton
textTexto visibleIngresar
xpathExpresión XPath//button[@type="submit"]

Prioridad recomendada:

  1. dataTestId — Más estable, no cambia con el diseño
  2. css con ID — Generalmente único en la página
  3. role — Basado en accesibilidad
  4. text — Puede cambiar con traducciones
  5. xpath — Último recurso, más frágil

Detalles de las Acciones

navigate

Navega a una URL específica.

CampoTipoDescripción
URLstringURL de destino (soporta expresiones {{ }})

Ejemplo:

URL: https://misitio.com/login
URL: {{ variables.BASE_URL }}/dashboard

click

Hace clic en un elemento de la página.

CampoTipoDescripción
SelectoresarrayEstrategias de selector
IntentosnumberNúmero de intentos (predeterminado: 3)

El click intenta localizar el elemento usando cada estrategia en orden. Si falla, espera y vuelve a intentar (hasta el número de intentos configurado).


type

Escribe texto en un campo de entrada.

CampoTipoDescripción
SelectoresarrayEstrategias de selector
TextostringTexto a escribir (soporta {{ }})
Limpiar PrimerobooleanLimpia el campo antes de escribir

Nota: La acción type usa fill() de Playwright, que reemplaza el valor del campo de forma instantánea. Para simular la escritura carácter por carácter, usa el nodo Smart Locators con la acción type (pressSequentially).


wait

Espera una condición antes de continuar.

CampoTipoDescripción
ModostringTipo de espera
Timeout (ms)numberTiempo máximo de espera
SelectoresarraySelectores (modo selectorVisible)

Modos:

ModoDescripción
networkIdleEspera a que terminen todas las solicitudes de red
selectorVisibleEspera a que un elemento sea visible
timeoutEspera un tiempo fijo (ms)

assert

Verifica una condición en la página. Si la condición falla, el paso se marca como fallido.

CampoTipoDescripción
NombrestringIdentificador de la aserción
ModostringTipo de verificación
SelectoresarraySelectores del elemento
Texto EsperadostringValor esperado
Case SensitivebooleanSensible a mayúsculas
Continuar en FallobooleanNo fallar el nodo completo

Modos:

ModoDescripción
elementExistsVerifica si el elemento existe en la página
textContainsVerifica si el texto del elemento contiene el valor esperado
textEqualsVerifica si el texto del elemento es exactamente el valor esperado

Los resultados de las aserciones están disponibles en los outputs:

{{ steps["web-flow"].outputs.asserts.nombreAsercion }}  →  true o false

extract

Extrae datos de un elemento de la página.

CampoTipoDescripción
NombrestringNombre de la extracción (clave en el output)
SelectoresarraySelectores del elemento
AtributostringQué extraer

Atributos:

AtributoDescripción
textTexto visible del elemento
innerHTMLHTML interno
hrefURL de enlaces
srcURL de imágenes
valueValor de campos de formulario

Los datos extraídos están disponibles en los outputs:

{{ steps["web-flow"].outputs.extracts.nombreExtraccion }}

hover

Pasa el mouse sobre un elemento.

CampoTipoDescripción
SelectoresarraySelectores del elemento
IntentosnumberNúmero de intentos
Espera Después (ms)numberTiempo de espera tras el hover

scroll

Desplaza la página o hasta un elemento.

CampoTipoDescripción
ModostringTipo de desplazamiento
PíxelesnumberCantidad de píxeles (modo by)
Espera Después (ms)numberTiempo de espera tras desplazar
SelectoresarraySelectores (modo toSelector)

Modos:

ModoDescripción
toSelectorDesplaza hasta que el elemento sea visible
byDesplaza una cantidad fija de píxeles
toBottomDesplaza hasta el final de la página

refresh

Recarga la página actual.

CampoTipoDescripción
Esperar HastastringEvento de carga
Espera Después (ms)numberTiempo adicional tras recargar

Eventos:

EventoDescripción
loadPágina completamente cargada
domcontentloadedDOM listo (más rápido)
networkidleSin solicitudes de red pendientes

select

Selecciona una opción de un elemento <select> (dropdown).

CampoTipoDescripción
SelectoresarraySelectores del dropdown
Seleccionar PorstringCriterio de selección
ValorstringValor correspondiente al criterio

Criterios:

CriterioDescripción
valuePor el atributo value de la opción
labelPor el texto visible de la opción
indexPor el índice (posición) de la opción

press-key

Presiona una tecla del teclado.

CampoTipoDescripción
TeclastringNombre de la tecla (ej: Enter, Tab, Escape)
SelectoresarraySelectores del elemento enfocado (opcional)
Espera Después (ms)numberTiempo de espera tras presionar

frame

Cambia el contexto a un iframe.

CampoTipoDescripción
ModostringMétodo de selección del frame
SelectoresarraySelectores (modo selector)
Nombre del FramestringNombre (modo name)
Timeout (ms)numberTiempo máximo de espera

Modos:

ModoDescripción
selectorLocaliza el iframe por selector CSS
nameLocaliza el iframe por el atributo name
mainVuelve al contexto principal (fuera del iframe)

Evidencias (Screenshots)

Cada paso puede tener configuración de evidencia individual:

CampoTipoDescripción
Capturar ScreenshotbooleanActivar captura
Modobefore / after / bothCuándo capturar
Plantilla de NombrestringNombre personalizado del archivo
Esperar CargastringEvento antes de capturar
Delay (ms)numberTiempo adicional antes de la captura

Prueba de Accesibilidad

Web Flow soporta escaneo automático de accesibilidad con axe-core integrado. Cuando está habilitado, el nodo audita la página después de cada paso que captura un screenshot, identificando violaciones WCAG/ARIA y marcando visualmente los elementos afectados.

Configuración

CampoTipoPredeterminadoDescripción
Accessibility ScanbooleanfalseActiva el escaneo axe-core
Fail When Severity >=none / minor / moderate / serious / criticalseriousNivel mínimo de severidad que reprueba el nodo

Cómo Funciona

Después de cada paso que toma un screenshot, axe-core es inyectado en la página y analiza el documento en busca de violaciones. Las violaciones se dibujan sobre el screenshot con cajas de colores alrededor de los elementos afectados y un panel de conteo en la esquina:

SeveridadColorDescripción
Critical🔴 RojoBloquea el acceso a usuarios con discapacidad
Serious🟠 NaranjaCausa dificultad significativa
Moderate🟡 AmarilloCausa alguna dificultad
Minor🔵 AzulMejora recomendada

Al final de la ejecución se generan automáticamente:

  • Screenshots por paso — overlay con cajas de colores + panel Critical N / Serious N / Moderate N / Minor N + top 2 reglas
  • Gráfico de severidad{id}-accessibility-severity-chart.png — distribución por nivel
  • Gráfico de reglas{id}-accessibility-rule-chart.png — top 8 reglas más violadas
  • Reporte JSON{id}-accessibility-report.json — datos completos de todas las violaciones

Criterio de Aprobación

El nodo falla si hay cualquier violación con severidad igual o superior al umbral configurado. Usa none para nunca reprobar (recolectar métricas sin bloquear el flujo).

Ejemplo: Auditoría de inicio de sesión

Configuración del nodo:
  Accessibility Scan: true
  Fail When Severity >= : serious

Pasos:
1. navigate → https://misitio.com/login    (sin screenshot = sin escaneo)
2. type → #email → "{{ variables.EMAIL }}" → screenshot after → escaneo ejecutado
3. click → button[type="submit"]            → screenshot after → escaneo ejecutado
4. wait → networkIdle
5. assert → loginOk → hasURL → /dashboard  → screenshot after → escaneo ejecutado

Si cualquier paso tiene una violación serious o critical, el nodo falla con:

"Accessibility findings at or above "serious" were detected."


Outputs

OutputTipoDescripción
sessionIdstringID de la sesión del navegador
extractsobjectDatos extraídos (clave → valor)
assertsobjectResultados de las aserciones (clave → boolean)
accessibilityPassedbooleanSi pasó el criterio de severidad (cuando está habilitado)
accessibilityViolationCountnumberTotal de instancias de violación encontradas
accessibilityobjectReporte completo de accesibilidad
accessibility.thresholdstringUmbral configurado
accessibility.scanCountnumberNúmero de checkpoints escaneados
accessibility.countsobject{ minor, moderate, serious, critical } — totales agregados
accessibility.stepsarrayDetalles por checkpoint (url, counts, topRules)
accessibility.rulesarrayTop 10 reglas violadas en todo el flujo

Ejemplo Completo

Inicio de sesión en un sitio

Pasos configurados en el nodo:

  1. navigatehttps://misitio.com/login
  2. type → Selector: #email, Texto: {{ variables.USER_EMAIL }}
  3. type → Selector: #password, Texto: {{ variables.USER_PASSWORD }}
  4. click → Selector: button[type="submit"]
  5. wait → Modo: networkIdle
  6. assert → Nombre: loginOk, Modo: textContains, Selector: .welcome, Texto: Bienvenido
  7. extract → Nombre: userName, Selector: .user-name, Atributo: text

Resultado: Tras la ejecución, los outputs serán:

{
  "sessionId": "abc-123",
  "extracts": { "userName": "João Silva" },
  "asserts": { "loginOk": true }
}

Consejos

  • Usa data-testid como estrategia principal de selector — es más estable
  • Configura screenshots en los pasos críticos para facilitar la depuración
  • Usa reutilización de sesión cuando múltiples nodos Web Flow/Smart Locators necesiten compartir el mismo navegador
  • Para formularios con autocompletado o máscaras, considera usar el nodo Smart Locators con la acción type (escritura carácter por carácter)
  • El modo headless: false es útil durante el desarrollo para visualizar lo que hace la prueba