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:
235
visual_workflow_builder/test_documentation_browser.py
Normal file
235
visual_workflow_builder/test_documentation_browser.py
Normal file
@@ -0,0 +1,235 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test simple de la documentation avec un navigateur headless
|
||||
"""
|
||||
|
||||
import time
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
|
||||
def test_with_curl():
|
||||
"""Test simple avec curl pour vérifier l'application"""
|
||||
|
||||
print("🌐 Test de l'application avec curl...")
|
||||
|
||||
try:
|
||||
# Test de l'accès à l'application
|
||||
result = subprocess.run([
|
||||
'curl', '-s', '-o', '/dev/null', '-w', '%{http_code}',
|
||||
'http://localhost:3000'
|
||||
], capture_output=True, text=True, timeout=10)
|
||||
|
||||
if result.returncode == 0 and result.stdout.strip() == '200':
|
||||
print("✅ Application accessible sur http://localhost:3000")
|
||||
return True
|
||||
else:
|
||||
print(f"❌ Application non accessible: code {result.stdout.strip()}")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Erreur lors du test curl: {e}")
|
||||
return False
|
||||
|
||||
def test_with_browser():
|
||||
"""Test avec un navigateur simple"""
|
||||
|
||||
print("🌐 Test avec navigateur...")
|
||||
|
||||
# Vérifier si chromium ou chrome est disponible
|
||||
browsers = ['chromium-browser', 'google-chrome', 'chromium', 'chrome']
|
||||
browser_cmd = None
|
||||
|
||||
for browser in browsers:
|
||||
try:
|
||||
result = subprocess.run(['which', browser], capture_output=True, text=True)
|
||||
if result.returncode == 0:
|
||||
browser_cmd = browser
|
||||
break
|
||||
except:
|
||||
continue
|
||||
|
||||
if not browser_cmd:
|
||||
print("⚠️ Aucun navigateur Chrome/Chromium trouvé")
|
||||
return False
|
||||
|
||||
print(f"🔍 Utilisation de {browser_cmd}")
|
||||
|
||||
try:
|
||||
# Lancer le navigateur en mode headless pour capturer les erreurs console
|
||||
cmd = [
|
||||
browser_cmd,
|
||||
'--headless',
|
||||
'--disable-gpu',
|
||||
'--no-sandbox',
|
||||
'--disable-dev-shm-usage',
|
||||
'--enable-logging',
|
||||
'--log-level=0',
|
||||
'--dump-dom',
|
||||
'http://localhost:3000'
|
||||
]
|
||||
|
||||
print("🚀 Lancement du navigateur...")
|
||||
result = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
|
||||
|
||||
if result.returncode == 0:
|
||||
# Analyser le DOM récupéré
|
||||
dom_content = result.stdout
|
||||
|
||||
# Vérifier la présence d'éléments clés
|
||||
checks = {
|
||||
'Application chargée': 'Visual Workflow Builder' in dom_content,
|
||||
'React chargé': 'react' in dom_content.lower() or 'div id="root"' in dom_content,
|
||||
'Palette présente': 'palette' in dom_content.lower(),
|
||||
'Canvas présent': 'canvas' in dom_content.lower() or 'workflow' in dom_content.lower(),
|
||||
}
|
||||
|
||||
print("\n📋 Analyse du contenu:")
|
||||
for check_name, check_result in checks.items():
|
||||
status = "✅" if check_result else "❌"
|
||||
print(f" {status} {check_name}")
|
||||
|
||||
# Vérifier s'il y a des erreurs JavaScript dans stderr
|
||||
if result.stderr:
|
||||
print(f"\n⚠️ Erreurs/Avertissements du navigateur:")
|
||||
print(result.stderr[:500] + "..." if len(result.stderr) > 500 else result.stderr)
|
||||
|
||||
return all(checks.values())
|
||||
else:
|
||||
print(f"❌ Erreur du navigateur: {result.stderr}")
|
||||
return False
|
||||
|
||||
except subprocess.TimeoutExpired:
|
||||
print("⏰ Timeout lors du chargement de la page")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"❌ Erreur lors du test navigateur: {e}")
|
||||
return False
|
||||
|
||||
def check_documentation_files():
|
||||
"""Vérifier que les fichiers de documentation existent"""
|
||||
|
||||
print("📁 Vérification des fichiers de documentation...")
|
||||
|
||||
files_to_check = [
|
||||
'frontend/src/data/toolDocumentation.ts',
|
||||
'frontend/src/services/DocumentationService.ts',
|
||||
'frontend/src/components/DocumentationTab/index.tsx',
|
||||
'frontend/src/components/DocumentationPopup/index.tsx',
|
||||
'frontend/src/types/documentation.ts'
|
||||
]
|
||||
|
||||
all_exist = True
|
||||
for file_path in files_to_check:
|
||||
if os.path.exists(file_path):
|
||||
# Vérifier la taille du fichier
|
||||
size = os.path.getsize(file_path)
|
||||
print(f"✅ {file_path} ({size} bytes)")
|
||||
else:
|
||||
print(f"❌ {file_path} manquant")
|
||||
all_exist = False
|
||||
|
||||
return all_exist
|
||||
|
||||
def check_build_status():
|
||||
"""Vérifier le statut de build du frontend"""
|
||||
|
||||
print("🔨 Vérification du build frontend...")
|
||||
|
||||
# Vérifier si le dossier dist existe
|
||||
if os.path.exists('frontend/dist'):
|
||||
print("✅ Dossier dist trouvé")
|
||||
|
||||
# Lister les fichiers principaux
|
||||
dist_files = os.listdir('frontend/dist')
|
||||
js_files = [f for f in dist_files if f.endswith('.js')]
|
||||
css_files = [f for f in dist_files if f.endswith('.css')]
|
||||
|
||||
print(f" 📄 Fichiers JS: {len(js_files)}")
|
||||
print(f" 🎨 Fichiers CSS: {len(css_files)}")
|
||||
|
||||
# Vérifier la taille du bundle principal
|
||||
main_js = None
|
||||
for js_file in js_files:
|
||||
if 'main' in js_file or 'bundle' in js_file:
|
||||
main_js = js_file
|
||||
break
|
||||
|
||||
if main_js:
|
||||
size = os.path.getsize(f'frontend/dist/{main_js}')
|
||||
print(f" 📦 Bundle principal: {main_js} ({size} bytes)")
|
||||
|
||||
if size > 100000: # Plus de 100KB
|
||||
print(" ✅ Bundle semble correct")
|
||||
return True
|
||||
else:
|
||||
print(" ⚠️ Bundle très petit, peut-être incomplet")
|
||||
return False
|
||||
else:
|
||||
print(" ❌ Aucun bundle principal trouvé")
|
||||
return False
|
||||
else:
|
||||
print("❌ Dossier dist non trouvé")
|
||||
return False
|
||||
|
||||
def main():
|
||||
"""Fonction principale"""
|
||||
|
||||
print("=" * 70)
|
||||
print("TEST DE DIAGNOSTIC - DOCUMENTATION VISUAL WORKFLOW BUILDER")
|
||||
print("=" * 70)
|
||||
|
||||
# Changer vers le bon répertoire
|
||||
if not os.path.exists('frontend'):
|
||||
print("❌ Répertoire frontend non trouvé. Exécutez depuis visual_workflow_builder/")
|
||||
return 1
|
||||
|
||||
# Tests
|
||||
tests = [
|
||||
("Fichiers de documentation", check_documentation_files),
|
||||
("Build frontend", check_build_status),
|
||||
("Accès application", test_with_curl),
|
||||
("Test navigateur", test_with_browser),
|
||||
]
|
||||
|
||||
results = []
|
||||
|
||||
for test_name, test_func in tests:
|
||||
print(f"\n🧪 {test_name}...")
|
||||
try:
|
||||
result = test_func()
|
||||
results.append((test_name, result))
|
||||
status = "✅ RÉUSSI" if result else "❌ ÉCHOUÉ"
|
||||
print(f" {status}")
|
||||
except Exception as e:
|
||||
print(f" ❌ ERREUR: {e}")
|
||||
results.append((test_name, False))
|
||||
|
||||
# Résumé
|
||||
print("\n" + "=" * 70)
|
||||
print("RÉSUMÉ DES TESTS:")
|
||||
print("=" * 70)
|
||||
|
||||
passed = sum(1 for _, result in results if result)
|
||||
total = len(results)
|
||||
|
||||
for test_name, result in results:
|
||||
status = "✅" if result else "❌"
|
||||
print(f"{status} {test_name}")
|
||||
|
||||
print(f"\n📊 Résultat global: {passed}/{total} tests réussis")
|
||||
|
||||
if passed == total:
|
||||
print("\n🎉 Tous les tests sont passés!")
|
||||
print("La documentation devrait fonctionner. Si elle ne s'affiche pas:")
|
||||
print("1. Ouvrez les outils de développement (F12)")
|
||||
print("2. Vérifiez la console pour des erreurs JavaScript")
|
||||
print("3. Vérifiez l'onglet Network pour des ressources non chargées")
|
||||
else:
|
||||
print(f"\n⚠️ {total - passed} test(s) ont échoué")
|
||||
print("Vérifiez les erreurs ci-dessus pour diagnostiquer le problème")
|
||||
|
||||
return 0 if passed == total else 1
|
||||
|
||||
if __name__ == "__main__":
|
||||
exit(main())
|
||||
Reference in New Issue
Block a user