Execute the action on the ChromeDriver.
(
action: Action,
page: Page,
browser_ctx: BrowserContext,
obseration_processor: ObservationProcessor,
)
| 1119 | |
| 1120 | @beartype |
| 1121 | def execute_action( |
| 1122 | action: Action, |
| 1123 | page: Page, |
| 1124 | browser_ctx: BrowserContext, |
| 1125 | obseration_processor: ObservationProcessor, |
| 1126 | ) -> Page: |
| 1127 | """Execute the action on the ChromeDriver.""" |
| 1128 | action_type = action["action_type"] |
| 1129 | match action_type: |
| 1130 | case ActionTypes.NONE: |
| 1131 | pass |
| 1132 | |
| 1133 | case ActionTypes.SCROLL: |
| 1134 | direction = "up" if "up" in action["direction"] else "down" |
| 1135 | execute_scroll(direction, page) |
| 1136 | case ActionTypes.KEY_PRESS: |
| 1137 | keys = action["key_comb"] |
| 1138 | execute_key_press(keys, page) |
| 1139 | |
| 1140 | case ActionTypes.MOUSE_CLICK: |
| 1141 | execute_mouse_click(action["coords"][0], action["coords"][1], page) |
| 1142 | case ActionTypes.MOUSE_HOVER: |
| 1143 | execute_mouse_hover(action["coords"][0], action["coords"][1], page) |
| 1144 | case ActionTypes.KEYBOARD_TYPE: |
| 1145 | execute_type(action["text"], page) |
| 1146 | |
| 1147 | case ActionTypes.CLICK: |
| 1148 | # check each kind of locator in order |
| 1149 | # TODO[shuyanzh]: order is temp now |
| 1150 | if action["element_id"]: |
| 1151 | element_id = action["element_id"] |
| 1152 | element_center = obseration_processor.get_element_center(element_id) # type: ignore[attr-defined] |
| 1153 | execute_mouse_click(element_center[0], element_center[1], page) |
| 1154 | elif action["element_role"] and action["element_name"]: |
| 1155 | element_role = int(action["element_role"]) |
| 1156 | element_name = action["element_name"] |
| 1157 | nth = action["nth"] |
| 1158 | execute_focus(element_role, element_name, nth, page) |
| 1159 | execute_click_current(page) |
| 1160 | elif action["pw_code"]: |
| 1161 | parsed_code = parse_playwright_code(action["pw_code"]) |
| 1162 | locator_code = parsed_code[:-1] |
| 1163 | # [shuyanzh], don't support action args and kwargs now |
| 1164 | execute_playwright_click(locator_code=locator_code, page=page) |
| 1165 | else: |
| 1166 | raise ValueError("No proper locator found for click action") |
| 1167 | case ActionTypes.HOVER: |
| 1168 | if action["element_id"]: |
| 1169 | element_id = action["element_id"] |
| 1170 | element_center = obseration_processor.get_element_center(element_id) # type: ignore[attr-defined] |
| 1171 | execute_mouse_hover(element_center[0], element_center[1], page) |
| 1172 | elif action["element_role"] and action["element_name"]: |
| 1173 | element_role = int(action["element_role"]) |
| 1174 | element_name = action["element_name"] |
| 1175 | nth = action["nth"] |
| 1176 | execute_focus(element_role, element_name, nth, page) |
| 1177 | elif action["pw_code"]: |
| 1178 | parsed_code = parse_playwright_code(action["pw_code"]) |
no test coverage detected