GUÍA DE VALIDACIONES Y VERIFICACIONES - HAKALAB FRAMEWORK
=========================================================

Esta guía explica cómo realizar validaciones y verificaciones completas en tus pruebas automatizadas.

ÍNDICE
======
1. Validaciones de Texto
2. Validaciones de Elementos
3. Validaciones de Estado
4. Validaciones de Contenido
5. Validaciones de URLs
6. Validaciones Numéricas
7. Validaciones de Variables
8. Ejemplos Prácticos

=========================================================

1. VALIDACIONES DE TEXTO
========================

Verificar Presencia de Texto:
- debería ver el texto "Bienvenido al sistema"
- I should see text "Welcome to the system"
- debería ver texto que contiene "Usuario logueado"
- I should see text containing "User logged in"
- el elemento "título" con identificador "#page-title" debería contener el texto "Dashboard"
- element "title" with identifier "#page-title" should contain text "Dashboard"

Verificar Ausencia de Texto:
- no debería ver el texto "Error de conexión"
- I should not see text "Connection error"
- el elemento "mensaje" con identificador "#status-msg" no debería contener el texto "Fallido"
- element "message" with identifier "#status-msg" should not contain text "Failed"

Validaciones de Texto Avanzadas:
- debería ver texto que coincide con el patrón "Usuario \d+ creado"
- I should see text matching pattern "User \d+ created"
- debería ver el texto "Producto" exactamente 5 veces
- I should see text "Product" exactly 5 times
- debería ver el texto "CONFIRMADO" en mayúsculas
- I should see text "CONFIRMED" in uppercase

=========================================================

2. VALIDACIONES DE ELEMENTOS
============================

Existencia de Elementos:
- el elemento "botón guardar" con identificador "#save-btn" debería existir
- element "save button" with identifier "#save-btn" should exist
- el elemento "mensaje error" con identificador ".error-msg" no debería existir
- element "error message" with identifier ".error-msg" should not exist
- deberían existir 3 elementos con identificador ".product-card"
- there should be 3 elements with identifier ".product-card"

Visibilidad de Elementos:
- el elemento "modal" con identificador "#confirmation-modal" debería ser visible
- element "modal" with identifier "#confirmation-modal" should be visible
- el elemento "spinner" con identificador "#loading-spinner" debería estar oculto
- element "spinner" with identifier "#loading-spinner" should be hidden
- el elemento "banner" con identificador "#top-banner" debería estar en el viewport
- element "banner" with identifier "#top-banner" should be in viewport

Estado de Elementos:
- el botón "enviar" con identificador "#submit-btn" debería estar habilitado
- button "submit" with identifier "#submit-btn" should be enabled
- el campo "código" con identificador "#code-input" debería estar deshabilitado
- field "code" with identifier "#code-input" should be disabled

=========================================================

3. VALIDACIONES DE ESTADO
=========================

Checkboxes y Radios:
- el checkbox "términos" con identificador "#terms-checkbox" debería estar marcado
- checkbox "terms" with identifier "#terms-checkbox" should be checked
- el radio "opción1" con identificador "#radio-option1" no debería estar seleccionado
- radio "option1" with identifier "#radio-option1" should not be selected

Campos de Formulario:
- el campo "email" con identificador "#email-input" debería tener el valor "test@example.com"
- field "email" with identifier "#email-input" should have value "test@example.com"
- el campo "contraseña" con identificador "#password-input" debería estar vacío
- field "password" with identifier "#password-input" should be empty

Atributos:
- el elemento "enlace" con identificador "#external-link" debería tener el atributo "target" con valor "_blank"
- element "link" with identifier "#external-link" should have attribute "target" with value "_blank"
- el elemento "imagen" con identificador "#logo" debería tener el atributo "alt"
- element "image" with identifier "#logo" should have attribute "alt"

=========================================================

4. VALIDACIONES DE CONTENIDO
============================

Validar Estructura:
- la página debería tener un elemento "h1" con el texto "Título Principal"
- page should have "h1" element with text "Main Title"
- debería haber una lista con al menos 5 elementos
- there should be a list with at least 5 items

Validar Tablas:
- la tabla "usuarios" con identificador "#users-table" debería tener 10 filas
- table "users" with identifier "#users-table" should have 10 rows
- la tabla "datos" con identificador "#data-table" debería tener 5 columnas
- table "data" with identifier "#data-table" should have 5 columns
- la celda de la fila 2 columna 3 de la tabla "resultados" debería contener "Aprobado"
- cell at row 2 column 3 of table "results" should contain "Passed"

Validar Listas:
- la lista "categorías" con identificador "#categories-list" debería contener "Electrónica"
- list "categories" with identifier "#categories-list" should contain "Electronics"
- el elemento 1 de la lista "productos" debería ser "Laptop"
- element 1 of list "products" should be "Laptop"

=========================================================

5. VALIDACIONES DE URLs
=======================

URL Actual:
- la url actual debería ser "https://example.com/dashboard"
- current URL should be "https://example.com/dashboard"
- la url actual debería contener "/admin"
- current URL should contain "/admin"
- la url actual debería coincidir con el patrón "https://example.com/user/\d+"
- current URL should match pattern "https://example.com/user/\d+"

Título de Página:
- el título de la página debería ser "Dashboard - Mi Aplicación"
- page title should be "Dashboard - My Application"
- el título de la página debería contener "Bienvenido"
- page title should contain "Welcome"

=========================================================

6. VALIDACIONES NUMÉRICAS
=========================

Comparaciones Numéricas:
- la variable "contador" debería ser igual a 5
- variable "counter" should be equal to 5
- la variable "precio" debería ser mayor que 100
- variable "price" should be greater than 100
- la variable "edad" debería ser menor o igual a 18
- variable "age" should be less than or equal to 18

Validar Rangos:
- la variable "porcentaje" debería estar entre 0 y 100
- variable "percentage" should be between 0 and 100
- el tiempo de respuesta debería ser menor que 2000 milisegundos
- response time should be less than 2000 milliseconds

Contar Elementos:
- debería haber exactamente 3 elementos con la clase "error"
- there should be exactly 3 elements with class "error"
- debería haber al menos 5 elementos con el identificador ".product"
- there should be at least 5 elements with identifier ".product"

=========================================================

7. VALIDACIONES DE VARIABLES
============================

Existencia de Variables:
- la variable "usuario_id" debería existir
- variable "user_id" should exist
- la variable "token" no debería existir
- variable "token" should not exist

Tipo de Variable:
- la variable "edad" debería ser un número
- variable "age" should be a number
- la variable "nombre" debería ser texto
- variable "name" should be text
- la variable "activo" debería ser booleano
- variable "active" should be boolean

Contenido de Variable:
- la variable "email" debería contener "@"
- variable "email" should contain "@"
- la variable "estado" debería ser igual a "completado"
- variable "status" should be equal to "completed"
- la variable "lista" debería tener 5 elementos
- variable "list" should have 5 elements

=========================================================

8. EJEMPLOS PRÁCTICOS
=====================

Ejemplo 1: Validación de Formulario de Registro

Feature: Validación de formulario de registro

  Scenario: Validar campos del formulario
    Given voy a la url "https://example.com/register"
    
    # Validar que el formulario existe
    Then debería ver el elemento "formulario" con identificador "#register-form"
    And debería ver el texto "Crear Cuenta"
    
    # Validar campos
    Then el campo "nombre" con identificador "#name-input" debería estar vacío
    And el campo "email" con identificador "#email-input" debería estar vacío
    And el campo "contraseña" con identificador "#password-input" debería estar deshabilitado
    
    # Validar botón
    Then el botón "registrar" con identificador "#register-btn" debería estar deshabilitado
    
    # Llenar formulario
    When relleno el campo "nombre" con "Juan Pérez" con identificador "#name-input"
    And relleno el campo "email" con "juan@example.com" con identificador "#email-input"
    And relleno el campo "contraseña" con "password123" con identificador "#password-input"
    And marco el checkbox "términos" con identificador "#terms-checkbox"
    
    # Validar cambios
    Then el campo "nombre" con identificador "#name-input" debería tener el valor "Juan Pérez"
    And el checkbox "términos" con identificador "#terms-checkbox" debería estar marcado
    And el botón "registrar" con identificador "#register-btn" debería estar habilitado
    
    # Enviar formulario
    When hago click en el botón "registrar" con identificador "#register-btn"
    
    # Validar resultado
    Then la url actual debería contener "/dashboard"
    And debería ver el texto "Bienvenido Juan"
    And no debería ver el elemento "formulario" con identificador "#register-form"

Ejemplo 2: Validación de Tabla de Datos

Feature: Validación de tabla de productos

  Scenario: Verificar contenido de tabla
    Given voy a la url "https://example.com/products"
    
    # Validar estructura de tabla
    Then la tabla "productos" con identificador "#products-table" debería existir
    And la tabla "productos" con identificador "#products-table" debería tener 5 columnas
    And la tabla "productos" con identificador "#products-table" debería tener al menos 3 filas
    
    # Validar encabezados
    Then la celda de la fila 1 columna 1 de la tabla "productos" debería contener "Nombre"
    And la celda de la fila 1 columna 2 de la tabla "productos" debería contener "Precio"
    And la celda de la fila 1 columna 3 de la tabla "productos" debería contener "Stock"
    
    # Validar datos
    Then la celda de la fila 2 columna 1 de la tabla "productos" debería contener "Laptop"
    And la celda de la fila 2 columna 2 de la tabla "productos" debería contener "999.99"
    And la celda de la fila 2 columna 3 de la tabla "productos" debería contener "10"
    
    # Validar que no hay errores
    Then no debería ver el texto "Error"
    And no debería ver el elemento "mensaje-error" con identificador ".error-message"

Ejemplo 3: Validación de Respuesta de API

Feature: Validación de respuesta de API

  Scenario: Verificar estructura de respuesta JSON
    When envío una petición GET a "/api/usuarios/123"
    
    # Validar código de estado
    Then la respuesta debería tener código de estado 200
    
    # Validar estructura JSON
    Then la respuesta debería ser JSON válido
    And la respuesta JSON debería tener el campo "id"
    And la respuesta JSON debería tener el campo "nombre"
    And la respuesta JSON debería tener el campo "email"
    
    # Validar tipos de datos
    Then el campo "id" de la respuesta debería ser un número
    And el campo "nombre" de la respuesta debería ser texto
    And el campo "activo" de la respuesta debería ser booleano
    
    # Validar valores específicos
    Then el campo "id" de la respuesta debería ser igual a 123
    And el campo "nombre" de la respuesta debería contener "Juan"
    And el campo "email" de la respuesta debería contener "@example.com"
    
    # Extraer y validar datos
    When extraigo el campo "id" de la respuesta y lo guardo en la variable "usuario_id"
    Then la variable "usuario_id" debería ser igual a 123

=========================================================

CONCLUSIÓN

Las validaciones son fundamentales para asegurar que tus pruebas automatizadas 
verifican correctamente el comportamiento de la aplicación. El framework proporciona 
una amplia gama de validaciones para cubrir todos los escenarios posibles.

=========================================================
Documento generado automáticamente - Hakalab Framework v1.3.0
Guía de Validaciones y Verificaciones
Fecha: Enero 2026
=========================================================
