seleniumbase 4.45.1__tar.gz → 4.45.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 (162) hide show
  1. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/.gitignore +10 -0
  2. {seleniumbase-4.45.1/seleniumbase.egg-info → seleniumbase-4.45.6}/PKG-INFO +10 -11
  3. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/README.md +7 -8
  4. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/pyproject.toml +1 -0
  5. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/requirements.txt +2 -2
  6. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/__version__.py +1 -1
  7. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/behave/behave_sb.py +6 -0
  8. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/sb_install.py +136 -1
  9. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/sb_mkdir.py +6 -0
  10. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/sb_mkrec.py +5 -0
  11. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/sb_recorder.py +2 -0
  12. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/browser_launcher.py +112 -24
  13. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/sb_cdp.py +30 -1
  14. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/fixtures/base_case.py +10 -49
  15. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/plugins/driver_manager.py +11 -4
  16. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/plugins/pytest_plugin.py +20 -4
  17. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/plugins/sb_manager.py +9 -4
  18. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/plugins/selenium_plugin.py +15 -3
  19. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/undetected/cdp_driver/browser.py +2 -2
  20. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/undetected/cdp_driver/cdp_util.py +3 -12
  21. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/undetected/cdp_driver/config.py +62 -2
  22. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/undetected/cdp_driver/connection.py +12 -12
  23. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/undetected/cdp_driver/element.py +19 -16
  24. seleniumbase-4.45.6/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  25. {seleniumbase-4.45.1 → seleniumbase-4.45.6/seleniumbase.egg-info}/PKG-INFO +10 -11
  26. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase.egg-info/SOURCES.txt +1 -0
  27. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase.egg-info/requires.txt +2 -2
  28. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/setup.py +3 -2
  29. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/LICENSE +0 -0
  30. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/MANIFEST.in +0 -0
  31. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/install.sh +0 -0
  32. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/pytest.ini +0 -0
  33. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/sbase/__init__.py +0 -0
  34. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/sbase/__main__.py +0 -0
  35. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/sbase/steps.py +0 -0
  36. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/__init__.py +0 -0
  37. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/__main__.py +0 -0
  38. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/behave/__init__.py +0 -0
  39. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/behave/behave_helper.py +0 -0
  40. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/behave/steps.py +0 -0
  41. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/common/__init__.py +0 -0
  42. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/common/decorators.py +0 -0
  43. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/common/encryption.py +0 -0
  44. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/common/exceptions.py +0 -0
  45. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/common/obfuscate.py +0 -0
  46. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/common/unobfuscate.py +0 -0
  47. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/config/__init__.py +0 -0
  48. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/config/ad_block_list.py +0 -0
  49. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/config/proxy_list.py +0 -0
  50. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/config/settings.py +0 -0
  51. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/__init__.py +0 -0
  52. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/logo_helper.py +0 -0
  53. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/rich_helper.py +0 -0
  54. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/run.py +0 -0
  55. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  56. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  57. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/sb_commander.py +0 -0
  58. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  59. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  60. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  61. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  62. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/console_scripts/sb_print.py +0 -0
  63. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/__init__.py +0 -0
  64. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/application_manager.py +0 -0
  65. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/capabilities_parser.py +0 -0
  66. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/colored_traceback.py +0 -0
  67. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/create_db_tables.sql +0 -0
  68. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/detect_b_ver.py +0 -0
  69. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/download_helper.py +0 -0
  70. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/encoded_images.py +0 -0
  71. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/jqc_helper.py +0 -0
  72. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/log_helper.py +0 -0
  73. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/mysql.py +0 -0
  74. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/proxy_helper.py +0 -0
  75. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/recorder_helper.py +0 -0
  76. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/report_helper.py +0 -0
  77. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/s3_manager.py +0 -0
  78. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/sb_driver.py +0 -0
  79. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/session_helper.py +0 -0
  80. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/settings_parser.py +0 -0
  81. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/style_sheet.py +0 -0
  82. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/testcase_manager.py +0 -0
  83. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/tour_helper.py +0 -0
  84. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/core/visual_helper.py +0 -0
  85. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/drivers/__init__.py +0 -0
  86. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/drivers/atlas_drivers/__init__.py +0 -0
  87. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
  88. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
  89. {seleniumbase-4.45.1/seleniumbase/drivers/chs_drivers → seleniumbase-4.45.6/seleniumbase/drivers/chromium_drivers}/__init__.py +0 -0
  90. {seleniumbase-4.45.1/seleniumbase/drivers/comet_drivers → seleniumbase-4.45.6/seleniumbase/drivers/chs_drivers}/__init__.py +0 -0
  91. {seleniumbase-4.45.1/seleniumbase/drivers/opera_drivers → seleniumbase-4.45.6/seleniumbase/drivers/comet_drivers}/__init__.py +0 -0
  92. {seleniumbase-4.45.1/seleniumbase/extensions → seleniumbase-4.45.6/seleniumbase/drivers/opera_drivers}/__init__.py +0 -0
  93. {seleniumbase-4.45.1/seleniumbase/fixtures → seleniumbase-4.45.6/seleniumbase/extensions}/__init__.py +0 -0
  94. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/extensions/ad_block.zip +0 -0
  95. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/extensions/disable_csp.zip +0 -0
  96. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/extensions/recorder.zip +0 -0
  97. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/extensions/sbase_ext.zip +0 -0
  98. {seleniumbase-4.45.1/seleniumbase/js_code → seleniumbase-4.45.6/seleniumbase/fixtures}/__init__.py +0 -0
  99. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/fixtures/constants.py +0 -0
  100. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  101. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/fixtures/errors.py +0 -0
  102. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/fixtures/js_utils.py +0 -0
  103. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/fixtures/page_actions.py +0 -0
  104. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/fixtures/page_utils.py +0 -0
  105. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/fixtures/shared_utils.py +0 -0
  106. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/fixtures/unittest_helper.py +0 -0
  107. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/fixtures/words.py +0 -0
  108. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  109. {seleniumbase-4.45.1/seleniumbase/masterqa → seleniumbase-4.45.6/seleniumbase/js_code}/__init__.py +0 -0
  110. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/js_code/active_css_js.py +0 -0
  111. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/js_code/live_js.py +0 -0
  112. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/js_code/recorder_js.py +0 -0
  113. {seleniumbase-4.45.1/seleniumbase/plugins → seleniumbase-4.45.6/seleniumbase/masterqa}/__init__.py +0 -0
  114. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/masterqa/master_qa.py +0 -0
  115. {seleniumbase-4.45.1/seleniumbase/resources → seleniumbase-4.45.6/seleniumbase/plugins}/__init__.py +0 -0
  116. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/plugins/base_plugin.py +0 -0
  117. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/plugins/basic_test_info.py +0 -0
  118. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  119. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/plugins/page_source.py +0 -0
  120. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  121. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/plugins/screen_shots.py +0 -0
  122. {seleniumbase-4.45.1/seleniumbase/utilities → seleniumbase-4.45.6/seleniumbase/resources}/__init__.py +0 -0
  123. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/translate/__init__.py +0 -0
  124. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/translate/chinese.py +0 -0
  125. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/translate/dutch.py +0 -0
  126. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/translate/french.py +0 -0
  127. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/translate/italian.py +0 -0
  128. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/translate/japanese.py +0 -0
  129. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/translate/korean.py +0 -0
  130. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/translate/master_dict.py +0 -0
  131. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/translate/portuguese.py +0 -0
  132. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/translate/russian.py +0 -0
  133. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/translate/spanish.py +0 -0
  134. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/translate/translator.py +0 -0
  135. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/undetected/__init__.py +0 -0
  136. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/undetected/cdp.py +0 -0
  137. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  138. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  139. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  140. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/undetected/dprocess.py +0 -0
  141. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/undetected/options.py +0 -0
  142. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/undetected/patcher.py +0 -0
  143. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/undetected/reactor.py +0 -0
  144. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/undetected/webelement.py +0 -0
  145. {seleniumbase-4.45.1/seleniumbase/utilities/selenium_grid → seleniumbase-4.45.6/seleniumbase/utilities}/__init__.py +0 -0
  146. {seleniumbase-4.45.1/seleniumbase/utilities/selenium_ide → seleniumbase-4.45.6/seleniumbase/utilities/selenium_grid}/__init__.py +0 -0
  147. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  148. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  149. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  150. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  151. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  152. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  153. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  154. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  155. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  156. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  157. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  158. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase.egg-info/dependency_links.txt +0 -0
  159. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase.egg-info/entry_points.txt +0 -0
  160. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/seleniumbase.egg-info/top_level.txt +0 -0
  161. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/setup.cfg +0 -0
  162. {seleniumbase-4.45.1 → seleniumbase-4.45.6}/virtualenv_install.sh +0 -0
@@ -82,6 +82,16 @@ msedgedriver.exe
82
82
  operadriver.exe
83
83
  uc_driver.exe
84
84
 
85
+ # Chromium Zip Files
86
+ chrome-mac.zip
87
+ chrome-linux.zip
88
+ chrome-win.zip
89
+
90
+ # Chromium folders
91
+ chrome-mac
92
+ chrome-linux
93
+ chrome-win
94
+
85
95
  # Chrome for Testing Zip Files
86
96
  chrome-mac-arm64.zip
87
97
  chrome-mac-x64.zip
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.45.1
3
+ Version: 4.45.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: certifi>=2025.11.12
68
68
  Requires-Dist: exceptiongroup>=1.3.1
69
69
  Requires-Dist: websockets>=15.0.1
70
70
  Requires-Dist: filelock~=3.19.1; python_version < "3.10"
71
- Requires-Dist: filelock>=3.20.0; python_version >= "3.10"
71
+ Requires-Dist: filelock>=3.20.1; python_version >= "3.10"
72
72
  Requires-Dist: fasteners>=0.20
73
73
  Requires-Dist: mycdp>=1.3.2
74
74
  Requires-Dist: pynose>=1.5.5
@@ -122,7 +122,7 @@ Requires-Dist: pytest-rerunfailures==16.1; python_version >= "3.10"
122
122
  Requires-Dist: pytest-xdist==3.8.0
123
123
  Requires-Dist: parameterized==0.9.0
124
124
  Requires-Dist: behave==1.2.6
125
- Requires-Dist: soupsieve~=2.8
125
+ Requires-Dist: soupsieve~=2.8.1
126
126
  Requires-Dist: beautifulsoup4~=4.14.3
127
127
  Requires-Dist: pyotp==2.9.0
128
128
  Requires-Dist: python-xlib==0.33; platform_system == "Linux"
@@ -218,22 +218,21 @@ Dynamic: summary
218
218
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/features_list.md">🏰 Features</a> |
219
219
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/customizing_test_runs.md">🎛️ Options</a> |
220
220
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">📚 Examples</a> |
221
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/console_scripts/ReadMe.md">🌠 Scripts</a> |
221
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/console_scripts/ReadMe.md">🪄 Scripts</a> |
222
222
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/mobile_testing.md">📱 Mobile</a>
223
223
  <br />
224
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/method_summary.md">📘 API</a> |
225
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md"> 🔠 Syntaxes</a> |
224
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/method_summary.md">📘 The API</a> |
225
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md"> 🔠 SyntaxFormats</a> |
226
226
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/recorder_mode.md">🔴 Recorder</a> |
227
227
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/example_logs/ReadMe.md">📊 Dashboard</a> |
228
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/locale_codes.md">🗾 Locale</a> |
229
- <a href="https://seleniumbase.io/devices/?url=seleniumbase.com">💻 Farm</a>
228
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/locale_codes.md">🗾 Locale</a>
230
229
  <br />
231
230
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/commander.md">🎖️ GUI</a> |
232
231
  <a href="https://seleniumbase.io/demo_page">📰 TestPage</a> |
233
232
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md">👤 UC Mode</a> |
234
233
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">🐙 CDP Mode</a> |
235
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/chart_maker/ReadMe.md">📶 Charts</a> |
236
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">🌐 Grid</a>
234
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/chart_maker/ReadMe.md">📶 Charts</a> |
235
+ <a href="https://seleniumbase.io/devices/?url=seleniumbase.com">🖥️ Farm</a>
237
236
  <br />
238
237
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/how_it_works.md">👁️ How</a> |
239
238
  <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples/migration/raw_selenium">🚝 Migration</a> |
@@ -242,7 +241,7 @@ Dynamic: summary
242
241
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/tour_examples/ReadMe.md">🚎 Tours</a>
243
242
  <br />
244
243
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/github/workflows/ReadMe.md">🤖 CI/CD</a> |
245
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/js_package_manager.md">🕹️ JSMgr</a> |
244
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/js_package_manager.md">❇️ JSMgr</a> |
246
245
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/translations.md">🌏 Translator</a> |
247
246
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/presenter/ReadMe.md">🎞️ Presenter</a> |
248
247
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/visual_testing/ReadMe.md">🖼️ Visual</a> |
@@ -21,22 +21,21 @@
21
21
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/features_list.md">🏰 Features</a> |
22
22
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/customizing_test_runs.md">🎛️ Options</a> |
23
23
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">📚 Examples</a> |
24
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/console_scripts/ReadMe.md">🌠 Scripts</a> |
24
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/console_scripts/ReadMe.md">🪄 Scripts</a> |
25
25
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/mobile_testing.md">📱 Mobile</a>
26
26
  <br />
27
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/method_summary.md">📘 API</a> |
28
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md"> 🔠 Syntaxes</a> |
27
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/method_summary.md">📘 The API</a> |
28
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md"> 🔠 SyntaxFormats</a> |
29
29
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/recorder_mode.md">🔴 Recorder</a> |
30
30
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/example_logs/ReadMe.md">📊 Dashboard</a> |
31
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/locale_codes.md">🗾 Locale</a> |
32
- <a href="https://seleniumbase.io/devices/?url=seleniumbase.com">💻 Farm</a>
31
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/locale_codes.md">🗾 Locale</a>
33
32
  <br />
34
33
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/commander.md">🎖️ GUI</a> |
35
34
  <a href="https://seleniumbase.io/demo_page">📰 TestPage</a> |
36
35
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md">👤 UC Mode</a> |
37
36
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">🐙 CDP Mode</a> |
38
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/chart_maker/ReadMe.md">📶 Charts</a> |
39
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">🌐 Grid</a>
37
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/chart_maker/ReadMe.md">📶 Charts</a> |
38
+ <a href="https://seleniumbase.io/devices/?url=seleniumbase.com">🖥️ Farm</a>
40
39
  <br />
41
40
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/how_it_works.md">👁️ How</a> |
42
41
  <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples/migration/raw_selenium">🚝 Migration</a> |
@@ -45,7 +44,7 @@
45
44
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/tour_examples/ReadMe.md">🚎 Tours</a>
46
45
  <br />
47
46
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/github/workflows/ReadMe.md">🤖 CI/CD</a> |
48
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/js_package_manager.md">🕹️ JSMgr</a> |
47
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/js_package_manager.md">❇️ JSMgr</a> |
49
48
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/translations.md">🌏 Translator</a> |
50
49
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/presenter/ReadMe.md">🎞️ Presenter</a> |
51
50
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/visual_testing/ReadMe.md">🖼️ Visual</a> |
@@ -47,6 +47,7 @@ packages = [
47
47
  "seleniumbase.drivers.brave_drivers",
48
48
  "seleniumbase.drivers.comet_drivers",
49
49
  "seleniumbase.drivers.atlas_drivers",
50
+ "seleniumbase.drivers.chromium_drivers",
50
51
  "seleniumbase.extensions",
51
52
  "seleniumbase.fixtures",
52
53
  "seleniumbase.js_code",
@@ -8,7 +8,7 @@ certifi>=2025.11.12
8
8
  exceptiongroup>=1.3.1
9
9
  websockets>=15.0.1
10
10
  filelock~=3.19.1;python_version<"3.10"
11
- filelock>=3.20.0;python_version>="3.10"
11
+ filelock>=3.20.1;python_version>="3.10"
12
12
  fasteners>=0.20
13
13
  mycdp>=1.3.2
14
14
  pynose>=1.5.5
@@ -62,7 +62,7 @@ pytest-rerunfailures==16.1;python_version>="3.10"
62
62
  pytest-xdist==3.8.0
63
63
  parameterized==0.9.0
64
64
  behave==1.2.6
65
- soupsieve~=2.8
65
+ soupsieve~=2.8.1
66
66
  beautifulsoup4~=4.14.3
67
67
  pyotp==2.9.0
68
68
  python-xlib==0.33;platform_system=="Linux"
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.45.1"
2
+ __version__ = "4.45.6"
@@ -494,6 +494,12 @@ def get_configured_sb(context):
494
494
  sb.binary_location = binary_location
495
495
  sb_config.binary_location = binary_location
496
496
  continue
497
+ # Handle: -D use-chromium
498
+ if low_key in ["use-chromium"] and not sb_config.binary_location:
499
+ binary_location = "_chromium_"
500
+ sb.binary_location = binary_location
501
+ sb_config.binary_location = binary_location
502
+ continue
497
503
  # Handle: -D cft
498
504
  if low_key in ["cft"] and not sb_config.binary_location:
499
505
  binary_location = "cft"
@@ -19,6 +19,7 @@ Examples:
19
19
  sbase get chromedriver stable
20
20
  sbase get chromedriver beta
21
21
  sbase get chromedriver -p
22
+ sbase get chromium
22
23
  sbase get cft 131
23
24
  sbase get chs
24
25
  Output:
@@ -46,16 +47,21 @@ from seleniumbase import config as sb_config
46
47
  from seleniumbase import drivers # webdriver storage folder for SeleniumBase
47
48
  from seleniumbase.drivers import cft_drivers # chrome-for-testing
48
49
  from seleniumbase.drivers import chs_drivers # chrome-headless-shell
50
+ from seleniumbase.drivers import chromium_drivers # base chromium
49
51
 
50
52
  urllib3.disable_warnings()
51
53
  ARCH = platform.architecture()[0]
52
54
  IS_ARM_MAC = shared_utils.is_arm_mac()
53
55
  IS_MAC = shared_utils.is_mac()
56
+ IS_ARM_LINUX = shared_utils.is_arm_linux()
54
57
  IS_LINUX = shared_utils.is_linux()
55
58
  IS_WINDOWS = shared_utils.is_windows()
56
59
  DRIVER_DIR = os.path.dirname(os.path.realpath(drivers.__file__))
57
60
  DRIVER_DIR_CFT = os.path.dirname(os.path.realpath(cft_drivers.__file__))
58
61
  DRIVER_DIR_CHS = os.path.dirname(os.path.realpath(chs_drivers.__file__))
62
+ DRIVER_DIR_CHROMIUM = os.path.dirname(
63
+ os.path.realpath(chromium_drivers.__file__)
64
+ )
59
65
  LOCAL_PATH = "/usr/local/bin/" # On Mac and Linux systems
60
66
  DEFAULT_CHROMEDRIVER_VERSION = "114.0.5735.90" # (If can't find LATEST_STABLE)
61
67
  DEFAULT_GECKODRIVER_VERSION = "v0.36.0"
@@ -203,6 +209,59 @@ def get_cft_latest_version_from_milestone(milestone):
203
209
  return url_request.json()["milestones"][milestone]["version"]
204
210
 
205
211
 
212
+ def get_chromium_channel_revision(platform_code, channel):
213
+ """Snapshots only exist for revisions where a build occurred.
214
+ Therefore, not all found revisions will lead to snapshots."""
215
+ platform_key = None
216
+ if platform_code in ["Mac_Arm", "Mac"]:
217
+ platform_key = "Mac"
218
+ elif platform_code in ["Linux_x64"]:
219
+ platform_key = "Linux"
220
+ elif platform_code in ["Win_x64"]:
221
+ platform_key = "Windows"
222
+ elif platform_code in ["Win"]:
223
+ platform_key = "Win32"
224
+ channel_key = None
225
+ if channel.lower() == "stable":
226
+ channel_key = "Stable"
227
+ elif channel.lower() == "beta":
228
+ channel_key = "Beta"
229
+ elif channel.lower() == "dev":
230
+ channel_key = "Dev"
231
+ elif channel.lower() == "canary":
232
+ channel_key = "Canary"
233
+ base_url = "https://chromiumdash.appspot.com/fetch_releases"
234
+ url = f"{base_url}?channel={channel_key}&platform={platform_key}&num=1"
235
+ url_request = requests_get_with_retry(url)
236
+ data = None
237
+ if url_request.ok:
238
+ data = url_request.text
239
+ else:
240
+ raise Exception("Could not determine Chromium revision!")
241
+ if data:
242
+ try:
243
+ import ast
244
+
245
+ result = ast.literal_eval(data)
246
+ revision = result[0]["chromium_main_branch_position"]
247
+ return str(revision)
248
+ except Exception:
249
+ return get_latest_chromedriver_version(platform_code)
250
+ else:
251
+ return get_latest_chromedriver_version(platform_code)
252
+
253
+
254
+ def get_chromium_latest_revision(platform_code):
255
+ base_url = "https://storage.googleapis.com/chromium-browser-snapshots"
256
+ url = f"{base_url}/{platform_code}/LAST_CHANGE"
257
+ url_request = requests_get_with_retry(url)
258
+ if url_request.ok:
259
+ latest_revision = url_request.text
260
+ else:
261
+ raise Exception("Could not determine latest Chromium revision!")
262
+ return latest_revision
263
+
264
+
206
265
  def get_latest_chromedriver_version(channel="Stable"):
207
266
  try:
208
267
  if getattr(sb_config, "cft_lkgv_json", None):
@@ -274,6 +333,11 @@ def main(override=None, intel_for_uc=None, force_uc=None):
274
333
  elif override.startswith("iedriver "):
275
334
  extra = override.split("iedriver ")[1]
276
335
  sys.argv = ["seleniumbase", "get", "iedriver", extra]
336
+ elif override == "chromium":
337
+ sys.argv = ["seleniumbase", "get", "chromium"]
338
+ elif override.startswith("chromium "):
339
+ extra = override.split("chromium ")[1]
340
+ sys.argv = ["seleniumbase", "get", "chromium", extra]
277
341
  elif override == "cft":
278
342
  sys.argv = ["seleniumbase", "get", "cft"]
279
343
  elif override.startswith("cft "):
@@ -316,6 +380,8 @@ def main(override=None, intel_for_uc=None, force_uc=None):
316
380
  downloads_folder = DRIVER_DIR_CFT
317
381
  elif override == "chs" or name == "chs":
318
382
  downloads_folder = DRIVER_DIR_CHS
383
+ elif override == "chromium":
384
+ downloads_folder = DRIVER_DIR_CHROMIUM
319
385
  expected_contents = None
320
386
  platform_code = None
321
387
  copy_to_path = False
@@ -643,6 +709,31 @@ def main(override=None, intel_for_uc=None, force_uc=None):
643
709
  "https://storage.googleapis.com/chrome-for-testing-public/"
644
710
  "%s/%s/%s" % (use_version, platform_code, file_name)
645
711
  )
712
+ elif name == "chromium":
713
+ if IS_MAC:
714
+ if IS_ARM_MAC:
715
+ platform_code = "Mac_Arm"
716
+ else:
717
+ platform_code = "Mac"
718
+ file_name = "chrome-mac.zip"
719
+ elif IS_LINUX:
720
+ platform_code = "Linux_x64"
721
+ file_name = "chrome-linux.zip"
722
+ elif IS_WINDOWS:
723
+ if "64" in ARCH:
724
+ platform_code = "Win_x64"
725
+ else:
726
+ platform_code = "Win"
727
+ file_name = "chrome-win.zip"
728
+ revision = get_chromium_latest_revision(platform_code)
729
+ msg = c2 + "Chromium revision to download" + cr
730
+ p_version = c3 + revision + cr
731
+ log_d("\n*** %s = %s" % (msg, p_version))
732
+ download_url = (
733
+ "https://storage.googleapis.com/chromium-browser-snapshots/"
734
+ "%s/%s/%s" % (platform_code, revision, file_name)
735
+ )
736
+ downloads_folder = DRIVER_DIR_CHROMIUM
646
737
  elif name == "chrome-headless-shell" or name == "chs":
647
738
  set_version = None
648
739
  found_version = None
@@ -1003,12 +1094,12 @@ def main(override=None, intel_for_uc=None, force_uc=None):
1003
1094
  remote_file = requests_get_with_retry(download_url)
1004
1095
  with open(file_path, "wb") as file:
1005
1096
  file.write(remote_file.content)
1006
- log_d("%sDownload Complete!%s\n" % (c1, cr))
1007
1097
 
1008
1098
  if file_name.endswith(".zip"):
1009
1099
  zip_file_path = file_path
1010
1100
  zip_ref = zipfile.ZipFile(zip_file_path, "r")
1011
1101
  contents = zip_ref.namelist()
1102
+ log_d("%sDownload Complete!%s\n" % (c1, cr))
1012
1103
  if (
1013
1104
  len(contents) >= 1
1014
1105
  and name in ["chromedriver", "uc_driver", "geckodriver"]
@@ -1249,6 +1340,48 @@ def main(override=None, intel_for_uc=None, force_uc=None):
1249
1340
  "Chrome for Testing was saved inside:\n%s%s\n%s\n"
1250
1341
  % (pr_base_path, pr_sep, pr_folder_name)
1251
1342
  )
1343
+ elif name == "chromium":
1344
+ # Zip file is valid. Proceed.
1345
+ driver_path = None
1346
+ driver_file = None
1347
+ base_path = os.sep.join(zip_file_path.split(os.sep)[:-1])
1348
+ folder_name = contents[0].split("/")[0]
1349
+ folder_path = os.path.join(base_path, folder_name)
1350
+ if IS_MAC or IS_LINUX:
1351
+ if (
1352
+ "chromium" in folder_path
1353
+ and "drivers" in folder_path
1354
+ and os.path.exists(folder_path)
1355
+ ):
1356
+ shutil.rmtree(folder_path)
1357
+ subprocess.run(
1358
+ ["unzip", zip_file_path, "-d", downloads_folder]
1359
+ )
1360
+ elif IS_WINDOWS:
1361
+ subprocess.run(
1362
+ [
1363
+ "powershell",
1364
+ "Expand-Archive",
1365
+ "-Path",
1366
+ zip_file_path,
1367
+ "-DestinationPath",
1368
+ downloads_folder,
1369
+ "-Force",
1370
+ ]
1371
+ )
1372
+ else:
1373
+ zip_ref.extractall(downloads_folder)
1374
+ zip_ref.close()
1375
+ with suppress(Exception):
1376
+ os.remove(zip_file_path)
1377
+ log_d("%sUnzip Complete!%s\n" % (c2, cr))
1378
+ pr_base_path = c3 + base_path + cr
1379
+ pr_sep = c3 + os.sep + cr
1380
+ pr_folder_name = c3 + folder_name + cr
1381
+ log_d(
1382
+ "Chromium was saved inside:\n%s%s\n%s\n"
1383
+ % (pr_base_path, pr_sep, pr_folder_name)
1384
+ )
1252
1385
  elif name == "chrome-headless-shell" or name == "chs":
1253
1386
  # Zip file is valid. Proceed.
1254
1387
  driver_path = None
@@ -1300,6 +1433,7 @@ def main(override=None, intel_for_uc=None, force_uc=None):
1300
1433
  tar = tarfile.open(file_path)
1301
1434
  contents = tar.getnames()
1302
1435
  if len(contents) == 1:
1436
+ log_d("%sDownload Complete!%s\n" % (c1, cr))
1303
1437
  for f_name in contents:
1304
1438
  # Remove existing version if exists
1305
1439
  new_file = os.path.join(downloads_folder, str(f_name))
@@ -1337,6 +1471,7 @@ def main(override=None, intel_for_uc=None, force_uc=None):
1337
1471
  else:
1338
1472
  # Not a .zip file or a .tar.gz file. Just a direct download.
1339
1473
  if "Driver" in file_name or "driver" in file_name:
1474
+ log_d("%sDownload Complete!%s\n" % (c1, cr))
1340
1475
  log_d("Making [%s] executable ..." % file_name)
1341
1476
  make_executable(file_path)
1342
1477
  log_d("%s[%s] is now ready for use!%s" % (c1, file_name, cr))
@@ -246,6 +246,12 @@ def main():
246
246
  data.append("msedgedriver.exe")
247
247
  data.append("operadriver.exe")
248
248
  data.append("uc_driver.exe")
249
+ data.append("chrome-mac.zip")
250
+ data.append("chrome-linux.zip")
251
+ data.append("chrome-win.zip")
252
+ data.append("chrome-mac")
253
+ data.append("chrome-linux")
254
+ data.append("chrome-win")
249
255
  data.append("chrome-mac-arm64.zip")
250
256
  data.append("chrome-mac-x64.zip")
251
257
  data.append("chrome-linux64.zip")
@@ -88,6 +88,7 @@ def main():
88
88
  use_brave = False
89
89
  use_comet = False
90
90
  use_atlas = False
91
+ use_chromium = False
91
92
  use_uc = False
92
93
  esc_end = False
93
94
  start_page = None
@@ -150,6 +151,8 @@ def main():
150
151
  use_comet = True
151
152
  elif option.lower() == "--atlas":
152
153
  use_atlas = True
154
+ elif option.lower() == "--use-chromium":
155
+ use_chromium = True
153
156
  elif option.lower() == "--ee":
154
157
  esc_end = True
155
158
  elif option.lower() in ("--gui", "--headed"):
@@ -295,6 +298,8 @@ def main():
295
298
  run_cmd += " --comet"
296
299
  elif use_atlas:
297
300
  run_cmd += " --atlas"
301
+ elif use_chromium:
302
+ run_cmd += " --use-chromium"
298
303
  if force_gui:
299
304
  run_cmd += " --gui"
300
305
  if use_uc:
@@ -152,6 +152,8 @@ def do_recording(file_name, url, overwrite_enabled, use_chrome, window):
152
152
  command += " --comet"
153
153
  elif "--atlas" in command_args:
154
154
  command += " --atlas"
155
+ elif "--use-chromium" in command_args:
156
+ command += " --use-chromium"
155
157
  if (
156
158
  "--uc" in command_args
157
159
  or "--cdp" in command_args