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: Para flujos web nuevos grabados por la extensión, prefiera Smart Web Flow. Si prefiere localizadores semánticos basados en accesibilidad (getByRole, getByLabel, etc.) en flujos legados, use el nodo Smart Locators.


Descripción General

PropiedadValor
Tipoweb-flow
CategoríaWeb
Color🔵 Azul (#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)
Escaneo de accesibilidadbooleanfalseEjecuta diagnóstico integrado de accesibilidad
Auditoría de rendimientobooleanfalseRecoge métricas de carga y red durante la ejecución
Tiempo máximo de carga (ms)number4000Threshold para fallar cuando la carga de la página supera el límite
Tiempo máximo de respuesta de API (ms)number1500Threshold para APIs lentas capturadas en la sesión
Fallar en errores de solicitudbooleantrueFalla el nodo cuando las APIs monitoreadas devuelven errores HTTP/de red
Self HealingbooleanfalseIntenta recuperar pasos cuando el elemento original cambia y los selectores ya no encuentran el objetivo

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 compatible. Ú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.

Auditoría de Rendimiento

Cuando Auditoría de rendimiento está habilitada, Web Flow monitorea la sesión activa de Playwright y genera evidencias visuales de rendimiento por pantalla.

La función recoge:

  • Page Load
  • FCP (First Contentful Paint)
  • LCP (Largest Contentful Paint)
  • cantidad total de solicitudes
  • cantidad de solicitudes de API
  • errores de solicitud/API
  • APIs lentas por pantalla

Además del resumen global, QANode genera checkpoints por pantalla con:

  • nombre de la pantalla
  • URL
  • paso que originó la navegación
  • gráfico de las APIs más lentas
  • gráfico separado de errores de API cuando existan en esa pantalla

Outputs de Rendimiento

Cuando la auditoría está activa, el nodo expone:

  • performancePassed
  • performanceRequestCount
  • performanceApiRequestCount
  • performanceErrorCount
  • performanceSlowRequestCount
  • performance

El objeto performance contiene un resumen estructurado de la ejecución, incluidos los checkpoints por pantalla.

Self Healing

Cuando Self Healing está habilitado, Web Flow puede recuperar automáticamente un paso cuando el objetivo esperado y sus selectorStrategies dejan de funcionar.

El mecanismo considera señales como:

  • texto visible y nombre accesible
  • label, placeholder, title, alt
  • data-testid, id y name
  • role del elemento
  • contexto estructural de la página, como contenedor, formulario, heading y región visual

Esto ayuda en cambios comunes de interfaz, por ejemplo:

  • diferencias entre mayúsculas y minúsculas
  • texto con o sin acentos
  • pequeños cambios de etiqueta
  • cambios simples de sinónimos, como SiguienteContinuar

Self healing es conservador y solo se aplica cuando existe un candidato fuerte y claramente mejor que las alternativas, reduciendo falsos positivos en pantallas con varios botones parecidos.

Cuando ocurre una recuperación, los detalles de la ejecución muestran:

  • el paso afectado
  • la confianza de la recuperación
  • el selector utilizado
  • una acción Aplicar al Flujo para promover el selector recuperado al flujo original

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
switchPageMoradoCambiar a otra página o pestaña
clickAmarilloHacer clic en un elemento
typeVerdeEscribir texto en un campo
dragRosaArrastrar y soltar
waitMoradoEsperar una condición o tiempo
assertRojoVerificar una condición en la página
extractCianExtraer datos de un elemento
extractListEsmeraldaExtraer lista de elementos repetidos
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
clockVerde azuladoControlar el reloj del navegador
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

switchPage

Cambia la página activa cuando la automatización necesita continuar en otra pestaña o ventana abierta por el navegador.

CampoTipoDescripción
ModostringCómo elegir la pestaña: última abierta, siguiente, anterior o por coincidencia
URL contienestringFragmento opcional de la URL para localizar la pestaña
Título contienestringFragmento opcional del título de la página
Esperar HastastringEvento de carga esperado después del cambio
Timeout (ms)numberTiempo máximo para encontrar/cargar la pestaña

Modos:

ModoDescripción
lastUsa la última pestaña abierta en el contexto del navegador
nextUsa la siguiente pestaña en relación con la actual
previousUsa la pestaña anterior en relación con la actual
matchBusca una pestaña por fragmento de URL y/o título

Cuando la extensión detecta un clic que abre nueva pestaña, puede grabar este paso automáticamente justo después del click. Esto evita que los próximos pasos intenten ejecutarse en la pestaña anterior.


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).


drag

Arrastra un elemento de origen y lo suelta sobre otro elemento o en coordenadas específicas de la página.

CampoTipoDescripción
Selectores de OrigenarrayEstrategias CSS/XPath del elemento que será arrastrado
Selectores de DestinoarrayEstrategias CSS/XPath del elemento donde será soltado
Destino X / YnumberCoordenadas absolutas que se muestran cuando no hay selector de destino
Esperar Después (ms)numberTiempo de espera después de soltar

Web Flow intenta ejecutar el drag con el método nativo de Playwright (dragTo) cuando origen y destino son identificables. Si el destino es un área libre, como un canvas o editor visual, usa movimiento real del mouse hasta Destino X / Y.

Cuando el paso viene de la extensión, el JSON puede incluir metadatos internos del gesto. Ayudan al ejecutor a reproducir el movimiento con precisión, pero no aparecen como campos principales en el panel.

Ejemplos de uso:

  • Mover cards en un Kanban
  • Arrastrar ítems a una lista
  • Soltar un nodo en un área libre del canvas
  • Probar ordenación o upload cuando la UI depende de drag/drop

Buenas prácticas:

  • Prefiere data-testid, data-qa o id estables para origen y destino
  • Usa coordenadas solo cuando el destino no tenga un elemento identificable
  • Captura screenshots before y after para facilitar la revisión visual
  • Si la página tiene elementos repetidos, prefiere selectores más específicos para evitar ambigüedad

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 }}

extractList

Itera sobre una lista de elementos repetidos (filas de tabla, cards, ítems de lista) y extrae campos nombrados de cada uno, produciendo un array de objetos como output.

CampoTipoDescripción
NombrestringNombre de la extracción (clave en el array de output)
Selector de ContenedorarrayEstrategias de selector CSS/XPath para encontrar el contenedor de la lista
Selector de ÍtemstringSelector CSS relativo al contenedor que selecciona cada ítem repetido
CamposarrayLista de campos a extraer de cada ítem

Configuración de Campos:

Sub-campoTipoDescripción
Nombre del CampostringClave en el objeto de output
SelectorstringSelector CSS relativo al ítem
AtributostringQué extraer: text (predeterminado), innerHTML, href, src, value

Ejemplo de output:

{
  "extracts": {
    "productos": [
      { "nombre": "Ítem A", "precio": "$10.00" },
      { "nombre": "Ítem B", "precio": "$25.00" }
    ]
  }
}

Grabación con la extensión: Usa Ctrl+Shift+E en el Chrome Recorder para grabar una extracción de lista en dos pasos: primero haz clic en el ítem repetido, luego haz clic en los campos a extraer dentro de él.


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

clock

Controla el reloj del navegador usando la API page.clock de Playwright. Es útil para probar reglas dependientes de fecha/hora, expiración de sesión, promociones temporales, bloqueos por horario, vencimientos, temporizadores y pantallas que cambian con el paso del tiempo.

CampoTipoDescripción
OperaciónsetFixedTime / fastForward / pauseAt / resumeOperación del reloj a ejecutar
Fecha / HorastringFecha/hora usada por setFixedTime y pauseAt
Duraciónstring / numberTiempo virtual avanzado por fastForward (1000, 05:00, 02:34:10)
Recargar página después de aplicarbooleanRecarga la página después de aplicar el clock cuando está activado
Esperar recarga hastaload / domcontentloaded / networkidleEvento de carga usado cuando la recarga está activada

Operaciones:

OperaciónComportamiento
setFixedTimeFija el reloj del navegador en una fecha/hora específica
fastForwardAvanza el tiempo virtual sin esperar tiempo real
pauseAtMueve a una fecha/hora específica y mantiene el reloj pausado
resumeReanuda el reloj controlado desde el tiempo emulado actual

Los nuevos pasos de clock comienzan con Recargar página después de aplicar desactivado por defecto. Esto conserva el estado actual de la pantalla y funciona mejor para páginas con temporizadores activos. Activa la recarga cuando la aplicación solo recalcula fecha/hora durante la carga de la página.


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