seleniumbase 4.43.3__tar.gz → 4.44.0__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 (161) hide show
  1. {seleniumbase-4.43.3/seleniumbase.egg-info → seleniumbase-4.44.0}/PKG-INFO +3 -3
  2. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/requirements.txt +2 -2
  3. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/__version__.py +1 -1
  4. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/browser_launcher.py +20 -0
  5. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/detect_b_ver.py +3 -0
  6. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/sb_cdp.py +49 -26
  7. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/fixtures/base_case.py +53 -7
  8. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/fixtures/constants.py +6 -9
  9. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/fixtures/page_actions.py +1 -1
  10. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/plugins/driver_manager.py +4 -2
  11. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/plugins/pytest_plugin.py +50 -2
  12. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/plugins/sb_manager.py +4 -2
  13. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/plugins/selenium_plugin.py +4 -2
  14. {seleniumbase-4.43.3 → seleniumbase-4.44.0/seleniumbase.egg-info}/PKG-INFO +3 -3
  15. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase.egg-info/requires.txt +2 -2
  16. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/setup.py +2 -2
  17. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/.gitignore +0 -0
  18. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/LICENSE +0 -0
  19. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/MANIFEST.in +0 -0
  20. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/README.md +0 -0
  21. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/install.sh +0 -0
  22. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/pyproject.toml +0 -0
  23. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/pytest.ini +0 -0
  24. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/sbase/__init__.py +0 -0
  25. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/sbase/__main__.py +0 -0
  26. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/sbase/steps.py +0 -0
  27. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/__init__.py +0 -0
  28. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/__main__.py +0 -0
  29. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/behave/__init__.py +0 -0
  30. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/behave/behave_helper.py +0 -0
  31. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/behave/behave_sb.py +0 -0
  32. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/behave/steps.py +0 -0
  33. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/common/__init__.py +0 -0
  34. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/common/decorators.py +0 -0
  35. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/common/encryption.py +0 -0
  36. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/common/exceptions.py +0 -0
  37. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/common/obfuscate.py +0 -0
  38. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/common/unobfuscate.py +0 -0
  39. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/config/__init__.py +0 -0
  40. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/config/ad_block_list.py +0 -0
  41. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/config/proxy_list.py +0 -0
  42. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/config/settings.py +0 -0
  43. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/__init__.py +0 -0
  44. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/logo_helper.py +0 -0
  45. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/rich_helper.py +0 -0
  46. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/run.py +0 -0
  47. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  48. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  49. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/sb_commander.py +0 -0
  50. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/sb_install.py +0 -0
  51. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  52. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  53. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  54. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  55. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  56. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  57. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/sb_print.py +0 -0
  58. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  59. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/__init__.py +0 -0
  60. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/application_manager.py +0 -0
  61. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/capabilities_parser.py +0 -0
  62. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/colored_traceback.py +0 -0
  63. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/create_db_tables.sql +0 -0
  64. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/download_helper.py +0 -0
  65. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/encoded_images.py +0 -0
  66. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/jqc_helper.py +0 -0
  67. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/log_helper.py +0 -0
  68. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/mysql.py +0 -0
  69. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/proxy_helper.py +0 -0
  70. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/recorder_helper.py +0 -0
  71. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/report_helper.py +0 -0
  72. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/s3_manager.py +0 -0
  73. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/sb_driver.py +0 -0
  74. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/session_helper.py +0 -0
  75. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/settings_parser.py +0 -0
  76. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/style_sheet.py +0 -0
  77. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/testcase_manager.py +0 -0
  78. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/tour_helper.py +0 -0
  79. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/core/visual_helper.py +0 -0
  80. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/drivers/__init__.py +0 -0
  81. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/drivers/atlas_drivers/__init__.py +0 -0
  82. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
  83. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
  84. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
  85. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
  86. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
  87. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/extensions/__init__.py +0 -0
  88. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/extensions/ad_block.zip +0 -0
  89. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/extensions/disable_csp.zip +0 -0
  90. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/extensions/recorder.zip +0 -0
  91. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/extensions/sbase_ext.zip +0 -0
  92. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/fixtures/__init__.py +0 -0
  93. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  94. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/fixtures/errors.py +0 -0
  95. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/fixtures/js_utils.py +0 -0
  96. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/fixtures/page_utils.py +0 -0
  97. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/fixtures/shared_utils.py +0 -0
  98. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/fixtures/unittest_helper.py +0 -0
  99. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/fixtures/words.py +0 -0
  100. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  101. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/js_code/__init__.py +0 -0
  102. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/js_code/active_css_js.py +0 -0
  103. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/js_code/live_js.py +0 -0
  104. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/js_code/recorder_js.py +0 -0
  105. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/masterqa/__init__.py +0 -0
  106. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/masterqa/master_qa.py +0 -0
  107. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/plugins/__init__.py +0 -0
  108. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/plugins/base_plugin.py +0 -0
  109. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/plugins/basic_test_info.py +0 -0
  110. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  111. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/plugins/page_source.py +0 -0
  112. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  113. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/plugins/screen_shots.py +0 -0
  114. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/resources/__init__.py +0 -0
  115. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/translate/__init__.py +0 -0
  116. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/translate/chinese.py +0 -0
  117. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/translate/dutch.py +0 -0
  118. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/translate/french.py +0 -0
  119. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/translate/italian.py +0 -0
  120. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/translate/japanese.py +0 -0
  121. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/translate/korean.py +0 -0
  122. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/translate/master_dict.py +0 -0
  123. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/translate/portuguese.py +0 -0
  124. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/translate/russian.py +0 -0
  125. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/translate/spanish.py +0 -0
  126. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/translate/translator.py +0 -0
  127. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/undetected/__init__.py +0 -0
  128. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/undetected/cdp.py +0 -0
  129. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  130. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  131. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
  132. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
  133. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  134. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
  135. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  136. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  137. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/undetected/dprocess.py +0 -0
  138. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/undetected/options.py +0 -0
  139. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/undetected/patcher.py +0 -0
  140. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/undetected/reactor.py +0 -0
  141. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/undetected/webelement.py +0 -0
  142. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/utilities/__init__.py +0 -0
  143. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  144. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  145. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  146. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  147. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  148. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  149. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  150. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  151. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  152. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  153. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  154. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  155. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  156. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase.egg-info/SOURCES.txt +0 -0
  157. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase.egg-info/dependency_links.txt +0 -0
  158. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase.egg-info/entry_points.txt +0 -0
  159. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/seleniumbase.egg-info/top_level.txt +0 -0
  160. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/setup.cfg +0 -0
  161. {seleniumbase-4.43.3 → seleniumbase-4.44.0}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.43.3
3
+ Version: 4.44.0
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
@@ -60,7 +60,7 @@ Requires-Python: >=3.8
60
60
  Description-Content-Type: text/markdown
61
61
  License-File: LICENSE
62
62
  Requires-Dist: pip>=25.0.1; python_version < "3.9"
63
- Requires-Dist: pip>=25.2; python_version >= "3.9"
63
+ Requires-Dist: pip>=25.3; python_version >= "3.9"
64
64
  Requires-Dist: packaging>=25.0
65
65
  Requires-Dist: setuptools~=70.2; python_version < "3.10"
66
66
  Requires-Dist: setuptools>=80.9.0; python_version >= "3.10"
@@ -113,7 +113,7 @@ 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.37.0; python_version >= "3.10"
116
+ Requires-Dist: selenium==4.38.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
@@ -1,5 +1,5 @@
1
1
  pip>=25.0.1;python_version<"3.9"
2
- pip>=25.2;python_version>="3.9"
2
+ pip>=25.3;python_version>="3.9"
3
3
  packaging>=25.0
4
4
  setuptools~=70.2;python_version<"3.10"
5
5
  setuptools>=80.9.0;python_version>="3.10"
@@ -52,7 +52,7 @@ websocket-client~=1.8.0;python_version<"3.9"
52
52
  websocket-client~=1.9.0;python_version>="3.9"
53
53
  selenium==4.27.1;python_version<"3.9"
54
54
  selenium==4.32.0;python_version>="3.9" and python_version<"3.10"
55
- selenium==4.37.0;python_version>="3.10"
55
+ selenium==4.38.0;python_version>="3.10"
56
56
  cssselect==1.2.0;python_version<"3.9"
57
57
  cssselect==1.3.0;python_version>="3.9"
58
58
  sortedcontainers==2.4.0
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.43.3"
2
+ __version__ = "4.44.0"
@@ -551,6 +551,19 @@ def uc_open_with_tab(driver, url):
551
551
 
552
552
  def uc_open_with_reconnect(driver, url, reconnect_time=None):
553
553
  """Open a url, disconnect chromedriver, wait, and reconnect."""
554
+ if (
555
+ hasattr(sb_config, "_cdp_browser")
556
+ and sb_config._cdp_browser in ["comet", "opera", "atlas"]
557
+ ):
558
+ if not __is_cdp_swap_needed(driver):
559
+ if not driver.current_url.startswith(
560
+ ("about", "data", "chrome")
561
+ ):
562
+ driver.get("about:blank")
563
+ uc_activate_cdp_mode(driver, url)
564
+ else:
565
+ driver.cdp.open(url)
566
+ return
554
567
  url = shared_utils.fix_url_as_needed(url)
555
568
  if __is_cdp_swap_needed(driver):
556
569
  driver.cdp.get(url)
@@ -885,6 +898,7 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
885
898
  cdp.assert_not_in = CDPM.assert_not_in
886
899
  cdp.scroll_into_view = CDPM.scroll_into_view
887
900
  cdp.scroll_to_y = CDPM.scroll_to_y
901
+ cdp.scroll_by_y = CDPM.scroll_by_y
888
902
  cdp.scroll_to_top = CDPM.scroll_to_top
889
903
  cdp.scroll_to_bottom = CDPM.scroll_to_bottom
890
904
  cdp.scroll_up = CDPM.scroll_up
@@ -2979,12 +2993,16 @@ def get_driver(
2979
2993
  driver_dir = DRIVER_DIR_CHS
2980
2994
  if _special_binary_exists(binary_location, "opera"):
2981
2995
  driver_dir = DRIVER_DIR_OPERA
2996
+ sb_config._cdp_browser = "opera"
2982
2997
  if _special_binary_exists(binary_location, "brave"):
2983
2998
  driver_dir = DRIVER_DIR_BRAVE
2999
+ sb_config._cdp_browser = "brave"
2984
3000
  if _special_binary_exists(binary_location, "comet"):
2985
3001
  driver_dir = DRIVER_DIR_COMET
3002
+ sb_config._cdp_browser = "comet"
2986
3003
  if _special_binary_exists(binary_location, "atlas"):
2987
3004
  driver_dir = DRIVER_DIR_ATLAS
3005
+ sb_config._cdp_browser = "atlas"
2988
3006
  if (
2989
3007
  hasattr(sb_config, "settings")
2990
3008
  and hasattr(sb_config.settings, "NEW_DRIVER_DIR")
@@ -2997,6 +3015,8 @@ def get_driver(
2997
3015
  browser_name = browser
2998
3016
  else:
2999
3017
  browser_name = "chrome" # The default if not specified
3018
+ if browser_name in constants.ChromiumSubs.chromium_subs:
3019
+ browser_name = "chrome"
3000
3020
  browser_name = browser_name.lower()
3001
3021
  if headless2 and browser_name == constants.Browser.FIREFOX:
3002
3022
  headless2 = False # Only for Chromium
@@ -278,6 +278,7 @@ def opera_on_windows_path(browser_type=None):
278
278
  ),
279
279
  ):
280
280
  for subitem in (
281
+ "Programs/Opera",
281
282
  "Opera",
282
283
  "Opera/Application",
283
284
  ):
@@ -336,6 +337,7 @@ def comet_on_windows_path(browser_type=None):
336
337
  ):
337
338
  for subitem in (
338
339
  "Comet/Application",
340
+ "Programs/Comet",
339
341
  ):
340
342
  try:
341
343
  candidates.append(os.sep.join((item, subitem, "Comet.exe")))
@@ -364,6 +366,7 @@ def atlas_on_windows_path(browser_type=None):
364
366
  ):
365
367
  for subitem in (
366
368
  "Atlas/Application",
369
+ "Programs/Atlas",
367
370
  ):
368
371
  try:
369
372
  candidates.append(os.sep.join((item, subitem, "Atlas.exe")))
@@ -1029,12 +1029,19 @@ class CDPMethods():
1029
1029
  return self.loop.run_until_complete(self.page.js_dumps(obj_name))
1030
1030
 
1031
1031
  def maximize(self):
1032
- if self.get_window()[1].window_state.value == "maximized":
1033
- return
1034
- elif self.get_window()[1].window_state.value == "minimized":
1035
- self.loop.run_until_complete(self.page.maximize())
1036
- time.sleep(0.044)
1037
- return self.loop.run_until_complete(self.page.maximize())
1032
+ try:
1033
+ if self.get_window()[1].window_state.value == "maximized":
1034
+ return
1035
+ elif self.get_window()[1].window_state.value == "minimized":
1036
+ self.loop.run_until_complete(self.page.maximize())
1037
+ time.sleep(0.044)
1038
+ return self.loop.run_until_complete(self.page.maximize())
1039
+ except Exception:
1040
+ with suppress(Exception):
1041
+ width = self.evaluate("screen.availWidth;")
1042
+ height = self.evaluate("screen.availHeight;")
1043
+ self.__set_window_rect(0, 0, width, height)
1044
+ return
1038
1045
 
1039
1046
  def minimize(self):
1040
1047
  if self.get_window()[1].window_state.value != "minimized":
@@ -1725,18 +1732,18 @@ class CDPMethods():
1725
1732
  win_x = window_rect["x"]
1726
1733
  win_y = window_rect["y"]
1727
1734
  scr_width = pyautogui.size().width
1728
- self.maximize()
1729
- self.__add_light_pause()
1730
- win_width = self.get_window_size()["width"]
1735
+ win_width = self.evaluate("screen.availWidth;")
1731
1736
  width_ratio = round(float(scr_width) / float(win_width), 2)
1732
1737
  width_ratio += 0.01
1733
1738
  if width_ratio < 0.45 or width_ratio > 2.55:
1734
1739
  width_ratio = 1.01
1735
1740
  sb_config._saved_width_ratio = width_ratio
1736
- self.minimize()
1737
- self.__add_light_pause()
1738
- self.__set_window_rect(win_x, win_y, width, height)
1739
- self.__add_light_pause()
1741
+ with suppress(Exception):
1742
+ self.get_window() # If this fails, skip the rest
1743
+ self.minimize()
1744
+ self.__add_light_pause()
1745
+ self.__set_window_rect(win_x, win_y, width, height)
1746
+ self.__add_light_pause()
1740
1747
  x = x * (width_ratio + 0.03)
1741
1748
  y = y * (width_ratio - 0.03)
1742
1749
  self.bring_active_window_to_front()
@@ -2021,18 +2028,18 @@ class CDPMethods():
2021
2028
  win_x = window_rect["x"]
2022
2029
  win_y = window_rect["y"]
2023
2030
  scr_width = pyautogui.size().width
2024
- self.maximize()
2025
- self.__add_light_pause()
2026
- win_width = self.get_window_size()["width"]
2031
+ win_width = self.evaluate("screen.availWidth;")
2027
2032
  width_ratio = round(float(scr_width) / float(win_width), 2)
2028
2033
  width_ratio += 0.01
2029
2034
  if width_ratio < 0.45 or width_ratio > 2.55:
2030
2035
  width_ratio = 1.01
2031
2036
  sb_config._saved_width_ratio = width_ratio
2032
- self.minimize()
2033
- self.__add_light_pause()
2034
- self.__set_window_rect(win_x, win_y, width, height)
2035
- self.__add_light_pause()
2037
+ with suppress(Exception):
2038
+ self.get_window() # If this fails, skip the rest
2039
+ self.minimize()
2040
+ self.__add_light_pause()
2041
+ self.__set_window_rect(win_x, win_y, width, height)
2042
+ self.__add_light_pause()
2036
2043
  x1 = x1 * width_ratio
2037
2044
  y1 = y1 * (width_ratio - 0.02)
2038
2045
  x2 = x2 * width_ratio
@@ -2114,15 +2121,14 @@ class CDPMethods():
2114
2121
  width_ratio = sb_config._saved_width_ratio
2115
2122
  else:
2116
2123
  scr_width = pyautogui.size().width
2117
- self.maximize()
2118
- self.__add_light_pause()
2119
- win_width = self.get_window_size()["width"]
2124
+ win_width = self.evaluate("screen.availWidth;")
2120
2125
  width_ratio = round(float(scr_width) / float(win_width), 2)
2121
2126
  width_ratio += 0.01
2122
2127
  if width_ratio < 0.45 or width_ratio > 2.55:
2123
2128
  width_ratio = 1.01
2124
2129
  sb_config._saved_width_ratio = width_ratio
2125
- self.__set_window_rect(win_x, win_y, width, height)
2130
+ with suppress(Exception):
2131
+ self.__set_window_rect(win_x, win_y, width, height)
2126
2132
  self.__add_light_pause()
2127
2133
  self.bring_active_window_to_front()
2128
2134
  elif (
@@ -2694,6 +2700,13 @@ class CDPMethods():
2694
2700
  self.loop.run_until_complete(self.page.evaluate(js_code))
2695
2701
  self.loop.run_until_complete(self.page.wait())
2696
2702
 
2703
+ def scroll_by_y(self, y):
2704
+ y = int(y)
2705
+ js_code = "window.scrollBy(0, %s);" % y
2706
+ with suppress(Exception):
2707
+ self.loop.run_until_complete(self.page.evaluate(js_code))
2708
+ self.loop.run_until_complete(self.page.wait())
2709
+
2697
2710
  def scroll_to_top(self):
2698
2711
  js_code = "window.scrollTo(0, 0);"
2699
2712
  with suppress(Exception):
@@ -2707,11 +2720,21 @@ class CDPMethods():
2707
2720
  self.loop.run_until_complete(self.page.wait())
2708
2721
 
2709
2722
  def scroll_up(self, amount=25):
2710
- self.loop.run_until_complete(self.page.scroll_up(amount))
2723
+ """Scrolls up as a percentage of the page."""
2724
+ try:
2725
+ self.loop.run_until_complete(self.page.scroll_up(amount))
2726
+ except Exception:
2727
+ amount = self.get_window_size()["height"] * amount / 100
2728
+ self.execute_script("window.scrollBy(0, -%s);" % amount)
2711
2729
  self.loop.run_until_complete(self.page.wait())
2712
2730
 
2713
2731
  def scroll_down(self, amount=25):
2714
- self.loop.run_until_complete(self.page.scroll_down(amount))
2732
+ """Scrolls down as a percentage of the page."""
2733
+ try:
2734
+ self.loop.run_until_complete(self.page.scroll_down(amount))
2735
+ except Exception:
2736
+ amount = self.get_window_size()["height"] * amount / 100
2737
+ self.execute_script("window.scrollBy(0, %s);" % amount)
2715
2738
  self.loop.run_until_complete(self.page.wait())
2716
2739
 
2717
2740
  def save_page_source(self, name, folder=None):
@@ -3577,9 +3577,18 @@ class BaseCase(unittest.TestCase):
3577
3577
  self.cdp.maximize()
3578
3578
  return
3579
3579
  self._check_browser()
3580
- self.driver.maximize_window()
3580
+ try:
3581
+ self.driver.maximize_window()
3582
+ except Exception:
3583
+ with suppress(Exception):
3584
+ width = self.execute_script("return screen.availWidth;")
3585
+ height = self.execute_script("return screen.availHeight;")
3586
+ self.set_window_rect(0, 0, width, height)
3581
3587
  self.__demo_mode_pause_if_active(tiny=True)
3582
3588
 
3589
+ def maximize(self):
3590
+ self.maximize_window()
3591
+
3583
3592
  def minimize_window(self):
3584
3593
  self.__check_scope()
3585
3594
  if self.__is_cdp_swap_needed():
@@ -3589,6 +3598,9 @@ class BaseCase(unittest.TestCase):
3589
3598
  self.driver.minimize_window()
3590
3599
  self.__demo_mode_pause_if_active(tiny=True)
3591
3600
 
3601
+ def minimize(self):
3602
+ self.minimize_window()
3603
+
3592
3604
  def reset_window_size(self):
3593
3605
  self.__check_scope()
3594
3606
  if self.__is_cdp_swap_needed():
@@ -4344,7 +4356,7 @@ class BaseCase(unittest.TestCase):
4344
4356
  if self.is_chromium():
4345
4357
  try:
4346
4358
  if self.maximize_option:
4347
- self.driver.maximize_window()
4359
+ self.maximize_window()
4348
4360
  self.wait_for_ready_state_complete()
4349
4361
  else:
4350
4362
  pass # Now handled in browser_launcher.py
@@ -4354,7 +4366,7 @@ class BaseCase(unittest.TestCase):
4354
4366
  elif self.browser == "firefox":
4355
4367
  try:
4356
4368
  if self.maximize_option:
4357
- self.driver.maximize_window()
4369
+ self.maximize_window()
4358
4370
  self.wait_for_ready_state_complete()
4359
4371
  else:
4360
4372
  with suppress(Exception):
@@ -4364,7 +4376,7 @@ class BaseCase(unittest.TestCase):
4364
4376
  elif self.browser == "safari":
4365
4377
  if self.maximize_option:
4366
4378
  try:
4367
- self.driver.maximize_window()
4379
+ self.maximize_window()
4368
4380
  self.wait_for_ready_state_complete()
4369
4381
  except Exception:
4370
4382
  pass # Keep existing browser resolution
@@ -6511,6 +6523,34 @@ class BaseCase(unittest.TestCase):
6511
6523
  self.execute_script(scroll_script)
6512
6524
  time.sleep(0.012)
6513
6525
 
6526
+ def scroll_by_y(self, y):
6527
+ """Scrolls page by y pixels."""
6528
+ self.__check_scope()
6529
+ y = int(y)
6530
+ if self.__is_cdp_swap_needed():
6531
+ self.cdp.scroll_by_y(y)
6532
+ return
6533
+ scroll_script = "window.scrollBy(0, %s);" % y
6534
+ with suppress(Exception):
6535
+ self.execute_script(scroll_script)
6536
+ time.sleep(0.012)
6537
+
6538
+ def scroll_up(self, amount=25):
6539
+ """Scrolls up as a percentage of the page."""
6540
+ if self.__is_cdp_swap_needed():
6541
+ self.cdp.scroll_up(amount)
6542
+ return
6543
+ amount = self.get_window_size()["height"] * amount / 100
6544
+ self.execute_script("window.scrollBy(0, -%s);" % amount)
6545
+
6546
+ def scroll_down(self, amount=25):
6547
+ """Scrolls down as a percentage of the page."""
6548
+ if self.__is_cdp_swap_needed():
6549
+ self.cdp.scroll_down(amount)
6550
+ return
6551
+ amount = self.get_window_size()["height"] * amount / 100
6552
+ self.execute_script("window.scrollBy(0, %s);" % amount)
6553
+
6514
6554
  def click_xpath(self, xpath):
6515
6555
  """Technically, self.click() automatically detects xpath selectors,
6516
6556
  so self.click_xpath() is just a longer name for the same action."""
@@ -11408,7 +11448,13 @@ class BaseCase(unittest.TestCase):
11408
11448
 
11409
11449
  def __is_cdp_swap_needed(self):
11410
11450
  """If the driver is disconnected, use a CDP method when available."""
11411
- return shared_utils.is_cdp_swap_needed(self.driver)
11451
+ cdp_swap_needed = shared_utils.is_cdp_swap_needed(self.driver)
11452
+ if cdp_swap_needed:
11453
+ if not self.cdp:
11454
+ self.cdp = self.driver.cdp
11455
+ return True
11456
+ else:
11457
+ return False
11412
11458
 
11413
11459
  ############
11414
11460
 
@@ -14001,7 +14047,7 @@ class BaseCase(unittest.TestCase):
14001
14047
  )
14002
14048
  raise Exception(message)
14003
14049
  except InvalidArgumentException:
14004
- if not self.browser == "chrome":
14050
+ if not self.is_chromium():
14005
14051
  raise
14006
14052
  chrome_version = self.driver.capabilities["browserVersion"]
14007
14053
  major_chrome_version = chrome_version.split(".")[0]
@@ -14616,7 +14662,7 @@ class BaseCase(unittest.TestCase):
14616
14662
  try:
14617
14663
  shadow_root = element.shadow_root
14618
14664
  except Exception:
14619
- if self.browser == "chrome":
14665
+ if self.is_chromium():
14620
14666
  chrome_dict = self.driver.capabilities["chrome"]
14621
14667
  chrome_dr_version = chrome_dict["chromedriverVersion"]
14622
14668
  chromedriver_version = chrome_dr_version.split(" ")[0]
@@ -264,16 +264,13 @@ class Reveal:
264
264
 
265
265
 
266
266
  class HighCharts:
267
+ LIB = "https://cdn.jsdelivr.net/npm/highcharts"
267
268
  VER = "10.3.3"
268
- HC_CSS = "https://code.highcharts.com/%s/css/highcharts.css" % VER
269
- HC_JS = "https://code.highcharts.com/%s/highcharts.js" % VER
270
- EXPORTING_JS = "https://code.highcharts.com/%s/modules/exporting.js" % VER
271
- EXPORT_DATA_JS = (
272
- "https://code.highcharts.com/%s/modules/export-data.js" % VER
273
- )
274
- ACCESSIBILITY_JS = (
275
- "https://code.highcharts.com/%s/modules/accessibility.js" % VER
276
- )
269
+ HC_CSS = "%s@%s/css/highcharts.css" % (LIB, VER)
270
+ HC_JS = "%s@%s/highcharts.js" % (LIB, VER)
271
+ EXPORTING_JS = "%s@%s/modules/exporting.js" % (LIB, VER)
272
+ EXPORT_DATA_JS = "%s@%s/modules/export-data.js" % (LIB, VER)
273
+ ACCESSIBILITY_JS = "%s@%s/modules/accessibility.js" % (LIB, VER)
277
274
 
278
275
 
279
276
  class BootstrapTour:
@@ -1530,7 +1530,7 @@ def save_page_source(driver, name, folder=None):
1530
1530
  rendered_source = log_helper.get_html_source_with_base_href(
1531
1531
  driver, page_source
1532
1532
  )
1533
- html_file = open(html_file_path, "w+", "utf-8")
1533
+ html_file = open(html_file_path, mode="w+", encoding="utf-8")
1534
1534
  html_file.write(rendered_source)
1535
1535
  html_file.close()
1536
1536
 
@@ -455,8 +455,6 @@ def Driver(
455
455
  )
456
456
  if sb_config._browser_shortcut:
457
457
  browser = sb_config._browser_shortcut
458
- if browser in constants.ChromiumSubs.chromium_subs:
459
- browser = "chrome" # Still uses chromedriver
460
458
  if headless is None:
461
459
  if "--headless" in sys_argv:
462
460
  headless = True
@@ -953,6 +951,10 @@ def Driver(
953
951
  driver_version = None
954
952
  break
955
953
  count += 1
954
+ if browser in constants.ChromiumSubs.chromium_subs:
955
+ if not binary_location:
956
+ browser = "chrome" # Still uses chromedriver
957
+ sb_config._browser_shortcut = browser
956
958
  browser_name = browser
957
959
 
958
960
  # Launch a web browser
@@ -1676,8 +1676,23 @@ def pytest_configure(config):
1676
1676
  sb_config.browser = config.getoption("browser")
1677
1677
  if sb_config._browser_shortcut:
1678
1678
  sb_config.browser = sb_config._browser_shortcut
1679
- if sb_config.browser in constants.ChromiumSubs.chromium_subs:
1680
- sb_config.browser = "chrome" # Still uses chromedriver
1679
+ elif sys_argv == ["-c"]: # Multithreading messes with args
1680
+ if config.getoption("use_opera"):
1681
+ bin_loc = detect_b_ver.get_binary_location("opera")
1682
+ if bin_loc and os.path.exists(bin_loc):
1683
+ sb_config.browser = "opera"
1684
+ elif config.getoption("use_brave"):
1685
+ bin_loc = detect_b_ver.get_binary_location("brave")
1686
+ if bin_loc and os.path.exists(bin_loc):
1687
+ sb_config.browser = "brave"
1688
+ elif config.getoption("use_comet"):
1689
+ bin_loc = detect_b_ver.get_binary_location("comet")
1690
+ if bin_loc and os.path.exists(bin_loc):
1691
+ sb_config.browser = "comet"
1692
+ elif config.getoption("use_atlas"):
1693
+ bin_loc = detect_b_ver.get_binary_location("atlas")
1694
+ if bin_loc and os.path.exists(bin_loc):
1695
+ sb_config.browser = "atlas"
1681
1696
  sb_config.account = config.getoption("account")
1682
1697
  sb_config.data = config.getoption("data")
1683
1698
  sb_config.var1 = config.getoption("var1")
@@ -1714,6 +1729,35 @@ def pytest_configure(config):
1714
1729
  sb_config.binary_location = config.getoption("binary_location")
1715
1730
  if hasattr(sb_config, "_cdp_bin_loc") and sb_config._cdp_bin_loc:
1716
1731
  sb_config.binary_location = sb_config._cdp_bin_loc
1732
+ elif not sb_config.binary_location:
1733
+ if (
1734
+ config.getoption("use_opera")
1735
+ or sb_config._browser_shortcut == "opera"
1736
+ ):
1737
+ bin_loc = detect_b_ver.get_binary_location("opera")
1738
+ if bin_loc and os.path.exists(bin_loc):
1739
+ sb_config.binary_location = bin_loc
1740
+ elif (
1741
+ config.getoption("use_brave")
1742
+ or sb_config._browser_shortcut == "brave"
1743
+ ):
1744
+ bin_loc = detect_b_ver.get_binary_location("brave")
1745
+ if bin_loc and os.path.exists(bin_loc):
1746
+ sb_config.binary_location = bin_loc
1747
+ elif (
1748
+ config.getoption("use_comet")
1749
+ or sb_config._browser_shortcut == "comet"
1750
+ ):
1751
+ bin_loc = detect_b_ver.get_binary_location("comet")
1752
+ if bin_loc and os.path.exists(bin_loc):
1753
+ sb_config.binary_location = bin_loc
1754
+ elif (
1755
+ config.getoption("use_atlas")
1756
+ or sb_config._browser_shortcut == "atlas"
1757
+ ):
1758
+ bin_loc = detect_b_ver.get_binary_location("atlas")
1759
+ if bin_loc and os.path.exists(bin_loc):
1760
+ sb_config.binary_location = bin_loc
1717
1761
  if config.getoption("use_cft") and not sb_config.binary_location:
1718
1762
  sb_config.binary_location = "cft"
1719
1763
  elif config.getoption("use_chs") and not sb_config.binary_location:
@@ -1726,6 +1770,10 @@ def pytest_configure(config):
1726
1770
  sb_config.headless = True
1727
1771
  sb_config.headless1 = False
1728
1772
  sb_config.headless2 = False
1773
+ if sb_config.browser in constants.ChromiumSubs.chromium_subs:
1774
+ if not sb_config.binary_location:
1775
+ sb_config.browser = "chrome" # Still uses chromedriver
1776
+ sb_config._browser_shortcut = sb_config.browser
1729
1777
  sb_config.driver_version = config.getoption("driver_version")
1730
1778
  sb_config.page_load_strategy = config.getoption("page_load_strategy")
1731
1779
  sb_config.with_testing_base = config.getoption("with_testing_base")
@@ -1132,8 +1132,6 @@ def SB(
1132
1132
  sb_config.browser = browser
1133
1133
  if sb_config._browser_shortcut:
1134
1134
  sb_config.browser = sb_config._browser_shortcut
1135
- if sb_config.browser in constants.ChromiumSubs.chromium_subs:
1136
- sb_config.browser = "chrome" # Still uses chromedriver
1137
1135
  if not hasattr(sb_config, "is_behave"):
1138
1136
  sb_config.is_behave = False
1139
1137
  if not hasattr(sb_config, "is_pytest"):
@@ -1242,6 +1240,10 @@ def SB(
1242
1240
  sb_config.interval = interval
1243
1241
  sb_config.cap_file = cap_file
1244
1242
  sb_config.cap_string = cap_string
1243
+ if sb_config.browser in constants.ChromiumSubs.chromium_subs:
1244
+ if not sb_config.binary_location:
1245
+ sb_config.browser = "chrome" # Still uses chromedriver
1246
+ sb_config._browser_shortcut = sb_config.browser
1245
1247
 
1246
1248
  sb = BaseCase()
1247
1249
  sb.with_testing_base = sb_config.with_testing_base
@@ -1302,8 +1302,6 @@ class SeleniumBrowser(Plugin):
1302
1302
  if sb_config._browser_shortcut:
1303
1303
  self.options.browser = sb_config._browser_shortcut
1304
1304
  test.test.browser = sb_config._browser_shortcut
1305
- if test.test.browser in constants.ChromiumSubs.chromium_subs:
1306
- test.test.browser = "chrome" # Still uses chromedriver
1307
1305
  test.test.cap_file = self.options.cap_file
1308
1306
  test.test.cap_string = self.options.cap_string
1309
1307
  test.test.headless = self.options.headless
@@ -1355,6 +1353,10 @@ class SeleniumBrowser(Plugin):
1355
1353
  test.test.headless = True
1356
1354
  test.test.headless1 = False
1357
1355
  test.test.headless2 = False
1356
+ if test.test.browser in constants.ChromiumSubs.chromium_subs:
1357
+ if not sb_config.binary_location:
1358
+ test.test.browser = "chrome" # Still uses chromedriver
1359
+ sb_config._browser_shortcut = test.test.browser
1358
1360
  test.test.driver_version = self.options.driver_version
1359
1361
  test.test.page_load_strategy = self.options.page_load_strategy
1360
1362
  test.test.chromium_arg = self.options.chromium_arg
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.43.3
3
+ Version: 4.44.0
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
@@ -60,7 +60,7 @@ Requires-Python: >=3.8
60
60
  Description-Content-Type: text/markdown
61
61
  License-File: LICENSE
62
62
  Requires-Dist: pip>=25.0.1; python_version < "3.9"
63
- Requires-Dist: pip>=25.2; python_version >= "3.9"
63
+ Requires-Dist: pip>=25.3; python_version >= "3.9"
64
64
  Requires-Dist: packaging>=25.0
65
65
  Requires-Dist: setuptools~=70.2; python_version < "3.10"
66
66
  Requires-Dist: setuptools>=80.9.0; python_version >= "3.10"
@@ -113,7 +113,7 @@ 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.37.0; python_version >= "3.10"
116
+ Requires-Dist: selenium==4.38.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
@@ -72,13 +72,13 @@ setuptools>=80.9.0
72
72
  filelock>=3.20.0
73
73
  platformdirs>=4.5.0
74
74
  urllib3<2.6.0,>=1.26.20
75
- selenium==4.37.0
75
+ selenium==4.38.0
76
76
  iniconfig==2.3.0
77
77
  pytest-rerunfailures==16.1
78
78
  markdown-it-py==4.0.0
79
79
 
80
80
  [:python_version >= "3.9"]
81
- pip>=25.2
81
+ pip>=25.3
82
82
  attrs>=25.4.0
83
83
  websockets>=15.0.1
84
84
  typing-extensions>=4.15.0
@@ -148,7 +148,7 @@ setup(
148
148
  python_requires=">=3.8",
149
149
  install_requires=[
150
150
  'pip>=25.0.1;python_version<"3.9"',
151
- 'pip>=25.2;python_version>="3.9"',
151
+ 'pip>=25.3;python_version>="3.9"',
152
152
  'packaging>=25.0',
153
153
  'setuptools~=70.2;python_version<"3.10"', # Newer ones had issues
154
154
  'setuptools>=80.9.0;python_version>="3.10"',
@@ -201,7 +201,7 @@ setup(
201
201
  'websocket-client~=1.9.0;python_version>="3.9"',
202
202
  'selenium==4.27.1;python_version<"3.9"',
203
203
  'selenium==4.32.0;python_version>="3.9" and python_version<"3.10"',
204
- 'selenium==4.37.0;python_version>="3.10"',
204
+ 'selenium==4.38.0;python_version>="3.10"',
205
205
  'cssselect==1.2.0;python_version<"3.9"',
206
206
  'cssselect==1.3.0;python_version>="3.9"',
207
207
  "sortedcontainers==2.4.0",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes