refresh options before doing select (#2537)
This commit is contained in:
@@ -3193,6 +3193,7 @@ async def normal_select(
|
|||||||
step_id=step.step_id,
|
step_id=step.step_id,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
await skyvern_element.refresh_select_options()
|
||||||
options_html = skyvern_element.build_HTML()
|
options_html = skyvern_element.build_HTML()
|
||||||
field_information = (
|
field_information = (
|
||||||
input_or_select_context.field if not input_or_select_context.intention else input_or_select_context.intention
|
input_or_select_context.field if not input_or_select_context.intention else input_or_select_context.intention
|
||||||
|
|||||||
@@ -795,6 +795,18 @@ class SkyvernElement:
|
|||||||
LOG.warning("Failed to navigate to the <a> href link", exc_info=True, href=href, current_url=page.url)
|
LOG.warning("Failed to navigate to the <a> href link", exc_info=True, href=href, current_url=page.url)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
async def refresh_select_options(self) -> tuple[list, str] | None:
|
||||||
|
if self.get_tag_name() != InteractiveElement.SELECT:
|
||||||
|
return None
|
||||||
|
|
||||||
|
frame = await SkyvernFrame.create_instance(self.get_frame())
|
||||||
|
options, selected_value = await frame.get_select_options(await self.get_element_handler())
|
||||||
|
self.__static_element["options"] = options
|
||||||
|
if "attributes" in self.__static_element:
|
||||||
|
self.__static_element["attributes"]["selected"] = selected_value
|
||||||
|
self._attributes = self.__static_element["attributes"]
|
||||||
|
return options, selected_value
|
||||||
|
|
||||||
|
|
||||||
class DomUtil:
|
class DomUtil:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -291,3 +291,7 @@ class SkyvernFrame:
|
|||||||
async def remove_target_attr(self, element: ElementHandle) -> None:
|
async def remove_target_attr(self, element: ElementHandle) -> None:
|
||||||
js_script = "(element) => element.removeAttribute('target')"
|
js_script = "(element) => element.removeAttribute('target')"
|
||||||
return await self.evaluate(frame=self.frame, expression=js_script, arg=element)
|
return await self.evaluate(frame=self.frame, expression=js_script, arg=element)
|
||||||
|
|
||||||
|
async def get_select_options(self, element: ElementHandle) -> tuple[list, str]:
|
||||||
|
js_script = "([element]) => getSelectOptions(element)"
|
||||||
|
return await self.evaluate(frame=self.frame, expression=js_script, arg=[element])
|
||||||
|
|||||||
Reference in New Issue
Block a user