diff --git a/agent_v0/agent_v1/core/executor.py b/agent_v0/agent_v1/core/executor.py index 884a4b68f..c73c2da55 100644 --- a/agent_v0/agent_v1/core/executor.py +++ b/agent_v0/agent_v1/core/executor.py @@ -354,20 +354,32 @@ class ActionExecutorV1: f"({real_x}, {real_y}) sur ({width}x{height})" ) - # ── Post-vérification : titre fenêtre après le clic ── + # ── Post-vérification : polling du titre fenêtre ── + # On attend que le titre change vers celui attendu (max 10s) + # C'est 100% visuel — pas de wait fixe arbitraire expected_after = action.get("expected_window_title", "") if expected_after: - time.sleep(0.5) # Laisser le temps à la fenêtre de changer from ..window_info_crossplatform import get_active_window_info - post_info = get_active_window_info() - post_title = post_info.get("title", "") - if expected_after.lower() in post_title.lower() or post_title.lower() in expected_after.lower(): - print(f" [POST-VÉRIF] OK — '{post_title}'") - logger.info(f"POST-VÉRIF OK : '{post_title}'") + max_wait = 10.0 + poll_interval = 0.3 + elapsed_wait = 0.0 + matched = False + while elapsed_wait < max_wait: + time.sleep(poll_interval) + elapsed_wait += poll_interval + post_info = get_active_window_info() + post_title = post_info.get("title", "") + if (expected_after.lower() in post_title.lower() + or post_title.lower() in expected_after.lower()): + matched = True + break + if matched: + print(f" [POST-VÉRIF] OK en {elapsed_wait:.1f}s — '{post_title}'") + logger.info(f"POST-VÉRIF OK en {elapsed_wait:.1f}s : '{post_title}'") else: - print(f" [POST-VÉRIF] ATTENTION — '{post_title}' ≠ attendu '{expected_after}'") - logger.warning(f"POST-VÉRIF : '{post_title}' ≠ attendu '{expected_after}'") - result["warning"] = f"post_verif_mismatch:{post_title}" + print(f" [POST-VÉRIF] TIMEOUT {max_wait}s — '{post_title}' ≠ '{expected_after}'") + logger.warning(f"POST-VÉRIF TIMEOUT : '{post_title}' ≠ '{expected_after}'") + result["warning"] = f"post_verif_timeout:{post_title}" else: print(f" [CLICK] Terminé.")