seleniumbase 4.42.6__py3-none-any.whl → 4.43.1__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.

Potentially problematic release.


This version of seleniumbase might be problematic. Click here for more details.

Files changed (32) hide show
  1. seleniumbase/__version__.py +1 -1
  2. seleniumbase/behave/behave_sb.py +2 -3
  3. seleniumbase/console_scripts/sb_caseplans.py +2 -3
  4. seleniumbase/console_scripts/sb_mkchart.py +1 -2
  5. seleniumbase/console_scripts/sb_mkdir.py +23 -29
  6. seleniumbase/console_scripts/sb_mkfile.py +1 -2
  7. seleniumbase/console_scripts/sb_mkpres.py +1 -2
  8. seleniumbase/console_scripts/sb_mkrec.py +1 -2
  9. seleniumbase/console_scripts/sb_objectify.py +2 -3
  10. seleniumbase/core/browser_launcher.py +1 -3
  11. seleniumbase/core/log_helper.py +3 -4
  12. seleniumbase/core/report_helper.py +1 -2
  13. seleniumbase/core/sb_cdp.py +17 -41
  14. seleniumbase/core/tour_helper.py +1 -2
  15. seleniumbase/fixtures/base_case.py +26 -25
  16. seleniumbase/fixtures/page_actions.py +1 -2
  17. seleniumbase/fixtures/page_utils.py +2 -3
  18. seleniumbase/plugins/basic_test_info.py +2 -3
  19. seleniumbase/plugins/page_source.py +2 -3
  20. seleniumbase/plugins/pytest_plugin.py +2 -3
  21. seleniumbase/translate/translator.py +1 -2
  22. seleniumbase/undetected/cdp_driver/browser.py +2 -1
  23. seleniumbase/undetected/cdp_driver/connection.py +0 -2
  24. seleniumbase/utilities/selenium_grid/grid_hub.py +1 -2
  25. seleniumbase/utilities/selenium_grid/grid_node.py +2 -3
  26. seleniumbase/utilities/selenium_ide/convert_ide.py +1 -2
  27. {seleniumbase-4.42.6.dist-info → seleniumbase-4.43.1.dist-info}/METADATA +13 -12
  28. {seleniumbase-4.42.6.dist-info → seleniumbase-4.43.1.dist-info}/RECORD +32 -32
  29. {seleniumbase-4.42.6.dist-info → seleniumbase-4.43.1.dist-info}/WHEEL +0 -0
  30. {seleniumbase-4.42.6.dist-info → seleniumbase-4.43.1.dist-info}/entry_points.txt +0 -0
  31. {seleniumbase-4.42.6.dist-info → seleniumbase-4.43.1.dist-info}/licenses/LICENSE +0 -0
  32. {seleniumbase-4.42.6.dist-info → seleniumbase-4.43.1.dist-info}/top_level.txt +0 -0
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.42.6"
2
+ __version__ = "4.43.1"
@@ -1205,7 +1205,6 @@ def dashboard_pre_processing():
1205
1205
 
1206
1206
 
1207
1207
  def _create_dashboard_assets_():
1208
- import codecs
1209
1208
  from seleniumbase.js_code.live_js import live_js
1210
1209
  from seleniumbase.core.style_sheet import get_pytest_style
1211
1210
 
@@ -1222,7 +1221,7 @@ def _create_dashboard_assets_():
1222
1221
  if existing_pytest_style == get_pytest_style():
1223
1222
  add_pytest_style_css = False
1224
1223
  if add_pytest_style_css:
1225
- out_file = codecs.open(pytest_style_css, "w+", encoding="utf-8")
1224
+ out_file = open(pytest_style_css, "w+", encoding="utf-8")
1226
1225
  out_file.writelines(get_pytest_style())
1227
1226
  out_file.close()
1228
1227
  live_js_file = os.path.join(assets_folder, "live.js")
@@ -1234,7 +1233,7 @@ def _create_dashboard_assets_():
1234
1233
  if existing_live_js == live_js:
1235
1234
  add_live_js_file = False
1236
1235
  if add_live_js_file:
1237
- out_file = codecs.open(live_js_file, "w+", encoding="utf-8")
1236
+ out_file = open(live_js_file, "w+", encoding="utf-8")
1238
1237
  out_file.writelines(live_js)
1239
1238
  out_file.close()
1240
1239
 
@@ -15,7 +15,6 @@ Examples:
15
15
  Output:
16
16
  Launches the SeleniumBase Case Plans Generator.
17
17
  """
18
- import codecs
19
18
  import colorama
20
19
  import os
21
20
  import subprocess
@@ -135,7 +134,7 @@ def generate_case_plan_boilerplates(
135
134
  file_name = case_id
136
135
  file_path = os.path.join(full_folder_path, file_name)
137
136
  if not os.path.exists(file_path):
138
- out_file = codecs.open(file_path, "w+", "utf-8")
137
+ out_file = open(file_path, "w+", "utf-8")
139
138
  out_file.writelines("\r\n".join(data))
140
139
  out_file.close()
141
140
  new_plans += 1
@@ -316,7 +315,7 @@ def view_summary_of_existing_case_plans(root, tests):
316
315
  full_plan = plan_head
317
316
 
318
317
  file_path = "case_summary.md"
319
- file = codecs.open(file_path, "w+", "utf-8")
318
+ file = open(file_path, "w+", "utf-8")
320
319
  file.writelines("\r\n".join(full_plan))
321
320
  file.close()
322
321
 
@@ -22,7 +22,6 @@ Output:
22
22
  and use a "sky" theme with "slide" transition.
23
23
  The chart can be used as a basic boilerplate.
24
24
  """
25
- import codecs
26
25
  import colorama
27
26
  import os
28
27
  import sys
@@ -254,7 +253,7 @@ def main():
254
253
  continue
255
254
  new_data.append(line)
256
255
  data = new_data
257
- file = codecs.open(file_path, "w+", "utf-8")
256
+ file = open(file_path, "w+", "utf-8")
258
257
  file.writelines("\r\n".join(data))
259
258
  file.close()
260
259
  if " " not in file_name:
@@ -18,7 +18,6 @@ Output:
18
18
  and Python boilerplates for setting up customized
19
19
  test frameworks.
20
20
  """
21
- import codecs
22
21
  import colorama
23
22
  import os
24
23
  import sys
@@ -114,7 +113,7 @@ def main():
114
113
  data.append(seleniumbase_req)
115
114
  data.append("")
116
115
  file_path = "%s/%s" % (dir_name, "requirements.txt")
117
- file = codecs.open(file_path, "w+", "utf-8")
116
+ file = open(file_path, "w+", "utf-8")
118
117
  file.writelines("\r\n".join(data))
119
118
  file.close()
120
119
 
@@ -152,7 +151,7 @@ def main():
152
151
  data.append(" production: custom marker")
153
152
  data.append("")
154
153
  file_path = "%s/%s" % (dir_name, "pytest.ini")
155
- file = codecs.open(file_path, "w+", "utf-8")
154
+ file = open(file_path, "w+", "utf-8")
156
155
  file.writelines("\r\n".join(data))
157
156
  file.close()
158
157
 
@@ -169,14 +168,14 @@ def main():
169
168
  data.append("show_skipped=false")
170
169
  data.append("show_timings=false")
171
170
  file_path = "%s/%s" % (dir_name, "setup.cfg")
172
- file = codecs.open(file_path, "w+", "utf-8")
171
+ file = open(file_path, "w+", "utf-8")
173
172
  file.writelines("\r\n".join(data))
174
173
  file.close()
175
174
 
176
175
  data = []
177
176
  data.append("")
178
177
  file_path = "%s/%s" % (dir_name, "__init__.py")
179
- file = codecs.open(file_path, "w+", "utf-8")
178
+ file = open(file_path, "w+", "utf-8")
180
179
  file.writelines("\r\n".join(data))
181
180
  file.close()
182
181
 
@@ -312,7 +311,7 @@ def main():
312
311
  data.append("temp_*/")
313
312
  data.append("node_modules")
314
313
  file_path = "%s/%s" % (dir_name, ".gitignore")
315
- file = codecs.open(file_path, "w+", "utf-8")
314
+ file = open(file_path, "w+", "utf-8")
316
315
  file.writelines("\r\n".join(data))
317
316
  file.close()
318
317
 
@@ -324,7 +323,7 @@ def main():
324
323
  data.append(" ├── requirements.txt")
325
324
  data.append(" └── setup.cfg")
326
325
  file_path = "%s/%s" % (dir_name, "outline.rst")
327
- file = codecs.open(file_path, "w+", "utf-8")
326
+ file = open(file_path, "w+", "utf-8")
328
327
  file.writelines("\r\n".join(data))
329
328
  file.close()
330
329
  os.system("sbase print %s -n" % file_path)
@@ -368,7 +367,7 @@ def main():
368
367
  data.append(' self.assert_element("div#login_button_container")')
369
368
  data.append("")
370
369
  file_path = "%s/%s" % (dir_name, "my_first_test.py")
371
- file = codecs.open(file_path, "w+", "utf-8")
370
+ file = open(file_path, "w+", "utf-8")
372
371
  file.writelines("\r\n".join(data))
373
372
  file.close()
374
373
 
@@ -461,7 +460,7 @@ def main():
461
460
  data.append(' self.assert_text("SeleniumBase", "h2")')
462
461
  data.append("")
463
462
  file_path = "%s/%s" % (dir_name, "test_demo_site.py")
464
- file = codecs.open(file_path, "w+", "utf-8")
463
+ file = open(file_path, "w+", "utf-8")
465
464
  file.writelines("\r\n".join(data))
466
465
  file.close()
467
466
 
@@ -500,7 +499,7 @@ def main():
500
499
  data.append(' self.assert_title_contains(title_text)')
501
500
  data.append("")
502
501
  file_path = "%s/%s" % (dir_name, "parameterized_test.py")
503
- file = codecs.open(file_path, "w+", "utf-8")
502
+ file = open(file_path, "w+", "utf-8")
504
503
  file.writelines("\r\n".join(data))
505
504
  file.close()
506
505
 
@@ -510,7 +509,7 @@ def main():
510
509
  data = []
511
510
  data.append("")
512
511
  file_path = "%s/%s" % (dir_name_2, "__init__.py")
513
- file = codecs.open(file_path, "w+", "utf-8")
512
+ file = open(file_path, "w+", "utf-8")
514
513
  file.writelines("\r\n".join(data))
515
514
  file.close()
516
515
 
@@ -545,7 +544,7 @@ def main():
545
544
  data.append(" pass")
546
545
  data.append("")
547
546
  file_path = "%s/%s" % (dir_name_2, "base_test_case.py")
548
- file = codecs.open(file_path, "w+", "utf-8")
547
+ file = open(file_path, "w+", "utf-8")
549
548
  file.writelines("\r\n".join(data))
550
549
  file.close()
551
550
 
@@ -554,7 +553,7 @@ def main():
554
553
  data.append(' html = "html"')
555
554
  data.append("")
556
555
  file_path = "%s/%s" % (dir_name_2, "page_objects.py")
557
- file = codecs.open(file_path, "w+", "utf-8")
556
+ file = open(file_path, "w+", "utf-8")
558
557
  file.writelines("\r\n".join(data))
559
558
  file.close()
560
559
 
@@ -570,7 +569,7 @@ def main():
570
569
  data.append(" self.assert_element(Page.html)")
571
570
  data.append("")
572
571
  file_path = "%s/%s" % (dir_name_2, "boilerplate_test.py")
573
- file = codecs.open(file_path, "w+", "utf-8")
572
+ file = open(file_path, "w+", "utf-8")
574
573
  file.writelines("\r\n".join(data))
575
574
  file.close()
576
575
 
@@ -594,7 +593,7 @@ def main():
594
593
  data.append(' DataPage().add_input_text(self, "Goodbye!")')
595
594
  data.append("")
596
595
  file_path = "%s/%s" % (dir_name_2, "classic_obj_test.py")
597
- file = codecs.open(file_path, "w+", "utf-8")
596
+ file = open(file_path, "w+", "utf-8")
598
597
  file.writelines("\r\n".join(data))
599
598
  file.close()
600
599
 
@@ -614,7 +613,7 @@ def main():
614
613
  data.append(' DataPage().add_input_text(sb, "Goodbye!")')
615
614
  data.append("")
616
615
  file_path = "%s/%s" % (dir_name_2, "sb_fixture_test.py")
617
- file = codecs.open(file_path, "w+", "utf-8")
616
+ file = open(file_path, "w+", "utf-8")
618
617
  file.writelines("\r\n".join(data))
619
618
  file.close()
620
619
 
@@ -624,7 +623,7 @@ def main():
624
623
  data = []
625
624
  data.append("")
626
625
  file_path = "%s/%s" % (dir_name_3, "__init__.py")
627
- file = codecs.open(file_path, "w+", "utf-8")
626
+ file = open(file_path, "w+", "utf-8")
628
627
  file.writelines("\r\n".join(data))
629
628
  file.close()
630
629
 
@@ -636,17 +635,12 @@ def main():
636
635
  data.append("")
637
636
  data.append("class GoogleTests(BaseCase):")
638
637
  data.append(" def test_google_dot_com(self):")
638
+ data.append(" if self.headless:")
639
+ data.append(' self.skip("Skipping test in headless mode.")')
639
640
  data.append(" if not self.undetectable:")
640
641
  data.append(" self.get_new_driver(undetectable=True)")
641
642
  data.append(' self.open("https://google.com/ncr")')
642
643
  data.append(' self.assert_title_contains("Google")')
643
- data.append(" self.sleep(0.05)")
644
- data.append(" self.save_screenshot_to_logs()")
645
- data.append(
646
- " self.wait_for_element('iframe[role=\"presentation\"]')"
647
- )
648
- data.append(" self.hide_elements('iframe')")
649
- data.append(" self.sleep(0.05)")
650
644
  data.append(" self.save_screenshot_to_logs()")
651
645
  data.append(' self.type(HomePage.search_box, "github.com")')
652
646
  data.append(" self.assert_element(HomePage.search_button)")
@@ -657,7 +651,7 @@ def main():
657
651
  )
658
652
  data.append("")
659
653
  file_path = "%s/%s" % (dir_name_3, "google_test.py")
660
- file = codecs.open(file_path, "w+", "utf-8")
654
+ file = open(file_path, "w+", "utf-8")
661
655
  file.writelines("\r\n".join(data))
662
656
  file.close()
663
657
 
@@ -675,7 +669,7 @@ def main():
675
669
  data.append(' search_results = "div#center_col"')
676
670
  data.append("")
677
671
  file_path = "%s/%s" % (dir_name_3, "google_objects.py")
678
- file = codecs.open(file_path, "w+", "utf-8")
672
+ file = open(file_path, "w+", "utf-8")
679
673
  file.writelines("\r\n".join(data))
680
674
  file.close()
681
675
 
@@ -707,7 +701,7 @@ def main():
707
701
  data.append(' self.assert_element("div#login_button_container")')
708
702
  data.append("")
709
703
  file_path = "%s/%s" % (dir_name_3, "swag_labs_test.py")
710
- file = codecs.open(file_path, "w+", "utf-8")
704
+ file = open(file_path, "w+", "utf-8")
711
705
  file.writelines("\r\n".join(data))
712
706
  file.close()
713
707
 
@@ -734,7 +728,7 @@ def main():
734
728
  data.append(' sb.assert_element("div#login_button_container")')
735
729
  data.append("")
736
730
  file_path = "%s/%s" % (dir_name_3, "sb_swag_test.py")
737
- file = codecs.open(file_path, "w+", "utf-8")
731
+ file = open(file_path, "w+", "utf-8")
738
732
  file.writelines("\r\n".join(data))
739
733
  file.close()
740
734
 
@@ -761,7 +755,7 @@ def main():
761
755
  data.append(" ├── sb_swag_test.py")
762
756
  data.append(" └── swag_labs_test.py")
763
757
  file_path = "%s/%s" % (dir_name, "outline.rst")
764
- file = codecs.open(file_path, "w+", "utf-8")
758
+ file = open(file_path, "w+", "utf-8")
765
759
  file.writelines("\r\n".join(data))
766
760
  file.close()
767
761
  if " " not in file_path:
@@ -40,7 +40,6 @@ Output:
40
40
  BaseCase format supports Languages or Recorder Mode.
41
41
  UC Mode automatically uses English with SB() format.
42
42
  """
43
- import codecs
44
43
  import colorama
45
44
  import os
46
45
  import sys
@@ -413,7 +412,7 @@ def main():
413
412
  continue
414
413
  new_data.append(line)
415
414
  data = new_data
416
- file = codecs.open(file_path, "w+", "utf-8")
415
+ file = open(file_path, "w+", "utf-8")
417
416
  file.writelines("\r\n".join(data))
418
417
  file.close()
419
418
  if " " not in file_name:
@@ -22,7 +22,6 @@ Output:
22
22
  and use "serif" theme with "slide" transition.
23
23
  The slides can be used as a basic boilerplate.
24
24
  """
25
- import codecs
26
25
  import colorama
27
26
  import os
28
27
  import sys
@@ -273,7 +272,7 @@ def main():
273
272
  continue
274
273
  new_data.append(line)
275
274
  data = new_data
276
- file = codecs.open(file_path, "w+", "utf-8")
275
+ file = open(file_path, "w+", "utf-8")
277
276
  file.writelines("\r\n".join(data))
278
277
  file.close()
279
278
  if " " not in file_name:
@@ -29,7 +29,6 @@ Output:
29
29
  Creates a new SeleniumBase test using the Recorder.
30
30
  If the filename already exists, an error is raised.
31
31
  """
32
- import codecs
33
32
  import colorama
34
33
  import shutil
35
34
  import os
@@ -240,7 +239,7 @@ def main():
240
239
  d2.append("")
241
240
  data = d2
242
241
 
243
- file = codecs.open(file_path, "w+", "utf-8")
242
+ file = open(file_path, "w+", "utf-8")
244
243
  file.writelines("\r\n".join(data))
245
244
  file.close()
246
245
  success = (
@@ -8,7 +8,6 @@ Output:
8
8
  have been replaced with variable names defined in
9
9
  "page_objects.py", supporting the Page Object Pattern.
10
10
  """
11
- import codecs
12
11
  import os
13
12
  import re
14
13
  import sys
@@ -136,7 +135,7 @@ def create_objects_file(selector_list_dict=None):
136
135
  data.append(' html = "html"')
137
136
  data.append("")
138
137
  file_path = PAGE_OBJECTS_FILE
139
- file = codecs.open(file_path, "w+", "utf-8")
138
+ file = open(file_path, "w+", "utf-8")
140
139
  file.writelines("\r\n".join(data))
141
140
  file.close()
142
141
  if not selector_list_dict:
@@ -3189,7 +3188,7 @@ def main(shell_command):
3189
3188
  # Create SeleniumBase test file
3190
3189
  base_file_name = seleniumbase_file.split(".py")[0]
3191
3190
  converted_file_name = base_file_name + ".py" # Change end to make a copy
3192
- out_file = codecs.open(converted_file_name, "w+", encoding="utf-8")
3191
+ out_file = open(converted_file_name, "w+", encoding="utf-8")
3193
3192
  out_file.writelines(seleniumbase_code)
3194
3193
  out_file.close()
3195
3194
  print('\n>>> ["%s"] was updated!\n' % converted_file_name)
@@ -2006,14 +2006,12 @@ def _repair_edgedriver(edge_version):
2006
2006
 
2007
2007
 
2008
2008
  def _mark_driver_repaired():
2009
- import codecs
2010
-
2011
2009
  abs_path = os.path.abspath(".")
2012
2010
  driver_repaired_lock = constants.MultiBrowser.DRIVER_REPAIRED
2013
2011
  file_path = os.path.join(abs_path, driver_repaired_lock)
2014
2012
  if not os.path.exists(DOWNLOADS_FOLDER):
2015
2013
  os.makedirs(DOWNLOADS_FOLDER)
2016
- out_file = codecs.open(file_path, "w+", encoding="utf-8")
2014
+ out_file = open(file_path, "w+", encoding="utf-8")
2017
2015
  out_file.writelines("")
2018
2016
  out_file.close()
2019
2017
 
@@ -1,4 +1,3 @@
1
- import codecs
2
1
  import os
3
2
  import shutil
4
3
  import sys
@@ -298,7 +297,7 @@ def log_test_failure_data(test, test_logpath, driver, browser, url=None):
298
297
  with suppress(Exception):
299
298
  os.makedirs(test_logpath)
300
299
  with suppress(Exception):
301
- log_file = codecs.open(basic_file_path, "w+", encoding="utf-8")
300
+ log_file = open(basic_file_path, "w+", encoding="utf-8")
302
301
  log_file.writelines("\r\n".join(data_to_save))
303
302
  log_file.close()
304
303
  shared_utils.make_writable(basic_file_path)
@@ -353,7 +352,7 @@ def log_skipped_test_data(test, test_logpath, driver, browser, reason):
353
352
  data_to_save.append("")
354
353
  file_path = os.path.join(test_logpath, "skip_reason.txt")
355
354
  with suppress(Exception):
356
- log_file = codecs.open(file_path, "w+", encoding="utf-8")
355
+ log_file = open(file_path, "w+", encoding="utf-8")
357
356
  log_file.writelines("\r\n".join(data_to_save))
358
357
  log_file.close()
359
358
  shared_utils.make_writable(file_path)
@@ -388,7 +387,7 @@ def log_page_source(test_logpath, driver, source=None):
388
387
  os.makedirs(test_logpath)
389
388
  html_file_path = os.path.join(test_logpath, html_file_name)
390
389
  with suppress(Exception):
391
- html_file = codecs.open(html_file_path, "w+", encoding="utf-8")
390
+ html_file = open(html_file_path, "w+", encoding="utf-8")
392
391
  html_file.write(page_source)
393
392
  html_file.close()
394
393
  shared_utils.make_writable(html_file_path)
@@ -1,4 +1,3 @@
1
- import codecs
2
1
  import os
3
2
  import shutil
4
3
  import sys
@@ -48,7 +47,7 @@ def save_test_failure_data(test, name, folder=None):
48
47
  failure_data_file_path = os.path.join(file_path, name)
49
48
  else:
50
49
  failure_data_file_path = name
51
- failure_data_file = codecs.open(failure_data_file_path, "w+", "utf-8")
50
+ failure_data_file = open(failure_data_file_path, "w+", "utf-8")
52
51
  data_to_save = []
53
52
  if not hasattr(sb_config, "_report_test_id"):
54
53
  exc_message = "(Unknown Exception)"
@@ -187,46 +187,23 @@ class CDPMethods():
187
187
  element with the given tag. (Eg: a, button, div, script, span)"""
188
188
  if not timeout:
189
189
  timeout = settings.SMALL_TIMEOUT
190
- self.__add_light_pause()
191
- time_now = time.time()
192
- self.assert_text(text, timeout=timeout)
193
- spent = int(time.time() - time_now)
194
- remaining = 1 + timeout - spent
195
- if tag_name:
196
- self.assert_element(tag_name, timeout=remaining)
197
- elements = self.loop.run_until_complete(
198
- self.page.find_elements_by_text(text=text)
199
- )
200
190
  if tag_name:
201
- tag_name = tag_name.lower().strip()
202
- for element in elements:
203
- if element and not tag_name:
204
- element = self.__add_sync_methods(element)
205
- return self.__add_sync_methods(element)
206
- elif (
207
- element
208
- and tag_name in element.tag_name.lower()
209
- and text.strip() in element.text
210
- ):
211
- element = self.__add_sync_methods(element)
212
- return self.__add_sync_methods(element)
213
- elif (
214
- element
215
- and element.parent
216
- and tag_name in element.parent.tag_name.lower()
217
- and text.strip() in element.parent.text
218
- ):
219
- element = self.__add_sync_methods(element.parent)
220
- return self.__add_sync_methods(element)
221
- elif (
222
- element
223
- and element.parent
224
- and element.parent.parent
225
- and tag_name in element.parent.parent.tag_name.lower()
226
- and text.strip() in element.parent.parent.text
227
- ):
228
- element = self.__add_sync_methods(element.parent.parent)
229
- return self.__add_sync_methods(element)
191
+ try:
192
+ return self.find_element(
193
+ '%s:contains("%s")' % (tag_name, text), timeout=timeout
194
+ )
195
+ except Exception:
196
+ pass # The exception will be raised later
197
+ else:
198
+ self.__add_light_pause()
199
+ self.assert_text(text, timeout=timeout)
200
+ elements = self.loop.run_until_complete(
201
+ self.page.find_elements_by_text(text=text)
202
+ )
203
+ for element in elements:
204
+ if element:
205
+ element = self.__add_sync_methods(element)
206
+ return self.__add_sync_methods(element)
230
207
  plural = "s"
231
208
  if timeout == 1:
232
209
  plural = ""
@@ -2692,7 +2669,6 @@ class CDPMethods():
2692
2669
  self.loop.run_until_complete(self.page.wait())
2693
2670
 
2694
2671
  def save_page_source(self, name, folder=None):
2695
- import codecs
2696
2672
  from seleniumbase.core import log_helper
2697
2673
  if not name.endswith(".html"):
2698
2674
  name = name + ".html"
@@ -2718,7 +2694,7 @@ class CDPMethods():
2718
2694
  rendered_source = "%s\n%s" % (base_href_html, page_source)
2719
2695
  else:
2720
2696
  rendered_source = page_source
2721
- html_file = codecs.open(html_file_path, "w+", "utf-8")
2697
+ html_file = open(html_file_path, "w+", "utf-8")
2722
2698
  html_file.write(rendered_source)
2723
2699
  html_file.close()
2724
2700
 
@@ -1134,10 +1134,9 @@ def export_tour(tour_steps, name=None, filename="my_tour.js", url=None):
1134
1134
  os.makedirs(exported_tours_folder)
1135
1135
  except Exception:
1136
1136
  pass
1137
- import codecs
1138
1137
 
1139
1138
  file_path = exported_tours_folder + "/" + filename
1140
- out_file = codecs.open(file_path, "w+", encoding="utf-8")
1139
+ out_file = open(file_path, "w+", encoding="utf-8")
1141
1140
  out_file.writelines(instructions)
1142
1141
  out_file.close()
1143
1142
  print("\n>>> [%s] was saved!\n" % file_path)
@@ -32,7 +32,6 @@ Improvements include making WebDriver more robust, reliable, and flexible.
32
32
  Page elements are given enough time to load before WebDriver acts on them.
33
33
  Code becomes greatly simplified and easier to maintain."""
34
34
 
35
- import codecs
36
35
  import colorama
37
36
  import fasteners
38
37
  import json
@@ -4683,7 +4682,7 @@ class BaseCase(unittest.TestCase):
4683
4682
  if not os.path.exists(file_path):
4684
4683
  os.makedirs(file_path)
4685
4684
  cookies_file_path = os.path.join(file_path, name)
4686
- cookies_file = codecs.open(cookies_file_path, "w+", encoding="utf-8")
4685
+ cookies_file = open(cookies_file_path, "w+", encoding="utf-8")
4687
4686
  cookies_file.writelines(json_cookies)
4688
4687
  cookies_file.close()
4689
4688
 
@@ -5737,7 +5736,7 @@ class BaseCase(unittest.TestCase):
5737
5736
  extra_file_name = "__init__.py"
5738
5737
  extra_file_path = os.path.join(recordings_folder, extra_file_name)
5739
5738
  if not os.path.exists(extra_file_path):
5740
- out_file = codecs.open(extra_file_path, "w+", "utf-8")
5739
+ out_file = open(extra_file_path, "w+", "utf-8")
5741
5740
  out_file.writelines("\r\n".join(data))
5742
5741
  out_file.close()
5743
5742
  sys.stdout.write("\nCreated recordings%s__init__.py" % os.sep)
@@ -5785,7 +5784,7 @@ class BaseCase(unittest.TestCase):
5785
5784
  extra_file_name = "pytest.ini"
5786
5785
  extra_file_path = os.path.join(recordings_folder, extra_file_name)
5787
5786
  if not os.path.exists(extra_file_path):
5788
- out_file = codecs.open(extra_file_path, "w+", "utf-8")
5787
+ out_file = open(extra_file_path, "w+", "utf-8")
5789
5788
  out_file.writelines("\r\n".join(data))
5790
5789
  out_file.close()
5791
5790
  sys.stdout.write("\nCreated recordings%spytest.ini" % os.sep)
@@ -5806,7 +5805,7 @@ class BaseCase(unittest.TestCase):
5806
5805
  extra_file_name = "setup.cfg"
5807
5806
  extra_file_path = os.path.join(recordings_folder, extra_file_name)
5808
5807
  if not os.path.exists(extra_file_path):
5809
- out_file = codecs.open(extra_file_path, "w+", "utf-8")
5808
+ out_file = open(extra_file_path, "w+", "utf-8")
5810
5809
  out_file.writelines("\r\n".join(data))
5811
5810
  out_file.close()
5812
5811
  sys.stdout.write("\nCreated recordings%ssetup.cfg" % os.sep)
@@ -5824,7 +5823,7 @@ class BaseCase(unittest.TestCase):
5824
5823
  elif context_filename:
5825
5824
  file_name = context_filename
5826
5825
  file_path = os.path.join(recordings_folder, file_name)
5827
- out_file = codecs.open(file_path, "w+", "utf-8")
5826
+ out_file = open(file_path, "w+", "utf-8")
5828
5827
  out_file.writelines("\r\n".join(data))
5829
5828
  out_file.close()
5830
5829
  rec_message = ">>> RECORDING SAVED as: "
@@ -5926,7 +5925,7 @@ class BaseCase(unittest.TestCase):
5926
5925
  file_name = sb_config.behave_scenario.filename.replace(".", "_")
5927
5926
  file_name = file_name.split("/")[-1].split("\\")[-1] + "_rec.feature"
5928
5927
  file_path = os.path.join(features_folder, file_name)
5929
- out_file = codecs.open(file_path, "w+", "utf-8")
5928
+ out_file = open(file_path, "w+", "utf-8")
5930
5929
  out_file.writelines("\r\n".join(data))
5931
5930
  out_file.close()
5932
5931
 
@@ -5964,7 +5963,7 @@ class BaseCase(unittest.TestCase):
5964
5963
  file_name = "__init__.py"
5965
5964
  file_path = os.path.join(features_folder, file_name)
5966
5965
  if not os.path.exists(file_path):
5967
- out_file = codecs.open(file_path, "w+", "utf-8")
5966
+ out_file = open(file_path, "w+", "utf-8")
5968
5967
  out_file.writelines("\r\n".join(data))
5969
5968
  out_file.close()
5970
5969
  print("Created recordings/features/__init__.py")
@@ -5977,7 +5976,7 @@ class BaseCase(unittest.TestCase):
5977
5976
  file_name = "behave.ini"
5978
5977
  file_path = os.path.join(features_folder, file_name)
5979
5978
  if not os.path.exists(file_path):
5980
- out_file = codecs.open(file_path, "w+", "utf-8")
5979
+ out_file = open(file_path, "w+", "utf-8")
5981
5980
  out_file.writelines("\r\n".join(data))
5982
5981
  out_file.close()
5983
5982
  print("Created recordings/features/behave.ini")
@@ -6016,7 +6015,7 @@ class BaseCase(unittest.TestCase):
6016
6015
  file_name = "environment.py"
6017
6016
  file_path = os.path.join(features_folder, file_name)
6018
6017
  if not os.path.exists(file_path):
6019
- out_file = codecs.open(file_path, "w+", "utf-8")
6018
+ out_file = open(file_path, "w+", "utf-8")
6020
6019
  out_file.writelines("\r\n".join(data))
6021
6020
  out_file.close()
6022
6021
  print("Created recordings/features/environment.py")
@@ -6026,7 +6025,7 @@ class BaseCase(unittest.TestCase):
6026
6025
  file_name = "__init__.py"
6027
6026
  file_path = os.path.join(steps_folder, file_name)
6028
6027
  if not os.path.exists(file_path):
6029
- out_file = codecs.open(file_path, "w+", "utf-8")
6028
+ out_file = open(file_path, "w+", "utf-8")
6030
6029
  out_file.writelines("\r\n".join(data))
6031
6030
  out_file.close()
6032
6031
  print("Created recordings/features/steps/__init__.py")
@@ -6037,7 +6036,7 @@ class BaseCase(unittest.TestCase):
6037
6036
  file_name = "imported.py"
6038
6037
  file_path = os.path.join(steps_folder, file_name)
6039
6038
  if not os.path.exists(file_path):
6040
- out_file = codecs.open(file_path, "w+", "utf-8")
6039
+ out_file = open(file_path, "w+", "utf-8")
6041
6040
  out_file.writelines("\r\n".join(data))
6042
6041
  out_file.close()
6043
6042
  print("Created recordings/features/steps/imported.py")
@@ -10173,7 +10172,7 @@ class BaseCase(unittest.TestCase):
10173
10172
  text = self.__get_type_checked_text(text)
10174
10173
  selector, by = self.__recalculate_selector(selector, by)
10175
10174
  if self.__is_cdp_swap_needed():
10176
- return self.cdp.find_element(selector, timeout=timeout)
10175
+ return self.cdp.wait_for_text(text, selector, timeout=timeout)
10177
10176
  elif self.__is_shadow_selector(selector):
10178
10177
  return self.__wait_for_shadow_text_visible(text, selector, timeout)
10179
10178
  return page_actions.wait_for_text_visible(
@@ -10530,6 +10529,8 @@ class BaseCase(unittest.TestCase):
10530
10529
  timeout = settings.LARGE_TIMEOUT
10531
10530
  if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
10532
10531
  timeout = self.__get_new_timeout(timeout)
10532
+ if self.__is_cdp_swap_needed():
10533
+ return self.cdp.find_element_by_text(text=link_text, tag_name="a")
10533
10534
  return self.wait_for_element_visible(
10534
10535
  link_text, by="link text", timeout=timeout
10535
10536
  )
@@ -11076,7 +11077,7 @@ class BaseCase(unittest.TestCase):
11076
11077
  return # Skip the rest when deferred visual asserts are used
11077
11078
  the_html = visual_helper.get_sbs_html()
11078
11079
  file_path = os.path.join(test_logpath, constants.SideBySide.HTML_FILE)
11079
- out_file = codecs.open(file_path, "w+", encoding="utf-8")
11080
+ out_file = open(file_path, "w+", encoding="utf-8")
11080
11081
  out_file.writelines(the_html)
11081
11082
  out_file.close()
11082
11083
 
@@ -11236,16 +11237,16 @@ class BaseCase(unittest.TestCase):
11236
11237
  self.save_screenshot(
11237
11238
  baseline_png, visual_baseline_path, selector="body"
11238
11239
  )
11239
- out_file = codecs.open(page_url_file, "w+", encoding="utf-8")
11240
+ out_file = open(page_url_file, "w+", encoding="utf-8")
11240
11241
  out_file.writelines(page_url)
11241
11242
  out_file.close()
11242
- out_file = codecs.open(level_1_file, "w+", encoding="utf-8")
11243
+ out_file = open(level_1_file, "w+", encoding="utf-8")
11243
11244
  out_file.writelines(json.dumps(level_1))
11244
11245
  out_file.close()
11245
- out_file = codecs.open(level_2_file, "w+", encoding="utf-8")
11246
+ out_file = open(level_2_file, "w+", encoding="utf-8")
11246
11247
  out_file.writelines(json.dumps(level_2))
11247
11248
  out_file.close()
11248
- out_file = codecs.open(level_3_file, "w+", encoding="utf-8")
11249
+ out_file = open(level_3_file, "w+", encoding="utf-8")
11249
11250
  out_file.writelines(json.dumps(level_3))
11250
11251
  out_file.close()
11251
11252
 
@@ -11384,7 +11385,7 @@ class BaseCase(unittest.TestCase):
11384
11385
  alpha_n_d_name = "".join([x if x.isalnum() else "_" for x in name])
11385
11386
  side_by_side_name = "side_by_side_%s.html" % alpha_n_d_name
11386
11387
  file_path = os.path.join(test_logpath, side_by_side_name)
11387
- out_file = codecs.open(file_path, "w+", encoding="utf-8")
11388
+ out_file = open(file_path, "w+", encoding="utf-8")
11388
11389
  out_file.writelines(the_html)
11389
11390
  out_file.close()
11390
11391
 
@@ -12069,7 +12070,7 @@ class BaseCase(unittest.TestCase):
12069
12070
  with suppress(Exception):
12070
12071
  os.makedirs(saved_presentations_folder)
12071
12072
  file_path = os.path.join(saved_presentations_folder, filename)
12072
- out_file = codecs.open(file_path, "w+", encoding="utf-8")
12073
+ out_file = open(file_path, "w+", encoding="utf-8")
12073
12074
  out_file.writelines(the_html)
12074
12075
  out_file.close()
12075
12076
  if self._output_file_saves:
@@ -12764,7 +12765,7 @@ class BaseCase(unittest.TestCase):
12764
12765
  with suppress(Exception):
12765
12766
  os.makedirs(saved_charts_folder)
12766
12767
  file_path = os.path.join(saved_charts_folder, filename)
12767
- out_file = codecs.open(file_path, "w+", encoding="utf-8")
12768
+ out_file = open(file_path, "w+", encoding="utf-8")
12768
12769
  out_file.writelines(the_html)
12769
12770
  out_file.close()
12770
12771
  if self._output_file_saves:
@@ -16046,7 +16047,7 @@ class BaseCase(unittest.TestCase):
16046
16047
  test_id = test_id.replace(".py::", ".").replace("::", ".")
16047
16048
  test_id = test_id.replace("/", ".").replace("\\", ".")
16048
16049
  test_id = test_id.replace(" ", "_")
16049
- # Linux filename length limit for `codecs.open(filename)` = 255
16050
+ # Linux filename length limit for `open(filename)` = 255
16050
16051
  # 255 - len("latest_logs/") - len("/basic_test_info.txt") = 223
16051
16052
  if len(test_id) <= 223:
16052
16053
  return test_id
@@ -16324,7 +16325,7 @@ class BaseCase(unittest.TestCase):
16324
16325
  dash_pie = json.dumps(sb_config._saved_dashboard_pie)
16325
16326
  dash_pie_loc = constants.Dashboard.DASH_PIE
16326
16327
  pie_path = os.path.join(abs_path, dash_pie_loc)
16327
- pie_file = codecs.open(pie_path, "w+", encoding="utf-8")
16328
+ pie_file = open(pie_path, "w+", encoding="utf-8")
16328
16329
  pie_file.writelines(dash_pie)
16329
16330
  pie_file.close()
16330
16331
  DASH_PIE_PNG_1 = constants.Dashboard.get_dash_pie_1()
@@ -16484,7 +16485,7 @@ class BaseCase(unittest.TestCase):
16484
16485
  )
16485
16486
  abs_path = os.path.abspath(".")
16486
16487
  file_path = os.path.join(abs_path, "dashboard.html")
16487
- out_file = codecs.open(file_path, "w+", encoding="utf-8")
16488
+ out_file = open(file_path, "w+", encoding="utf-8")
16488
16489
  out_file.writelines(the_html)
16489
16490
  out_file.close()
16490
16491
  sb_config._dash_html = the_html
@@ -16497,7 +16498,7 @@ class BaseCase(unittest.TestCase):
16497
16498
  dash_json = json.dumps((_results, _display_id, _rt, _tlp, d_stats))
16498
16499
  dash_json_loc = constants.Dashboard.DASH_JSON
16499
16500
  dash_jsonpath = os.path.join(abs_path, dash_json_loc)
16500
- dash_json_file = codecs.open(dash_jsonpath, "w+", encoding="utf-8")
16501
+ dash_json_file = open(dash_jsonpath, "w+", encoding="utf-8")
16501
16502
  dash_json_file.writelines(dash_json)
16502
16503
  dash_json_file.close()
16503
16504
 
@@ -17,7 +17,6 @@ By.XPATH # "xpath"
17
17
  By.TAG_NAME # "tag name"
18
18
  By.PARTIAL_LINK_TEXT # "partial link text"
19
19
  """
20
- import codecs
21
20
  import os
22
21
  import time
23
22
  from contextlib import suppress
@@ -1531,7 +1530,7 @@ def save_page_source(driver, name, folder=None):
1531
1530
  rendered_source = log_helper.get_html_source_with_base_href(
1532
1531
  driver, page_source
1533
1532
  )
1534
- html_file = codecs.open(html_file_path, "w+", "utf-8")
1533
+ html_file = open(html_file_path, "w+", "utf-8")
1535
1534
  html_file.write(rendered_source)
1536
1535
  html_file.close()
1537
1536
 
@@ -1,5 +1,4 @@
1
1
  """This module contains useful utility methods"""
2
- import codecs
3
2
  import fasteners
4
3
  import os
5
4
  import re
@@ -314,7 +313,7 @@ def _save_data_as(data, destination_folder, file_name):
314
313
  constants.MultiBrowser.FILE_IO_LOCK
315
314
  )
316
315
  with file_io_lock:
317
- out_file = codecs.open(
316
+ out_file = open(
318
317
  os.path.join(destination_folder, file_name), "w+", encoding="utf-8"
319
318
  )
320
319
  out_file.writelines(data)
@@ -332,7 +331,7 @@ def _append_data_to_file(data, destination_folder, file_name):
332
331
  existing_data = f.read()
333
332
  if not existing_data.split("\n")[-1] == "":
334
333
  existing_data += "\n"
335
- out_file = codecs.open(
334
+ out_file = open(
336
335
  os.path.join(destination_folder, file_name), "w+", encoding="utf-8"
337
336
  )
338
337
  out_file.writelines("%s%s" % (existing_data, data))
@@ -1,6 +1,5 @@
1
1
  """Test Info Plugin for SeleniumBase tests that run with pynose / nosetests"""
2
2
  import os
3
- import codecs
4
3
  import time
5
4
  import traceback
6
5
  from nose.plugins import Plugin
@@ -26,7 +25,7 @@ class BasicTestInfo(Plugin):
26
25
  if not os.path.exists(test_logpath):
27
26
  os.makedirs(test_logpath)
28
27
  file_name = "%s/%s" % (test_logpath, self.logfile_name)
29
- basic_info_file = codecs.open(file_name, "w+", "utf-8")
28
+ basic_info_file = open(file_name, "w+", "utf-8")
30
29
  self.__log_test_error_data(basic_info_file, test, err, "Error")
31
30
  basic_info_file.close()
32
31
 
@@ -35,7 +34,7 @@ class BasicTestInfo(Plugin):
35
34
  if not os.path.exists(test_logpath):
36
35
  os.makedirs(test_logpath)
37
36
  file_name = "%s/%s" % (test_logpath, self.logfile_name)
38
- basic_info_file = codecs.open(file_name, "w+", "utf-8")
37
+ basic_info_file = open(file_name, "w+", "utf-8")
39
38
  self.__log_test_error_data(basic_info_file, test, err, "Error")
40
39
  basic_info_file.close()
41
40
 
@@ -1,6 +1,5 @@
1
1
  """PageSource Plugin for SeleniumBase tests that run with pynose / nosetests"""
2
2
  import os
3
- import codecs
4
3
  from nose.plugins import Plugin
5
4
  from seleniumbase.config import settings
6
5
  from seleniumbase.core import log_helper
@@ -29,7 +28,7 @@ class PageSource(Plugin):
29
28
  if not os.path.exists(test_logpath):
30
29
  os.makedirs(test_logpath)
31
30
  html_file_name = os.path.join(test_logpath, self.logfile_name)
32
- html_file = codecs.open(html_file_name, "w+", "utf-8")
31
+ html_file = open(html_file_name, "w+", "utf-8")
33
32
  rendered_source = log_helper.get_html_source_with_base_href(
34
33
  test.driver, page_source
35
34
  )
@@ -45,7 +44,7 @@ class PageSource(Plugin):
45
44
  if not os.path.exists(test_logpath):
46
45
  os.makedirs(test_logpath)
47
46
  html_file_name = os.path.join(test_logpath, self.logfile_name)
48
- html_file = codecs.open(html_file_name, "w+", "utf-8")
47
+ html_file = open(html_file_name, "w+", "utf-8")
49
48
  rendered_source = log_helper.get_html_source_with_base_href(
50
49
  test.driver, page_source
51
50
  )
@@ -1898,7 +1898,6 @@ def _get_test_ids_(the_item):
1898
1898
 
1899
1899
 
1900
1900
  def _create_dashboard_assets_():
1901
- import codecs
1902
1901
  from seleniumbase.js_code.live_js import live_js
1903
1902
  from seleniumbase.core.style_sheet import get_pytest_style
1904
1903
 
@@ -1916,7 +1915,7 @@ def _create_dashboard_assets_():
1916
1915
  if existing_pytest_style == get_pytest_style():
1917
1916
  add_pytest_style_css = False
1918
1917
  if add_pytest_style_css:
1919
- out_file = codecs.open(pytest_style_css, "w+", encoding="utf-8")
1918
+ out_file = open(pytest_style_css, "w+", encoding="utf-8")
1920
1919
  out_file.writelines(get_pytest_style())
1921
1920
  out_file.close()
1922
1921
  live_js_file = os.path.join(assets_folder, "live.js")
@@ -1928,7 +1927,7 @@ def _create_dashboard_assets_():
1928
1927
  if existing_live_js == live_js:
1929
1928
  add_live_js_file = False
1930
1929
  if add_live_js_file:
1931
- out_file = codecs.open(live_js_file, "w+", encoding="utf-8")
1930
+ out_file = open(live_js_file, "w+", encoding="utf-8")
1932
1931
  out_file.writelines(live_js)
1933
1932
  out_file.close()
1934
1933
 
@@ -27,7 +27,6 @@ Output:
27
27
  (Example: Translating "test_1.py" into Japanese with
28
28
  "-c" will create a new file called "test_1_ja.py".)
29
29
  """
30
- import codecs
31
30
  import colorama
32
31
  import os
33
32
  import re
@@ -1043,7 +1042,7 @@ def main():
1043
1042
  pass # Print-only run already done
1044
1043
 
1045
1044
  if new_file_name:
1046
- out_file = codecs.open(new_file_name, "w+", encoding="utf-8")
1045
+ out_file = open(new_file_name, "w+", encoding="utf-8")
1047
1046
  out_file.writelines("\r\n".join(seleniumbase_lines))
1048
1047
  out_file.close()
1049
1048
  results_saved = (
@@ -369,7 +369,8 @@ class Browser:
369
369
  proxy_user = username_and_password.split(":")[0]
370
370
  proxy_pass = username_and_password.split(":")[1]
371
371
  await connection.set_auth(proxy_user, proxy_pass, self.tabs[0])
372
- time.sleep(0.25)
372
+ time.sleep(0.22)
373
+ await connection.sleep(0.05)
373
374
  frame_id, loader_id, *_ = await connection.send(
374
375
  cdp.page.navigate(url)
375
376
  )
@@ -520,8 +520,6 @@ class Connection(metaclass=CantTouchThis):
520
520
  except BaseException:
521
521
  logger.debug("NOT GOOD", exc_info=True)
522
522
  continue
523
- finally:
524
- continue
525
523
  for ed in enabled_domains:
526
524
  # Items still present at this point are unused and need removal.
527
525
  self.enabled_domains.remove(ed)
@@ -1,4 +1,3 @@
1
- import codecs
2
1
  import os
3
2
  import subprocess
4
3
  import sys
@@ -78,7 +77,7 @@ def main():
78
77
  data = []
79
78
  data.append(verbose)
80
79
  file_path = os.path.join(dir_path, "verbose_hub_server.dat")
81
- file = codecs.open(file_path, "w+", "utf-8")
80
+ file = open(file_path, "w+", "utf-8")
82
81
  file.writelines("\r\n".join(data))
83
82
  file.close()
84
83
 
@@ -1,4 +1,3 @@
1
- import codecs
2
1
  import os
3
2
  import subprocess
4
3
  import sys
@@ -88,14 +87,14 @@ def main():
88
87
  data = []
89
88
  data.append(server_ip)
90
89
  file_path = os.path.join(dir_path, "ip_of_grid_hub.dat")
91
- file = codecs.open(file_path, "w+", "utf-8")
90
+ file = open(file_path, "w+", "utf-8")
92
91
  file.writelines("\r\n".join(data))
93
92
  file.close()
94
93
 
95
94
  data = []
96
95
  data.append(verbose)
97
96
  file_path = os.path.join(dir_path, "verbose_node_server.dat")
98
- file = codecs.open(file_path, "w+", "utf-8")
97
+ file = open(file_path, "w+", "utf-8")
99
98
  file.writelines("\r\n".join(data))
100
99
  file.close()
101
100
 
@@ -8,7 +8,6 @@ Usage:
8
8
  Output:
9
9
  [NEW_FILE_SB].py (adds "_SB" to the original file name)
10
10
  (the original file is kept intact)"""
11
- import codecs
12
11
  import re
13
12
  import sys
14
13
  from seleniumbase.fixtures import js_utils
@@ -894,7 +893,7 @@ def main():
894
893
  # Create SeleniumBase test file
895
894
  base_file_name = webdriver_python_file.split(".py")[0]
896
895
  converted_file_name = base_file_name + "_SB.py"
897
- out_file = codecs.open(converted_file_name, "w+", encoding="utf-8")
896
+ out_file = open(converted_file_name, "w+", encoding="utf-8")
898
897
  out_file.writelines(seleniumbase_code)
899
898
  out_file.close()
900
899
  print(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.42.6
3
+ Version: 4.43.1
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
@@ -113,12 +113,13 @@ Requires-Dist: websocket-client~=1.8.0; python_version < "3.9"
113
113
  Requires-Dist: websocket-client~=1.9.0; python_version >= "3.9"
114
114
  Requires-Dist: selenium==4.27.1; python_version < "3.9"
115
115
  Requires-Dist: selenium==4.32.0; python_version >= "3.9" and python_version < "3.10"
116
- Requires-Dist: selenium==4.36.0; python_version >= "3.10"
116
+ Requires-Dist: selenium==4.37.0; python_version >= "3.10"
117
117
  Requires-Dist: cssselect==1.2.0; python_version < "3.9"
118
118
  Requires-Dist: cssselect==1.3.0; python_version >= "3.9"
119
119
  Requires-Dist: sortedcontainers==2.4.0
120
120
  Requires-Dist: execnet==2.1.1
121
- Requires-Dist: iniconfig==2.1.0
121
+ Requires-Dist: iniconfig==2.1.0; python_version < "3.10"
122
+ Requires-Dist: iniconfig==2.3.0; python_version >= "3.10"
122
123
  Requires-Dist: pluggy==1.5.0; python_version < "3.9"
123
124
  Requires-Dist: pluggy==1.6.0; python_version >= "3.9"
124
125
  Requires-Dist: pytest==8.3.5; python_version < "3.9"
@@ -171,7 +172,7 @@ Provides-Extra: pdfminer
171
172
  Requires-Dist: pdfminer.six==20250324; python_version < "3.9" and extra == "pdfminer"
172
173
  Requires-Dist: pdfminer.six==20250506; python_version >= "3.9" and extra == "pdfminer"
173
174
  Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
174
- Requires-Dist: cryptography==46.0.2; python_version >= "3.9" and extra == "pdfminer"
175
+ Requires-Dist: cryptography==46.0.3; python_version >= "3.9" and extra == "pdfminer"
175
176
  Requires-Dist: cffi==1.17.1; python_version < "3.9" and extra == "pdfminer"
176
177
  Requires-Dist: cffi==2.0.0; python_version >= "3.9" and extra == "pdfminer"
177
178
  Requires-Dist: pycparser==2.22; python_version < "3.9" and extra == "pdfminer"
@@ -229,9 +230,10 @@ Dynamic: summary
229
230
 
230
231
  <p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" alt="SeleniumBase" title="SeleniumBase" width="350" /></a></p>
231
232
 
232
- <p align="center" class="hero__title"><b>All-in-one Browser Automation Framework:<br />Web Crawling / Testing / Scraping / Stealth</b></p>
233
+ <p align="center" class="hero__title"><b>Automate, test, and scrape the web on your own terms.<br /></b></p>
233
234
 
234
- <p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/releases" target="_blank"><img src="https://img.shields.io/github/v/release/seleniumbase/SeleniumBase.svg?color=22AAEE" alt="GitHub version" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/CI%20build/badge.svg" alt="SeleniumBase GitHub Actions" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank"><img src="https://img.shields.io/discord/727927627830001734?color=7289DA&label=Discord&logo=discord&logoColor=white"/></a></p>
235
+ <p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/releases" target="_blank"><img src="https://img.shields.io/github/v/release/seleniumbase/SeleniumBase.svg?color=22AAEE" alt="GitHub version" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a></p>
236
+ <p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/CI%20build/badge.svg" alt="SeleniumBase GitHub Actions" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/stargazers"><img src="https://img.shields.io/github/stars/seleniumbase/SeleniumBase?style=social"></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank"><img src="https://img.shields.io/discord/727927627830001734?color=7289DA&label=Discord&logo=discord&logoColor=white"/></a></p>
235
237
 
236
238
  <p align="center">
237
239
  <a href="#python_installation">🚀 Start</a> |
@@ -271,7 +273,7 @@ Dynamic: summary
271
273
  <br />
272
274
  </p>
273
275
 
274
- <p>SeleniumBase is used for automating browsers, testing websites, scraping data, and bypassing CAPTCHAs.</p>
276
+ <p>SeleniumBase is a browser automation framework for the modern web. Both new and experienced Python users alike can easily get started. With special stealth features like UC Mode and CDP Mode, you'll be evading bot-detection and bypassing CAPTCHAs in minutes.</p>
275
277
 
276
278
  --------
277
279
 
@@ -545,7 +547,6 @@ pip install seleniumbase
545
547
 
546
548
  * (Add ``--upgrade`` OR ``-U`` to upgrade SeleniumBase.)
547
549
  * (Add ``--force-reinstall`` to upgrade indirect packages.)
548
- * (Use ``pip3`` if multiple versions of Python are present.)
549
550
 
550
551
  🔵 **How to install ``seleniumbase`` from a GitHub clone:**
551
552
 
@@ -619,10 +620,10 @@ pip install -e .
619
620
  <summary> ▶️ Here's sample output from a chromedriver download. (<b>click to expand</b>)</summary>
620
621
 
621
622
  ```zsh
622
- *** chromedriver to download = 131.0.6778.108 (Latest Stable)
623
+ *** chromedriver to download = 141.0.7390.78 (Latest Stable)
623
624
 
624
625
  Downloading chromedriver-mac-arm64.zip from:
625
- https://storage.googleapis.com/chrome-for-testing-public/131.0.6778.108/mac-arm64/chromedriver-mac-arm64.zip ...
626
+ https://storage.googleapis.com/chrome-for-testing-public/141.0.7390.78/mac-arm64/chromedriver-mac-arm64.zip ...
626
627
  Download Complete!
627
628
 
628
629
  Extracting ['chromedriver'] from chromedriver-mac-arm64.zip ...
@@ -632,8 +633,8 @@ The file [chromedriver] was saved to:
632
633
  ~/github/SeleniumBase/seleniumbase/drivers/
633
634
  chromedriver
634
635
 
635
- Making [chromedriver 131.0.6778.108] executable ...
636
- [chromedriver 131.0.6778.108] is now ready for use!
636
+ Making [chromedriver 141.0.7390.78] executable ...
637
+ [chromedriver 141.0.7390.78] is now ready for use!
637
638
  ```
638
639
 
639
640
  </details>
@@ -3,10 +3,10 @@ sbase/__main__.py,sha256=G0bVB1-DM4PGwQ1KyOupaWCs4ePbChZNNWuX2htim5U,647
3
3
  sbase/steps.py,sha256=wiPSWZhFpBlWvkqXRJ18btpBu3nQaw9K5AzIJNAX5RM,43521
4
4
  seleniumbase/__init__.py,sha256=JFEY9P5QJqsa1M6ghzLMH2eIPQyh85iglCaQwg8Y8z4,2498
5
5
  seleniumbase/__main__.py,sha256=dn1p6dgCchmcH1zzTzzQvFwwdQQqnTGH6ULV9m4hv24,654
6
- seleniumbase/__version__.py,sha256=NduMJBypNeOGItaajvpq6CyjoWb3RO_0p6sVSx1E6ho,46
6
+ seleniumbase/__version__.py,sha256=vue7pKsHtqCUSzZs8f5kCHobDgr7w5rh8BZDiklGLak,46
7
7
  seleniumbase/behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  seleniumbase/behave/behave_helper.py,sha256=lJtagtivSbEpbRj0EKV4l4PuPU6NANONJJAnYwgVCe0,24379
9
- seleniumbase/behave/behave_sb.py,sha256=guLihFsr1uJ4v2AR3r3Vy_BTeHrHwy2JEJxhp-MVnZA,59872
9
+ seleniumbase/behave/behave_sb.py,sha256=0ouNKGmSJ-SxOvDO_lQs5JjB0zw34tyHDOmf6sN9z3Q,59840
10
10
  seleniumbase/behave/steps.py,sha256=8-N-NB2tnDsxaP4LSg-uSBgbwZYMS6ZEL1oggO1PCoU,390
11
11
  seleniumbase/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  seleniumbase/common/decorators.py,sha256=js9TmhMsEtI_-obumjVWtNwG6AfXT6J2vIpK1RFd1Ps,7968
@@ -23,20 +23,20 @@ seleniumbase/console_scripts/logo_helper.py,sha256=ZqS9TAwpcu5mM5ll-a0wTbXLs2Sbc
23
23
  seleniumbase/console_scripts/rich_helper.py,sha256=U_zvXpalxVV8rtg8c8EnNNmnh45tii3AV5ZV3O3KbGA,2234
24
24
  seleniumbase/console_scripts/run.py,sha256=scHfo8Zf6F7ABAGBiKHF-Vv7MOrB6qU75RRiywjDYEg,58672
25
25
  seleniumbase/console_scripts/sb_behave_gui.py,sha256=CX5dTIIptsaR1xLVy53DM6haV_mIc3kYALUkkhAkfRI,14888
26
- seleniumbase/console_scripts/sb_caseplans.py,sha256=C_vhATSa9dEDOSmHT9uk64ebkXcqM5uu8Y1S3LjATkc,17875
26
+ seleniumbase/console_scripts/sb_caseplans.py,sha256=D3tM4KyiX--9y6ztyOnA5KiAlkF9IpZXfiNhuM41WvQ,17847
27
27
  seleniumbase/console_scripts/sb_commander.py,sha256=Ejal4WhnMSTLcykCT04jmMuH_fvDrfIAoxoJ23LclAM,13084
28
28
  seleniumbase/console_scripts/sb_install.py,sha256=LosIv69jk2k6bNdcB1ozUjV0vZ4lWyUBr8xM2UpSz5g,56401
29
- seleniumbase/console_scripts/sb_mkchart.py,sha256=ep9g-9CSIwaOJKVxhB3xjRQpfsuApyN8-Dr129cNXwQ,10941
30
- seleniumbase/console_scripts/sb_mkdir.py,sha256=iFN6ZMOgmH_GAvEuvzYltWuYiS3PRFQcL5fJIj1yX_Y,30897
31
- seleniumbase/console_scripts/sb_mkfile.py,sha256=OWYd4yFccmjrd-gNn1t1una-HDRU2_N2-r4Tg3nHsj0,17744
32
- seleniumbase/console_scripts/sb_mkpres.py,sha256=EWFRVacjYTX49y-fEiYTZacM9_01IxuuaO4nMjHrIGo,11015
33
- seleniumbase/console_scripts/sb_mkrec.py,sha256=E268227Q75ZHP1rGFoIY_6i6FzGxD_kWmKm7QMntpW4,12012
34
- seleniumbase/console_scripts/sb_objectify.py,sha256=nGxtVGL_nHj0bLHvk86znV3EABsE2_tjF74lgto1_Mk,122020
29
+ seleniumbase/console_scripts/sb_mkchart.py,sha256=pVAjLYxA9p4PeB45qXCHN_n-dVe7WuvOSMlXeI8V_dk,10920
30
+ seleniumbase/console_scripts/sb_mkdir.py,sha256=r5shfCksiicsT4zb-5Xram9nvBsKgZISgoKTQra4G_Q,30559
31
+ seleniumbase/console_scripts/sb_mkfile.py,sha256=l6NkkUL1PxGKWOaa9en4Azovm6PrKfx-eoccSeklaLo,17723
32
+ seleniumbase/console_scripts/sb_mkpres.py,sha256=7uxW87W_9yVdyJh_f2CDIV3pm1PFtFrF1SwMkw2FyHc,10994
33
+ seleniumbase/console_scripts/sb_mkrec.py,sha256=R2RlIX2mcX8x3AAI3vcXz_9rANmql7WGmf74bTvtl94,11991
34
+ seleniumbase/console_scripts/sb_objectify.py,sha256=LMFEPO9xxREhNin1ardMTZ_QCgkrZzsy4Q-tZUsPljI,121992
35
35
  seleniumbase/console_scripts/sb_print.py,sha256=tNy-bMDgwHJO3bZxMpmo9weSE8uhbH0CUpP4VZqWxvI,30558
36
36
  seleniumbase/console_scripts/sb_recorder.py,sha256=DH-n2fN7N9qyHMl7wjtn8MiliBgfw-1kwgmfg1GUuhk,10772
37
37
  seleniumbase/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
38
  seleniumbase/core/application_manager.py,sha256=e_0sjtI8cjY5BNyZj1QBR0j6_oCScxGmSXYEpcYwuZE,576
39
- seleniumbase/core/browser_launcher.py,sha256=N9VF8BmQFtIs6NBOD6neVjueaEAmDfJlmCi5mvN1Prk,251017
39
+ seleniumbase/core/browser_launcher.py,sha256=tBsPVFvI1fruxUI9xSRZc9TGAfFL1cPHv3qxfJLWHXg,250991
40
40
  seleniumbase/core/capabilities_parser.py,sha256=meIS2uHapTCq2ldfNAToC7r0cKmZDRXuYNKExM1GHDY,6038
41
41
  seleniumbase/core/colored_traceback.py,sha256=DrRWfg7XEnKcgY59Xj7Jdk09H-XqHYBSUpB-DiZt6iY,2020
42
42
  seleniumbase/core/create_db_tables.sql,sha256=VWPtrdiW_HQ6yETHjqTu-VIrTwvd8I8o1NfBeaVSHpU,972
@@ -44,19 +44,19 @@ seleniumbase/core/detect_b_ver.py,sha256=pqL_OjsAutvQEsr5KbYTqoKkYP6dtnPSxLhsxlO
44
44
  seleniumbase/core/download_helper.py,sha256=qSR54kQISucF4RQaLCOuuerSu6DR41juGi_30HVvWYY,2943
45
45
  seleniumbase/core/encoded_images.py,sha256=rDKJ4cNJSuKiRcFViYU7bjyTS9_moI57gUPRXVg3u2k,14209
46
46
  seleniumbase/core/jqc_helper.py,sha256=2DDQr9Q2jSSZqFzX588jLlUM9oJvyrRWq2aORSIPUdI,10322
47
- seleniumbase/core/log_helper.py,sha256=JvB3FyOJJkVAP5RZXUuap468LIacqlO1UsqtEAVTfG4,23612
47
+ seleniumbase/core/log_helper.py,sha256=5PlUzsmRCr3vVk1Zmp4Nc5rWU7ZZ9Nmk-xwf780Oxu8,23577
48
48
  seleniumbase/core/mysql.py,sha256=X1McqBWCzN9DndyBbNrVg9_kvtaByVhodiXYkGbn36A,3955
49
49
  seleniumbase/core/proxy_helper.py,sha256=pZ1NboNfziHU3vWZLOZLX-qkfM3oKSnpc3omQf9EUQQ,8809
50
50
  seleniumbase/core/recorder_helper.py,sha256=gDION28OK4NAYsE-7ohKZ9Z3sxQQ0FEjf859LDpqsg4,25320
51
- seleniumbase/core/report_helper.py,sha256=AIl6Qava2yW1uSzbLpJBlPlYDz0KE-rVhogh8hsGWBo,12201
51
+ seleniumbase/core/report_helper.py,sha256=Zp_B1bG3OPhGp9qqtDTdCLMjOnOehToBzogCCwzzd0g,12180
52
52
  seleniumbase/core/s3_manager.py,sha256=z_4qx2jI_gtK5r3niGXgEOBpfMUicUCOciowai50MP4,3529
53
- seleniumbase/core/sb_cdp.py,sha256=Vs0rQCY294R7TAZzxuwa-MhAFUjm-BTkICA4IkhKJJo,108825
53
+ seleniumbase/core/sb_cdp.py,sha256=KtR8uPl4Z8tcCkpiMBD8kPZaWXEmbtD26TCpJwV1KdU,107814
54
54
  seleniumbase/core/sb_driver.py,sha256=-IQsskc7HpXQbcBL04IPjmGpyYchyo7v9OPF2WcahDw,14159
55
55
  seleniumbase/core/session_helper.py,sha256=s9zD3PVZEWVzG2h81cCUskbNWLfdjC_LwwQjKptHCak,558
56
56
  seleniumbase/core/settings_parser.py,sha256=gqVohHVlE_5L5Cqe2L24uYrRzvoK-saX8E_Df7_-_3I,7609
57
57
  seleniumbase/core/style_sheet.py,sha256=5qYN5GLk4gkwg7nqp3h0XH5YXRijANzKDuEdalzccuw,11714
58
58
  seleniumbase/core/testcase_manager.py,sha256=TblCfo8Zfap1Bayip-qTu9gqT-KALSwXAX4awBpnEHg,4633
59
- seleniumbase/core/tour_helper.py,sha256=kj2cz-DGKlw9SX3tWnVp-snpk6Flvqj81-xmKdKDtg0,42555
59
+ seleniumbase/core/tour_helper.py,sha256=FDFuqiXqDPU2FfjJlA59jS9GJDp5x257Sv6dtVkKNgo,42530
60
60
  seleniumbase/core/visual_helper.py,sha256=HxPOulfEebc9ZSwe7E-nSQJ12N2l4vhqUQubLvE2QQw,3227
61
61
  seleniumbase/drivers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
62
  seleniumbase/drivers/cft_drivers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -67,13 +67,13 @@ seleniumbase/extensions/disable_csp.zip,sha256=5RvomXnm2PdivUVcxTV6jfvD8WhTEsQYH
67
67
  seleniumbase/extensions/recorder.zip,sha256=JEE_FVEvlS63cFQbVLEroIyPSS91nWCDL0MhjVrmIpk,11813
68
68
  seleniumbase/extensions/sbase_ext.zip,sha256=3s1N8zrVaMz8RQEOIoBzC3KDjtmHwVZRvVsX25Odr_s,8175
69
69
  seleniumbase/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
- seleniumbase/fixtures/base_case.py,sha256=cTzBh-ndkowdmtrAtgJ7xgwyZUIonYDTBS6dS6R6yA0,741333
70
+ seleniumbase/fixtures/base_case.py,sha256=NbQNMpYCLDNLz3OMBh8eKRu0SHhAKD1Kvci-ZrvZbEw,741284
71
71
  seleniumbase/fixtures/constants.py,sha256=WMrItuNyKq3XVJ64NluLIRc4gJCxDw8K8qXED0b9S2w,13752
72
72
  seleniumbase/fixtures/css_to_xpath.py,sha256=9ouDB1xl4MJ2os6JOgTIAyHKOQfuxtxvXC3O5hSnEKA,1954
73
73
  seleniumbase/fixtures/errors.py,sha256=KyxuEVx_e3MPhVrJfNIa_3ltMpbCFxfy_jxK8RFNTns,555
74
74
  seleniumbase/fixtures/js_utils.py,sha256=waXwlyMx7-rIFI8mJ_R8cL_mvih_gXlcJ_wT5h38HbI,52517
75
- seleniumbase/fixtures/page_actions.py,sha256=DvT0CzqFnpFGLfvmDk7zZ2XMcX_RxLYhNX6Nxxj4rRo,73213
76
- seleniumbase/fixtures/page_utils.py,sha256=H1iV8f9vDyEy87DBntyiBXC_tg8HskcebUOAJVn0hxE,12160
75
+ seleniumbase/fixtures/page_actions.py,sha256=QV5VPNoa8djy7CpThtqk5c2rKBqNPscFJRIpaLE_3no,73192
76
+ seleniumbase/fixtures/page_utils.py,sha256=2Mk7WCw659KRh-403teniQtpAHm2Nk0408LEIilZ9g4,12132
77
77
  seleniumbase/fixtures/shared_utils.py,sha256=kn0rcF0tEkQkiT8RGVooNFsLnVWmdPeTH9PfIm86TOI,10527
78
78
  seleniumbase/fixtures/unittest_helper.py,sha256=sfZ92rZeBAn_sF_yQ3I6_I7h3lyU5-cV_UMegBNoEm8,1294
79
79
  seleniumbase/fixtures/words.py,sha256=FOA4mAYvl3EPVpBTvgvK6YwCL8BdlRCmed685kEe7Vg,7827
@@ -86,11 +86,11 @@ seleniumbase/masterqa/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
86
86
  seleniumbase/masterqa/master_qa.py,sha256=jLWmAx32Rnu1IhmvrRt8BbsUIcDW5xYj2ouVozny-Y4,19258
87
87
  seleniumbase/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
88
  seleniumbase/plugins/base_plugin.py,sha256=ItLgtaZmu_363iycy8BNX0Do5LyIWGiTMLW6krXM-WQ,14748
89
- seleniumbase/plugins/basic_test_info.py,sha256=8ov6n417gPbqqvrlT4zrch7l2XcRt-GF2ny6rR9AMWk,2108
89
+ seleniumbase/plugins/basic_test_info.py,sha256=jsUCnCxIJmBSGmfCRe9-vViRQUSgRaviShbXwOYozgw,2080
90
90
  seleniumbase/plugins/db_reporting_plugin.py,sha256=En09qUCoojrk9-vbcnsoHdSELoGmag2GDIyu3jTiJas,7331
91
91
  seleniumbase/plugins/driver_manager.py,sha256=VSYQgDDA2t34gi-3qPkw5Ef9SX8sVQX3RETHOihyKHc,36558
92
- seleniumbase/plugins/page_source.py,sha256=loTnXxOj4kxEukuTZEiGyvKBhY3KDVDMnNlHHheTBDE,1889
93
- seleniumbase/plugins/pytest_plugin.py,sha256=vg2Xpn5kMMQgui5doVG1kCzCCES1WHeig4X80Kq45HY,108933
92
+ seleniumbase/plugins/page_source.py,sha256=xOJoVVZJuzTCI1IAg7L_zXh2PZNb_bT7iTpMcw-XmoU,1861
93
+ seleniumbase/plugins/pytest_plugin.py,sha256=h87fbcyuHa_7CT4yvbKCN5BqTWkcRp9vhorQRZHh1aM,108901
94
94
  seleniumbase/plugins/s3_logging_plugin.py,sha256=WDfertQgGOW_SRJpFMaekYD6vBVW9VO62POtXXy2HCM,2319
95
95
  seleniumbase/plugins/sb_manager.py,sha256=ulTDorccan06eVYtSqlX26EFKXmS0gCY0huJ67Q5gTY,58082
96
96
  seleniumbase/plugins/screen_shots.py,sha256=1hrXw-hzuZ1BR6Yh7AyWX2ABnvnP73-RCbwdz958gj4,1127
@@ -107,7 +107,7 @@ seleniumbase/translate/master_dict.py,sha256=LJxFoQN7qZ32Dp9dtcM5DymtAJw5ycfJsJH
107
107
  seleniumbase/translate/portuguese.py,sha256=x3P4qxp56UiI41GoaL7JbUvFRYsgXU1EKjTgrt2GFtM,25369
108
108
  seleniumbase/translate/russian.py,sha256=TyN9n0b4GRWDEYnHRGw1rfNAscdDmP3F3Y3aySM3C7s,27978
109
109
  seleniumbase/translate/spanish.py,sha256=hh3xgW1Pq122SHYVvJAxFaXhFrjniOVncVbJbfWqOUM,25528
110
- seleniumbase/translate/translator.py,sha256=wPhZH6e5NhmebYL1kP2eGxUcVy1gfTb6XCH8ATEPpxE,49238
110
+ seleniumbase/translate/translator.py,sha256=bvX4ZEGc-8Ew5cQcrmwlux-Z6xN_BLqaNmSZhkhToG4,49217
111
111
  seleniumbase/undetected/__init__.py,sha256=x744Ug70_-rd31TT7SI49T6Af0C2Ne_SbzF8XKPB8zw,27065
112
112
  seleniumbase/undetected/cdp.py,sha256=G6nLStm1l8PmZlKIyMnFcYMV7HD5kiGb-9BaqPjVP3I,5497
113
113
  seleniumbase/undetected/dprocess.py,sha256=83EV8ZHJWHG1TSUv9JNClBhdgiBXlkCc6mJ--HsoP3k,1681
@@ -117,10 +117,10 @@ seleniumbase/undetected/reactor.py,sha256=NropaXcO54pzmDq6quR27qPJxab6636H7LRAaq
117
117
  seleniumbase/undetected/webelement.py,sha256=OOpUYbEiOG52KsYYyuDW9tYLdA2SMnukvwQHUdPVn9E,1389
118
118
  seleniumbase/undetected/cdp_driver/__init__.py,sha256=Ga9alwuaZZy4_XOShc0HjgFnNqpPdrcbjAicz5gE7a4,215
119
119
  seleniumbase/undetected/cdp_driver/_contradict.py,sha256=lP4b0h5quAy573ETn_TBbYV889cL1AuPLVInpJ0ZkiU,3183
120
- seleniumbase/undetected/cdp_driver/browser.py,sha256=JQlwMuwZgK0vWlvH4SU6DA7LcZo2I4hJRUIcv4gbZCQ,35609
120
+ seleniumbase/undetected/cdp_driver/browser.py,sha256=AQI6uWVyhv7VEnx0CE3V9MeoUa-VDilFPytnQile31Y,35651
121
121
  seleniumbase/undetected/cdp_driver/cdp_util.py,sha256=XpzaUAbTL-4IciQ984x9QvA9HgYFzRlYrRv94fIfbpM,33918
122
122
  seleniumbase/undetected/cdp_driver/config.py,sha256=B5Wf0E5xvCmIuLO_Y06oyKYd04yM2auj--JyGKUKsls,13630
123
- seleniumbase/undetected/cdp_driver/connection.py,sha256=WgZ4QamXSdTzP4Xfgkn8mxv-JFivMG6hqbyHy2_LQlg,25717
123
+ seleniumbase/undetected/cdp_driver/connection.py,sha256=i_2JqJ53fA5lGUSp8EbJ-R61hw0Z_-2N5TzD7ZVPqow,25661
124
124
  seleniumbase/undetected/cdp_driver/element.py,sha256=FIC6v7OmumLCT-_vIc3H4oju_oBbaLpWJUJIKm2c_q4,40467
125
125
  seleniumbase/undetected/cdp_driver/tab.py,sha256=t7Ucn0pmm7imwdCM-5KmIJNU2MCeMuIl6G3T2VMrbxU,53170
126
126
  seleniumbase/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -129,17 +129,17 @@ seleniumbase/utilities/selenium_grid/download_selenium_server.py,sha256=ZdoInIbh
129
129
  seleniumbase/utilities/selenium_grid/font_color,sha256=NLVgBzkyygZjIf_hZWpMUlO5kHIUWG7ZWyoLhaLUCgY,468
130
130
  seleniumbase/utilities/selenium_grid/grid-hub,sha256=v7z2qYzHk4pZ_I794rS6xTfyw_TVIrUHxNDwsbUPbtw,3021
131
131
  seleniumbase/utilities/selenium_grid/grid-node,sha256=B3lHB81pVpn5j99cvB_Tzktykf-ZcGX6jFl0Wb-e9Vw,3186
132
- seleniumbase/utilities/selenium_grid/grid_hub.py,sha256=0bVRg2SkIDGw_giudA1aPExkzprHo0Ql0Zqy1RMCmfY,5067
133
- seleniumbase/utilities/selenium_grid/grid_node.py,sha256=aPvhmbmST3A0jtI5pYDOakdXf5Wl7JW66ppxbJwlms4,5488
132
+ seleniumbase/utilities/selenium_grid/grid_hub.py,sha256=Ol2E0vmHSMWqGD6RfBbl6fkai3flybNQBYZOOuBredc,5046
133
+ seleniumbase/utilities/selenium_grid/grid_node.py,sha256=1eZlv6qXP-7WnUc1JQvyNx0bnl5fIxDLaNUWGmT7kAI,5460
134
134
  seleniumbase/utilities/selenium_grid/register-grid-node.bat,sha256=d-PTBiMXyRAsJQ7f86BSV6ThyYvL7EL-RTSgGVHWL70,263
135
135
  seleniumbase/utilities/selenium_grid/register-grid-node.sh,sha256=TJE3VkkpXsR3GsBtULIRhsAPuW9LJlglKAHJ-QHkK3c,275
136
136
  seleniumbase/utilities/selenium_grid/start-grid-hub.bat,sha256=Ftq-GrAKRYH2ssDPrI3F0tw3EB4BZ4oGplOObX9cuTA,94
137
137
  seleniumbase/utilities/selenium_grid/start-grid-hub.sh,sha256=KADv0RUHONLL2_I443QFK8PryBpDmKn5Gy0s4o0vDSM,106
138
138
  seleniumbase/utilities/selenium_ide/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
- seleniumbase/utilities/selenium_ide/convert_ide.py,sha256=pZFnqEJQEKZPyNFjkLD29s2HPQgCrWW9XJWpCPhWOoM,31691
140
- seleniumbase-4.42.6.dist-info/licenses/LICENSE,sha256=BRblZsX7HyPUjQmYTiyWr_e9tzWvmR3R4SFclM2R3W0,1085
141
- seleniumbase-4.42.6.dist-info/METADATA,sha256=n-eDmroQcKl5RS_f7yGQQg4lljQm7ncUPdUN8Fedj24,89717
142
- seleniumbase-4.42.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
143
- seleniumbase-4.42.6.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
144
- seleniumbase-4.42.6.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
145
- seleniumbase-4.42.6.dist-info/RECORD,,
139
+ seleniumbase/utilities/selenium_ide/convert_ide.py,sha256=UQR4DHlaaEiOzeVniZ6BzmdaTdhpE85rJHRWpB1PHok,31670
140
+ seleniumbase-4.43.1.dist-info/licenses/LICENSE,sha256=BRblZsX7HyPUjQmYTiyWr_e9tzWvmR3R4SFclM2R3W0,1085
141
+ seleniumbase-4.43.1.dist-info/METADATA,sha256=twtmOmzf-WvXgjwu_VyCfzO3_hZDNbZWrCPlfxYNbJo,90312
142
+ seleniumbase-4.43.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
143
+ seleniumbase-4.43.1.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
144
+ seleniumbase-4.43.1.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
145
+ seleniumbase-4.43.1.dist-info/RECORD,,