From 64def7c2a6dfc9c763b3655bcf04dc00f80f6189 Mon Sep 17 00:00:00 2001 From: LawyZheng Date: Mon, 28 Oct 2024 23:52:26 +0800 Subject: [PATCH] input type button (#1073) --- skyvern/webeye/actions/handler.py | 17 +++++++++++++++++ skyvern/webeye/utils/dom.py | 8 ++++++++ 2 files changed, 25 insertions(+) diff --git a/skyvern/webeye/actions/handler.py b/skyvern/webeye/actions/handler.py index b50964da..bea0ea28 100644 --- a/skyvern/webeye/actions/handler.py +++ b/skyvern/webeye/actions/handler.py @@ -768,6 +768,8 @@ async def handle_select_option_action( LOG.info( "SelectOptionAction is on checkbox", action=action, + task_id=task.task_id, + step_id=step.step_id, ) check_action = CheckboxAction(element_id=action.element_id, is_checked=True) return await handle_checkbox_action(check_action, page, scraped_page, task, step) @@ -783,6 +787,19 @@ async def handle_select_option_action( LOG.info( "SelectOptionAction is on radio", action=action, + task_id=task.task_id, + step_id=step.step_id, + ) + click_action = ClickAction(element_id=action.element_id) + return await chain_click(task, scraped_page, page, click_action, skyvern_element) + + # FIXME: maybe there's a case where could trigger dropdown menu? + if await skyvern_element.is_btn_input(): + LOG.info( + "SelectOptionAction is on button", + action=action, + task_id=task.task_id, + step_id=step.step_id, ) click_action = ClickAction(element_id=action.element_id) return await chain_click(task, scraped_page, page, click_action, skyvern_element) diff --git a/skyvern/webeye/utils/dom.py b/skyvern/webeye/utils/dom.py index 786aeadd..c5207eef 100644 --- a/skyvern/webeye/utils/dom.py +++ b/skyvern/webeye/utils/dom.py @@ -167,6 +167,14 @@ class SkyvernElement: button_type = await self.get_attr("type") return button_type == "radio" + async def is_btn_input(self) -> bool: + tag_name = self.get_tag_name() + if tag_name != InteractiveElement.INPUT: + return False + + input_type = await self.get_attr("type") + return input_type == "button" + async def is_raw_input(self) -> bool: if self.get_tag_name() != InteractiveElement.INPUT: return False