From 1b2bdcb94912ac9efcbccccd340638478e01a366 Mon Sep 17 00:00:00 2001 From: LawyZheng Date: Fri, 20 Sep 2024 09:17:14 +0800 Subject: [PATCH] skip unnecessary select-dropdown check for input (#862) --- skyvern/webeye/actions/handler.py | 2 +- skyvern/webeye/utils/dom.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/skyvern/webeye/actions/handler.py b/skyvern/webeye/actions/handler.py index 1e297762..337307e7 100644 --- a/skyvern/webeye/actions/handler.py +++ b/skyvern/webeye/actions/handler.py @@ -416,7 +416,7 @@ async def handle_input_text_action( incremental_element: list[dict] = [] # check if it's selectable - if skyvern_element.get_tag_name() == InteractiveElement.INPUT and not await skyvern_element.is_spinbtn_input(): + if skyvern_element.get_tag_name() == InteractiveElement.INPUT and not await skyvern_element.is_raw_input(): await skyvern_element.scroll_into_view() select_action = SelectOptionAction( reasoning=action.reasoning, diff --git a/skyvern/webeye/utils/dom.py b/skyvern/webeye/utils/dom.py index c1fa3e76..0cb0f3b4 100644 --- a/skyvern/webeye/utils/dom.py +++ b/skyvern/webeye/utils/dom.py @@ -84,6 +84,8 @@ class InteractiveElement(StrEnum): SELECTABLE_ELEMENT = [InteractiveElement.INPUT, InteractiveElement.SELECT] +RAW_INPUT_TYPE_VALUE = ["number", "url", "tel", "email", "username", "password"] +RAW_INPUT_NAME_VALUE = ["name", "email", "username", "password", "phone"] class SkyvernOptionType(typing.TypedDict): @@ -197,6 +199,23 @@ class SkyvernElement: button_type = await self.get_attr("type") return button_type == "radio" + async def is_raw_input(self) -> bool: + if self.get_tag_name() != InteractiveElement.INPUT: + return False + + if await self.is_spinbtn_input(): + return True + + input_type = str(await self.get_attr("type")) + if input_type.lower() in RAW_INPUT_TYPE_VALUE: + return True + + name = str(await self.get_attr("name")) + if name.lower() in RAW_INPUT_NAME_VALUE: + return True + + return False + async def is_spinbtn_input(self) -> bool: """ confirm the element is: