From 9580a94e251613da23a22621c79f935714dce98c Mon Sep 17 00:00:00 2001 From: Oliver Hofmann Date: Sun, 17 May 2026 17:43:04 +0200 Subject: [PATCH] debug: gradual mouse movement + JS event dispatch + element hit info --- src/teampulse/resolver.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/teampulse/resolver.py b/src/teampulse/resolver.py index 3fbc1f9..8c4b988 100644 --- a/src/teampulse/resolver.py +++ b/src/teampulse/resolver.py @@ -129,9 +129,31 @@ class Resolver: if not strategy: print(f" '{display_name}' nicht im sichtbaren Chat gefunden.") return None - print(f" '{display_name}' via '{strategy}' bei {bbox} — warte auf Karte...") + x = bbox.get('x', 0) + bbox.get('w', bbox.get('width', 32)) / 2 if isinstance(bbox, dict) else 0 + y = bbox.get('y', 0) + bbox.get('h', bbox.get('height', 32)) / 2 if isinstance(bbox, dict) else 0 + print(f" '{display_name}' via '{strategy}' → Viewport ({x:.0f}, {y:.0f}) — warte auf Karte...") - # Screenshot right after hover for debugging + # Approach 1: gradual mouse movement (simulate human) + self._page.mouse.move(x - 50, y, steps=5) + time.sleep(0.1) + self._page.mouse.move(x, y, steps=10) + time.sleep(0.3) + + # Approach 2: dispatch pointer/mouse events directly on element at that position + hit_info = self._page.evaluate(f"""() => {{ + const el = document.elementFromPoint({x}, {y}); + if (!el) return 'no element at position'; + ['pointerover','pointerenter','mouseover','mouseenter','pointermove','mousemove'].forEach(t => {{ + el.dispatchEvent(new MouseEvent(t, {{ + bubbles: true, cancelable: true, view: window, + clientX: {x}, clientY: {y} + }})); + }}); + return el.tagName + '[' + (el.getAttribute('data-tid')||'') + '] ' + el.className.substring(0,60); + }}""") + print(f" Element bei ({x:.0f},{y:.0f}): {hit_info}") + + # Screenshot after hover attempt try: from pathlib import Path as _Path debug_dir = _Path("debug"); debug_dir.mkdir(exist_ok=True) @@ -140,7 +162,7 @@ class Resolver: except Exception: pass - time.sleep(0.5) # Give Teams time to register the hover + time.sleep(1.5) # Wait for hover card to fully appear try: # Stage 1: wait for card container to appear