@@ -1072,11 +1072,54 @@ def send_keys(self, selector, text, by="css selector", timeout=None):
1072
1072
selector, by = self.__recalculate_selector(selector, by)
1073
1073
self.add_text(selector, text, by=by, timeout=timeout)
1074
1074
1075
+ def press_keys(self, selector, text, by="css selector", timeout=None):
1076
+ """Use send_keys() to press one key at a time."""
1077
+ self.wait_for_ready_state_complete()
1078
+ element = self.wait_for_element_clickable(
1079
+ selector, by=by, timeout=timeout
1080
+ )
1081
+ if self.demo_mode:
1082
+ selector, by = self.__recalculate_selector(selector, by)
1083
+ css_selector = self.convert_to_css_selector(selector, by=by)
1084
+ self.__demo_mode_highlight_if_active(css_selector, By.CSS_SELECTOR)
1085
+ if self.recorder_mode and self.__current_url_is_recordable():
1086
+ if self.get_session_storage_item("pause_recorder") == "no":
1087
+ css_selector = self.convert_to_css_selector(selector, by=by)
1088
+ time_stamp = self.execute_script("return Date.now();")
1089
+ origin = self.get_origin()
1090
+ sel_tex = [css_selector, text]
1091
+ action = ["pkeys", sel_tex, origin, time_stamp]
1092
+ self.__extra_actions.append(action)
1093
+ press_enter = False
1094
+ if text.endswith("\n"):
1095
+ text = text[:-1]
1096
+ press_enter = True
1097
+ for key in text:
1098
+ element.send_keys(key)
1099
+ if press_enter:
1100
+ element.send_keys(Keys.RETURN)
1101
+ if settings.WAIT_FOR_RSC_ON_PAGE_LOADS:
1102
+ if not self.undetectable:
1103
+ self.wait_for_ready_state_complete()
1104
+ else:
1105
+ time.sleep(0.15)
1106
+ if self.demo_mode:
1107
+ if press_enter:
1108
+ self.__demo_mode_pause_if_active()
1109
+ else:
1110
+ self.__demo_mode_pause_if_active(tiny=True)
1111
+ elif self.slow_mode:
1112
+ self.__slow_mode_pause_if_active()
1113
+ elif self.__needs_minimum_wait():
1114
+ time.sleep(0.05)
1115
+ if self.undetectable:
1116
+ time.sleep(0.02)
1117
+
1075
1118
def submit(self, selector, by="css selector"):
1076
1119
"""Alternative to self.driver.find_element_by_*(SELECTOR).submit()"""
1077
1120
self.__check_scope()
1078
1121
selector, by = self.__recalculate_selector(selector, by)
1079
- element = self.wait_for_element_visible (
1122
+ element = self.wait_for_element_clickable (
1080
1123
selector, by=by, timeout=settings.SMALL_TIMEOUT
1081
1124
)
1082
1125
element.submit()
@@ -4842,6 +4885,7 @@ def __process_recorded_actions(self):
4842
4885
ext_actions.append("jq_cl")
4843
4886
ext_actions.append("jq_ca")
4844
4887
ext_actions.append("jq_ty")
4888
+ ext_actions.append("pkeys")
4845
4889
ext_actions.append("r_clk")
4846
4890
ext_actions.append("as_el")
4847
4891
ext_actions.append("as_ep")
@@ -4908,6 +4952,9 @@ def __process_recorded_actions(self):
4908
4952
if srt_actions[n][0] == "jq_ty":
4909
4953
srt_actions[n][2] = srt_actions[n][1][1]
4910
4954
srt_actions[n][1] = srt_actions[n][1][0]
4955
+ if srt_actions[n][0] == "pkeys":
4956
+ srt_actions[n][2] = srt_actions[n][1][1]
4957
+ srt_actions[n][1] = srt_actions[n][1][0]
4911
4958
if srt_actions[n][0] == "e_mfa":
4912
4959
srt_actions[n][2] = srt_actions[n][1][1]
4913
4960
srt_actions[n][1] = srt_actions[n][1][0]
@@ -4922,6 +4969,7 @@ def __process_recorded_actions(self):
4922
4969
and (
4923
4970
srt_actions[n - 1][0] == "js_ty"
4924
4971
or srt_actions[n - 1][0] == "jq_ty"
4972
+ or srt_actions[n - 1][0] == "pkeys"
4925
4973
)
4926
4974
and srt_actions[n][2] == srt_actions[n - 1][2]
4927
4975
):
0 commit comments