seleniumbase 4.35.4__tar.gz → 4.35.6__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.4/seleniumbase.egg-info → seleniumbase-4.35.6}/PKG-INFO +3 -3
  2. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/requirements.txt +2 -2
  3. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/__version__.py +1 -1
  4. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/browser_launcher.py +37 -2
  5. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/fixtures/base_case.py +24 -5
  6. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/plugins/driver_manager.py +17 -0
  7. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/plugins/sb_manager.py +17 -0
  8. {seleniumbase-4.35.4 → seleniumbase-4.35.6/seleniumbase.egg-info}/PKG-INFO +3 -3
  9. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase.egg-info/requires.txt +2 -2
  10. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/setup.py +2 -2
  11. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/.gitignore +0 -0
  12. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/LICENSE +0 -0
  13. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/MANIFEST.in +0 -0
  14. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/README.md +0 -0
  15. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/install.sh +0 -0
  16. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/pyproject.toml +0 -0
  17. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/pytest.ini +0 -0
  18. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/sbase/__init__.py +0 -0
  19. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/sbase/__main__.py +0 -0
  20. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/sbase/steps.py +0 -0
  21. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/__init__.py +0 -0
  22. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/__main__.py +0 -0
  23. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/behave/__init__.py +0 -0
  24. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/behave/behave_helper.py +0 -0
  25. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/behave/behave_sb.py +0 -0
  26. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/behave/steps.py +0 -0
  27. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/common/__init__.py +0 -0
  28. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/common/decorators.py +0 -0
  29. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/common/encryption.py +0 -0
  30. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/common/exceptions.py +0 -0
  31. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/common/obfuscate.py +0 -0
  32. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/common/unobfuscate.py +0 -0
  33. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/config/__init__.py +0 -0
  34. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/config/ad_block_list.py +0 -0
  35. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/config/proxy_list.py +0 -0
  36. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/config/settings.py +0 -0
  37. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/__init__.py +0 -0
  38. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/logo_helper.py +0 -0
  39. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/rich_helper.py +0 -0
  40. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/run.py +0 -0
  41. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  42. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  43. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/sb_commander.py +0 -0
  44. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/sb_install.py +0 -0
  45. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  46. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  47. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  48. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  49. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  50. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  51. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/sb_print.py +0 -0
  52. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  53. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/__init__.py +0 -0
  54. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/application_manager.py +0 -0
  55. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/capabilities_parser.py +0 -0
  56. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/colored_traceback.py +0 -0
  57. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/create_db_tables.sql +0 -0
  58. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/detect_b_ver.py +0 -0
  59. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/download_helper.py +0 -0
  60. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/encoded_images.py +0 -0
  61. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/jqc_helper.py +0 -0
  62. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/log_helper.py +0 -0
  63. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/mysql.py +0 -0
  64. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/proxy_helper.py +0 -0
  65. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/recorder_helper.py +0 -0
  66. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/report_helper.py +0 -0
  67. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/s3_manager.py +0 -0
  68. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/sb_cdp.py +0 -0
  69. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/sb_driver.py +0 -0
  70. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/session_helper.py +0 -0
  71. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/settings_parser.py +0 -0
  72. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/style_sheet.py +0 -0
  73. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/testcase_manager.py +0 -0
  74. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/tour_helper.py +0 -0
  75. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/core/visual_helper.py +0 -0
  76. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/drivers/__init__.py +0 -0
  77. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/extensions/__init__.py +0 -0
  78. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/extensions/ad_block.zip +0 -0
  79. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/extensions/disable_csp.zip +0 -0
  80. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/extensions/recorder.zip +0 -0
  81. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/extensions/sbase_ext.zip +0 -0
  82. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/fixtures/__init__.py +0 -0
  83. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/fixtures/constants.py +0 -0
  84. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  85. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/fixtures/errors.py +0 -0
  86. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/fixtures/js_utils.py +0 -0
  87. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/fixtures/page_actions.py +0 -0
  88. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/fixtures/page_utils.py +0 -0
  89. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/fixtures/shared_utils.py +0 -0
  90. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/fixtures/unittest_helper.py +0 -0
  91. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/fixtures/words.py +0 -0
  92. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  93. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/js_code/__init__.py +0 -0
  94. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/js_code/active_css_js.py +0 -0
  95. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/js_code/live_js.py +0 -0
  96. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/js_code/recorder_js.py +0 -0
  97. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/masterqa/__init__.py +0 -0
  98. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/masterqa/master_qa.py +0 -0
  99. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/plugins/__init__.py +0 -0
  100. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/plugins/base_plugin.py +0 -0
  101. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/plugins/basic_test_info.py +0 -0
  102. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  103. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/plugins/page_source.py +0 -0
  104. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/plugins/pytest_plugin.py +0 -0
  105. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  106. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/plugins/screen_shots.py +0 -0
  107. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/plugins/selenium_plugin.py +0 -0
  108. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/resources/__init__.py +0 -0
  109. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/translate/__init__.py +0 -0
  110. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/translate/chinese.py +0 -0
  111. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/translate/dutch.py +0 -0
  112. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/translate/french.py +0 -0
  113. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/translate/italian.py +0 -0
  114. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/translate/japanese.py +0 -0
  115. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/translate/korean.py +0 -0
  116. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/translate/master_dict.py +0 -0
  117. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/translate/portuguese.py +0 -0
  118. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/translate/russian.py +0 -0
  119. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/translate/spanish.py +0 -0
  120. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/translate/translator.py +0 -0
  121. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/undetected/__init__.py +0 -0
  122. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/undetected/cdp.py +0 -0
  123. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  124. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  125. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
  126. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
  127. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  128. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
  129. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  130. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  131. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/undetected/dprocess.py +0 -0
  132. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/undetected/options.py +0 -0
  133. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/undetected/patcher.py +0 -0
  134. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/undetected/reactor.py +0 -0
  135. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/undetected/webelement.py +0 -0
  136. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/utilities/__init__.py +0 -0
  137. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  138. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  139. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  140. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  141. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  142. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  143. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  144. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  145. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  146. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  147. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  148. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  149. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  150. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase.egg-info/SOURCES.txt +0 -0
  151. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase.egg-info/dependency_links.txt +0 -0
  152. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase.egg-info/entry_points.txt +0 -0
  153. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/seleniumbase.egg-info/top_level.txt +0 -0
  154. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/setup.cfg +0 -0
  155. {seleniumbase-4.35.4 → seleniumbase-4.35.6}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: seleniumbase
3
- Version: 4.35.4
3
+ Version: 4.35.6
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.4"
2
+ __version__ = "4.35.6"
@@ -1288,6 +1288,13 @@ def _uc_gui_click_captcha(
1288
1288
  and driver.is_element_present("form div:not(:has(*))")
1289
1289
  ):
1290
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])"
1291
1298
  elif driver.is_element_present(".cf-turnstile-wrapper"):
1292
1299
  frame = ".cf-turnstile-wrapper"
1293
1300
  elif driver.is_element_present(
@@ -1319,15 +1326,36 @@ def _uc_gui_click_captcha(
1319
1326
  driver.cdp.evaluate(script)
1320
1327
  else:
1321
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)
1322
1350
  elif (
1323
1351
  driver.is_element_present("form")
1324
1352
  and driver.is_element_present(
1325
- "form.turnstile #turnstile-widget > div:not([class])"
1353
+ 'form [id*="turnstile"] > div:not([class])'
1326
1354
  )
1327
1355
  ):
1328
1356
  script = (
1329
1357
  """var $elements = document.querySelectorAll(
1330
- 'form.turnstile #turnstile-widget');
1358
+ 'form [id*="turnstile"]');
1331
1359
  var index = 0, length = $elements.length;
1332
1360
  for(; index < length; index++){
1333
1361
  $elements[index].setAttribute('align', 'left');}"""
@@ -1577,6 +1605,13 @@ def _uc_gui_handle_captcha_(driver, frame="iframe", ctype=None):
1577
1605
  ):
1578
1606
  frame = "form div:not(:has(*))"
1579
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])"
1580
1615
  else:
1581
1616
  return
1582
1617
  else:
@@ -8070,10 +8070,6 @@ class BaseCase(unittest.TestCase):
8070
8070
  else:
8071
8071
  found = False
8072
8072
  message = entry["message"]
8073
- if message.count(" - Failed to load resource") == 1:
8074
- message = message.split(
8075
- " - Failed to load resource"
8076
- )[0]
8077
8073
  for substring in exclude:
8078
8074
  substring = str(substring)
8079
8075
  if (
@@ -8091,7 +8087,30 @@ class BaseCase(unittest.TestCase):
8091
8087
  u_c_t_e = " Uncaught TypeError: "
8092
8088
  if f_t_l_r in errors[n]["message"]:
8093
8089
  url = errors[n]["message"].split(f_t_l_r)[0]
8094
- errors[n] = {"Error 404 (broken link)": url}
8090
+ if "status of 400" in errors[n]["message"]:
8091
+ errors[n] = {"Error 400 (Bad Request)": url}
8092
+ elif "status of 401" in errors[n]["message"]:
8093
+ errors[n] = {"Error 401 (Unauthorized)": url}
8094
+ elif "status of 402" in errors[n]["message"]:
8095
+ errors[n] = {"Error 402 (Payment Required)": url}
8096
+ elif "status of 403" in errors[n]["message"]:
8097
+ errors[n] = {"Error 403 (Forbidden)": url}
8098
+ elif "status of 404" in errors[n]["message"]:
8099
+ errors[n] = {"Error 404 (Not Found)": url}
8100
+ elif "status of 405" in errors[n]["message"]:
8101
+ errors[n] = {"Error 405 (Method Not Allowed)": url}
8102
+ elif "status of 406" in errors[n]["message"]:
8103
+ errors[n] = {"Error 406 (Not Acceptable)": url}
8104
+ elif "status of 407" in errors[n]["message"]:
8105
+ errors[n] = {"Error 407 (Proxy Auth Required)": url}
8106
+ elif "status of 408" in errors[n]["message"]:
8107
+ errors[n] = {"Error 408 (Request Timeout)": url}
8108
+ elif "status of 409" in errors[n]["message"]:
8109
+ errors[n] = {"Error 409 (Conflict)": url}
8110
+ elif "status of 410" in errors[n]["message"]:
8111
+ errors[n] = {"Error 410 (Gone)": url}
8112
+ else:
8113
+ errors[n] = {"Failed to load resource": url}
8095
8114
  elif u_c_s_e in errors[n]["message"]:
8096
8115
  url = errors[n]["message"].split(u_c_s_e)[0]
8097
8116
  error = errors[n]["message"].split(u_c_s_e)[1]
@@ -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:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: seleniumbase
3
- Version: 4.35.4
3
+ Version: 4.35.6
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