fallback to use js click (#1274)
This commit is contained in:
@@ -320,12 +320,12 @@ class SkyvernElement:
|
||||
assert handler is not None
|
||||
return handler
|
||||
|
||||
async def find_blocking_element(self, dom: DomUtil) -> SkyvernElement | None:
|
||||
async def find_blocking_element(self, dom: DomUtil) -> tuple[SkyvernElement | None, bool]:
|
||||
skyvern_frame = await SkyvernFrame.create_instance(self.get_frame())
|
||||
blocking_element_id = await skyvern_frame.get_blocking_element_id(await self.get_element_handler())
|
||||
blocking_element_id, blocked = await skyvern_frame.get_blocking_element_id(await self.get_element_handler())
|
||||
if not blocking_element_id:
|
||||
return None
|
||||
return await dom.get_skyvern_element_by_id(blocking_element_id)
|
||||
return None, blocked
|
||||
return await dom.get_skyvern_element_by_id(blocking_element_id), blocked
|
||||
|
||||
async def find_element_in_label_children(
|
||||
self, dom: DomUtil, element_type: InteractiveElement
|
||||
@@ -576,6 +576,10 @@ class SkyvernElement:
|
||||
|
||||
return dest_x, dest_y
|
||||
|
||||
async def click_in_javascript(self) -> None:
|
||||
skyvern_frame = await SkyvernFrame.create_instance(self.get_frame())
|
||||
await skyvern_frame.click_element_in_javascript(await self.get_element_handler())
|
||||
|
||||
async def coordinate_click(
|
||||
self, page: Page, timeout: float = SettingsManager.get_settings().BROWSER_ACTION_TIMEOUT_MS
|
||||
) -> None:
|
||||
|
||||
@@ -182,7 +182,7 @@ class SkyvernFrame:
|
||||
js_script = "(element) => checkDisabledFromStyle(element)"
|
||||
return await self.evaluate(frame=self.frame, expression=js_script, arg=element)
|
||||
|
||||
async def get_blocking_element_id(self, element: ElementHandle) -> str:
|
||||
async def get_blocking_element_id(self, element: ElementHandle) -> tuple[str, bool]:
|
||||
js_script = "(element) => getBlockElementUniqueID(element)"
|
||||
return await self.evaluate(frame=self.frame, expression=js_script, arg=element)
|
||||
|
||||
@@ -239,3 +239,7 @@ class SkyvernFrame:
|
||||
async def has_ASP_client_control(self) -> bool:
|
||||
js_script = "() => hasASPClientControl()"
|
||||
return await self.evaluate(frame=self.frame, expression=js_script)
|
||||
|
||||
async def click_element_in_javascript(self, element: ElementHandle) -> None:
|
||||
js_script = "(element) => element.click()"
|
||||
return await self.evaluate(frame=self.frame, expression=js_script, arg=element)
|
||||
|
||||
Reference in New Issue
Block a user