#!/usr/bin/env python3 """ Diagnostic pour le replay Agent V1 sur Windows. Test en 3 etapes : 1. Verifie que pynput fonctionne (souris + clavier) 2. Verifie la connexion au serveur de replay 3. Execute un poll_and_execute de test Usage : python test_replay_diag.py (Depuis C:\rpa_vision : .venv\Scripts\python.exe test_replay_diag.py) """ import os import sys import time # Charger .env si present env_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), '.env') if os.path.exists(env_file): with open(env_file, encoding='utf-8') as f: for line in f: line = line.strip() if line and not line.startswith('#') and '=' in line: key, val = line.split('=', 1) os.environ.setdefault(key.strip(), val.strip()) SERVER_URL = os.getenv("RPA_SERVER_URL", "http://192.168.1.40:5005/api/v1") print("=" * 60) print(" DIAGNOSTIC REPLAY AGENT V1") print("=" * 60) print() # ---- Test 1 : pynput ---- print("[TEST 1] Verification pynput...") try: from pynput.mouse import Controller as MouseController from pynput.keyboard import Controller as KeyboardController mouse = MouseController() kb = KeyboardController() pos = mouse.position print(f" Position souris actuelle : {pos}") if pos is None: print(" PROBLEME : mouse.position = None !") print(" -> pynput n'a pas acces a la session graphique.") print(" -> Le script doit etre lance DEPUIS le bureau Windows,") print(" pas via SSH.") else: print(f" OK : souris detectee a {pos}") # Test deplacement souris (petit mouvement) print(" Test deplacement souris dans 2s...") time.sleep(2) old_pos = mouse.position if old_pos: # Deplacement de 50px a droite puis retour mouse.position = (old_pos[0] + 50, old_pos[1]) time.sleep(0.3) new_pos = mouse.position mouse.position = old_pos # Retour print(f" Deplacement: {old_pos} -> {new_pos} -> retour") if new_pos and new_pos[0] != old_pos[0]: print(" OK : deplacement souris fonctionne !") else: print(" PROBLEME : la souris n'a pas bouge.") else: print(" SKIP : pas de position souris disponible.") except Exception as e: print(f" ERREUR pynput : {e}") import traceback traceback.print_exc() print() # ---- Test 2 : connexion serveur ---- print(f"[TEST 2] Connexion au serveur : {SERVER_URL}") try: import requests url = f"{SERVER_URL}/traces/stream/replay/next" resp = requests.get(url, params={"session_id": "diag_test"}, timeout=5) print(f" HTTP {resp.status_code} : {resp.text[:200]}") if resp.ok: data = resp.json() if data.get("action") is None: print(" OK : serveur accessible, pas d'action en attente.") else: print(f" OK : serveur accessible, ACTION RECUE : {data['action']}") else: print(f" PROBLEME : le serveur a repondu HTTP {resp.status_code}") except requests.exceptions.ConnectionError as e: print(f" ERREUR CONNEXION : {e}") print(f" -> Verifiez que le serveur tourne sur {SERVER_URL}") except Exception as e: print(f" ERREUR : {e}") print() # ---- Test 3 : mss (capture ecran) ---- print("[TEST 3] Capture ecran (mss)...") try: import mss sct = mss.mss() monitor = sct.monitors[1] print(f" Moniteur principal : {monitor['width']}x{monitor['height']}") raw = sct.grab(monitor) print(f" Capture OK : {raw.size}") except Exception as e: print(f" ERREUR mss : {e}") print() # ---- Test 4 : typing test (5s delay) ---- print("[TEST 4] Test de frappe clavier") print(" -> Ouvrez le Bloc-Notes et placez le curseur dedans.") print(" -> La frappe commencera dans 5 secondes...") time.sleep(5) try: from pynput.keyboard import Controller as KeyboardController kb = KeyboardController() test_text = "Hello RPA!" print(f" Frappe de '{test_text}'...") kb.type(test_text) print(f" Frappe terminee. Verifiez si le texte apparait dans le Bloc-Notes.") except Exception as e: print(f" ERREUR frappe : {e}") import traceback traceback.print_exc() print() print("=" * 60) print(" DIAGNOSTIC TERMINE") print("=" * 60) input("Appuyez sur Entree pour fermer...")