better detect dropdown menu (#778)

This commit is contained in:
LawyZheng
2024-09-07 09:34:33 +08:00
committed by GitHub
parent 95b2e53c46
commit 692ffb6d43
7 changed files with 144 additions and 31 deletions

View File

@@ -269,6 +269,23 @@ class SkyvernElement:
return None
async def find_children_element_id_by_callback(
self, cb: typing.Callable[[dict], typing.Awaitable[bool]]
) -> str | None:
index = 0
queue = [self.get_element_dict()]
while index < len(queue):
item = queue[index]
if await cb(item):
return item.get("id", "")
children: list[dict] = item.get("children", [])
for child in children:
queue.append(child)
index += 1
return None
async def find_label_for(
self, dom: DomUtil, timeout: float = SettingsManager.get_settings().BROWSER_ACTION_TIMEOUT_MS
) -> SkyvernElement | None:

View File

@@ -188,6 +188,10 @@ class SkyvernFrame:
js_script = "(element) => isScrollable(element)"
return await self.frame.evaluate(js_script, element)
async def get_element_visible(self, element: ElementHandle) -> bool:
js_script = "(element) => isElementVisible(element) && !isHidden(element)"
return await self.frame.evaluate(js_script, element)
async def scroll_to_top(self, draw_boxes: bool) -> float:
"""
Scroll to the top of the page and take a screenshot.