seleniumbase 4.35.3__tar.gz → 4.35.5__tar.gz

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.
Files changed (155) hide show
  1. {seleniumbase-4.35.3/seleniumbase.egg-info → seleniumbase-4.35.5}/PKG-INFO +3 -3
  2. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/requirements.txt +2 -2
  3. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/__version__.py +1 -1
  4. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/browser_launcher.py +39 -2
  5. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/sb_cdp.py +11 -1
  6. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/fixtures/base_case.py +4 -1
  7. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/plugins/driver_manager.py +17 -0
  8. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/plugins/sb_manager.py +17 -0
  9. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/undetected/__init__.py +1 -0
  10. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/undetected/cdp_driver/browser.py +1 -1
  11. {seleniumbase-4.35.3 → seleniumbase-4.35.5/seleniumbase.egg-info}/PKG-INFO +3 -3
  12. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase.egg-info/requires.txt +2 -2
  13. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/setup.py +2 -2
  14. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/.gitignore +0 -0
  15. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/LICENSE +0 -0
  16. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/MANIFEST.in +0 -0
  17. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/README.md +0 -0
  18. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/install.sh +0 -0
  19. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/pyproject.toml +0 -0
  20. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/pytest.ini +0 -0
  21. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/sbase/__init__.py +0 -0
  22. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/sbase/__main__.py +0 -0
  23. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/sbase/steps.py +0 -0
  24. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/__init__.py +0 -0
  25. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/__main__.py +0 -0
  26. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/behave/__init__.py +0 -0
  27. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/behave/behave_helper.py +0 -0
  28. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/behave/behave_sb.py +0 -0
  29. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/behave/steps.py +0 -0
  30. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/common/__init__.py +0 -0
  31. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/common/decorators.py +0 -0
  32. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/common/encryption.py +0 -0
  33. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/common/exceptions.py +0 -0
  34. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/common/obfuscate.py +0 -0
  35. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/common/unobfuscate.py +0 -0
  36. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/config/__init__.py +0 -0
  37. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/config/ad_block_list.py +0 -0
  38. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/config/proxy_list.py +0 -0
  39. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/config/settings.py +0 -0
  40. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/__init__.py +0 -0
  41. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/logo_helper.py +0 -0
  42. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/rich_helper.py +0 -0
  43. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/run.py +0 -0
  44. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  45. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  46. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/sb_commander.py +0 -0
  47. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/sb_install.py +0 -0
  48. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  49. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  50. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  51. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  52. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  53. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  54. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/sb_print.py +0 -0
  55. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  56. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/__init__.py +0 -0
  57. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/application_manager.py +0 -0
  58. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/capabilities_parser.py +0 -0
  59. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/colored_traceback.py +0 -0
  60. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/create_db_tables.sql +0 -0
  61. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/detect_b_ver.py +0 -0
  62. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/download_helper.py +0 -0
  63. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/encoded_images.py +0 -0
  64. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/jqc_helper.py +0 -0
  65. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/log_helper.py +0 -0
  66. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/mysql.py +0 -0
  67. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/proxy_helper.py +0 -0
  68. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/recorder_helper.py +0 -0
  69. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/report_helper.py +0 -0
  70. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/s3_manager.py +0 -0
  71. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/sb_driver.py +0 -0
  72. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/session_helper.py +0 -0
  73. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/settings_parser.py +0 -0
  74. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/style_sheet.py +0 -0
  75. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/testcase_manager.py +0 -0
  76. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/tour_helper.py +0 -0
  77. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/core/visual_helper.py +0 -0
  78. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/drivers/__init__.py +0 -0
  79. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/extensions/__init__.py +0 -0
  80. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/extensions/ad_block.zip +0 -0
  81. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/extensions/disable_csp.zip +0 -0
  82. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/extensions/recorder.zip +0 -0
  83. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/extensions/sbase_ext.zip +0 -0
  84. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/fixtures/__init__.py +0 -0
  85. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/fixtures/constants.py +0 -0
  86. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  87. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/fixtures/errors.py +0 -0
  88. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/fixtures/js_utils.py +0 -0
  89. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/fixtures/page_actions.py +0 -0
  90. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/fixtures/page_utils.py +0 -0
  91. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/fixtures/shared_utils.py +0 -0
  92. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/fixtures/unittest_helper.py +0 -0
  93. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/fixtures/words.py +0 -0
  94. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  95. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/js_code/__init__.py +0 -0
  96. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/js_code/active_css_js.py +0 -0
  97. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/js_code/live_js.py +0 -0
  98. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/js_code/recorder_js.py +0 -0
  99. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/masterqa/__init__.py +0 -0
  100. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/masterqa/master_qa.py +0 -0
  101. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/plugins/__init__.py +0 -0
  102. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/plugins/base_plugin.py +0 -0
  103. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/plugins/basic_test_info.py +0 -0
  104. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  105. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/plugins/page_source.py +0 -0
  106. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/plugins/pytest_plugin.py +0 -0
  107. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  108. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/plugins/screen_shots.py +0 -0
  109. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/plugins/selenium_plugin.py +0 -0
  110. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/resources/__init__.py +0 -0
  111. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/translate/__init__.py +0 -0
  112. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/translate/chinese.py +0 -0
  113. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/translate/dutch.py +0 -0
  114. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/translate/french.py +0 -0
  115. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/translate/italian.py +0 -0
  116. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/translate/japanese.py +0 -0
  117. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/translate/korean.py +0 -0
  118. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/translate/master_dict.py +0 -0
  119. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/translate/portuguese.py +0 -0
  120. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/translate/russian.py +0 -0
  121. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/translate/spanish.py +0 -0
  122. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/translate/translator.py +0 -0
  123. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/undetected/cdp.py +0 -0
  124. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  125. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  126. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
  127. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  128. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
  129. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  130. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  131. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/undetected/dprocess.py +0 -0
  132. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/undetected/options.py +0 -0
  133. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/undetected/patcher.py +0 -0
  134. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/undetected/reactor.py +0 -0
  135. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/undetected/webelement.py +0 -0
  136. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/utilities/__init__.py +0 -0
  137. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  138. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  139. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  140. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  141. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  142. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  143. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  144. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  145. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  146. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  147. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  148. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  149. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  150. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase.egg-info/SOURCES.txt +0 -0
  151. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase.egg-info/dependency_links.txt +0 -0
  152. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase.egg-info/entry_points.txt +0 -0
  153. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/seleniumbase.egg-info/top_level.txt +0 -0
  154. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/setup.cfg +0 -0
  155. {seleniumbase-4.35.3 → seleniumbase-4.35.5}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: seleniumbase
3
- Version: 4.35.3
3
+ Version: 4.35.5
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
@@ -68,7 +68,7 @@ Requires-Dist: attrs>=25.1.0
68
68
  Requires-Dist: certifi>=2025.1.31
69
69
  Requires-Dist: exceptiongroup>=1.2.2
70
70
  Requires-Dist: websockets~=13.1; python_version < "3.9"
71
- Requires-Dist: websockets>=15.0; python_version >= "3.9"
71
+ Requires-Dist: websockets>=15.0.1; python_version >= "3.9"
72
72
  Requires-Dist: filelock~=3.16.1; python_version < "3.9"
73
73
  Requires-Dist: filelock>=3.17.0; python_version >= "3.9"
74
74
  Requires-Dist: fasteners>=0.19
@@ -79,7 +79,7 @@ Requires-Dist: typing-extensions>=4.12.2
79
79
  Requires-Dist: sbvirtualdisplay>=1.4.0
80
80
  Requires-Dist: MarkupSafe==2.1.5; python_version < "3.9"
81
81
  Requires-Dist: MarkupSafe>=3.0.2; python_version >= "3.9"
82
- Requires-Dist: Jinja2>=3.1.5
82
+ Requires-Dist: Jinja2>=3.1.6
83
83
  Requires-Dist: six>=1.17.0
84
84
  Requires-Dist: parse>=1.20.2
85
85
  Requires-Dist: parse-type>=0.6.4
@@ -7,7 +7,7 @@ attrs>=25.1.0
7
7
  certifi>=2025.1.31
8
8
  exceptiongroup>=1.2.2
9
9
  websockets~=13.1;python_version<"3.9"
10
- websockets>=15.0;python_version>="3.9"
10
+ websockets>=15.0.1;python_version>="3.9"
11
11
  filelock~=3.16.1;python_version<"3.9"
12
12
  filelock>=3.17.0;python_version>="3.9"
13
13
  fasteners>=0.19
@@ -18,7 +18,7 @@ typing-extensions>=4.12.2
18
18
  sbvirtualdisplay>=1.4.0
19
19
  MarkupSafe==2.1.5;python_version<"3.9"
20
20
  MarkupSafe>=3.0.2;python_version>="3.9"
21
- Jinja2>=3.1.5
21
+ Jinja2>=3.1.6
22
22
  six>=1.17.0
23
23
  parse>=1.20.2
24
24
  parse-type>=0.6.4
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.35.3"
2
+ __version__ = "4.35.5"
@@ -682,8 +682,10 @@ def uc_open_with_cdp_mode(driver, url=None):
682
682
  cdp.gui_hover_element = CDPM.gui_hover_element
683
683
  cdp.gui_hover_and_click = CDPM.gui_hover_and_click
684
684
  cdp.internalize_links = CDPM.internalize_links
685
+ cdp.open_new_window = CDPM.open_new_window
685
686
  cdp.switch_to_window = CDPM.switch_to_window
686
687
  cdp.switch_to_newest_window = CDPM.switch_to_newest_window
688
+ cdp.open_new_tab = CDPM.open_new_tab
687
689
  cdp.switch_to_tab = CDPM.switch_to_tab
688
690
  cdp.switch_to_newest_tab = CDPM.switch_to_newest_tab
689
691
  cdp.close_active_tab = CDPM.close_active_tab
@@ -1286,6 +1288,13 @@ def _uc_gui_click_captcha(
1286
1288
  and driver.is_element_present("form div:not(:has(*))")
1287
1289
  ):
1288
1290
  frame = "form div:not(:has(*))"
1291
+ elif (
1292
+ driver.is_element_present('[src*="/turnstile/"]')
1293
+ and driver.is_element_present(
1294
+ "body > div#check > div:not([class])"
1295
+ )
1296
+ ):
1297
+ frame = "body > div#check > div:not([class])"
1289
1298
  elif driver.is_element_present(".cf-turnstile-wrapper"):
1290
1299
  frame = ".cf-turnstile-wrapper"
1291
1300
  elif driver.is_element_present(
@@ -1317,15 +1326,36 @@ def _uc_gui_click_captcha(
1317
1326
  driver.cdp.evaluate(script)
1318
1327
  else:
1319
1328
  driver.execute_script(script)
1329
+ elif (
1330
+ driver.is_element_present("form")
1331
+ and (
1332
+ driver.is_element_present('form div[style*="center"]')
1333
+ or driver.is_element_present('form div[style*="right"]')
1334
+ )
1335
+ ):
1336
+ script = (
1337
+ """var $elements = document.querySelectorAll(
1338
+ 'form[style], form div[style]');
1339
+ var index = 0, length = $elements.length;
1340
+ for(; index < length; index++){
1341
+ the_style = $elements[index].getAttribute('style');
1342
+ new_style = the_style.replaceAll('center', 'left');
1343
+ new_style = new_style.replaceAll('right', 'left');
1344
+ $elements[index].setAttribute('style', new_style);}"""
1345
+ )
1346
+ if __is_cdp_swap_needed(driver):
1347
+ driver.cdp.evaluate(script)
1348
+ else:
1349
+ driver.execute_script(script)
1320
1350
  elif (
1321
1351
  driver.is_element_present("form")
1322
1352
  and driver.is_element_present(
1323
- "form.turnstile #turnstile-widget > div:not([class])"
1353
+ 'form [id*="turnstile"] > div:not([class])'
1324
1354
  )
1325
1355
  ):
1326
1356
  script = (
1327
1357
  """var $elements = document.querySelectorAll(
1328
- 'form.turnstile #turnstile-widget');
1358
+ 'form [id*="turnstile"]');
1329
1359
  var index = 0, length = $elements.length;
1330
1360
  for(; index < length; index++){
1331
1361
  $elements[index].setAttribute('align', 'left');}"""
@@ -1575,6 +1605,13 @@ def _uc_gui_handle_captcha_(driver, frame="iframe", ctype=None):
1575
1605
  ):
1576
1606
  frame = "form div:not(:has(*))"
1577
1607
  tab_up_first = True
1608
+ elif (
1609
+ driver.is_element_present('[src*="/turnstile/"]')
1610
+ and driver.is_element_present(
1611
+ "body > div#check > div:not([class])"
1612
+ )
1613
+ ):
1614
+ frame = "body > div#check > div:not([class])"
1578
1615
  else:
1579
1616
  return
1580
1617
  else:
@@ -106,7 +106,7 @@ class CDPMethods():
106
106
  driver = self.driver
107
107
  if hasattr(driver, "cdp_base"):
108
108
  driver = driver.cdp_base
109
- self.page = self.loop.run_until_complete(driver.get(url))
109
+ self.loop.run_until_complete(self.page.get(url))
110
110
  url_protocol = url.split(":")[0]
111
111
  safe_url = True
112
112
  if url_protocol not in ["about", "data", "chrome"]:
@@ -1014,12 +1014,22 @@ class CDPMethods():
1014
1014
  self.set_window_rect(x, y, width, height)
1015
1015
  self.__add_light_pause()
1016
1016
 
1017
+ def open_new_window(self, url=None, switch_to=True):
1018
+ return self.open_new_tab(url=url, switch_to=switch_to)
1019
+
1017
1020
  def switch_to_window(self, window):
1018
1021
  self.switch_to_tab(window)
1019
1022
 
1020
1023
  def switch_to_newest_window(self):
1021
1024
  self.switch_to_tab(-1)
1022
1025
 
1026
+ def open_new_tab(self, url=None, switch_to=True):
1027
+ if not isinstance(url, str):
1028
+ url = "about:blank"
1029
+ self.loop.run_until_complete(self.page.get(url, new_tab=True))
1030
+ if switch_to:
1031
+ self.switch_to_newest_tab()
1032
+
1023
1033
  def switch_to_tab(self, tab):
1024
1034
  driver = self.driver
1025
1035
  if hasattr(driver, "cdp_base"):
@@ -3896,6 +3896,9 @@ class BaseCase(unittest.TestCase):
3896
3896
 
3897
3897
  def open_new_window(self, switch_to=True):
3898
3898
  """Opens a new browser tab/window and switches to it by default."""
3899
+ if self.__is_cdp_swap_needed():
3900
+ self.cdp.open_new_tab(switch_to=switch_to)
3901
+ return
3899
3902
  self.wait_for_ready_state_complete()
3900
3903
  if switch_to:
3901
3904
  try:
@@ -10339,7 +10342,7 @@ class BaseCase(unittest.TestCase):
10339
10342
  timeout = self.__get_new_timeout(timeout)
10340
10343
  selector, by = self.__recalculate_selector(selector, by)
10341
10344
  if self.__is_cdp_swap_needed():
10342
- return self.cdp.wait_for_text(
10345
+ return self.cdp.wait_for_text_not_visible(
10343
10346
  text, selector=selector, timeout=timeout
10344
10347
  )
10345
10348
  return page_actions.wait_for_text_not_visible(
@@ -781,6 +781,23 @@ def Driver(
781
781
  swiftshader = False
782
782
  if locale is not None and locale_code is None:
783
783
  locale_code = locale
784
+ if locale_code is None:
785
+ if '--locale="' in arg_join:
786
+ locale_code = (
787
+ arg_join.split('--locale="')[1].split('"')[0]
788
+ )
789
+ elif '--locale=' in arg_join:
790
+ locale_code = (
791
+ arg_join.split('--locale=')[1].split(' ')[0]
792
+ )
793
+ elif '--locale-code="' in arg_join:
794
+ locale_code = (
795
+ arg_join.split('--locale-code="')[1].split('"')[0]
796
+ )
797
+ elif '--locale-code=' in arg_join:
798
+ locale_code = (
799
+ arg_join.split('--locale-code=')[1].split(' ')[0]
800
+ )
784
801
  if ad_block is not None and ad_block_on is None:
785
802
  ad_block_on = ad_block
786
803
  if ad_block_on is None:
@@ -942,6 +942,23 @@ def SB(
942
942
  swiftshader = False
943
943
  if locale is not None and locale_code is None:
944
944
  locale_code = locale
945
+ if locale_code is None:
946
+ if '--locale="' in arg_join:
947
+ locale_code = (
948
+ arg_join.split('--locale="')[1].split('"')[0]
949
+ )
950
+ elif '--locale=' in arg_join:
951
+ locale_code = (
952
+ arg_join.split('--locale=')[1].split(' ')[0]
953
+ )
954
+ elif '--locale-code="' in arg_join:
955
+ locale_code = (
956
+ arg_join.split('--locale-code="')[1].split('"')[0]
957
+ )
958
+ elif '--locale-code=' in arg_join:
959
+ locale_code = (
960
+ arg_join.split('--locale-code=')[1].split(' ')[0]
961
+ )
945
962
  if ad_block is not None and ad_block_on is None:
946
963
  ad_block_on = ad_block
947
964
  if ad_block_on is None:
@@ -477,6 +477,7 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver):
477
477
  with suppress(Exception):
478
478
  if self.service.is_connectable():
479
479
  self.stop_client()
480
+ time.sleep(0.003)
480
481
  self.service.stop()
481
482
  self._is_connected = False
482
483
 
@@ -792,7 +792,7 @@ class CookieJar:
792
792
  connection = self._browser.connection
793
793
  cookies = await connection.send(cdp.network.get_cookies())
794
794
  if cookies:
795
- await connection.send(cdp.network.clear_cookies())
795
+ await connection.send(cdp.storage.clear_cookies())
796
796
 
797
797
 
798
798
  class HTTPApi:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: seleniumbase
3
- Version: 4.35.3
3
+ Version: 4.35.5
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
@@ -68,7 +68,7 @@ Requires-Dist: attrs>=25.1.0
68
68
  Requires-Dist: certifi>=2025.1.31
69
69
  Requires-Dist: exceptiongroup>=1.2.2
70
70
  Requires-Dist: websockets~=13.1; python_version < "3.9"
71
- Requires-Dist: websockets>=15.0; python_version >= "3.9"
71
+ Requires-Dist: websockets>=15.0.1; python_version >= "3.9"
72
72
  Requires-Dist: filelock~=3.16.1; python_version < "3.9"
73
73
  Requires-Dist: filelock>=3.17.0; python_version >= "3.9"
74
74
  Requires-Dist: fasteners>=0.19
@@ -79,7 +79,7 @@ Requires-Dist: typing-extensions>=4.12.2
79
79
  Requires-Dist: sbvirtualdisplay>=1.4.0
80
80
  Requires-Dist: MarkupSafe==2.1.5; python_version < "3.9"
81
81
  Requires-Dist: MarkupSafe>=3.0.2; python_version >= "3.9"
82
- Requires-Dist: Jinja2>=3.1.5
82
+ Requires-Dist: Jinja2>=3.1.6
83
83
  Requires-Dist: six>=1.17.0
84
84
  Requires-Dist: parse>=1.20.2
85
85
  Requires-Dist: parse-type>=0.6.4
@@ -10,7 +10,7 @@ pynose>=1.5.4
10
10
  platformdirs>=4.3.6
11
11
  typing-extensions>=4.12.2
12
12
  sbvirtualdisplay>=1.4.0
13
- Jinja2>=3.1.5
13
+ Jinja2>=3.1.6
14
14
  six>=1.17.0
15
15
  parse>=1.20.2
16
16
  parse-type>=0.6.4
@@ -71,7 +71,7 @@ setuptools>=75.8.2
71
71
  urllib3<2.4.0,>=1.26.20
72
72
 
73
73
  [:python_version >= "3.9"]
74
- websockets>=15.0
74
+ websockets>=15.0.1
75
75
  filelock>=3.17.0
76
76
  MarkupSafe>=3.0.2
77
77
  trio==0.29.0
@@ -156,7 +156,7 @@ setup(
156
156
  "certifi>=2025.1.31",
157
157
  "exceptiongroup>=1.2.2",
158
158
  'websockets~=13.1;python_version<"3.9"',
159
- 'websockets>=15.0;python_version>="3.9"',
159
+ 'websockets>=15.0.1;python_version>="3.9"',
160
160
  'filelock~=3.16.1;python_version<"3.9"',
161
161
  'filelock>=3.17.0;python_version>="3.9"',
162
162
  'fasteners>=0.19',
@@ -167,7 +167,7 @@ setup(
167
167
  "sbvirtualdisplay>=1.4.0",
168
168
  'MarkupSafe==2.1.5;python_version<"3.9"',
169
169
  'MarkupSafe>=3.0.2;python_version>="3.9"',
170
- "Jinja2>=3.1.5",
170
+ "Jinja2>=3.1.6",
171
171
  "six>=1.17.0",
172
172
  'parse>=1.20.2',
173
173
  'parse-type>=0.6.4',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes