support value select for custom selection (#756)
This commit is contained in:
@@ -320,6 +320,36 @@ class SkyvernElement:
|
||||
index += 1
|
||||
return None
|
||||
|
||||
async def find_interactable_anchor_child(
|
||||
self, dom: DomUtil, element_type: InteractiveElement
|
||||
) -> SkyvernElement | None:
|
||||
index = 0
|
||||
queue = [self]
|
||||
while index < len(queue):
|
||||
item = queue[index]
|
||||
if item.is_interactable() and item.get_tag_name() == element_type:
|
||||
return item
|
||||
|
||||
try:
|
||||
for_element = await item.find_label_for(dom=dom)
|
||||
if for_element is not None and for_element.get_tag_name() == element_type:
|
||||
return for_element
|
||||
except Exception:
|
||||
LOG.error(
|
||||
"Failed to find element by label-for",
|
||||
element=item.__static_element,
|
||||
exc_info=True,
|
||||
)
|
||||
|
||||
children: list[dict] = item.__static_element.get("children", [])
|
||||
for child in children:
|
||||
child_id = child.get("id", "")
|
||||
child_element = await dom.get_skyvern_element_by_id(child_id)
|
||||
queue.append(child_element)
|
||||
|
||||
index += 1
|
||||
return None
|
||||
|
||||
async def get_attr(
|
||||
self,
|
||||
attr_name: str,
|
||||
|
||||
@@ -145,9 +145,9 @@ class SkyvernFrame:
|
||||
async with asyncio.timeout(timeout):
|
||||
return await self.frame.content()
|
||||
|
||||
async def scroll_to_element_bottom(self, element: ElementHandle) -> None:
|
||||
js_script = "(element) => scrollToElementBottom(element)"
|
||||
return await self.frame.evaluate(js_script, element)
|
||||
async def scroll_to_element_bottom(self, element: ElementHandle, page_by_page: bool = False) -> None:
|
||||
js_script = "([element, page_by_page]) => scrollToElementBottom(element, page_by_page)"
|
||||
return await self.frame.evaluate(js_script, [element, page_by_page])
|
||||
|
||||
async def scroll_to_element_top(self, element: ElementHandle) -> None:
|
||||
js_script = "(element) => scrollToElementTop(element)"
|
||||
|
||||
Reference in New Issue
Block a user