#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Test de la Démonstration Réellele Auteur : Dom, Alice, Kiro - 7 janvier 2026 Script de test pour vérifier que le système de démonstration réelle fonctionne correctement. Utis. " import sys import time import requsts import json rocess import os from path from typing import Dict, Any, Optiont # Import des composants réels du système sys.) try: from core from core.detection.ui_detector import UIDetector from core.execution.action_executor import ActionExecr fdge CORE_AVAILABe exce print(f"⚠️ Composants core non dispo{e}") CORE_AVAe = FalsLABLEInibles: rror as e:pt ImportELE = TruiceionServonIntegratort Executigration impecution_inteices.exnd.servuilder.backeflow_brksual_wom virof, WorkflowEorkflowNodet Wporaph im.workflow_grre.models coromutoapturerport ScreenCurer imaptscreen_ce.tur.capnt.parent)).pareath(__file__str(Ph.insert(0, patal, Lisimport Paib thlort subpimp def test_demo_server(): """ Test du serveur de démonstration """ print("🧪 Test du serveur de démonstration...") base_url = "http://localhost:5003/api/demo" tests = [ ("Éléments UI", f"{base_url}/elements", "GET"), ("Capture d'écran", f"{base_url}/screen", "GET"), ] results = [] for test_name, url, method in tests: try: if method == "GET": response = requests.get(url, timeout=5) if response.status_code == 200: print(f"✅ {test_name}: OK") results.append(True) else: print(f"❌ {test_name}: Erreur {response.status_code}") results.append(False) except requests.exceptions.RequestException as e: print(f"❌ {test_name}: Connexion impossible - {e}") results.append(False) return all(results) def test_action_execution(): """ Test d'exécution d'action """ print("🧪 Test d'exécution d'action...") url = "http://localhost:5003/api/demo/execute" # Test d'un clic simple action_data = { "type": "click", "target": {"x": 100, "y": 100} } try: response = requests.post( url, json=action_data, headers={"Content-Type": "application/json"}, timeout=5 ) if response.status_code == 200: result = response.json() if result.get("success"): print("✅ Exécution d'action: OK") return True else: print(f"❌ Exécution d'action: {result.get('message')}") return False else: print(f"❌ Exécution d'action: Erreur {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"❌ Exécution d'action: Connexion impossible - {e}") return False def test_workflow_execution(): """ Test d'exécution de workflow """ print("🧪 Test d'exécution de workflow...") url = "http://localhost:5003/api/demo/workflow/execute" # Workflow de test simple workflow_data = { "id": "test_workflow", "steps": [ { "type": "wait", "duration": 0.5 }, { "type": "click", "target": {"x": 50, "y": 50} } ] } try: response = requests.post( url, json=workflow_data, headers={"Content-Type": "application/json"}, timeout=10 ) if response.status_code == 200: result = response.json() if result.get("success"): steps_executed = result.get("steps_executed", 0) print(f"✅ Exécution de workflow: OK ({steps_executed} étapes)") return True else: print(f"❌ Exécution de workflow: {result.get('message')}") return False else: print(f"❌ Exécution de workflow: Erreur {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"❌ Exécution de workflow: Connexion impossible - {e}") return False def test_backend_api(): """ Test de l'API backend """ print("🧪 Test de l'API backend...") base_url = "http://localhost:5002/api" tests = [ ("Workflows", f"{base_url}/workflows", "GET"), ] results = [] for test_name, url, method in tests: try: if method == "GET": response = requests.get(url, timeout=5) if response.status_code in [200, 404]: # 404 est OK si pas de workflows print(f"✅ {test_name}: OK") results.append(True) else: print(f"❌ {test_name}: Erreur {response.status_code}") results.append(False) except requests.exceptions.RequestException as e: print(f"❌ {test_name}: Connexion impossible - {e}") results.append(False) return all(results) def test_frontend(): """ Test du frontend """ print("🧪 Test du frontend...") try: response = requests.get("http://localhost:3000", timeout=5) if response.status_code == 200: print("✅ Frontend: OK") return True else: print(f"❌ Frontend: Erreur {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"❌ Frontend: Connexion impossible - {e}") return False def test_data_files(): """ Test des fichiers de données """ print("🧪 Test des fichiers de données...") demo_path = Path("data/demo") if not demo_path.exists(): print("❌ Dossier data/demo n'existe pas") return False # Vérifier les fichiers générés files_to_check = [ "current_screen.png", "current_elements.json" ] results = [] for filename in files_to_check: file_path = demo_path / filename if file_path.exists(): print(f"✅ {filename}: Trouvé") results.append(True) else: print(f"⚠️ {filename}: Non trouvé (normal si pas encore généré)") results.append(True) # Pas critique return all(results) def main(): """ Exécute tous les tests """ print("🎭 Test de la Démonstration Réelle du Visual Workflow Builder") print("=" * 70) tests = [ ("Services Backend", test_backend_api), ("Serveur de Démonstration", test_demo_server), ("Frontend React", test_frontend), ("Fichiers de Données", test_data_files), ("Exécution d'Actions", test_action_execution), ("Exécution de Workflows", test_workflow_execution), ] results = [] for test_name, test_func in tests: print(f"\n📋 {test_name}") print("-" * 40) try: result = test_func() results.append((test_name, result)) except Exception as e: print(f"❌ Erreur inattendue: {e}") results.append((test_name, False)) # Résumé des résultats print("\n" + "=" * 70) print("📊 RÉSUMÉ DES TESTS") print("=" * 70) passed = 0 total = len(results) for test_name, result in results: status = "✅ RÉUSSI" if result else "❌ ÉCHEC" print(f"{test_name:.<40} {status}") if result: passed += 1 print("-" * 70) print(f"Total: {passed}/{total} tests réussis") if passed == total: print("\n🎉 Tous les tests sont réussis ! La démonstration est prête.") return 0 else: print(f"\n⚠️ {total - passed} test(s) ont échoué. Vérifiez la configuration.") return 1 if __name__ == "__main__": sys.exit(main())