{"id":34502750,"url":"https://github.com/bryan0422/ai-test-explorer","last_synced_at":"2026-05-02T11:38:46.186Z","repository":{"id":329495108,"uuid":"1119831537","full_name":"bryan0422/ai-test-explorer","owner":"bryan0422","description":"🤖 Generación automática de tests de Playwright con exploración real de páginas + auto-healing","archived":false,"fork":false,"pushed_at":"2025-12-19T23:45:29.000Z","size":38,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-22T10:34:06.483Z","etag":null,"topics":["ai","antrophic","auto-healing","automation","claude","mcp","playwright","pytest","python","qa-automation","test-generation","testing"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bryan0422.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-19T23:39:00.000Z","updated_at":"2025-12-19T23:45:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bryan0422/ai-test-explorer","commit_stats":null,"previous_names":["bryan0422/ai-test-explorer"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/bryan0422/ai-test-explorer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryan0422%2Fai-test-explorer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryan0422%2Fai-test-explorer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryan0422%2Fai-test-explorer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryan0422%2Fai-test-explorer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bryan0422","download_url":"https://codeload.github.com/bryan0422/ai-test-explorer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bryan0422%2Fai-test-explorer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27992999,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-24T02:00:07.193Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","antrophic","auto-healing","automation","claude","mcp","playwright","pytest","python","qa-automation","test-generation","testing"],"created_at":"2025-12-24T02:19:44.792Z","updated_at":"2025-12-24T02:19:45.437Z","avatar_url":"https://github.com/bryan0422.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🤖 AI Test Explorer\n\n\u003e **Generación automática de tests de Playwright con exploración real de páginas usando Claude AI + MCP**\n\nSistema inteligente que explora páginas web automáticamente, extrae selectores reales, y genera tests de Playwright con auto-healing incorporado. Incluye exploración autenticada para páginas protegidas y modo interactivo conversacional.\n\n[![Python](https://img.shields.io/badge/Python-3.13+-blue.svg)](https://www.python.org/)\n[![Playwright](https://img.shields.io/badge/Playwright-1.49+-green.svg)](https://playwright.dev/)\n[![Claude](https://img.shields.io/badge/Claude-Sonnet%204-purple.svg)](https://www.anthropic.com/)\n\n---\n\n## ✨ Características\n\n### 🔍 **Exploración Real de Páginas**\n- Navega páginas web con Playwright\n- Extrae elementos interactivos (inputs, buttons, selects, links)\n- Identifica IDs, nombres, tipos y atributos **reales**\n- Sin adivinanzas - solo selectores verificados\n\n### 🔐 **Exploración Autenticada**\n- Explora páginas que requieren login\n- Configuración de credenciales en `auth.yaml`\n- Auto-detección de sitios\n- Soporte para múltiples aplicaciones\n\n### 🤖 **Generación Inteligente**\n- Claude analiza la estructura de la página\n- Genera tests con selectores **correctos desde el inicio**\n- **Modo automático:** Suite completa de 2-5 tests\n- **Modo interactivo:** Conversación con Claude sobre qué testear\n- Código limpio con type hints y documentación\n\n### 🔧 **Auto-Healing**\n- Detecta cuando selectores cambian\n- Re-explora la página automáticamente\n- Actualiza tests con nuevos selectores\n- Crea backups antes de modificar\n- Preview de cambios con `--dry-run`\n\n### 💻 **CLI Profesional**\n- 8 comandos intuitivos\n- Preview de cambios (--dry-run)\n- Batch processing para múltiples URLs\n- Manejo inteligente de archivos duplicados\n- Validación de elementos interactivos\n\n---\n\n## 🚀 Instalación\n\n### Requisitos\n- Python 3.11+\n- Cuenta de Anthropic (API Key)\n\n### Setup\n```bash\n# Clonar repositorio\ngit clone https://github.com/TU_USUARIO/ai-test-explorer.git\ncd ai-test-explorer\n\n# Crear entorno virtual\npython3 -m venv venv\nsource venv/bin/activate  # En Windows: venv\\Scripts\\activate\n\n# Instalar dependencias\npip install -r requirements.txt\n\n# Instalar navegadores de Playwright\npython -m playwright install\n\n# Configurar API Key\necho \"ANTHROPIC_API_KEY=tu_api_key_aqui\" \u003e .env\n```\n\n---\n\n## 📖 Uso\n\n### 🎮 Comandos Disponibles\n```bash\npython cli.py --help\n\nCommands:\n  explore       🔍 Explora una página web\n  explore-auth  🔐 Explora página con autenticación\n  generate      🤖 Genera test básico\n  generate-auth 🤖🔐 Genera test con autenticación\n  batch         📦 Genera múltiples tests\n  heal          🔧 Repara test roto (auto-healing)\n  list          📋 Lista tests generados\n  run           ▶️  Ejecuta tests\n```\n\n---\n\n### 1️⃣ Explorar Páginas\n\n#### **Exploración Básica (páginas públicas)**\n```bash\n# Exploración simple\npython cli.py explore https://www.saucedemo.com\n\n# Con detalles de elementos\npython cli.py explore https://www.saucedemo.com --show-details\n```\n\n**Salida:**\n```\n📦 Elementos encontrados:\n   • 2 inputs\n   • 1 botones\n   • 5 links\n\n🔹 INPUTS:\n   1. type=text, id=user-name, name=user-name\n   2. type=password, id=password, name=password\n```\n\n---\n\n#### **Exploración con Autenticación (páginas protegidas)** 🔐\n\n**Para páginas que requieren login:**\n\n**Paso 1:** Configurar credenciales en `auth.yaml`\n```yaml\nmi-app:\n  login_url: https://mi-app.com/login\n  username: testuser\n  password: testpass\n  username_selector: \"#email\"\n  password_selector: \"#password\"\n  submit_selector: \"button[type='submit']\"\n```\n\n**Paso 2:** Explorar página autenticada\n```bash\npython cli.py explore-auth https://mi-app.com/dashboard -s mi-app\n```\n\n**Qué hace:**\n```\n1. ✅ Navega a login\n2. ✅ Ingresa credenciales automáticamente\n3. ✅ Hace login\n4. ✅ Navega a la página objetivo\n5. ✅ Explora elementos del dashboard (NO del login)\n```\n\n---\n\n### 2️⃣ Generar Tests\n\n#### **Tests Básicos**\n```bash\n# Suite completa (2-5 tests automáticos)\npython cli.py generate https://www.saucedemo.com\n\n# Test específico con descripción\npython cli.py generate https://www.saucedemo.com \\\n    --description \"login con credenciales válidas\"\n\n# Personalizar salida\npython cli.py generate https://www.saucedemo.com \\\n    --output tests \\\n    --filename test_custom.py\n```\n\n**Resultado:**\n```python\nimport pytest\nfrom playwright.async_api import Page\n\n\n@pytest.mark.asyncio\nasync def test_login(page: Page):\n    '''Test de login con credenciales válidas'''\n    \n    await page.goto(\"https://www.saucedemo.com\")\n    \n    # Selectores REALES extraídos de la página\n    await page.fill(\"#user-name\", \"standard_user\")\n    await page.fill(\"#password\", \"secret_sauce\")\n    await page.click(\"#login-button\")\n    \n    await page.wait_for_url(\"**/inventory.html\")\n    assert \"inventory.html\" in page.url\n```\n\n---\n\n#### **Tests con Autenticación** 🔐\n\n**Para páginas que requieren login (dashboard, perfil, etc):**\n\n**Modo Automático:**\n```bash\npython cli.py generate-auth https://mi-app.com/dashboard -s mi-app\n```\n\n**Claude:**\n- Hace login automáticamente\n- Explora el dashboard\n- Identifica acciones principales\n- Genera 2-4 tests de flows comunes\n\n---\n\n**Modo Interactivo (conversación con Claude):**\n```bash\npython cli.py generate-auth https://mi-app.com/dashboard -s mi-app --interactive\n```\n\n**Conversación:**\n```\n💬 MODO INTERACTIVO\n\nElementos encontrados en la página:\n  • 3 inputs\n  • 5 botones\n\nBotones principales:\n  1. Exportar Reporte\n  2. Crear Nuevo\n  3. Filtrar Datos\n\n💡 ¿Qué quieres testear? (describe en una frase)\nTú: exportar reporte con fechas personalizadas\n\n🤖 Generando test específico...\n✅ Test generado\n```\n\n**Test generado incluye:**\n```python\n@pytest.mark.asyncio\nasync def test_exportar_reporte_fechas_personalizadas(page: Page):\n    # PASO 1: Login\n    await page.goto(\"https://mi-app.com/login\")\n    await page.fill(\"#email\", \"testuser\")\n    await page.fill(\"#password\", \"testpass\")\n    await page.click(\"button[type='submit']\")\n    \n    # PASO 2: Navegar a dashboard\n    await page.goto(\"https://mi-app.com/dashboard\")\n    \n    # PASO 3: Exportar reporte\n    await page.fill(\"#fecha-inicio\", \"2024-01-01\")\n    await page.fill(\"#fecha-fin\", \"2024-12-31\")\n    await page.click(\"#exportar-btn\")\n    \n    # PASO 4: Verificar descarga\n    # ... verificaciones ...\n```\n\n---\n\n**Manejo Inteligente de Archivos:**\n\nSi el archivo ya existe, el sistema pregunta:\n```\n⚠️  El archivo test_dashboard_auth.py ya existe\n\n¿Qué quieres hacer?\n  1. Sobrescribir (se creará backup: test_dashboard_auth.py.backup)\n  2. Crear nuevo (test_dashboard_auth_2.py)\n  3. Cancelar\n\nOpción [1/2/3]:\n```\n\n---\n\n### 3️⃣ Batch Processing\n\n**Generar tests para múltiples URLs:**\n```bash\n# Crear archivo de URLs\ncat \u003e urls.txt \u003c\u003c EOF\nhttps://www.saucedemo.com\nhttps://example.com\nhttps://mi-app.com/features\nEOF\n\n# Generar tests para todas\npython cli.py batch urls.txt\n```\n\n**Salida:**\n```\n📋 Se encontraron 3 URLs\n\n[1/3] Procesando: https://www.saucedemo.com\n   ✅ Guardado en: tests/test_saucedemo_com_generated.py\n\n[2/3] Procesando: https://example.com\n   ⚠️  Advertencia: Test muy simple\n   ✅ Guardado en: tests/test_example_com_generated.py\n\n[3/3] Procesando: https://mi-app.com/features\n   ✅ Guardado en: tests/test_mi_app_com_features_generated.py\n\n✅ Exitosos: 3/3\n```\n\n---\n\n### 4️⃣ Auto-Healing 🔧\n\n**Cuando los selectores cambian (después de un deploy):**\n\n**Preview de cambios (recomendado primero):**\n```bash\npython cli.py heal tests/test_login.py --dry-run\n```\n\n**Salida:**\n```\n============================================================\n   📋 ANÁLISIS DE CAMBIOS\n============================================================\n\n⚠️  SE DETECTARON CAMBIOS EN SELECTORES:\n\n🔴 REMOVIDOS:\n   • #username-field\n   • #pass\n   • #submit-btn\n\n🟢 AGREGADOS:\n   • #user-name\n   • #password\n   • #login-button\n\n🔍 DRY RUN - No se aplicaron cambios\n\n💾 Para aplicar cambios, ejecuta:\n   python cli.py heal tests/test_login.py\n```\n\n**Aplicar reparación:**\n```bash\npython cli.py heal tests/test_login.py\n```\n\n**Resultado:**\n```\n✅ CONFIRMADO: Test necesita reparación\n\n💾 Backup creado: tests/test_login.py.backup\n✅ Test reparado: tests/test_login.py\n\n💡 Para ejecutar:\n   python -m pytest tests/test_login.py -v\n```\n\n**Cuándo usar auto-healing:**\n- ✅ Después de un deploy (selectores cambiaron)\n- ✅ Tests fallando por timeout de selectores\n- ✅ Refactoring de frontend\n- ❌ NO para bugs reales de la aplicación\n\n---\n\n### 5️⃣ Listar y Ejecutar Tests\n\n**Listar todos los tests generados:**\n```bash\npython cli.py list\n```\n\n**Salida:**\n```\n============================================================\n   📋 TESTS GENERADOS\n============================================================\n\n✅ Se encontraron 5 tests:\n\n 1. test_saucedemo_com_generated.py\n    Tamaño: 1247 bytes\n    Ruta: tests/test_saucedemo_com_generated.py\n\n 2. test_dashboard_auth.py\n    Tamaño: 2134 bytes\n    Ruta: tests/test_dashboard_auth.py\n\n...\n\n💡 Para ejecutar todos:\n   python -m pytest tests -v\n```\n\n---\n\n**Ejecutar todos los tests:**\n```bash\n# Ejecución básica\npython cli.py run\n\n# Con verbose\npython cli.py run --verbose\n```\n\n---\n\n## 🎯 Casos de Uso Reales\n\n### **Escenario 1: Nueva Feature**\n```bash\n# 1. Explora la nueva página\npython cli.py explore https://tu-app.com/nueva-feature\n\n# 2. Genera tests automáticamente\npython cli.py generate https://tu-app.com/nueva-feature\n\n# 3. Ejecuta\npython -m pytest tests/test_nueva_feature.py -v\n```\n\n**Tiempo:** 5 minutos vs 30-45 minutos manual\n\n---\n\n### **Escenario 2: Testing Post-Login**\n```bash\n# 1. Configura credenciales (una sola vez)\ncat \u003e\u003e auth.yaml \u003c\u003c EOF\nmi-app:\n  login_url: https://mi-app.com/login\n  username: testuser\n  password: testpass\n  username_selector: \"#email\"\n  password_selector: \"#password\"\n  submit_selector: \"button[type='submit']\"\nEOF\n\n# 2. Explora dashboard\npython cli.py explore-auth https://mi-app.com/dashboard -s mi-app\n\n# 3. Genera tests interactivamente\npython cli.py generate-auth https://mi-app.com/dashboard -s mi-app --interactive\n```\n\n**Tiempo:** 5-10 minutos vs 45-60 minutos manual\n\n---\n\n### **Escenario 3: Después de Deploy**\n```bash\n# Frontend cambió selectores\n# 10 tests fallando\n\n# 1. Preview cambios\npython cli.py heal tests/test_login.py --dry-run\npython cli.py heal tests/test_checkout.py --dry-run\n\n# 2. Aplicar reparaciones\npython cli.py heal tests/test_login.py\npython cli.py heal tests/test_checkout.py\n\n# 3. Re-ejecutar\npython cli.py run\n```\n\n**Tiempo:** 10 minutos vs 2-3 horas manual\n\n---\n\n### **Escenario 4: Suite Completa para Nueva App**\n```bash\n# 1. Generar test de login\npython cli.py generate https://nueva-app.com/login \\\n    --description \"login exitoso\"\n\n# 2. Agregar credenciales a auth.yaml\n\n# 3. Generar tests para resto de la app\npython cli.py generate-auth https://nueva-app.com/dashboard -s nueva-app\npython cli.py generate-auth https://nueva-app.com/profile -s nueva-app\npython cli.py generate-auth https://nueva-app.com/settings -s nueva-app\n\n# 4. Ejecutar suite completa\npython cli.py run --verbose\n```\n\n**Tiempo:** 20-30 minutos vs 4-6 horas manual\n\n---\n\n## 🏗️ Arquitectura\n```\n┌─────────────┐\n│   Usuario   │\n└──────┬──────┘\n       │\n       ▼\n┌─────────────┐\n│   CLI       │ ← 8 comandos\n└──────┬──────┘\n       │\n       ├──────────────────┬─────────────────┬──────────────┐\n       ▼                  ▼                 ▼              ▼\n┌─────────────┐    ┌─────────────┐  ┌─────────────┐ ┌──────────┐\n│  Explorer   │    │  Generator  │  │ Auto-Healer │ │ Auth     │\n│             │    │             │  │             │ │ Config   │\n└──────┬──────┘    └──────┬──────┘  └──────┬──────┘ └────┬─────┘\n       │                  │                 │             │\n       └──────────────────┴─────────────────┴─────────────┘\n                          │\n                          ▼\n                   ┌─────────────┐\n                   │  Playwright │ ← Navegador real\n                   └──────┬──────┘\n                          │\n                          ▼\n                   ┌─────────────┐\n                   │   Claude    │ ← Análisis + Generación\n                   └─────────────┘\n```\n\n---\n\n## 📊 Comparación\n\n### **Sin AI Test Explorer:**\n```\n1. Abrir DevTools\n2. Inspeccionar elementos manualmente\n3. Copiar selectores\n4. Escribir código del test\n5. Ejecutar y debuggear\n6. Ajustar selectores que fallan\n7. Repetir para cada test\n\nTiempo por test: 15-30 minutos\nTasa de error: ~20% (selectores incorrectos)\nPáginas con login: Requiere setup manual complejo\n```\n\n### **Con AI Test Explorer:**\n```\n1. python cli.py generate-auth \u003curl\u003e -s \u003csitio\u003e --interactive\n2. Conversar con Claude sobre qué testear\n3. Ejecutar\n\nTiempo por test: 2-5 minutos\nTasa de error: ~5% (selectores verificados)\nAuto-healing: Sí\nPáginas con login: Manejo automático\n```\n\n**Ahorro: 80-90% de tiempo**  \n**Mejora en precisión: 75%**  \n**Soporte para autenticación: ✅**\n\n---\n\n## 🛠️ Tecnologías\n\n- **[Playwright](https://playwright.dev/)** - Automatización de navegador\n- **[Claude Sonnet 4](https://www.anthropic.com/)** - Análisis y generación de código\n- **[MCP](https://modelcontextprotocol.io/)** - Model Context Protocol\n- **[Click](https://click.palletsprojects.com/)** - CLI framework\n- **[Pytest](https://pytest.org/)** - Testing framework\n- **[PyYAML](https://pyyaml.org/)** - Configuración de autenticación\n\n---\n\n## 📁 Estructura del Proyecto\n```\nai-test-explorer/\n├── cli.py                      # CLI principal (8 comandos)\n├── src/\n│   ├── ai_test_generator.py   # Generador de tests\n│   ├── auto_healer.py          # Sistema de auto-reparación\n│   ├── auth_config.py          # Manejo de autenticación\n│   └── __init__.py\n├── tests/\n│   ├── conftest.py            # Fixtures compartidas\n│   └── test_*.py              # Tests generados\n├── auth.yaml                  # Credenciales (no subir a Git)\n├── screenshots/               # Screenshots de tests\n├── pytest.ini                 # Configuración de Pytest\n├── requirements.txt\n├── LICENSE\n├── EXAMPLES.md               # Ejemplos detallados\n└── README.md\n```\n\n---\n\n## ⚙️ Configuración\n\n### `auth.yaml`\n\nConfiguración de credenciales para exploración autenticada:\n```yaml\nsaucedemo:\n  login_url: https://www.saucedemo.com\n  username: standard_user\n  password: secret_sauce\n  username_selector: \"#user-name\"\n  password_selector: \"#password\"\n  submit_selector: \"#login-button\"\n\nmi-app:\n  login_url: https://mi-app.com/login\n  username: admin\n  password: admin123\n  username_selector: \"#email\"\n  password_selector: \"#pwd\"\n  submit_selector: \"button[type='submit']\"\n```\n\n**⚠️ Importante:** Agregar `auth.yaml` a `.gitignore` para no subir credenciales.\n\n---\n\n### `pytest.ini`\n```ini\n[pytest]\nasyncio_mode = auto\npythonpath = .\ntestpaths = tests\n```\n\n---\n\n### `conftest.py`\n\nFixtures globales de Playwright disponibles automáticamente en todos los tests.\n\n---\n\n## 📄 Licencia\n\nMIT License - ve [LICENSE](LICENSE) para más detalles\n\n---\n\n## 👤 Autor\n\n**Bryan Rodriguez**\n\n- LinkedIn: [bryan-rodriguez-32a9a8211](www.linkedin.com/in/bryan-rodriguez-32a9a8211)\n- GitHub: [bryan0422](https://github.com/bryan0422)\n\n---\n\n## ⭐ Star History\n\nSi este proyecto te ayudó, considera darle una estrella ⭐\n\n---\n\n\u003cp align=\"center\"\u003e\n  Hecho con ❤️ y ☕ por Bryan Rodriguez\n\u003c/p\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbryan0422%2Fai-test-explorer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbryan0422%2Fai-test-explorer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbryan0422%2Fai-test-explorer/lists"}