@@ -1072,11 +1072,54 @@ def send_keys(self, selector, text, by="css selector", timeout=None):
10721072 selector, by = self.__recalculate_selector(selector, by)
10731073 self.add_text(selector, text, by=by, timeout=timeout)
10741074
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+
10751118 def submit(self, selector, by="css selector"):
10761119 """Alternative to self.driver.find_element_by_*(SELECTOR).submit()"""
10771120 self.__check_scope()
10781121 selector, by = self.__recalculate_selector(selector, by)
1079- element = self.wait_for_element_visible (
1122+ element = self.wait_for_element_clickable (
10801123 selector, by=by, timeout=settings.SMALL_TIMEOUT
10811124 )
10821125 element.submit()
@@ -4842,6 +4885,7 @@ def __process_recorded_actions(self):
48424885 ext_actions.append("jq_cl")
48434886 ext_actions.append("jq_ca")
48444887 ext_actions.append("jq_ty")
4888+ ext_actions.append("pkeys")
48454889 ext_actions.append("r_clk")
48464890 ext_actions.append("as_el")
48474891 ext_actions.append("as_ep")
@@ -4908,6 +4952,9 @@ def __process_recorded_actions(self):
49084952 if srt_actions[n][0] == "jq_ty":
49094953 srt_actions[n][2] = srt_actions[n][1][1]
49104954 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]
49114958 if srt_actions[n][0] == "e_mfa":
49124959 srt_actions[n][2] = srt_actions[n][1][1]
49134960 srt_actions[n][1] = srt_actions[n][1][0]
@@ -4922,6 +4969,7 @@ def __process_recorded_actions(self):
49224969 and (
49234970 srt_actions[n - 1][0] == "js_ty"
49244971 or srt_actions[n - 1][0] == "jq_ty"
4972+ or srt_actions[n - 1][0] == "pkeys"
49254973 )
49264974 and srt_actions[n][2] == srt_actions[n - 1][2]
49274975 ):
0 commit comments