ÍNDICE DE FUNCIONALIDADES - HAKALAB FRAMEWORK v1.3.0
====================================================

Este documento proporciona un índice completo de todas las funcionalidades disponibles 
en el Hakalab Framework v1.3.0.

ÍNDICE GENERAL
==============

1. NAVEGACIÓN Y URLS
2. INTERACCIÓN CON ELEMENTOS
3. VALIDACIONES Y VERIFICACIONES
4. VARIABLES Y DATOS
5. TIMING Y ESPERAS
6. ARCHIVOS Y DESCARGAS
7. TABLAS Y DATOS ESTRUCTURADOS
8. FORMULARIOS
9. MODALES Y DIÁLOGOS
10. VENTANAS Y PESTAÑAS
11. DRAG & DROP
12. COMBOBOX Y SELECTS
13. SCROLL
14. KEYBOARD Y MOUSE
15. ADVANCED STEPS
16. SALESFORCE
17. JIRA/XRAY
18. ENVIRONMENT
19. API TESTING
20. ACCESSIBILITY
21. PERFORMANCE
22. DATABASE
23. EMAIL
24. WEB ELEMENTS
25. RESPONSIVE
26. IFRAME
27. CSV FILES
28. OCR

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

1. NAVEGACIÓN Y URLS
====================

- voy a la url "https://example.com"
- recargo la página
- voy hacia atrás
- voy hacia adelante
- espero a que cargue la página
- abro una nueva pestaña
- cierro la pestaña actual
- cambio a la pestaña 1
- maximizo la ventana
- establezco el tamaño de ventana a 1920x1080

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

2. INTERACCIÓN CON ELEMENTOS
============================

- hago click en el elemento "button" con identificador "id"
- hago doble click en el elemento "button" con identificador "css"
- hago click derecho en el elemento "menu" con identificador "xpath"
- paso el mouse sobre el elemento "dropdown" con identificador "class"
- relleno el campo "username" con "admin" con identificador "name"
- limpio el campo "email" con identificador "id"
- escribo "texto" en el campo "search" con identificador "css"
- selecciono la opción "España" del dropdown "country" con identificador "name"
- marco el checkbox "terms" con identificador "id"
- desmarco el checkbox "newsletter" con identificador "class"
- presiono la tecla "Enter"
- subo el archivo "test.pdf" al elemento "upload" con identificador "id"

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

3. VALIDACIONES Y VERIFICACIONES
================================

- debería ver el texto "Bienvenido"
- no debería ver el texto "Error"
- el título de la página debería ser "Home"
- el título de la página debería contener "Dashboard"
- debería ver el elemento "welcome_message" con identificador "id"
- no debería ver el elemento "error_banner" con identificador "class"
- el elemento "title" debería contener el texto "Bienvenido" con identificador "css"
- el elemento "name" debería tener el texto exacto "Juan Pérez" con identificador "xpath"
- el campo "email" debería tener el valor "test@example.com" con identificador "name"
- el elemento "submit_button" debería estar habilitado con identificador "id"
- el elemento "loading" debería estar deshabilitado con identificador "class"
- el checkbox "terms" debería estar marcado con identificador "id"
- el checkbox "newsletter" no debería estar marcado con identificador "name"
- la url actual debería ser "https://example.com/dashboard"
- la url actual debería contener "dashboard"

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

4. VARIABLES Y DATOS
====================

- creo la variable "usuario_base" con valor "testuser"
- genero una variable "session_id" con texto aleatorio de 12 caracteres
- genero una variable "ticket_number" con número aleatorio entre 1000 y 9999
- genero una variable "timestamp" con timestamp actual
- genero una variable "fecha_hoy" con fecha actual en formato "%Y-%m-%d"
- concateno las variables "usuario_base" y "ticket_number" en la variable "usuario_completo"
- incremento la variable numérica "contador" en 1
- muestro el valor de la variable "session_id"
- verifico que la variable "email" contiene "@example.com"
- verifico que la variable "status" es igual a "success"
- obtengo el texto del elemento "h1.title" y lo guardo en la variable "titulo_pagina" con identificador "css"
- obtengo el atributo "href" del elemento "link" y lo guardo en la variable "url_destino" con identificador "id"
- muestro todas las variables actuales
- limpio todas las variables
- copio la variable "original" a "backup"

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

5. TIMING Y ESPERAS
===================

- pauso 3 segundos
- espero 1500 milisegundos
- espero aleatoriamente entre 2 y 5 segundos
- espero hasta que el elemento "button.submit" sea visible
- espero hasta que el elemento "loading" desaparezca
- espero hasta que el elemento "input" esté habilitado
- espero hasta que el elemento "title" contenga el texto "Completado"
- espero hasta que la página termine de cargar
- espero hasta que no haya requests de red pendientes
- espero con timeout de 10 segundos hasta que "modal" sea visible
- establezco el timeout global en 30 segundos
- espero hasta que el elemento "status" tenga el atributo "class" con valor "success"
- espero hasta que haya 5 elementos "li.item"
- espero hasta que la URL contenga "dashboard"
- marco el tiempo de inicio como "carga_pagina"
- verifico que el cronómetro "carga_pagina" no exceda 10 segundos
- muestro el tiempo transcurrido del cronómetro "carga_pagina"

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

6. ARCHIVOS Y DESCARGAS
======================

- subo el archivo "documents/test.pdf" al elemento "upload" con identificador "id"
- subo múltiples archivos "file1.txt,file2.txt" al elemento "multi_upload" con identificador "class"
- inicio descarga haciendo click en el elemento "download_btn" con identificador "css"
- espero a que complete la descarga
- guardo la descarga como "report.pdf"
- verifico que existe el archivo descargado
- verifico que el nombre del archivo descargado es "data.xlsx"
- verifico que el tamaño del archivo descargado es mayor a "1000" bytes
- verifico que el archivo descargado contiene el texto "Total:"
- verifico que la descarga es JSON válido
- verifico que el JSON descargado contiene la clave "status" con valor "success"
- verifico que la descarga es CSV válido con "name,email,phone" columnas
- verifico que el CSV descargado tiene "100" filas

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

7. TABLAS Y DATOS ESTRUCTURADOS
===============================

- verifico que la tabla "users" tiene "10" filas con identificador "id"
- verifico que la tabla "data" tiene "5" columnas con identificador "class"
- hago click en la celda de la fila "2" columna "3" de la tabla "grid" con identificador "css"
- verifico que la celda de la fila "1" columna "2" contiene "Juan" en la tabla "employees" con identificador "id"
- ordeno la tabla "products" por la columna "Price" con identificador "class"
- filtro la tabla "items" por la columna "Category" con valor "Electronics" con identificador "id"
- selecciono la fila "3" en la tabla "records" con identificador "css"
- verifico que la fila "2" de la tabla "data" está seleccionada con identificador "id"
- obtengo el valor de la celda fila "1" columna "2" y lo guardo en la variable "cell_value" de la tabla "info" con identificador "class"

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

8. FORMULARIOS
==============

- relleno el campo "nombre" con "Juan Pérez" con identificador "#name-input"
- limpio el campo "email" con identificador "#email-input"
- escribo "búsqueda" en el campo "search" con identificador "#search-input"
- selecciono la opción "Opción 1" del dropdown "select" con identificador "#select-dropdown"
- marco el checkbox "términos" con identificador "#terms-checkbox"
- desmarco el checkbox "newsletter" con identificador "#newsletter-checkbox"
- envío el formulario con identificador "#contact-form"
- reseteo el formulario con identificador "#form-reset"

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

9. MODALES Y DIÁLOGOS
====================

- espero a que aparezca el modal "confirmation" con identificador "id"
- espero a que desaparezca el modal "loading" con identificador "class"
- cierro el modal "alert" haciendo click en el botón cerrar con identificador "css"
- cierro el modal presionando la tecla Escape
- cierro el modal haciendo click fuera
- verifico que el modal "dialog" es visible con identificador "id"
- verifico que el modal "popup" no es visible con identificador "class"
- verifico que el modal "confirm" tiene el título "Confirmar Acción" con identificador "id"
- hago click en el botón "Aceptar" del modal "dialog" con identificador de modal "id"

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

10. VENTANAS Y PESTAÑAS
======================

- cambio a la nueva ventana
- cierro la ventana actual
- cambio a la ventana con título "Configuración"
- cambio a la ventana con url que contiene "admin"
- acepto la alerta
- rechazo la alerta
- acepto la alerta con texto "Confirmado"
- obtengo el texto de la alerta y lo guardo en la variable "alert_message"
- cambio al frame "content" con identificador "id"
- cambio al contenido principal

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

11. DRAG & DROP
===============

- arrastro el elemento "item1" al elemento "target" con identificadores "id" y "class"
- arrastro el elemento "box" por desplazamiento x="100" y="50" con identificador "css"
- arrastro el elemento "slider" a las coordenadas x="200" y="300" con identificador "id"
- empiezo a arrastrar el elemento "draggable" con identificador "class"
- muevo el elemento arrastrado a las coordenadas x="150" y="250"
- suelto el elemento arrastrado
- paso el mouse sobre el elemento antes de arrastrar "item" con identificador "id"
- arrastro lentamente el elemento "source" al elemento "target" con identificadores "id" y "class"

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

12. COMBOBOX Y SELECTS
======================

- selecciono la opción "Opción 1" del combobox "dropdown" con identificador "id"
- selecciono la opción por valor "value1" del combobox "select" con identificador "name"
- selecciono la opción por índice "2" del combobox "options" con identificador "css"
- abro el dropdown "menu" con identificador "class"
- selecciono la opción "Madrid" del dropdown abierto
- escribo y selecciono "Barcelona" en el combobox buscable "city" con identificador "id"
- limpio la selección del combobox "country" con identificador "name"
- verifico que el combobox "status" tiene seleccionada la opción "Activo" con identificador "id"

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

13. SCROLL
==========

- hago scroll al elemento "footer" con identificador "id"
- hago scroll al inicio de la página
- hago scroll al final de la página
- hago scroll hacia abajo 500 píxeles
- hago scroll hacia arriba 300 píxeles
- hago scroll hacia la izquierda 200 píxeles
- hago scroll hacia la derecha 150 píxeles
- hago scroll del elemento "container" hacia abajo 100 píxeles con identificador "class"

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

14. KEYBOARD Y MOUSE
====================

- pulso la tecla "F5"
- presiono la combinación de teclas "Ctrl+C"
- escribo el texto "Hola mundo" con retraso de "100" ms entre caracteres
- mantengo presionada la tecla "Shift" por "2" segundos
- hago click en las coordenadas x="100" y="200"
- hago doble click en las coordenadas x="150" y="250"
- hago click derecho en las coordenadas x="300" y="400"
- muevo el mouse a las coordenadas x="500" y="600"
- hago scroll con la rueda del mouse "down" por "3" pasos

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

15. ADVANCED STEPS
==================

- ejecuto el javascript "window.scrollTo(0, 0)"
- ejecuto javascript "document.title" y guardo el resultado en la variable "js_title"
- tomo una captura de pantalla
- tomo una captura de pantalla con nombre "test_screenshot"
- establezco la cookie "session" con valor "abc123"
- obtengo la cookie "user_id" y la guardo en la variable "current_user"
- elimino la cookie "temp_data"
- limpio todas las cookies
- establezco el elemento de local storage "theme" con valor "dark"
- obtengo el elemento de local storage "preferences" y lo guardo en la variable "user_prefs"

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

16. SALESFORCE
==============

- espero a que cargue Salesforce Lightning
- navego a la aplicación de Salesforce "Sales"
- navego al objeto de Salesforce "Account"
- creo un nuevo registro de Salesforce para el objeto "Contact"
- relleno el campo de Salesforce "FirstName" con "Juan"
- selecciono la opción "Hot" del picklist "Rating" de Salesforce
- busco y selecciono el lookup "Account" de Salesforce con "Acme Corp"
- guardo el registro de Salesforce
- verifico que el campo "Name" del registro de Salesforce contiene "Juan Pérez"

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

17. JIRA/XRAY
=============

- verifico la conexión con Jira
- verifico la configuración de Xray
- muestro información de la integración Jira/Xray
- verifico que la issue "PROD-123" existe en Jira
- verifico que el test "PROD-456" es de tipo Test en Jira
- agrego un comentario "Prueba completada" a la issue "PROD-123"
- adjunto el archivo "reports/report.html" a la issue "PROD-123"
- busco issues en Jira con JQL "project = PROD AND issuetype = Test"

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

18. ENVIRONMENT
===============

- cargo las variables de entorno del archivo ".env.testing"
- establezco la variable de entorno "API_URL" con valor "https://api.test.com"
- obtengo variable de entorno "DATABASE_URL" y la guardo en variable "db_connection"
- verifico que existe la variable de entorno "SECRET_KEY"
- verifico que la variable de entorno "ENV" es igual a "production"
- navego a la URL de entorno "BASE_URL"

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

19. API TESTING
===============

- envío una petición GET a "/api/usuarios"
- envío una petición POST a "/api/usuarios" con el JSON: {...}
- envío una petición PUT a "/api/usuarios/123" con el JSON: {...}
- envío una petición PATCH a "/api/usuarios/123" con el JSON: {...}
- envío una petición DELETE a "/api/usuarios/123"
- establezco autenticación básica con usuario "admin" y contraseña "password123"
- establezco el token de autorización "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
- establezco el header "X-API-Key" con valor "mi-api-key-secreta"
- la respuesta debería tener código de estado 200
- la respuesta debería ser JSON válido
- la respuesta JSON debería tener el campo "id"

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

20. ACCESSIBILITY
=================

- verifico que el elemento "botón" con identificador "#btn" tiene atributo "aria-label"
- verifico que el elemento "enlace" con identificador "#link" tiene atributo "role"
- verifico que la página tiene un elemento "h1"
- verifico que todos los elementos "img" tienen atributo "alt"
- verifico que el contraste de color del elemento "texto" es accesible

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

21. PERFORMANCE
===============

- mido el tiempo de carga de la página
- mido el tiempo de respuesta de la API
- verifico que la página carga en menos de 3 segundos
- verifico que la API responde en menos de 1 segundo
- mido el tiempo de renderizado del elemento "componente"

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

22. DATABASE
============

- me conecto a la base de datos "test_db" con usuario "admin" y contraseña "password123"
- ejecuto la consulta SQL "SELECT * FROM usuarios WHERE id = 1"
- ejecuto la consulta SQL "SELECT * FROM usuarios" y guardo el resultado en la variable "usuarios"
- obtengo el valor de la consulta SQL "SELECT email FROM usuarios WHERE id = 1" y lo guardo en la variable "email"
- cuento los registros de la consulta SQL "SELECT COUNT(*) FROM usuarios" y lo guardo en la variable "total_usuarios"
- verifico que existe un registro en la tabla "usuarios" donde "email" = "test@example.com"
- me desconecto de la base de datos

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

23. EMAIL
=========

- me conecto al servidor de email "smtp.gmail.com" con usuario "test@gmail.com" y contraseña "password"
- busco emails con asunto "Confirmación"
- obtengo el cuerpo del email y lo guardo en la variable "email_body"
- extraigo el código de verificación del email y lo guardo en la variable "verification_code"
- verifico que el email contiene el texto "Bienvenido"
- me desconecto del servidor de email

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

24. WEB ELEMENTS
================

- obtengo el atributo "href" del elemento "enlace" con identificador "#external-link"
- establezco el atributo "disabled" del elemento "botón" con identificador "#submit-btn"
- obtengo la propiedad CSS "color" del elemento "texto" con identificador "#main-text"
- establezco la propiedad CSS "display" con valor "none" en el elemento "banner" con identificador "#banner"
- obtengo el texto del elemento "título" con identificador "#page-title"
- establezco el texto del elemento "etiqueta" con valor "Nuevo Texto" con identificador "#label"

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

25. RESPONSIVE
==============

- establezco el viewport a 375x667 (móvil)
- establezco el viewport a 768x1024 (tablet)
- establezco el viewport a 1920x1080 (desktop)
- verifico que el elemento "menú" con identificador "#menu" es visible en móvil
- verifico que el elemento "sidebar" con identificador "#sidebar" está oculto en móvil

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

26. IFRAME
==========

- cambio al frame "content" con identificador "id"
- cambio al contenido principal
- hago click en el elemento "botón" dentro del frame con identificador "#btn"
- verifico que el elemento "texto" dentro del frame contiene "Contenido"

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

27. CSV FILES
=============

- cargo el archivo CSV "data/empleados.csv" en la variable "empleados"
- filtro el CSV "empleados" donde "departamento" contiene "Desarrollo" y guardo como "desarrolladores"
- ordeno el CSV "empleados" por columna "salario" de forma "descendente" y guardo como "ordenados"
- busco en el CSV "empleados" el valor "Desarrollo" en la columna "departamento"
- obtengo el valor de la fila 0 columna "nombre" del CSV "empleados" y lo guardo en "primer_empleado"
- exporto el CSV "empleados_filtrados" a "output/resultado.csv"
- muestro un resumen del CSV "empleados"

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

28. OCR
=======

- extraigo el texto de la imagen "screenshot.png" usando OCR
- extraigo el texto de la imagen en el elemento "imagen" con identificador "#image-element" usando OCR
- la imagen "screenshot.png" debería contener el texto "Confirmado" usando OCR
- la imagen "screenshot.png" no debería contener el texto "Error" usando OCR
- extraigo los números de la imagen "screenshot.png" usando OCR
- la imagen "screenshot.png" debería contener el número "12345" usando OCR

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

CONCLUSIÓN

El Hakalab Framework v1.3.0 proporciona más de 1100 variantes lingüísticas 
de steps preconstruidos que cubren todos los aspectos del testing automatizado 
moderno. Este índice proporciona una referencia rápida de todas las funcionalidades 
disponibles.

====================================================
Documento generado automáticamente - Hakalab Framework v1.3.0
Índice de Funcionalidades
Fecha: Enero 2026
====================================================
