Skip if selected (#604)
This commit is contained in:
@@ -424,7 +424,6 @@ async def handle_select_option_action(
|
|||||||
) -> list[ActionResult]:
|
) -> list[ActionResult]:
|
||||||
dom = DomUtil(scraped_page, page)
|
dom = DomUtil(scraped_page, page)
|
||||||
skyvern_element = await dom.get_skyvern_element_by_id(action.element_id)
|
skyvern_element = await dom.get_skyvern_element_by_id(action.element_id)
|
||||||
locator = skyvern_element.locator
|
|
||||||
|
|
||||||
tag_name = skyvern_element.get_tag_name()
|
tag_name = skyvern_element.get_tag_name()
|
||||||
element_dict = scraped_page.id_to_element_dict[action.element_id]
|
element_dict = scraped_page.id_to_element_dict[action.element_id]
|
||||||
@@ -583,13 +582,6 @@ async def handle_select_option_action(
|
|||||||
click_action = ClickAction(element_id=action.element_id)
|
click_action = ClickAction(element_id=action.element_id)
|
||||||
return await chain_click(task, scraped_page, page, click_action, skyvern_element)
|
return await chain_click(task, scraped_page, page, click_action, skyvern_element)
|
||||||
|
|
||||||
try:
|
|
||||||
current_text = await locator.input_value()
|
|
||||||
if current_text == action.option.label or current_text == action.option.value:
|
|
||||||
return [ActionSuccess()]
|
|
||||||
except Exception:
|
|
||||||
LOG.info("failed to confirm if the select option has been done, force to take the action again.")
|
|
||||||
|
|
||||||
return await normal_select(action=action, skyvern_element=skyvern_element)
|
return await normal_select(action=action, skyvern_element=skyvern_element)
|
||||||
|
|
||||||
|
|
||||||
@@ -828,9 +820,16 @@ async def normal_select(
|
|||||||
action: actions.SelectOptionAction,
|
action: actions.SelectOptionAction,
|
||||||
skyvern_element: SkyvernElement,
|
skyvern_element: SkyvernElement,
|
||||||
) -> List[ActionResult]:
|
) -> List[ActionResult]:
|
||||||
|
try:
|
||||||
|
current_text = await skyvern_element.get_attr("selected")
|
||||||
|
if current_text == action.option.label or current_text == action.option.value:
|
||||||
|
return [ActionSuccess()]
|
||||||
|
except Exception:
|
||||||
|
LOG.info("failed to confirm if the select option has been done, force to take the action again.")
|
||||||
|
|
||||||
action_result: List[ActionResult] = []
|
action_result: List[ActionResult] = []
|
||||||
is_success = False
|
is_success = False
|
||||||
locator = skyvern_element.locator
|
locator = skyvern_element.get_locator()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
await locator.click(
|
await locator.click(
|
||||||
|
|||||||
@@ -605,7 +605,13 @@ function getSelectOptions(element) {
|
|||||||
text: removeMultipleSpaces(option.textContent),
|
text: removeMultipleSpaces(option.textContent),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return selectOptions;
|
|
||||||
|
const selectedOption = element.querySelector("option:checked");
|
||||||
|
if (!selectedOption) {
|
||||||
|
return [selectOptions, ""];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [selectOptions, removeMultipleSpaces(selectedOption.textContent)];
|
||||||
}
|
}
|
||||||
|
|
||||||
function getListboxOptions(element) {
|
function getListboxOptions(element) {
|
||||||
@@ -776,15 +782,16 @@ async function buildTreeFromBody(frame = "main.frame", open_select = false) {
|
|||||||
// assign shadowHostId to the shadowHost element if it doesn't have unique_id
|
// assign shadowHostId to the shadowHost element if it doesn't have unique_id
|
||||||
if (!shadowHostId) {
|
if (!shadowHostId) {
|
||||||
shadowHostId = uniqueId();
|
shadowHostId = uniqueId();
|
||||||
shadowHost.setAttribute("unique_id", shadowHostId);
|
shadowHostEle.setAttribute("unique_id", shadowHostId);
|
||||||
}
|
}
|
||||||
elementObj.shadowHost = shadowHostId;
|
elementObj.shadowHost = shadowHostId;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get options for select element or for listbox element
|
// get options for select element or for listbox element
|
||||||
let selectOptions = null;
|
let selectOptions = null;
|
||||||
|
let selectedValue = "";
|
||||||
if (elementTagNameLower === "select") {
|
if (elementTagNameLower === "select") {
|
||||||
selectOptions = getSelectOptions(element);
|
[selectOptions, selectedValue] = getSelectOptions(element);
|
||||||
} else if (attrs["role"] && attrs["role"].toLowerCase() === "listbox") {
|
} else if (attrs["role"] && attrs["role"].toLowerCase() === "listbox") {
|
||||||
// if "role" key is inside attrs, then get all the elements with role "option" and get their text
|
// if "role" key is inside attrs, then get all the elements with role "option" and get their text
|
||||||
selectOptions = getListboxOptions(element);
|
selectOptions = getListboxOptions(element);
|
||||||
@@ -840,6 +847,9 @@ async function buildTreeFromBody(frame = "main.frame", open_select = false) {
|
|||||||
if (selectOptions) {
|
if (selectOptions) {
|
||||||
elementObj.options = selectOptions;
|
elementObj.options = selectOptions;
|
||||||
}
|
}
|
||||||
|
if (selectedValue) {
|
||||||
|
elementObj.attributes["selected"] = selectedValue;
|
||||||
|
}
|
||||||
|
|
||||||
return elementObj;
|
return elementObj;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user