diff --git a/skyvern/webeye/actions/handler.py b/skyvern/webeye/actions/handler.py index 381f2751..8325be1f 100644 --- a/skyvern/webeye/actions/handler.py +++ b/skyvern/webeye/actions/handler.py @@ -647,31 +647,31 @@ async def handle_input_text_action( target_value=text, ) - if select_result is None or select_result.dropdown_menu is None: - try_to_quit_dropdown = False + if select_result is not None: + if select_result.action_result and select_result.action_result.success: + try_to_quit_dropdown = False + return [select_result.action_result] - elif select_result.action_result is None: - LOG.info( - "It might not be a selectable auto-completion input, exit the custom selection mode", - task_id=task.task_id, - step_id=step.step_id, - element_id=skyvern_element.get_id(), - action=action, - ) + if select_result.dropdown_menu is None: + try_to_quit_dropdown = False - elif select_result.action_result.success: - try_to_quit_dropdown = False - return [select_result.action_result] - - else: - LOG.warning( - "Custom selection returned an error, continue to input text", - task_id=task.task_id, - step_id=step.step_id, - element_id=skyvern_element.get_id(), - action=action, - err_msg=select_result.action_result.exception_message, - ) + if select_result.action_result is None: + LOG.info( + "It might not be a selectable auto-completion input, exit the custom selection mode", + task_id=task.task_id, + step_id=step.step_id, + element_id=skyvern_element.get_id(), + action=action, + ) + else: + LOG.warning( + "Custom selection returned an error, continue to input text", + task_id=task.task_id, + step_id=step.step_id, + element_id=skyvern_element.get_id(), + action=action, + err_msg=select_result.action_result.exception_message, + ) except Exception: LOG.warning( @@ -1939,6 +1939,31 @@ async def sequentially_select_from_dropdown( ) return None + # if it's a date picker, try to input the current date directly first + if ( + input_or_select_context.is_date_related + and skyvern_element.get_tag_name() == InteractiveElement.INPUT + and action.option.label + ): + LOG.info( + "It's a date picker, going to input the current date directly", + step_id=step.step_id, + task_id=task.task_id, + ) + try: + await skyvern_element.input_sequentially(action.option.label) + result = CustomSingleSelectResult(skyvern_frame=skyvern_frame) + result.action_result = ActionSuccess() + return result + except Exception: + LOG.warning( + "Failed to input the current date directly, trigger the selection mode", + exc_info=True, + step_id=step.step_id, + task_id=task.task_id, + ) + await skyvern_element.input_clear() + # TODO: only suport the third-level dropdown selection now MAX_SELECT_DEPTH = 3 values: list[str | None] = []