From be621d3b46f0dae37da9ac3ef1d1e7c31b0c32a6 Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Thu, 3 Apr 2025 12:55:46 -0400 Subject: [PATCH] =?UTF-8?q?scroll=20the=20element=20into=20view=20when=20t?= =?UTF-8?q?he=20blocking=20element=20is=20not=20interac=E2=80=A6=20(#2093)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- skyvern/webeye/actions/handler.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/skyvern/webeye/actions/handler.py b/skyvern/webeye/actions/handler.py index 8325be1f..16f6d2ff 100644 --- a/skyvern/webeye/actions/handler.py +++ b/skyvern/webeye/actions/handler.py @@ -1036,6 +1036,28 @@ async def handle_select_option_action( ) return await normal_select(action=action, skyvern_element=skyvern_element, dom=dom, task=task, step=step) + if not exist: + return await normal_select(action=action, skyvern_element=skyvern_element, dom=dom, task=task, step=step) + + if blocking_element is None: + LOG.info( + "Try to scroll the element into view, then detecting the blocking element", + step_id=step.step_id, + ) + try: + await skyvern_element.scroll_into_view() + blocking_element, exist = await skyvern_element.find_blocking_element(dom=dom) + except Exception: + LOG.warning( + "Failed to find the blocking element when scrolling into view, fallback to normal select", + action=action, + step_id=step.step_id, + exc_info=True, + ) + return await normal_select( + action=action, skyvern_element=skyvern_element, dom=dom, task=task, step=step + ) + if not exist or blocking_element is None: return await normal_select(action=action, skyvern_element=skyvern_element, dom=dom, task=task, step=step) LOG.info(