Files
Developer 3253828fef
Tests / Lint (push) Has been cancelled
Tests / Unit Tests (push) Has been cancelled
Tests / E2E Tests (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Initial commit: navegator - Chrome CDP automation for LLMs
Add complete navegator system for stealthy browser automation:
- CDP client with WebSocket communication
- Browser API with navigation, storage, network, runtime
- Stealth flags and anti-detection scripts
- Persistent profile support
- Examples and comprehensive documentation

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-03-24 23:33:07 +01:00

292 lines
8.4 KiB
Bash
Executable File

#!/bin/bash
# E2E Testing Suite para Navegator Binarios
# Ejecuta tests completos de los binarios compilados
set -e # Exit on error
TEST_DIR="$(cd "$(dirname "$0")" && pwd)"
ROOT_DIR="$(dirname "$TEST_DIR")"
cd "$ROOT_DIR"
# Colores
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Contadores
PASSED=0
FAILED=0
SKIPPED=0
# Función para reportar test
report_test() {
local test_name="$1"
local result="$2"
local message="$3"
if [ "$result" = "PASS" ]; then
echo -e "${GREEN}${NC} $test_name"
((PASSED++))
elif [ "$result" = "FAIL" ]; then
echo -e "${RED}${NC} $test_name"
echo -e " ${RED}Error:${NC} $message"
((FAILED++))
elif [ "$result" = "SKIP" ]; then
echo -e "${YELLOW}${NC} $test_name (skipped)"
((SKIPPED++))
fi
}
# Función para limpiar después de tests
cleanup() {
rm -rf test-profiles/
rm -f test-*.png test-*.json
rm -f recording_test-*.log
}
echo "=========================================="
echo "🧪 Navegator E2E Test Suite"
echo "=========================================="
echo ""
# Setup
echo "📦 Setup"
echo "---"
# Verificar que los binarios existen
if [ ! -f "./bin/screenshot" ]; then
echo "Compilando screenshot..."
go build -o screenshot cm./bin/screenshot.go
fi
if [ ! -f "./bin/buscar" ]; then
echo "Compilando buscar..."
go build -o buscar cm./bin/buscar.go
fi
if [ ! -f "./bin/navegar" ]; then
echo "Compilando navegar..."
go build -o navegar cm./bin/navegar.go
fi
echo "✅ Binarios listos"
echo ""
# Crear directorio temporal para tests
TEST_PROFILES_DIR="$ROOT_DIR/test-profiles"
mkdir -p "$TEST_PROFILES_DIR"
export NAVEGATOR_PROFILES="$TEST_PROFILES_DIR"
echo "=========================================="
echo "🔍 Test Suite: screenshot"
echo "=========================================="
echo ""
# Test 1: Screenshot básico
TEST_NAME="screenshot: captura básica"
if timeout 30 ./bin/screenshot -url https://example.com -profile test-screenshot -o test-screenshot.png -headless=true &>/dev/null; then
if [ -f "test-screenshot.png" ] && [ -s "test-screenshot.png" ]; then
# Verificar magic bytes PNG
if xxd -l 8 test-screenshot.png | grep -q "8950 4e47"; then
report_test "$TEST_NAME" "PASS"
else
report_test "$TEST_NAME" "FAIL" "No es un PNG válido"
fi
else
report_test "$TEST_NAME" "FAIL" "Archivo no creado o vacío"
fi
else
report_test "$TEST_NAME" "FAIL" "Timeout o error en ejecución"
fi
# Test 2: Screenshot con perfil custom
TEST_NAME="screenshot: perfil personalizado"
if timeout 30 ./bin/screenshot -url https://example.com -profile custom-profile-123 -o test-custom.png -headless=true &>/dev/null; then
if [ -d "$TEST_PROFILES_DIR/custom-profile-123" ]; then
report_test "$TEST_NAME" "PASS"
else
report_test "$TEST_NAME" "FAIL" "Perfil no creado"
fi
else
report_test "$TEST_NAME" "FAIL" "Error en ejecución"
fi
# Test 3: Screenshot con dimensiones custom
TEST_NAME="screenshot: dimensiones personalizadas"
if timeout 30 ./bin/screenshot -url https://example.com -profile test-dimensions -width=800 -height=600 -o test-800x600.png -headless=true &>/dev/null; then
if [ -f "test-800x600.png" ]; then
report_test "$TEST_NAME" "PASS"
else
report_test "$TEST_NAME" "FAIL" "Screenshot no creado"
fi
else
report_test "$TEST_NAME" "FAIL" "Error en ejecución"
fi
echo ""
echo "=========================================="
echo "🔍 Test Suite: buscar"
echo "=========================================="
echo ""
# Test 4: Búsqueda básica (puede tardar, usar timeout largo)
TEST_NAME="buscar: búsqueda básica"
if timeout 45 ./bin/buscar -q "test query" -n 3 -profile test-search -output test-search.json -headless=true &>/dev/null; then
# Puede fallar por timeout de DuckDuckGo, pero verificar que no crasheó
if [ $? -le 1 ]; then
report_test "$TEST_NAME" "PASS"
else
report_test "$TEST_NAME" "FAIL" "Error en búsqueda"
fi
else
# Si timeout, marcar como skip (problema de red, no del binario)
report_test "$TEST_NAME" "SKIP" "Timeout de red esperado"
fi
# Test 5: Búsqueda con perfil
TEST_NAME="buscar: perfil personalizado"
if [ -d "$TEST_PROFILES_DIR/test-search" ]; then
report_test "$TEST_NAME" "PASS"
else
report_test "$TEST_NAME" "FAIL" "Perfil no creado"
fi
echo ""
echo "=========================================="
echo "🔍 Test Suite: navegar"
echo "=========================================="
echo ""
# Test 6: Navegación básica
TEST_NAME="navegar: navegación básica"
if timeout 30 ./bin/navegar -url https://example.com -profile test-navigate -duration 2 -headless=true &>/dev/null; then
if [ -f "recording_test-navigate.log" ]; then
report_test "$TEST_NAME" "PASS"
else
report_test "$TEST_NAME" "FAIL" "Recording no creado"
fi
else
report_test "$TEST_NAME" "FAIL" "Error en navegación"
fi
# Test 7: Recording funciona
TEST_NAME="navegar: recording de acciones"
if [ -f "recording_test-navigate.log" ]; then
if grep -q "Navigate" recording_test-navigate.log; then
report_test "$TEST_NAME" "PASS"
else
report_test "$TEST_NAME" "FAIL" "Recording no contiene acciones"
fi
else
report_test "$TEST_NAME" "FAIL" "Archivo de recording no existe"
fi
echo ""
echo "=========================================="
echo "🔍 Test Suite: Perfiles"
echo "=========================================="
echo ""
# Test 8: Persistencia de perfiles
TEST_NAME="perfiles: persistencia entre sesiones"
PROFILE_PATH="$TEST_PROFILES_DIR/persist-test"
# Primera sesión
timeout 30 ./bin/screenshot -url https://example.com -profile persist-test -o /dev/null -headless=true &>/dev/null
if [ -d "$PROFILE_PATH" ]; then
# Segunda sesión (debe reutilizar)
timeout 30 ./bin/screenshot -url https://example.com -profile persist-test -o /dev/null -headless=true &>/dev/null
if [ -d "$PROFILE_PATH" ]; then
report_test "$TEST_NAME" "PASS"
else
report_test "$TEST_NAME" "FAIL" "Perfil eliminado entre sesiones"
fi
else
report_test "$TEST_NAME" "FAIL" "Perfil no creado inicialmente"
fi
# Test 9: Múltiples perfiles
TEST_NAME="perfiles: múltiples perfiles independientes"
timeout 30 ./bin/screenshot -url https://example.com -profile multi-1 -o /dev/null -headless=true &>/dev/null &
timeout 30 ./bin/screenshot -url https://example.com -profile multi-2 -o /dev/null -headless=true &>/dev/null &
wait
if [ -d "$TEST_PROFILES_DIR/multi-1" ] && [ -d "$TEST_PROFILES_DIR/multi-2" ]; then
report_test "$TEST_NAME" "PASS"
else
report_test "$TEST_NAME" "FAIL" "No se crearon múltiples perfiles"
fi
echo ""
echo "=========================================="
echo "🔍 Test Suite: Stealth"
echo "=========================================="
echo ""
# Test 10: Verificar stealth flags (requiere navegar y evaluar JS)
# Este test es más complejo, lo marcamos como manual
TEST_NAME="stealth: flags anti-detección"
report_test "$TEST_NAME" "SKIP" "Requiere verificación manual"
echo ""
echo "=========================================="
echo "🔍 Test Suite: Error Handling"
echo "=========================================="
echo ""
# Test 11: URL inválida
TEST_NAME="error-handling: URL inválida"
if ./bin/screenshot -url "invalid-url" -profile test-error -o /dev/null -headless=true 2>&1 | grep -q -i "error"; then
report_test "$TEST_NAME" "PASS"
else
report_test "$TEST_NAME" "FAIL" "No reportó error con URL inválida"
fi
# Test 12: Sin parámetros requeridos
TEST_NAME="error-handling: parámetros faltantes"
if ./bin/screenshot 2>&1 | grep -q -i "error"; then
report_test "$TEST_NAME" "PASS"
else
report_test "$TEST_NAME" "FAIL" "No reportó error sin parámetros"
fi
echo ""
echo "=========================================="
echo "📊 Resultados"
echo "=========================================="
echo ""
TOTAL=$((PASSED + FAILED + SKIPPED))
echo "Total tests: $TOTAL"
echo -e "${GREEN}Passed:${NC} $PASSED"
echo -e "${RED}Failed:${NC} $FAILED"
echo -e "${YELLOW}Skipped:${NC} $SKIPPED"
echo ""
# Calcular porcentaje
if [ $TOTAL -gt 0 ]; then
PASS_RATE=$((PASSED * 100 / TOTAL))
echo "Pass rate: $PASS_RATE%"
fi
echo ""
# Cleanup
echo "🧹 Limpiando archivos de test..."
cleanup
echo ""
# Exit code
if [ $FAILED -gt 0 ]; then
echo -e "${RED}❌ Tests FAILED${NC}"
exit 1
else
echo -e "${GREEN}✅ All tests PASSED${NC}"
exit 0
fi