v1.0 - Version stable: multi-PC, détection UI-DETR-1, 3 modes exécution
- Frontend v4 accessible sur réseau local (192.168.1.40) - Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard) - Ollama GPU fonctionnel - Self-healing interactif - Dashboard confiance Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
308
test_interface_proprietes_reel.py
Normal file
308
test_interface_proprietes_reel.py
Normal file
@@ -0,0 +1,308 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test Réel de l'Interface des Propriétés VWB
|
||||
Auteur : Dom, Alice, Kiro - 12 janvier 2026
|
||||
|
||||
Ce script teste l'interface réelle pour identifier pourquoi les propriétés
|
||||
ne s'affichent pas correctement.
|
||||
"""
|
||||
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
def test_backend_vwb():
|
||||
"""Test du backend VWB"""
|
||||
|
||||
print("🔍 Test du Backend VWB")
|
||||
print("=" * 50)
|
||||
|
||||
# Tester la connexion au backend
|
||||
backend_url = "http://localhost:5004"
|
||||
|
||||
try:
|
||||
# Test de santé du catalogue
|
||||
print("🏥 Test de santé du catalogue...")
|
||||
response = requests.get(f"{backend_url}/api/vwb/catalog/health", timeout=5)
|
||||
|
||||
if response.status_code == 200:
|
||||
health_data = response.json()
|
||||
print("✅ Backend VWB accessible")
|
||||
print(f" Status: {health_data.get('status', 'unknown')}")
|
||||
print(f" Services: {health_data.get('services', {})}")
|
||||
else:
|
||||
print(f"❌ Backend VWB inaccessible (status: {response.status_code})")
|
||||
return False
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"❌ Erreur de connexion au backend: {e}")
|
||||
print("💡 Vérifiez que le backend VWB est démarré sur le port 5002")
|
||||
return False
|
||||
|
||||
try:
|
||||
# Test de récupération des actions
|
||||
print("\n📋 Test de récupération des actions...")
|
||||
response = requests.get(f"{backend_url}/api/vwb/catalog/actions", timeout=5)
|
||||
|
||||
if response.status_code == 200:
|
||||
actions_data = response.json()
|
||||
actions = actions_data.get('actions', [])
|
||||
print(f"✅ {len(actions)} actions disponibles")
|
||||
|
||||
# Afficher quelques actions
|
||||
for i, action in enumerate(actions[:5]):
|
||||
print(f" {i+1}. {action.get('id')} - {action.get('name')}")
|
||||
|
||||
if len(actions) > 5:
|
||||
print(f" ... et {len(actions) - 5} autres")
|
||||
|
||||
else:
|
||||
print(f"❌ Erreur récupération actions (status: {response.status_code})")
|
||||
return False
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"❌ Erreur récupération actions: {e}")
|
||||
return False
|
||||
|
||||
try:
|
||||
# Test d'une action spécifique
|
||||
print("\n🎯 Test d'action spécifique (navigate_to_url)...")
|
||||
response = requests.get(f"{backend_url}/api/vwb/catalog/actions/navigate_to_url", timeout=5)
|
||||
|
||||
if response.status_code == 200:
|
||||
action_data = response.json()
|
||||
action = action_data.get('action', {})
|
||||
print(f"✅ Action navigate_to_url trouvée")
|
||||
print(f" Nom: {action.get('name')}")
|
||||
print(f" Catégorie: {action.get('category')}")
|
||||
print(f" Paramètres: {len(action.get('parameters', {}))}")
|
||||
else:
|
||||
print(f"❌ Action navigate_to_url non trouvée (status: {response.status_code})")
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"❌ Erreur test action spécifique: {e}")
|
||||
|
||||
return True
|
||||
|
||||
def test_frontend_connection():
|
||||
"""Test de la connexion frontend"""
|
||||
|
||||
print("\n🌐 Test de la Connexion Frontend")
|
||||
print("=" * 50)
|
||||
|
||||
frontend_url = "http://localhost:3000"
|
||||
|
||||
try:
|
||||
print("🔗 Test de connexion au frontend...")
|
||||
response = requests.get(frontend_url, timeout=5)
|
||||
|
||||
if response.status_code == 200:
|
||||
print("✅ Frontend accessible")
|
||||
print("💡 Ouvrez http://localhost:3000 dans votre navigateur")
|
||||
print("💡 Créez une étape 'navigate_to_url' et vérifiez les propriétés")
|
||||
else:
|
||||
print(f"❌ Frontend inaccessible (status: {response.status_code})")
|
||||
return False
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"❌ Erreur de connexion au frontend: {e}")
|
||||
print("💡 Vérifiez que le frontend est démarré avec 'npm start'")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def test_static_catalog():
|
||||
"""Test du catalogue statique"""
|
||||
|
||||
print("\n📚 Test du Catalogue Statique")
|
||||
print("=" * 50)
|
||||
|
||||
# Vérifier le fichier de catalogue statique
|
||||
static_catalog_path = Path("visual_workflow_builder/frontend/src/data/staticCatalog.ts")
|
||||
|
||||
if not static_catalog_path.exists():
|
||||
print(f"❌ Fichier catalogue statique non trouvé: {static_catalog_path}")
|
||||
return False
|
||||
|
||||
print("✅ Fichier catalogue statique trouvé")
|
||||
|
||||
# Lire le contenu pour vérifier les actions
|
||||
try:
|
||||
content = static_catalog_path.read_text(encoding='utf-8')
|
||||
|
||||
# Vérifier la présence d'actions clés
|
||||
key_actions = ['navigate_to_url', 'click_anchor', 'type_text']
|
||||
found_actions = []
|
||||
|
||||
for action in key_actions:
|
||||
if f"'{action}'" in content or f'"{action}"' in content:
|
||||
found_actions.append(action)
|
||||
|
||||
print(f"📋 Actions trouvées dans le catalogue statique:")
|
||||
for action in found_actions:
|
||||
print(f" ✅ {action}")
|
||||
|
||||
missing_actions = set(key_actions) - set(found_actions)
|
||||
if missing_actions:
|
||||
print(f"❌ Actions manquantes:")
|
||||
for action in missing_actions:
|
||||
print(f" ❌ {action}")
|
||||
|
||||
return len(missing_actions) == 0
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erreur lecture catalogue statique: {e}")
|
||||
return False
|
||||
|
||||
def create_test_workflow():
|
||||
"""Crée un workflow de test pour vérifier les propriétés"""
|
||||
|
||||
print("\n🧪 Création d'un Workflow de Test")
|
||||
print("=" * 50)
|
||||
|
||||
# Workflow de test avec différents types d'étapes
|
||||
test_workflow = {
|
||||
"id": "test_proprietes_workflow",
|
||||
"name": "Test Propriétés VWB",
|
||||
"description": "Workflow pour tester l'affichage des propriétés",
|
||||
"steps": [
|
||||
{
|
||||
"id": "step_navigate",
|
||||
"type": "navigate_to_url",
|
||||
"name": "Naviguer vers URL",
|
||||
"position": {"x": 100, "y": 100},
|
||||
"data": {
|
||||
"isVWBCatalogAction": True,
|
||||
"vwbActionId": "navigate_to_url",
|
||||
"parameters": {
|
||||
"url": "https://example.com"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "step_click",
|
||||
"type": "click_anchor",
|
||||
"name": "Cliquer sur élément",
|
||||
"position": {"x": 100, "y": 200},
|
||||
"data": {
|
||||
"isVWBCatalogAction": True,
|
||||
"vwbActionId": "click_anchor",
|
||||
"parameters": {
|
||||
"visual_anchor": None
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "step_type",
|
||||
"type": "type_text",
|
||||
"name": "Saisir texte",
|
||||
"position": {"x": 100, "y": 300},
|
||||
"data": {
|
||||
"isVWBCatalogAction": True,
|
||||
"vwbActionId": "type_text",
|
||||
"parameters": {
|
||||
"visual_anchor": None,
|
||||
"text": "Hello World"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "step_standard",
|
||||
"type": "click",
|
||||
"name": "Clic standard",
|
||||
"position": {"x": 100, "y": 400},
|
||||
"data": {
|
||||
"parameters": {
|
||||
"target": None,
|
||||
"clickType": "left"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"connections": []
|
||||
}
|
||||
|
||||
# Sauvegarder le workflow de test
|
||||
test_file = Path("test_workflow_proprietes.json")
|
||||
|
||||
try:
|
||||
with open(test_file, 'w', encoding='utf-8') as f:
|
||||
json.dump(test_workflow, f, indent=2, ensure_ascii=False)
|
||||
|
||||
print(f"✅ Workflow de test créé: {test_file}")
|
||||
print("💡 Importez ce workflow dans l'interface pour tester")
|
||||
|
||||
# Afficher les instructions
|
||||
print("\n📋 Instructions de test:")
|
||||
print("1. Ouvrez l'interface VWB (http://localhost:3000)")
|
||||
print("2. Importez le workflow test_workflow_proprietes.json")
|
||||
print("3. Sélectionnez chaque étape et vérifiez les propriétés:")
|
||||
print(" - step_navigate: Devrait afficher VWBActionProperties")
|
||||
print(" - step_click: Devrait afficher VWBActionProperties")
|
||||
print(" - step_type: Devrait afficher VWBActionProperties")
|
||||
print(" - step_standard: Devrait afficher StandardParametersEditor")
|
||||
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erreur création workflow de test: {e}")
|
||||
return False
|
||||
|
||||
def main():
|
||||
"""Fonction principale"""
|
||||
|
||||
print("🔧 Test Complet de Configuration des Outils VWB")
|
||||
print("=" * 60)
|
||||
print("Auteur : Dom, Alice, Kiro - 12 janvier 2026")
|
||||
print("=" * 60)
|
||||
|
||||
# Tests séquentiels
|
||||
tests = [
|
||||
("Backend VWB", test_backend_vwb),
|
||||
("Catalogue Statique", test_static_catalog),
|
||||
("Connexion Frontend", test_frontend_connection),
|
||||
("Workflow de Test", create_test_workflow)
|
||||
]
|
||||
|
||||
results = {}
|
||||
|
||||
for test_name, test_func in tests:
|
||||
print(f"\n🧪 Exécution: {test_name}")
|
||||
try:
|
||||
results[test_name] = test_func()
|
||||
except Exception as e:
|
||||
print(f"❌ Erreur inattendue dans {test_name}: {e}")
|
||||
results[test_name] = False
|
||||
|
||||
# Résumé des résultats
|
||||
print("\n" + "=" * 60)
|
||||
print("📊 RÉSUMÉ DES TESTS")
|
||||
print("=" * 60)
|
||||
|
||||
passed = 0
|
||||
total = len(tests)
|
||||
|
||||
for test_name, result in results.items():
|
||||
status = "✅ PASSÉ" if result else "❌ ÉCHEC"
|
||||
print(f"{status} - {test_name}")
|
||||
if result:
|
||||
passed += 1
|
||||
|
||||
print(f"\n🎯 Résultat global: {passed}/{total} tests passés")
|
||||
|
||||
if passed == total:
|
||||
print("🎉 Tous les tests sont passés !")
|
||||
print("💡 Si les propriétés ne s'affichent toujours pas, vérifiez:")
|
||||
print(" 1. Les logs de la console du navigateur")
|
||||
print(" 2. L'onglet Network pour les requêtes API")
|
||||
print(" 3. Les erreurs TypeScript dans la compilation")
|
||||
else:
|
||||
print("⚠️ Certains tests ont échoué. Corrigez les problèmes identifiés.")
|
||||
|
||||
return passed == total
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = main()
|
||||
sys.exit(0 if success else 1)
|
||||
Reference in New Issue
Block a user