seleniumbase 4.26.3__py3-none-any.whl → 4.26.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.26.3"
2
+ __version__ = "4.26.4"
@@ -406,6 +406,7 @@ sbase codegen new_test.py --url=wikipedia.org
406
406
  ``--edge`` (Use Edge browser instead of Chrome.)
407
407
  ``--gui`` / ``--headed`` (Use headed mode on Linux.)
408
408
  ``--uc`` / ``--undetected`` (Use undetectable mode.)
409
+ ``--ee`` (Use SHIFT + ESC to end the recording.)
409
410
  ``--overwrite`` (Overwrite file when it exists.)
410
411
  ``--behave`` (Also output Behave/Gherkin files.)
411
412
 
@@ -310,6 +310,7 @@ def show_mkrec_usage():
310
310
  print(" --edge (Use Edge browser instead of Chrome.)")
311
311
  print(" --gui / --headed (Use headed mode on Linux.)")
312
312
  print(" --uc / --undetected (Use undetectable mode.)")
313
+ print(" --ee (Use SHIFT + ESC to end the recording.)")
313
314
  print(" --overwrite (Overwrite file when it exists.)")
314
315
  print(" --behave (Also output Behave/Gherkin files.)")
315
316
  print(" Output:")
@@ -336,6 +337,7 @@ def show_codegen_usage():
336
337
  print(" --edge (Use Edge browser instead of Chrome.)")
337
338
  print(" --gui / --headed (Use headed mode on Linux.)")
338
339
  print(" --uc / --undetected (Use undetectable mode.)")
340
+ print(" --ee (Use SHIFT + ESC to end the recording.)")
339
341
  print(" --overwrite (Overwrite file when it exists.)")
340
342
  print(" --behave (Also output Behave/Gherkin files.)")
341
343
  print(" Output:")
@@ -93,6 +93,7 @@ def main():
93
93
  invalid_cmd = None
94
94
  use_edge = False
95
95
  use_uc = False
96
+ esc_end = False
96
97
  start_page = None
97
98
  next_is_url = False
98
99
  use_colors = True
@@ -145,6 +146,8 @@ def main():
145
146
  help_me = True
146
147
  elif option.lower() == "--edge":
147
148
  use_edge = True
149
+ elif option.lower() == "--ee":
150
+ esc_end = True
148
151
  elif option.lower() in ("--gui", "--headed"):
149
152
  if "linux" in sys.platform:
150
153
  force_gui = True
@@ -183,6 +186,42 @@ def main():
183
186
  data.append(' # type "c", and press [Enter].')
184
187
  data.append(" import pdb; pdb.set_trace()")
185
188
  data.append("")
189
+
190
+ if esc_end:
191
+ msg = ">>> Use [SHIFT + ESC] in the browser to end recording!"
192
+ d2 = []
193
+ d2.append("from seleniumbase import BaseCase")
194
+ d2.append("")
195
+ d2.append("")
196
+ d2.append("class RecorderTest(BaseCase):")
197
+ d2.append(" def test_recording(self):")
198
+ d2.append(" if self.recorder_ext:")
199
+ d2.append(" print(")
200
+ d2.append(' "\\n\\n%s\\n"' % msg)
201
+ d2.append(" )")
202
+ d2.append(' script = self._get_rec_shift_esc_script()')
203
+ d2.append(' esc = "return document.sb_esc_end;"')
204
+ d2.append(" start_time = self.time()")
205
+ d2.append(" last_handles_num = self._get_num_handles()")
206
+ d2.append(" for i in range(1200):")
207
+ d2.append(" try:")
208
+ d2.append(" self.execute_script(script)")
209
+ d2.append(" handles_num = self._get_num_handles()")
210
+ d2.append(" if handles_num < 1:")
211
+ d2.append(" return")
212
+ d2.append(" elif handles_num != last_handles_num:")
213
+ d2.append(" self.switch_to_window(-1)")
214
+ d2.append(" last_handles_num = handles_num")
215
+ d2.append(' if self.execute_script(esc) == "yes":')
216
+ d2.append(" return")
217
+ d2.append(" elif self.time() - start_time > 600:")
218
+ d2.append(" return")
219
+ d2.append(" self.sleep(0.5)")
220
+ d2.append(" except Exception:")
221
+ d2.append(" return")
222
+ d2.append("")
223
+ data = d2
224
+
186
225
  file = codecs.open(file_path, "w+", "utf-8")
187
226
  file.writelines("\r\n".join(data))
188
227
  file.close()
@@ -162,6 +162,8 @@ def do_recording(file_name, url, overwrite_enabled, use_chrome, window):
162
162
  or "--undetectable" in command_args
163
163
  ):
164
164
  command += " --uc"
165
+ if "--ee" in command_args:
166
+ command += " --ee"
165
167
  command += add_on
166
168
  poll = None
167
169
  if sb_config.rec_subprocess_used:
@@ -443,8 +443,32 @@ def uc_open_with_reconnect(driver, url, reconnect_time=None):
443
443
  js_utils.call_me_later(driver, script, 3)
444
444
  time.sleep(0.007)
445
445
  driver.close()
446
- driver.reconnect(reconnect_time)
447
- driver.switch_to.window(driver.window_handles[-1])
446
+ if reconnect_time == "disconnect":
447
+ driver.disconnect()
448
+ time.sleep(0.007)
449
+ else:
450
+ driver.reconnect(reconnect_time)
451
+ driver.switch_to.window(driver.window_handles[-1])
452
+ else:
453
+ driver.default_get(url) # The original one
454
+ return None
455
+
456
+
457
+ def uc_open_with_disconnect(driver, url):
458
+ """Open a url and disconnect chromedriver.
459
+ Note: You can't perform Selenium actions again
460
+ until after you've called driver.connect()."""
461
+ if url.startswith("//"):
462
+ url = "https:" + url
463
+ elif ":" not in url:
464
+ url = "https://" + url
465
+ if (url.startswith("http:") or url.startswith("https:")):
466
+ script = 'window.open("%s","_blank");' % url
467
+ js_utils.call_me_later(driver, script, 3)
468
+ time.sleep(0.007)
469
+ driver.close()
470
+ driver.disconnect()
471
+ time.sleep(0.007)
448
472
  else:
449
473
  driver.default_get(url) # The original one
450
474
  return None
@@ -3754,6 +3778,11 @@ def get_local_driver(
3754
3778
  driver, *args, **kwargs
3755
3779
  )
3756
3780
  )
3781
+ driver.uc_open_with_disconnect = (
3782
+ lambda *args, **kwargs: uc_open_with_disconnect(
3783
+ driver, *args, **kwargs
3784
+ )
3785
+ )
3757
3786
  driver.uc_click = lambda *args, **kwargs: uc_click(
3758
3787
  driver, *args, **kwargs
3759
3788
  )
@@ -114,6 +114,7 @@ class BaseCase(unittest.TestCase):
114
114
  ]
115
115
  self.version_tuple = tuple(self.version_list)
116
116
  self.version_info = self.version_tuple
117
+ self.time = time.time
117
118
  self.__page_sources = []
118
119
  self.__extra_actions = []
119
120
  self.__js_start_time = 0
@@ -381,6 +382,7 @@ class BaseCase(unittest.TestCase):
381
382
  self, selector, by="css selector", timeout=None, delay=0, scroll=True
382
383
  ):
383
384
  self.__check_scope()
385
+ self.__skip_if_esc()
384
386
  if not timeout:
385
387
  timeout = settings.SMALL_TIMEOUT
386
388
  if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
@@ -671,6 +673,7 @@ class BaseCase(unittest.TestCase):
671
673
  self.__demo_mode_pause_if_active(tiny=True)
672
674
  elif self.slow_mode:
673
675
  self.__slow_mode_pause_if_active()
676
+ self.__set_esc_skip()
674
677
 
675
678
  def slow_click(self, selector, by="css selector", timeout=None):
676
679
  """Similar to click(), but pauses for a brief moment before clicking.
@@ -1586,6 +1589,7 @@ class BaseCase(unittest.TestCase):
1586
1589
  def click_link_text(self, link_text, timeout=None):
1587
1590
  """This method clicks link text on a page."""
1588
1591
  self.__check_scope()
1592
+ self.__skip_if_esc()
1589
1593
  if not timeout:
1590
1594
  timeout = settings.SMALL_TIMEOUT
1591
1595
  if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
@@ -4142,6 +4146,10 @@ class BaseCase(unittest.TestCase):
4142
4146
  self.uc_open_with_tab = new_driver.uc_open_with_tab
4143
4147
  if hasattr(new_driver, "uc_open_with_reconnect"):
4144
4148
  self.uc_open_with_reconnect = new_driver.uc_open_with_reconnect
4149
+ if hasattr(new_driver, "uc_open_with_disconnect"):
4150
+ self.uc_open_with_disconnect = (
4151
+ new_driver.uc_open_with_disconnect
4152
+ )
4145
4153
  if hasattr(new_driver, "reconnect"):
4146
4154
  self.reconnect = new_driver.reconnect
4147
4155
  if hasattr(new_driver, "disconnect"):
@@ -4404,11 +4412,35 @@ class BaseCase(unittest.TestCase):
4404
4412
  for cookie_dict in cookies:
4405
4413
  self.driver.add_cookie(cookie_dict)
4406
4414
 
4415
+ def __set_esc_skip(self):
4416
+ if hasattr(self, "esc_end") and self.esc_end:
4417
+ script = (
4418
+ """document.onkeydown = function(evt) {
4419
+ evt = evt || window.event;
4420
+ var isEscape = false;
4421
+ if ("key" in evt) {
4422
+ isEscape = (evt.key === "Escape" || evt.key === "Esc");
4423
+ } else {
4424
+ isEscape = (evt.keyCode === 27);
4425
+ }
4426
+ if (isEscape) {
4427
+ document.sb_esc_end = 'yes';
4428
+ }
4429
+ };"""
4430
+ )
4431
+ self.execute_script(script)
4432
+
4433
+ def __skip_if_esc(self):
4434
+ if hasattr(self, "esc_end") and self.esc_end:
4435
+ if self.execute_script("return document.sb_esc_end;") == "yes":
4436
+ self.skip()
4437
+
4407
4438
  def wait_for_ready_state_complete(self, timeout=None):
4408
4439
  """Waits for the "readyState" of the page to be "complete".
4409
4440
  Returns True when the method completes."""
4410
4441
  self.__check_scope()
4411
4442
  self._check_browser()
4443
+ self.__skip_if_esc()
4412
4444
  if not timeout:
4413
4445
  timeout = settings.EXTREME_TIMEOUT
4414
4446
  if self.timeout_multiplier and timeout == settings.EXTREME_TIMEOUT:
@@ -4427,6 +4459,7 @@ class BaseCase(unittest.TestCase):
4427
4459
  time.sleep(0.01)
4428
4460
  if self.undetectable:
4429
4461
  time.sleep(0.035)
4462
+ self.__set_esc_skip()
4430
4463
  return True
4431
4464
 
4432
4465
  def wait_for_angularjs(self, timeout=None, **kwargs):
@@ -5775,6 +5808,7 @@ class BaseCase(unittest.TestCase):
5775
5808
  scroll - the option to scroll to the element first (Default: True)
5776
5809
  timeout - the time to wait for the element to appear """
5777
5810
  self.__check_scope()
5811
+ self.__skip_if_esc()
5778
5812
  if isinstance(selector, WebElement):
5779
5813
  self.__highlight_element(selector, loops=loops, scroll=scroll)
5780
5814
  return
@@ -6760,10 +6794,7 @@ class BaseCase(unittest.TestCase):
6760
6794
  constants.PipInstall.FINDLOCK
6761
6795
  )
6762
6796
  with pip_find_lock:
6763
- if (
6764
- sys.version_info >= (3, 7)
6765
- and sys.version_info < (3, 9)
6766
- ):
6797
+ if sys.version_info < (3, 9):
6767
6798
  # Fix bug in newer cryptography for Python 3.7 and 3.8:
6768
6799
  # "pyo3_runtime.PanicException: Python API call failed"
6769
6800
  try:
@@ -8709,6 +8740,7 @@ class BaseCase(unittest.TestCase):
8709
8740
  ):
8710
8741
  """Same as self.wait_for_element()"""
8711
8742
  self.__check_scope()
8743
+ self.__skip_if_esc()
8712
8744
  if not timeout:
8713
8745
  timeout = settings.LARGE_TIMEOUT
8714
8746
  if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
@@ -13478,6 +13510,7 @@ class BaseCase(unittest.TestCase):
13478
13510
  self.slow_scroll_to(selector, by=by)
13479
13511
 
13480
13512
  def __demo_mode_highlight_if_active(self, selector, by):
13513
+ self.__skip_if_esc()
13481
13514
  if self.demo_mode:
13482
13515
  # Includes self.slow_scroll_to(selector, by=by) by default
13483
13516
  self.__highlight(selector, by=by)
@@ -14379,6 +14412,7 @@ class BaseCase(unittest.TestCase):
14379
14412
  self.firefox_arg = sb_config.firefox_arg
14380
14413
  self.firefox_pref = sb_config.firefox_pref
14381
14414
  self.verify_delay = sb_config.verify_delay
14415
+ self.esc_end = sb_config.esc_end
14382
14416
  self.recorder_mode = sb_config.recorder_mode
14383
14417
  self.recorder_ext = sb_config.recorder_mode
14384
14418
  self.rec_print = sb_config.rec_print
@@ -15698,6 +15732,31 @@ class BaseCase(unittest.TestCase):
15698
15732
  else:
15699
15733
  return None
15700
15734
 
15735
+ def _get_num_handles(self):
15736
+ return len(self.driver.window_handles)
15737
+
15738
+ def _get_rec_shift_esc_script(self):
15739
+ return (
15740
+ """document.onkeydown = function(evt) {
15741
+ evt = evt || window.event;
15742
+ var isEscape = false;
15743
+ if ("key" in evt) {
15744
+ isEscape = (evt.key === "Escape" || evt.key === "Esc");
15745
+ last_key = evt.key;
15746
+ } else {
15747
+ isEscape = (evt.keyCode === 27);
15748
+ last_key = evt.keyCode;
15749
+ if (last_key === 16) {
15750
+ last_key = "Shift";
15751
+ }
15752
+ }
15753
+ if (isEscape && document.sb_last_key === "Shift") {
15754
+ document.sb_esc_end = "yes";
15755
+ }
15756
+ document.sb_last_key = last_key;
15757
+ };"""
15758
+ )
15759
+
15701
15760
  def _addSkip(self, result, test_case, reason):
15702
15761
  """This method should NOT be called directly from tests."""
15703
15762
  addSkip = getattr(result, 'addSkip', None)
@@ -15828,6 +15887,11 @@ class BaseCase(unittest.TestCase):
15828
15887
  )
15829
15888
  raise Exception(message)
15830
15889
  # *** Start tearDown() officially ***
15890
+ if self.undetectable:
15891
+ try:
15892
+ self.driver.window_handles
15893
+ except urllib3.exceptions.MaxRetryError:
15894
+ self.driver.connect()
15831
15895
  self.__slow_mode_pause_if_active()
15832
15896
  has_exception = self.__has_exception()
15833
15897
  sb_config._has_exception = has_exception
@@ -81,6 +81,7 @@ def pytest_addoption(parser):
81
81
  --block-images (Block images from loading during tests.)
82
82
  --do-not-track (Indicate to websites that you don't want to be tracked.)
83
83
  --verify-delay=SECONDS (The delay before MasterQA verification checks.)
84
+ --ee / --esc-end (Lets the user end the current test via the ESC key.)
84
85
  --recorder (Enables the Recorder for turning browser actions into code.)
85
86
  --rec-behave (Same as Recorder Mode, but also generates behave-gherkin.)
86
87
  --rec-sleep (If the Recorder is enabled, also records self.sleep calls.)
@@ -895,6 +896,16 @@ def pytest_addoption(parser):
895
896
  help="""Setting this overrides the default wait time
896
897
  before each MasterQA verification pop-up.""",
897
898
  )
899
+ parser.addoption(
900
+ "--esc-end",
901
+ "--esc_end",
902
+ "--ee",
903
+ action="store_true",
904
+ dest="esc_end",
905
+ default=False,
906
+ help="""End the current test early via the ESC key.
907
+ The test will be marked as skipped.""",
908
+ )
898
909
  parser.addoption(
899
910
  "--recorder",
900
911
  "--record",
@@ -1549,6 +1560,7 @@ def pytest_configure(config):
1549
1560
  sb_config.block_images = config.getoption("block_images")
1550
1561
  sb_config.do_not_track = config.getoption("do_not_track")
1551
1562
  sb_config.verify_delay = config.getoption("verify_delay")
1563
+ sb_config.esc_end = config.getoption("esc_end")
1552
1564
  sb_config.recorder_mode = config.getoption("recorder_mode")
1553
1565
  sb_config.recorder_ext = config.getoption("recorder_mode") # Again
1554
1566
  sb_config.rec_behave = config.getoption("rec_behave")
@@ -60,6 +60,7 @@ class SeleniumBrowser(Plugin):
60
60
  --block-images (Block images from loading during tests.)
61
61
  --do-not-track (Indicate to websites that you don't want to be tracked.)
62
62
  --verify-delay=SECONDS (The delay before MasterQA verification checks.)
63
+ --ee / --esc-end (Lets the user end the current test via the ESC key.)
63
64
  --recorder (Enables the Recorder for turning browser actions into code.)
64
65
  --rec-behave (Same as Recorder Mode, but also generates behave-gherkin.)
65
66
  --rec-sleep (If the Recorder is enabled, also records self.sleep calls.)
@@ -613,6 +614,16 @@ class SeleniumBrowser(Plugin):
613
614
  help="""Setting this overrides the default wait time
614
615
  before each MasterQA verification pop-up.""",
615
616
  )
617
+ parser.addoption(
618
+ "--esc-end",
619
+ "--esc_end",
620
+ "--ee",
621
+ action="store_true",
622
+ dest="esc_end",
623
+ default=False,
624
+ help="""End the current test early via the ESC key.
625
+ The test will be marked as skipped.""",
626
+ )
616
627
  parser.addoption(
617
628
  "--recorder",
618
629
  "--record",
@@ -1126,6 +1137,7 @@ class SeleniumBrowser(Plugin):
1126
1137
  test.test.block_images = self.options.block_images
1127
1138
  test.test.do_not_track = self.options.do_not_track
1128
1139
  test.test.verify_delay = self.options.verify_delay # MasterQA
1140
+ test.test.esc_end = self.options.esc_end
1129
1141
  test.test.recorder_mode = self.options.recorder_mode
1130
1142
  test.test.recorder_ext = self.options.recorder_mode # Again
1131
1143
  test.test.rec_behave = self.options.rec_behave
@@ -14,7 +14,7 @@ class WebElement(selenium.webdriver.remote.webelement.WebElement):
14
14
  ):
15
15
  if driver and selector and by:
16
16
  delayed_click = False
17
- if tag_name in ["span", "button", "div", "a"]:
17
+ if tag_name in ["span", "button", "div", "a", "b", "input"]:
18
18
  delayed_click = True
19
19
  if delayed_click and ":contains" not in selector:
20
20
  selector = js_utils.convert_to_css_selector(selector, by)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: seleniumbase
3
- Version: 4.26.3
3
+ Version: 4.26.4
4
4
  Summary: A complete web automation framework for end-to-end testing.
5
5
  Home-page: https://github.com/seleniumbase/SeleniumBase
6
6
  Author: Michael Mintz
@@ -88,7 +88,6 @@ Requires-Dist: parameterized ==0.9.0
88
88
  Requires-Dist: sbvirtualdisplay ==1.3.0
89
89
  Requires-Dist: behave ==1.2.6
90
90
  Requires-Dist: beautifulsoup4 ==4.12.3
91
- Requires-Dist: pygments ==2.17.2
92
91
  Requires-Dist: tabcompleter ==1.3.0
93
92
  Requires-Dist: pdbp ==1.5.0
94
93
  Requires-Dist: colorama ==0.4.6
@@ -110,6 +109,7 @@ Requires-Dist: pytest-metadata ==3.0.0 ; python_version < "3.8"
110
109
  Requires-Dist: pytest-rerunfailures ==13.0 ; python_version < "3.8"
111
110
  Requires-Dist: pytest-xdist ==3.5.0 ; python_version < "3.8"
112
111
  Requires-Dist: soupsieve ==2.4.1 ; python_version < "3.8"
112
+ Requires-Dist: pygments ==2.17.2 ; python_version < "3.8"
113
113
  Requires-Dist: markdown-it-py ==2.2.0 ; python_version < "3.8"
114
114
  Requires-Dist: urllib3 <2.3.0,>=1.26.18 ; python_version >= "3.10"
115
115
  Requires-Dist: setuptools >=69.5.1 ; python_version >= "3.8"
@@ -126,6 +126,7 @@ Requires-Dist: pytest-metadata ==3.1.1 ; python_version >= "3.8"
126
126
  Requires-Dist: pytest-rerunfailures ==14.0 ; python_version >= "3.8"
127
127
  Requires-Dist: pytest-xdist ==3.6.1 ; python_version >= "3.8"
128
128
  Requires-Dist: soupsieve ==2.5 ; python_version >= "3.8"
129
+ Requires-Dist: pygments ==2.18.0 ; python_version >= "3.8"
129
130
  Requires-Dist: markdown-it-py ==3.0.0 ; python_version >= "3.8"
130
131
  Provides-Extra: allure
131
132
  Requires-Dist: allure-pytest >=2.13.5 ; extra == 'allure'
@@ -134,7 +135,7 @@ Requires-Dist: allure-behave >=2.13.5 ; extra == 'allure'
134
135
  Provides-Extra: coverage
135
136
  Requires-Dist: coverage ==7.2.7 ; (python_version < "3.8") and extra == 'coverage'
136
137
  Requires-Dist: pytest-cov ==4.1.0 ; (python_version < "3.8") and extra == 'coverage'
137
- Requires-Dist: coverage >=7.5.0 ; (python_version >= "3.8") and extra == 'coverage'
138
+ Requires-Dist: coverage >=7.5.1 ; (python_version >= "3.8") and extra == 'coverage'
138
139
  Requires-Dist: pytest-cov >=5.0.0 ; (python_version >= "3.8") and extra == 'coverage'
139
140
  Provides-Extra: flake8
140
141
  Requires-Dist: mccabe ==0.7.0 ; extra == 'flake8'
@@ -154,14 +155,14 @@ Requires-Dist: cffi ==1.15.1 ; (python_version < "3.8") and extra == 'pdfminer'
154
155
  Requires-Dist: cryptography ==39.0.2 ; (python_version < "3.9") and extra == 'pdfminer'
155
156
  Requires-Dist: pdfminer.six ==20231228 ; (python_version >= "3.8") and extra == 'pdfminer'
156
157
  Requires-Dist: cffi ==1.16.0 ; (python_version >= "3.8") and extra == 'pdfminer'
157
- Requires-Dist: cryptography ==42.0.5 ; (python_version >= "3.9") and extra == 'pdfminer'
158
+ Requires-Dist: cryptography ==42.0.7 ; (python_version >= "3.9") and extra == 'pdfminer'
158
159
  Provides-Extra: pillow
159
160
  Requires-Dist: Pillow ==9.5.0 ; (python_version < "3.8") and extra == 'pillow'
160
161
  Requires-Dist: Pillow >=10.3.0 ; (python_version >= "3.8") and extra == 'pillow'
161
162
  Provides-Extra: pip-system-certs
162
163
  Requires-Dist: pip-system-certs ==4.0 ; (platform_system == "Windows") and extra == 'pip-system-certs'
163
164
  Provides-Extra: proxy
164
- Requires-Dist: proxy.py ==2.4.3 ; extra == 'proxy'
165
+ Requires-Dist: proxy.py ==2.4.4 ; extra == 'proxy'
165
166
  Provides-Extra: psutil
166
167
  Requires-Dist: psutil ==5.9.8 ; extra == 'psutil'
167
168
  Provides-Extra: selenium-stealth
@@ -844,6 +845,7 @@ pytest test_coffee_cart.py --trace
844
845
  --block-images # (Block images from loading during tests.)
845
846
  --do-not-track # (Indicate to websites that you don't want to be tracked.)
846
847
  --verify-delay=SECONDS # (The delay before MasterQA verification checks.)
848
+ --ee | --esc-end # (Lets the user end the current test via the ESC key.)
847
849
  --recorder # (Enables the Recorder for turning browser actions into code.)
848
850
  --rec-behave # (Same as Recorder Mode, but also generates behave-gherkin.)
849
851
  --rec-sleep # (If the Recorder is enabled, also records self.sleep calls.)
@@ -5,7 +5,7 @@ sbase/steps.py,sha256=bKT_u5bJkKzYWEuAXi9NVVRYYxQRCM1_YJUrNFFRVPY,42865
5
5
  seleniumbase/ReadMe.md,sha256=4nEdto4d0Ch0Zneg0yAC-RBBdqRqPUP0SCo-ze_XDPM,3612
6
6
  seleniumbase/__init__.py,sha256=Mw4ShIWUF2Efjx-JuwUQLWF9nIbxcX-vu9AOGBp32ec,2123
7
7
  seleniumbase/__main__.py,sha256=dn1p6dgCchmcH1zzTzzQvFwwdQQqnTGH6ULV9m4hv24,654
8
- seleniumbase/__version__.py,sha256=FFWk8j6zhXWDYdLew6Aj1jcg3AsMK8J44UaJpDRfpws,46
8
+ seleniumbase/__version__.py,sha256=OUhvq8oKtVvzLYA6LcqBGQRyR9E9mRo5P6vyOiLX9QU,46
9
9
  seleniumbase/behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  seleniumbase/behave/behave_helper.py,sha256=elkl8P9eLulRAioLstE9baYNM9N_PHBmAOcajX-pH_Y,24198
11
11
  seleniumbase/behave/behave_sb.py,sha256=rpSKGufjzKeoiTqsr1HChNu1fY68CMirr5mgff--LHs,56291
@@ -21,11 +21,11 @@ seleniumbase/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
21
21
  seleniumbase/config/ad_block_list.py,sha256=qCQvbpONdSXk6q5tMwLuOswGYE1Syd8cy5TMIYFjTME,3380
22
22
  seleniumbase/config/proxy_list.py,sha256=tSdk82_6pPqClotHMl3YOTlxi9IIEppHmCoQDkZXLqw,1123
23
23
  seleniumbase/config/settings.py,sha256=n07U3PrrTgXgg5S1DIGnRuR6Y7AW11y06lvkflD7ZuE,7708
24
- seleniumbase/console_scripts/ReadMe.md,sha256=edWzZCdEpLaUSkzeasVq990ONVPWQSi-F0Y9ZWY5Xuw,20160
24
+ seleniumbase/console_scripts/ReadMe.md,sha256=WQiuXXpsyoKePkkt3aq7XMWr7KBZq7Wk4n2iee-2Ihk,20210
25
25
  seleniumbase/console_scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  seleniumbase/console_scripts/logo_helper.py,sha256=F8pcANlWY6pdcMwHUdjjpjAD9i8XD0R5J-28eSh7QMM,1907
27
27
  seleniumbase/console_scripts/rich_helper.py,sha256=U_zvXpalxVV8rtg8c8EnNNmnh45tii3AV5ZV3O3KbGA,2234
28
- seleniumbase/console_scripts/run.py,sha256=3bZAxL0CjcVU-jSEa-8nsL7DVrcUvrP1H0qa5_bOgNI,59033
28
+ seleniumbase/console_scripts/run.py,sha256=54XCmUvOtYT5UmajEZ208wflH5BLkEpHZSmvgaJFSN0,59173
29
29
  seleniumbase/console_scripts/sb_behave_gui.py,sha256=8uFTnHU3lPsxAlPFbGe4tH4fVryEbQeVBydwJZw3e9c,15403
30
30
  seleniumbase/console_scripts/sb_caseplans.py,sha256=HrML5SU6E_3gC8Ae5byo5tnBidrs0sY3feJ8ug4cR4o,18415
31
31
  seleniumbase/console_scripts/sb_commander.py,sha256=FdRLcEe3xOnnbU1bZI4_1ZLu5eKdR4JuIh37j5M-J00,13585
@@ -34,13 +34,13 @@ seleniumbase/console_scripts/sb_mkchart.py,sha256=QDDjA8N_Qy62Mgbe2fnSU8mhZbKTVy
34
34
  seleniumbase/console_scripts/sb_mkdir.py,sha256=-OJrGM3upjdhCQb00zxSapS7eVtE49K3bR6KzsGvBbM,30049
35
35
  seleniumbase/console_scripts/sb_mkfile.py,sha256=t2rxTZTz76RDeSbBdHLaHUDS6LT_p0ttm2H_uYdtBko,16480
36
36
  seleniumbase/console_scripts/sb_mkpres.py,sha256=5MEYFKATmh68wy0SRi2NQtO71MN7m-rQq-WtUp4cKD8,11306
37
- seleniumbase/console_scripts/sb_mkrec.py,sha256=9p-1kkRby_bVn0RecbKPIj3B_CEefINqGkkqcq5-nbE,9302
37
+ seleniumbase/console_scripts/sb_mkrec.py,sha256=AKAbVnkI5nLDpA6W9JZu38QSpJz5IE8Pto-Em9U5r2o,11208
38
38
  seleniumbase/console_scripts/sb_objectify.py,sha256=SRYY_cZ-Ip6Lj65T2maXRyJctOWAFhGSc-Xlc-u-2CM,122140
39
39
  seleniumbase/console_scripts/sb_print.py,sha256=yo641b_OdSE0GUauOyxk-QrNeIjYzbRYRSUL-U0ZH80,30776
40
- seleniumbase/console_scripts/sb_recorder.py,sha256=2QQov64Erfnm1hnVleKX-c_llcsO6hhJKKxzcANcix0,10904
40
+ seleniumbase/console_scripts/sb_recorder.py,sha256=UQQhnAR18dbcC7ToDvj6TM2PIG5qBrNaekaM6kSK_E8,10970
41
41
  seleniumbase/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
42
  seleniumbase/core/application_manager.py,sha256=e_0sjtI8cjY5BNyZj1QBR0j6_oCScxGmSXYEpcYwuZE,576
43
- seleniumbase/core/browser_launcher.py,sha256=xlZqxbA4p3zIpsXGAcJYr-09OtykvdIsDoj6yyOPKYw,166053
43
+ seleniumbase/core/browser_launcher.py,sha256=QVVK9v1-_C-J79G2lqEUY5Fr2PD-dQhToNjFXwvflq8,167061
44
44
  seleniumbase/core/capabilities_parser.py,sha256=meIS2uHapTCq2ldfNAToC7r0cKmZDRXuYNKExM1GHDY,6038
45
45
  seleniumbase/core/colored_traceback.py,sha256=DrRWfg7XEnKcgY59Xj7Jdk09H-XqHYBSUpB-DiZt6iY,2020
46
46
  seleniumbase/core/create_db_tables.sql,sha256=VWPtrdiW_HQ6yETHjqTu-VIrTwvd8I8o1NfBeaVSHpU,972
@@ -70,7 +70,7 @@ seleniumbase/extensions/disable_csp.zip,sha256=YMifIIgEBiLrEFrS1sfW4Exh4br1V4oK1
70
70
  seleniumbase/extensions/recorder.zip,sha256=dE3-vt1lsIyMbz3MD0WboizA5KiR3SH2jxAMrC0T_cU,11908
71
71
  seleniumbase/extensions/sbase_ext.zip,sha256=3s1N8zrVaMz8RQEOIoBzC3KDjtmHwVZRvVsX25Odr_s,8175
72
72
  seleniumbase/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
- seleniumbase/fixtures/base_case.py,sha256=IOSN4C10oS-xv_euTU99mZ3vunySXwx9Sr5tShAn2B0,691243
73
+ seleniumbase/fixtures/base_case.py,sha256=gVAc8T9TlSJ9UySEldWZBiVm1GS3-mv_HK25XygHcdY,693568
74
74
  seleniumbase/fixtures/constants.py,sha256=Uvr5-Z8ZfiE2-lIqJS1CQ0tkmQ6qJYooCOTo_HMleo4,13348
75
75
  seleniumbase/fixtures/css_to_xpath.py,sha256=9ouDB1xl4MJ2os6JOgTIAyHKOQfuxtxvXC3O5hSnEKA,1954
76
76
  seleniumbase/fixtures/errors.py,sha256=KyxuEVx_e3MPhVrJfNIa_3ltMpbCFxfy_jxK8RFNTns,555
@@ -94,11 +94,11 @@ seleniumbase/plugins/basic_test_info.py,sha256=8ov6n417gPbqqvrlT4zrch7l2XcRt-GF2
94
94
  seleniumbase/plugins/db_reporting_plugin.py,sha256=En09qUCoojrk9-vbcnsoHdSELoGmag2GDIyu3jTiJas,7331
95
95
  seleniumbase/plugins/driver_manager.py,sha256=oO3ML-tVqf8v6EGvylTCtPi5PjdfnSH40m7icjJfZDM,22485
96
96
  seleniumbase/plugins/page_source.py,sha256=loTnXxOj4kxEukuTZEiGyvKBhY3KDVDMnNlHHheTBDE,1889
97
- seleniumbase/plugins/pytest_plugin.py,sha256=fPOADQgwLKQ-BxDZm3sAp8jrN2FTjQo8_suIXXRvZqM,94467
97
+ seleniumbase/plugins/pytest_plugin.py,sha256=9JgG-PUZ8snb4O-gNYjOEBPkaWSBaspdQEqHEsxno8Q,94873
98
98
  seleniumbase/plugins/s3_logging_plugin.py,sha256=WDfertQgGOW_SRJpFMaekYD6vBVW9VO62POtXXy2HCM,2319
99
99
  seleniumbase/plugins/sb_manager.py,sha256=LPhV75mvhFRtSE18J1r8aPtAwaJO9UOLNxNdKM_qW1I,40491
100
100
  seleniumbase/plugins/screen_shots.py,sha256=1hrXw-hzuZ1BR6Yh7AyWX2ABnvnP73-RCbwdz958gj4,1127
101
- seleniumbase/plugins/selenium_plugin.py,sha256=wErmsKOzBFd9lDX9VVmxPauSpdjBDWScDk74QsCzJOY,54493
101
+ seleniumbase/plugins/selenium_plugin.py,sha256=VlHdUJIBhsmanyNJiNyUk67i7iux_X44s_0neaK7WYI,54936
102
102
  seleniumbase/resources/ReadMe.md,sha256=uminnO5_Uv-UZDKcc9a9s9kxisaYUps-H98Fp5PJcaU,2124
103
103
  seleniumbase/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
104
  seleniumbase/resources/favicon.ico,sha256=QPf_YK0QXa_--C4_CH-odh6OTHRQ9k-4O6WcCpXSdwM,1150
@@ -120,7 +120,7 @@ seleniumbase/undetected/dprocess.py,sha256=WWQ_X_-Q7Lfx1m6oxkYHU0eTIc76Jodph4n1Q
120
120
  seleniumbase/undetected/options.py,sha256=SGuz8iqlVPYN7IexNiGauupWF0xP3mqO72-9tgIqeuI,2999
121
121
  seleniumbase/undetected/patcher.py,sha256=u8X3uFBCTJ4XcU09AWpbDyPc-dm2LM-YeuciCp5AEdM,10853
122
122
  seleniumbase/undetected/reactor.py,sha256=UT1pEnGaTPZT7-0-xKROk9_eWDZueGzSUrCksc22nyA,2883
123
- seleniumbase/undetected/webelement.py,sha256=uD_XuJBG1RS42rDyx6br17FNvdgqXzJsntCgYeoWtQc,1356
123
+ seleniumbase/undetected/webelement.py,sha256=_s6evgUkdWJpwOnzX4qR9i796PoVbz3txlzHlOBJ4BE,1370
124
124
  seleniumbase/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
125
  seleniumbase/utilities/selenium_grid/ReadMe.md,sha256=Uqvn4KmhaMY_jrhcsxL2WptCukPq1J3Yz-9WenCXEu0,3599
126
126
  seleniumbase/utilities/selenium_grid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -137,9 +137,9 @@ seleniumbase/utilities/selenium_grid/start-grid-hub.sh,sha256=KADv0RUHONLL2_I443
137
137
  seleniumbase/utilities/selenium_ide/ReadMe.md,sha256=hznGeuMpkIimqMiZBW-4goIy2ltW4l8X9kb0YSPUQfE,4483
138
138
  seleniumbase/utilities/selenium_ide/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
139
  seleniumbase/utilities/selenium_ide/convert_ide.py,sha256=pZFnqEJQEKZPyNFjkLD29s2HPQgCrWW9XJWpCPhWOoM,31691
140
- seleniumbase-4.26.3.dist-info/LICENSE,sha256=odSYtWibXBnQ1gBg6CnDZ82n8kLF_if5-2nbqnEyD8k,1085
141
- seleniumbase-4.26.3.dist-info/METADATA,sha256=IBs2oYYeZBIZKe_U9KREMujzQhZUCmQdzpiGfPtZI74,84898
142
- seleniumbase-4.26.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
143
- seleniumbase-4.26.3.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
144
- seleniumbase-4.26.3.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
145
- seleniumbase-4.26.3.dist-info/RECORD,,
140
+ seleniumbase-4.26.4.dist-info/LICENSE,sha256=odSYtWibXBnQ1gBg6CnDZ82n8kLF_if5-2nbqnEyD8k,1085
141
+ seleniumbase-4.26.4.dist-info/METADATA,sha256=k-o9G1Re3zS138cZQ4us3gHlOMQZlJeMsbNQL4H-Zu8,85056
142
+ seleniumbase-4.26.4.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
143
+ seleniumbase-4.26.4.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
144
+ seleniumbase-4.26.4.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
145
+ seleniumbase-4.26.4.dist-info/RECORD,,