seleniumbase 4.37.10__tar.gz → 4.37.12__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 (156) hide show
  1. {seleniumbase-4.37.10/seleniumbase.egg-info → seleniumbase-4.37.12}/PKG-INFO +2 -2
  2. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/requirements.txt +1 -1
  3. seleniumbase-4.37.12/seleniumbase/__version__.py +2 -0
  4. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/browser_launcher.py +17 -0
  5. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/fixtures/base_case.py +12 -0
  6. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/plugins/sb_manager.py +5 -1
  7. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/undetected/__init__.py +1 -3
  8. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/undetected/cdp_driver/connection.py +7 -3
  9. {seleniumbase-4.37.10 → seleniumbase-4.37.12/seleniumbase.egg-info}/PKG-INFO +2 -2
  10. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase.egg-info/requires.txt +1 -1
  11. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/setup.py +1 -1
  12. seleniumbase-4.37.10/seleniumbase/__version__.py +0 -2
  13. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/.gitignore +0 -0
  14. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/LICENSE +0 -0
  15. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/MANIFEST.in +0 -0
  16. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/README.md +0 -0
  17. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/install.sh +0 -0
  18. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/pyproject.toml +0 -0
  19. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/pytest.ini +0 -0
  20. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/sbase/__init__.py +0 -0
  21. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/sbase/__main__.py +0 -0
  22. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/sbase/steps.py +0 -0
  23. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/__init__.py +0 -0
  24. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/__main__.py +0 -0
  25. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/behave/__init__.py +0 -0
  26. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/behave/behave_helper.py +0 -0
  27. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/behave/behave_sb.py +0 -0
  28. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/behave/steps.py +0 -0
  29. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/common/__init__.py +0 -0
  30. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/common/decorators.py +0 -0
  31. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/common/encryption.py +0 -0
  32. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/common/exceptions.py +0 -0
  33. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/common/obfuscate.py +0 -0
  34. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/common/unobfuscate.py +0 -0
  35. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/config/__init__.py +0 -0
  36. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/config/ad_block_list.py +0 -0
  37. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/config/proxy_list.py +0 -0
  38. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/config/settings.py +0 -0
  39. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/__init__.py +0 -0
  40. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/logo_helper.py +0 -0
  41. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/rich_helper.py +0 -0
  42. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/run.py +0 -0
  43. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  44. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  45. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/sb_commander.py +0 -0
  46. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/sb_install.py +0 -0
  47. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  48. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  49. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  50. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  51. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  52. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  53. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/sb_print.py +0 -0
  54. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  55. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/__init__.py +0 -0
  56. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/application_manager.py +0 -0
  57. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/capabilities_parser.py +0 -0
  58. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/colored_traceback.py +0 -0
  59. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/create_db_tables.sql +0 -0
  60. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/detect_b_ver.py +0 -0
  61. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/download_helper.py +0 -0
  62. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/encoded_images.py +0 -0
  63. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/jqc_helper.py +0 -0
  64. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/log_helper.py +0 -0
  65. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/mysql.py +0 -0
  66. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/proxy_helper.py +0 -0
  67. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/recorder_helper.py +0 -0
  68. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/report_helper.py +0 -0
  69. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/s3_manager.py +0 -0
  70. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/sb_cdp.py +0 -0
  71. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/sb_driver.py +0 -0
  72. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/session_helper.py +0 -0
  73. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/settings_parser.py +0 -0
  74. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/style_sheet.py +0 -0
  75. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/testcase_manager.py +0 -0
  76. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/tour_helper.py +0 -0
  77. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/core/visual_helper.py +0 -0
  78. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/drivers/__init__.py +0 -0
  79. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/extensions/__init__.py +0 -0
  80. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/extensions/ad_block.zip +0 -0
  81. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/extensions/disable_csp.zip +0 -0
  82. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/extensions/recorder.zip +0 -0
  83. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/extensions/sbase_ext.zip +0 -0
  84. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/fixtures/__init__.py +0 -0
  85. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/fixtures/constants.py +0 -0
  86. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  87. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/fixtures/errors.py +0 -0
  88. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/fixtures/js_utils.py +0 -0
  89. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/fixtures/page_actions.py +0 -0
  90. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/fixtures/page_utils.py +0 -0
  91. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/fixtures/shared_utils.py +0 -0
  92. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/fixtures/unittest_helper.py +0 -0
  93. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/fixtures/words.py +0 -0
  94. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  95. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/js_code/__init__.py +0 -0
  96. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/js_code/active_css_js.py +0 -0
  97. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/js_code/live_js.py +0 -0
  98. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/js_code/recorder_js.py +0 -0
  99. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/masterqa/__init__.py +0 -0
  100. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/masterqa/master_qa.py +0 -0
  101. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/plugins/__init__.py +0 -0
  102. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/plugins/base_plugin.py +0 -0
  103. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/plugins/basic_test_info.py +0 -0
  104. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  105. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/plugins/driver_manager.py +0 -0
  106. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/plugins/page_source.py +0 -0
  107. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/plugins/pytest_plugin.py +0 -0
  108. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  109. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/plugins/screen_shots.py +0 -0
  110. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/plugins/selenium_plugin.py +0 -0
  111. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/resources/__init__.py +0 -0
  112. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/translate/__init__.py +0 -0
  113. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/translate/chinese.py +0 -0
  114. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/translate/dutch.py +0 -0
  115. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/translate/french.py +0 -0
  116. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/translate/italian.py +0 -0
  117. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/translate/japanese.py +0 -0
  118. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/translate/korean.py +0 -0
  119. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/translate/master_dict.py +0 -0
  120. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/translate/portuguese.py +0 -0
  121. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/translate/russian.py +0 -0
  122. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/translate/spanish.py +0 -0
  123. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/translate/translator.py +0 -0
  124. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/undetected/cdp.py +0 -0
  125. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  126. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  127. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
  128. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
  129. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  130. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  131. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  132. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/undetected/dprocess.py +0 -0
  133. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/undetected/options.py +0 -0
  134. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/undetected/patcher.py +0 -0
  135. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/undetected/reactor.py +0 -0
  136. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/undetected/webelement.py +0 -0
  137. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/utilities/__init__.py +0 -0
  138. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  139. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  140. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  141. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  142. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  143. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  144. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  145. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  146. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  147. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  148. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  149. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  150. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  151. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase.egg-info/SOURCES.txt +0 -0
  152. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase.egg-info/dependency_links.txt +0 -0
  153. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase.egg-info/entry_points.txt +0 -0
  154. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/seleniumbase.egg-info/top_level.txt +0 -0
  155. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/setup.cfg +0 -0
  156. {seleniumbase-4.37.10 → seleniumbase-4.37.12}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.37.10
3
+ Version: 4.37.12
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
@@ -63,7 +63,7 @@ Requires-Dist: pip>=25.0.1; python_version < "3.9"
63
63
  Requires-Dist: pip>=25.1; python_version >= "3.9"
64
64
  Requires-Dist: packaging>=25.0
65
65
  Requires-Dist: setuptools~=70.2; python_version < "3.10"
66
- Requires-Dist: setuptools>=80.0.0; python_version >= "3.10"
66
+ Requires-Dist: setuptools>=80.1.0; python_version >= "3.10"
67
67
  Requires-Dist: wheel>=0.45.1
68
68
  Requires-Dist: attrs>=25.3.0
69
69
  Requires-Dist: certifi>=2025.4.26
@@ -2,7 +2,7 @@ pip>=25.0.1;python_version<"3.9"
2
2
  pip>=25.1;python_version>="3.9"
3
3
  packaging>=25.0
4
4
  setuptools~=70.2;python_version<"3.10"
5
- setuptools>=80.0.0;python_version>="3.10"
5
+ setuptools>=80.1.0;python_version>="3.10"
6
6
  wheel>=0.45.1
7
7
  attrs>=25.3.0
8
8
  certifi>=2025.4.26
@@ -0,0 +1,2 @@
1
+ # seleniumbase package
2
+ __version__ = "4.37.12"
@@ -543,6 +543,23 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
543
543
  if url_protocol not in ["about", "data", "chrome"]:
544
544
  safe_url = False
545
545
 
546
+ if (
547
+ hasattr(driver, "_is_using_cdp")
548
+ and driver._is_using_cdp
549
+ and hasattr(driver, "cdp")
550
+ and driver.cdp
551
+ and hasattr(driver.cdp, "loop")
552
+ ):
553
+ # CDP Mode was already initialized
554
+ driver.cdp.open(url, **kwargs)
555
+ if not safe_url:
556
+ time.sleep(constants.UC.CDP_MODE_OPEN_WAIT)
557
+ if IS_WINDOWS:
558
+ time.sleep(constants.UC.EXTRA_WINDOWS_WAIT)
559
+ else:
560
+ time.sleep(0.012)
561
+ return
562
+
546
563
  headless = False
547
564
  headed = None
548
565
  xvfb = None
@@ -3534,12 +3534,24 @@ class BaseCase(unittest.TestCase):
3534
3534
 
3535
3535
  def set_window_size(self, width, height):
3536
3536
  self.__check_scope()
3537
+ if self.__is_cdp_swap_needed():
3538
+ position = self.cdp.get_window_position()
3539
+ x = position["x"]
3540
+ y = position["y"]
3541
+ self.cdp.set_window_rect(x, y, width, height)
3542
+ return
3537
3543
  self._check_browser()
3538
3544
  self.driver.set_window_size(width, height)
3539
3545
  self.__demo_mode_pause_if_active(tiny=True)
3540
3546
 
3541
3547
  def set_window_position(self, x, y):
3542
3548
  self.__check_scope()
3549
+ if self.__is_cdp_swap_needed():
3550
+ size = self.cdp.get_window_size()
3551
+ width = size["width"]
3552
+ height = size["height"]
3553
+ self.cdp.set_window_rect(x, y, width, height)
3554
+ return
3543
3555
  self._check_browser()
3544
3556
  self.driver.set_window_position(x, y)
3545
3557
  self.__demo_mode_pause_if_active(tiny=True)
@@ -1372,7 +1372,11 @@ def SB(
1372
1372
  if undetectable and hasattr(sb, "_drivers_browser_map"):
1373
1373
  import asyncio
1374
1374
  for driver in sb._drivers_browser_map.keys():
1375
- if hasattr(driver, "cdp") and driver.cdp:
1375
+ if (
1376
+ hasattr(driver, "cdp")
1377
+ and driver.cdp
1378
+ and hasattr(driver.cdp, "loop")
1379
+ ):
1376
1380
  asyncio.set_event_loop(driver.cdp.loop)
1377
1381
  tasks = [tab.aclose() for tab in driver.cdp.get_tabs()]
1378
1382
  tasks.append(driver.cdp.driver.connection.aclose())
@@ -523,9 +523,7 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver):
523
523
  with suppress(Exception):
524
524
  for window_handle in self.window_handles:
525
525
  self.switch_to.window(window_handle)
526
- if self.current_url.startswith(
527
- "chrome-extension://"
528
- ):
526
+ if self.current_url.startswith("chrome-extension://"):
529
527
  # https://issues.chromium.org/issues/396611138
530
528
  # (Remove the Linux conditional when resolved)
531
529
  # (So that close() is always called)
@@ -273,7 +273,7 @@ class Connection(metaclass=CantTouchThis):
273
273
  except (Exception,) as e:
274
274
  logger.debug("Exception during opening of websocket: %s", e)
275
275
  if self.listener:
276
- self.listener.cancel()
276
+ await self.listener.cancel()
277
277
  raise
278
278
  if not self.listener or not self.listener.running:
279
279
  self.listener = Listener(self)
@@ -298,7 +298,7 @@ class Connection(metaclass=CantTouchThis):
298
298
  self.websocket_url
299
299
  )
300
300
  if self.listener and self.listener.running:
301
- self.listener.cancel()
301
+ await self.listener.cancel()
302
302
  self.enabled_domains.clear()
303
303
  logger.debug(
304
304
  "\n❌ Closed websocket connection to %s", self.websocket_url
@@ -554,9 +554,13 @@ class Listener:
554
554
  def time_before_considered_idle(self, seconds: Union[int, float]):
555
555
  self._time_before_considered_idle = seconds
556
556
 
557
- def cancel(self):
557
+ async def cancel(self):
558
558
  if self.task and not self.task.cancelled():
559
559
  self.task.cancel()
560
+ try:
561
+ await self.task
562
+ except asyncio.CancelledError:
563
+ pass
560
564
 
561
565
  @property
562
566
  def running(self):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.37.10
3
+ Version: 4.37.12
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
@@ -63,7 +63,7 @@ Requires-Dist: pip>=25.0.1; python_version < "3.9"
63
63
  Requires-Dist: pip>=25.1; python_version >= "3.9"
64
64
  Requires-Dist: packaging>=25.0
65
65
  Requires-Dist: setuptools~=70.2; python_version < "3.10"
66
- Requires-Dist: setuptools>=80.0.0; python_version >= "3.10"
66
+ Requires-Dist: setuptools>=80.1.0; python_version >= "3.10"
67
67
  Requires-Dist: wheel>=0.45.1
68
68
  Requires-Dist: attrs>=25.3.0
69
69
  Requires-Dist: certifi>=2025.4.26
@@ -67,7 +67,7 @@ cssselect==1.2.0
67
67
  pytest-rerunfailures==14.0
68
68
 
69
69
  [:python_version >= "3.10"]
70
- setuptools>=80.0.0
70
+ setuptools>=80.1.0
71
71
  urllib3<2.5.0,>=1.26.20
72
72
 
73
73
  [:python_version >= "3.9"]
@@ -151,7 +151,7 @@ setup(
151
151
  'pip>=25.1;python_version>="3.9"',
152
152
  'packaging>=25.0',
153
153
  'setuptools~=70.2;python_version<"3.10"', # Newer ones had issues
154
- 'setuptools>=80.0.0;python_version>="3.10"',
154
+ 'setuptools>=80.1.0;python_version>="3.10"',
155
155
  'wheel>=0.45.1',
156
156
  'attrs>=25.3.0',
157
157
  "certifi>=2025.4.26",
@@ -1,2 +0,0 @@
1
- # seleniumbase package
2
- __version__ = "4.37.10"
File without changes
File without changes
File without changes