better detect dropdown menu (#778)
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user