seleniumbase 4.35.2__tar.gz → 4.35.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. {seleniumbase-4.35.2/seleniumbase.egg-info → seleniumbase-4.35.4}/PKG-INFO +3 -3
  2. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/requirements.txt +1 -1
  3. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/__version__.py +1 -1
  4. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/browser_launcher.py +10 -0
  5. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/sb_cdp.py +57 -10
  6. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/fixtures/base_case.py +7 -1
  7. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/undetected/__init__.py +1 -0
  8. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/undetected/cdp_driver/browser.py +5 -6
  9. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/undetected/cdp_driver/connection.py +1 -1
  10. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/undetected/cdp_driver/tab.py +1 -0
  11. {seleniumbase-4.35.2 → seleniumbase-4.35.4/seleniumbase.egg-info}/PKG-INFO +3 -3
  12. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase.egg-info/requires.txt +2 -2
  13. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/setup.py +2 -2
  14. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/.gitignore +0 -0
  15. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/LICENSE +0 -0
  16. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/MANIFEST.in +0 -0
  17. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/README.md +0 -0
  18. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/install.sh +0 -0
  19. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/pyproject.toml +0 -0
  20. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/pytest.ini +0 -0
  21. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/sbase/__init__.py +0 -0
  22. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/sbase/__main__.py +0 -0
  23. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/sbase/steps.py +0 -0
  24. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/__init__.py +0 -0
  25. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/__main__.py +0 -0
  26. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/behave/__init__.py +0 -0
  27. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/behave/behave_helper.py +0 -0
  28. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/behave/behave_sb.py +0 -0
  29. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/behave/steps.py +0 -0
  30. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/common/__init__.py +0 -0
  31. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/common/decorators.py +0 -0
  32. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/common/encryption.py +0 -0
  33. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/common/exceptions.py +0 -0
  34. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/common/obfuscate.py +0 -0
  35. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/common/unobfuscate.py +0 -0
  36. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/config/__init__.py +0 -0
  37. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/config/ad_block_list.py +0 -0
  38. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/config/proxy_list.py +0 -0
  39. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/config/settings.py +0 -0
  40. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/__init__.py +0 -0
  41. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/logo_helper.py +0 -0
  42. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/rich_helper.py +0 -0
  43. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/run.py +0 -0
  44. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  45. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  46. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/sb_commander.py +0 -0
  47. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/sb_install.py +0 -0
  48. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  49. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  50. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  51. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  52. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  53. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  54. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/sb_print.py +0 -0
  55. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  56. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/__init__.py +0 -0
  57. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/application_manager.py +0 -0
  58. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/capabilities_parser.py +0 -0
  59. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/colored_traceback.py +0 -0
  60. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/create_db_tables.sql +0 -0
  61. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/detect_b_ver.py +0 -0
  62. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/download_helper.py +0 -0
  63. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/encoded_images.py +0 -0
  64. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/jqc_helper.py +0 -0
  65. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/log_helper.py +0 -0
  66. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/mysql.py +0 -0
  67. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/proxy_helper.py +0 -0
  68. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/recorder_helper.py +0 -0
  69. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/report_helper.py +0 -0
  70. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/s3_manager.py +0 -0
  71. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/sb_driver.py +0 -0
  72. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/session_helper.py +0 -0
  73. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/settings_parser.py +0 -0
  74. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/style_sheet.py +0 -0
  75. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/testcase_manager.py +0 -0
  76. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/tour_helper.py +0 -0
  77. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/core/visual_helper.py +0 -0
  78. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/drivers/__init__.py +0 -0
  79. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/extensions/__init__.py +0 -0
  80. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/extensions/ad_block.zip +0 -0
  81. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/extensions/disable_csp.zip +0 -0
  82. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/extensions/recorder.zip +0 -0
  83. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/extensions/sbase_ext.zip +0 -0
  84. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/fixtures/__init__.py +0 -0
  85. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/fixtures/constants.py +0 -0
  86. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  87. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/fixtures/errors.py +0 -0
  88. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/fixtures/js_utils.py +0 -0
  89. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/fixtures/page_actions.py +0 -0
  90. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/fixtures/page_utils.py +0 -0
  91. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/fixtures/shared_utils.py +0 -0
  92. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/fixtures/unittest_helper.py +0 -0
  93. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/fixtures/words.py +0 -0
  94. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  95. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/js_code/__init__.py +0 -0
  96. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/js_code/active_css_js.py +0 -0
  97. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/js_code/live_js.py +0 -0
  98. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/js_code/recorder_js.py +0 -0
  99. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/masterqa/__init__.py +0 -0
  100. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/masterqa/master_qa.py +0 -0
  101. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/plugins/__init__.py +0 -0
  102. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/plugins/base_plugin.py +0 -0
  103. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/plugins/basic_test_info.py +0 -0
  104. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  105. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/plugins/driver_manager.py +0 -0
  106. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/plugins/page_source.py +0 -0
  107. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/plugins/pytest_plugin.py +0 -0
  108. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  109. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/plugins/sb_manager.py +0 -0
  110. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/plugins/screen_shots.py +0 -0
  111. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/plugins/selenium_plugin.py +0 -0
  112. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/resources/__init__.py +0 -0
  113. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/translate/__init__.py +0 -0
  114. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/translate/chinese.py +0 -0
  115. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/translate/dutch.py +0 -0
  116. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/translate/french.py +0 -0
  117. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/translate/italian.py +0 -0
  118. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/translate/japanese.py +0 -0
  119. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/translate/korean.py +0 -0
  120. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/translate/master_dict.py +0 -0
  121. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/translate/portuguese.py +0 -0
  122. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/translate/russian.py +0 -0
  123. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/translate/spanish.py +0 -0
  124. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/translate/translator.py +0 -0
  125. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/undetected/cdp.py +0 -0
  126. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  127. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  128. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
  129. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  130. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  131. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/undetected/dprocess.py +0 -0
  132. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/undetected/options.py +0 -0
  133. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/undetected/patcher.py +0 -0
  134. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/undetected/reactor.py +0 -0
  135. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/undetected/webelement.py +0 -0
  136. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/utilities/__init__.py +0 -0
  137. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  138. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  139. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  140. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  141. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  142. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  143. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  144. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  145. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  146. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  147. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  148. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  149. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  150. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase.egg-info/SOURCES.txt +0 -0
  151. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase.egg-info/dependency_links.txt +0 -0
  152. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase.egg-info/entry_points.txt +0 -0
  153. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/seleniumbase.egg-info/top_level.txt +0 -0
  154. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/setup.cfg +0 -0
  155. {seleniumbase-4.35.2 → seleniumbase-4.35.4}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: seleniumbase
3
- Version: 4.35.2
3
+ Version: 4.35.4
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
@@ -110,7 +110,7 @@ Requires-Dist: sortedcontainers==2.4.0
110
110
  Requires-Dist: execnet==2.1.1
111
111
  Requires-Dist: iniconfig==2.0.0
112
112
  Requires-Dist: pluggy==1.5.0
113
- Requires-Dist: pytest==8.3.4
113
+ Requires-Dist: pytest==8.3.5
114
114
  Requires-Dist: pytest-html==4.0.2
115
115
  Requires-Dist: pytest-metadata==3.1.1
116
116
  Requires-Dist: pytest-ordering==0.6
@@ -151,7 +151,7 @@ Requires-Dist: mss==9.0.2; extra == "mss"
151
151
  Provides-Extra: pdfminer
152
152
  Requires-Dist: pdfminer.six==20240706; extra == "pdfminer"
153
153
  Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
154
- Requires-Dist: cryptography==44.0.1; python_version >= "3.9" and extra == "pdfminer"
154
+ Requires-Dist: cryptography==44.0.2; python_version >= "3.9" and extra == "pdfminer"
155
155
  Requires-Dist: cffi==1.17.1; extra == "pdfminer"
156
156
  Requires-Dist: pycparser==2.22; extra == "pdfminer"
157
157
  Provides-Extra: pillow
@@ -49,7 +49,7 @@ sortedcontainers==2.4.0
49
49
  execnet==2.1.1
50
50
  iniconfig==2.0.0
51
51
  pluggy==1.5.0
52
- pytest==8.3.4
52
+ pytest==8.3.5
53
53
  pytest-html==4.0.2
54
54
  pytest-metadata==3.1.1
55
55
  pytest-ordering==0.6
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.35.2"
2
+ __version__ = "4.35.4"
@@ -682,6 +682,15 @@ def uc_open_with_cdp_mode(driver, url=None):
682
682
  cdp.gui_hover_element = CDPM.gui_hover_element
683
683
  cdp.gui_hover_and_click = CDPM.gui_hover_and_click
684
684
  cdp.internalize_links = CDPM.internalize_links
685
+ cdp.open_new_window = CDPM.open_new_window
686
+ cdp.switch_to_window = CDPM.switch_to_window
687
+ cdp.switch_to_newest_window = CDPM.switch_to_newest_window
688
+ cdp.open_new_tab = CDPM.open_new_tab
689
+ cdp.switch_to_tab = CDPM.switch_to_tab
690
+ cdp.switch_to_newest_tab = CDPM.switch_to_newest_tab
691
+ cdp.close_active_tab = CDPM.close_active_tab
692
+ cdp.get_active_tab = CDPM.get_active_tab
693
+ cdp.get_tabs = CDPM.get_tabs
685
694
  cdp.get_window = CDPM.get_window
686
695
  cdp.get_element_attributes = CDPM.get_element_attributes
687
696
  cdp.get_element_attribute = CDPM.get_element_attribute
@@ -2033,6 +2042,7 @@ def _set_chrome_options(
2033
2042
  prefs["download.default_directory"] = downloads_path
2034
2043
  prefs["download.directory_upgrade"] = True
2035
2044
  prefs["download.prompt_for_download"] = False
2045
+ prefs["download_bubble.partial_view_enabled"] = False
2036
2046
  prefs["credentials_enable_service"] = False
2037
2047
  prefs["local_discovery.notifications_enabled"] = False
2038
2048
  prefs["safebrowsing.enabled"] = False # Prevent PW "data breach" pop-ups
@@ -106,7 +106,7 @@ class CDPMethods():
106
106
  driver = self.driver
107
107
  if hasattr(driver, "cdp_base"):
108
108
  driver = driver.cdp_base
109
- self.page = self.loop.run_until_complete(driver.get(url))
109
+ self.loop.run_until_complete(self.page.get(url))
110
110
  url_protocol = url.split(":")[0]
111
111
  safe_url = True
112
112
  if url_protocol not in ["about", "data", "chrome"]:
@@ -1014,10 +1014,61 @@ class CDPMethods():
1014
1014
  self.set_window_rect(x, y, width, height)
1015
1015
  self.__add_light_pause()
1016
1016
 
1017
+ def open_new_window(self, url=None, switch_to=True):
1018
+ return self.open_new_tab(url=url, switch_to=switch_to)
1019
+
1020
+ def switch_to_window(self, window):
1021
+ self.switch_to_tab(window)
1022
+
1023
+ def switch_to_newest_window(self):
1024
+ self.switch_to_tab(-1)
1025
+
1026
+ def open_new_tab(self, url=None, switch_to=True):
1027
+ if not isinstance(url, str):
1028
+ url = "about:blank"
1029
+ self.loop.run_until_complete(self.page.get(url, new_tab=True))
1030
+ if switch_to:
1031
+ self.switch_to_newest_tab()
1032
+
1033
+ def switch_to_tab(self, tab):
1034
+ driver = self.driver
1035
+ if hasattr(driver, "cdp_base"):
1036
+ driver = driver.cdp_base
1037
+ if isinstance(tab, int):
1038
+ self.page = driver.tabs[tab]
1039
+ elif isinstance(tab, cdp_util.Tab):
1040
+ self.page = tab
1041
+ else:
1042
+ raise Exception("`tab` must be an int or a Tab type!")
1043
+ self.bring_active_window_to_front()
1044
+
1045
+ def switch_to_newest_tab(self):
1046
+ self.switch_to_tab(-1)
1047
+
1048
+ def close_active_tab(self):
1049
+ """Close the active tab.
1050
+ The active tab is the one currenly controlled by CDP.
1051
+ The active tab MIGHT NOT be the currently visible tab!
1052
+ (If a page opens a new tab, the new tab WON'T be active)
1053
+ To switch the active tab, call: sb.switch_to_tab(tab)"""
1054
+ return self.loop.run_until_complete(self.page.close())
1055
+
1056
+ def get_active_tab(self):
1057
+ """Return the active tab.
1058
+ The active tab is the one currenly controlled by CDP.
1059
+ The active tab MIGHT NOT be the currently visible tab!
1060
+ (If a page opens a new tab, the new tab WON'T be active)
1061
+ To switch the active tab, call: sb.switch_to_tab(tab)"""
1062
+ return self.page
1063
+
1064
+ def get_tabs(self):
1065
+ driver = self.driver
1066
+ if hasattr(driver, "cdp_base"):
1067
+ driver = driver.cdp_base
1068
+ return driver.tabs
1069
+
1017
1070
  def get_window(self):
1018
- return self.loop.run_until_complete(
1019
- self.page.get_window()
1020
- )
1071
+ return self.loop.run_until_complete(self.page.get_window())
1021
1072
 
1022
1073
  def get_text(self, selector):
1023
1074
  return self.find_element(selector).text_all
@@ -1211,14 +1262,10 @@ class CDPMethods():
1211
1262
  return ((e_x + e_width / 2.0) + 0.5, (e_y + e_height / 2.0) + 0.5)
1212
1263
 
1213
1264
  def get_document(self):
1214
- return self.loop.run_until_complete(
1215
- self.page.get_document()
1216
- )
1265
+ return self.loop.run_until_complete(self.page.get_document())
1217
1266
 
1218
1267
  def get_flattened_document(self):
1219
- return self.loop.run_until_complete(
1220
- self.page.get_flattened_document()
1221
- )
1268
+ return self.loop.run_until_complete(self.page.get_flattened_document())
1222
1269
 
1223
1270
  def get_element_attributes(self, selector):
1224
1271
  selector = self.__convert_to_css_if_xpath(selector)
@@ -3896,6 +3896,9 @@ class BaseCase(unittest.TestCase):
3896
3896
 
3897
3897
  def open_new_window(self, switch_to=True):
3898
3898
  """Opens a new browser tab/window and switches to it by default."""
3899
+ if self.__is_cdp_swap_needed():
3900
+ self.cdp.open_new_tab(switch_to=switch_to)
3901
+ return
3899
3902
  self.wait_for_ready_state_complete()
3900
3903
  if switch_to:
3901
3904
  try:
@@ -3918,6 +3921,9 @@ class BaseCase(unittest.TestCase):
3918
3921
  timeout = settings.SMALL_TIMEOUT
3919
3922
  if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
3920
3923
  timeout = self.__get_new_timeout(timeout)
3924
+ if self.__is_cdp_swap_needed() and not isinstance(window, str):
3925
+ self.cdp.switch_to_tab(window)
3926
+ return
3921
3927
  page_actions.switch_to_window(self.driver, window, timeout)
3922
3928
 
3923
3929
  def switch_to_default_window(self):
@@ -10336,7 +10342,7 @@ class BaseCase(unittest.TestCase):
10336
10342
  timeout = self.__get_new_timeout(timeout)
10337
10343
  selector, by = self.__recalculate_selector(selector, by)
10338
10344
  if self.__is_cdp_swap_needed():
10339
- return self.cdp.wait_for_text(
10345
+ return self.cdp.wait_for_text_not_visible(
10340
10346
  text, selector=selector, timeout=timeout
10341
10347
  )
10342
10348
  return page_actions.wait_for_text_not_visible(
@@ -477,6 +477,7 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver):
477
477
  with suppress(Exception):
478
478
  if self.service.is_connectable():
479
479
  self.stop_client()
480
+ time.sleep(0.003)
480
481
  self.service.stop()
481
482
  self._is_connected = False
482
483
 
@@ -660,7 +660,7 @@ class CookieJar:
660
660
  break
661
661
  else:
662
662
  connection = self._browser.connection
663
- cookies = await connection.send(cdp.storage.get_cookies())
663
+ cookies = await connection.send(cdp.network.get_cookies())
664
664
  if requests_cookie_format:
665
665
  import requests.cookies
666
666
 
@@ -690,8 +690,7 @@ class CookieJar:
690
690
  break
691
691
  else:
692
692
  connection = self._browser.connection
693
- cookies = await connection.send(cdp.storage.get_cookies())
694
- await connection.send(cdp.storage.set_cookies(cookies))
693
+ await connection.send(cdp.network.set_cookies(cookies))
695
694
 
696
695
  async def save(self, file: PathLike = ".session.dat", pattern: str = ".*"):
697
696
  """
@@ -718,7 +717,7 @@ class CookieJar:
718
717
  break
719
718
  else:
720
719
  connection = self._browser.connection
721
- cookies = await connection.send(cdp.storage.get_cookies())
720
+ cookies = await connection.send(cdp.network.get_cookies())
722
721
  # if not connection:
723
722
  # return
724
723
  # if not connection.websocket:
@@ -776,7 +775,7 @@ class CookieJar:
776
775
  cookie.value,
777
776
  )
778
777
  break
779
- await connection.send(cdp.storage.set_cookies(included_cookies))
778
+ await connection.send(cdp.network.set_cookies(included_cookies))
780
779
 
781
780
  async def clear(self):
782
781
  """
@@ -791,7 +790,7 @@ class CookieJar:
791
790
  break
792
791
  else:
793
792
  connection = self._browser.connection
794
- cookies = await connection.send(cdp.storage.get_cookies())
793
+ cookies = await connection.send(cdp.network.get_cookies())
795
794
  if cookies:
796
795
  await connection.send(cdp.storage.clear_cookies())
797
796
 
@@ -382,7 +382,7 @@ class Connection(metaclass=CantTouchThis):
382
382
  async def send(
383
383
  self,
384
384
  cdp_obj: Generator[dict[str, Any], dict[str, Any], Any],
385
- _is_update=False,
385
+ _is_update=True,
386
386
  ) -> Any:
387
387
  """
388
388
  Send a protocol command.
@@ -852,6 +852,7 @@ class Tab(Connection):
852
852
  await self.send(
853
853
  cdp.target.close_target(target_id=self.target.target_id)
854
854
  )
855
+ await asyncio.sleep(0.1)
855
856
 
856
857
  async def get_window(self) -> Tuple[
857
858
  cdp.browser.WindowID, cdp.browser.Bounds
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: seleniumbase
3
- Version: 4.35.2
3
+ Version: 4.35.4
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
@@ -110,7 +110,7 @@ Requires-Dist: sortedcontainers==2.4.0
110
110
  Requires-Dist: execnet==2.1.1
111
111
  Requires-Dist: iniconfig==2.0.0
112
112
  Requires-Dist: pluggy==1.5.0
113
- Requires-Dist: pytest==8.3.4
113
+ Requires-Dist: pytest==8.3.5
114
114
  Requires-Dist: pytest-html==4.0.2
115
115
  Requires-Dist: pytest-metadata==3.1.1
116
116
  Requires-Dist: pytest-ordering==0.6
@@ -151,7 +151,7 @@ Requires-Dist: mss==9.0.2; extra == "mss"
151
151
  Provides-Extra: pdfminer
152
152
  Requires-Dist: pdfminer.six==20240706; extra == "pdfminer"
153
153
  Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
154
- Requires-Dist: cryptography==44.0.1; python_version >= "3.9" and extra == "pdfminer"
154
+ Requires-Dist: cryptography==44.0.2; python_version >= "3.9" and extra == "pdfminer"
155
155
  Requires-Dist: cffi==1.17.1; extra == "pdfminer"
156
156
  Requires-Dist: pycparser==2.22; extra == "pdfminer"
157
157
  Provides-Extra: pillow
@@ -34,7 +34,7 @@ sortedcontainers==2.4.0
34
34
  execnet==2.1.1
35
35
  iniconfig==2.0.0
36
36
  pluggy==1.5.0
37
- pytest==8.3.4
37
+ pytest==8.3.5
38
38
  pytest-html==4.0.2
39
39
  pytest-metadata==3.1.1
40
40
  pytest-ordering==0.6
@@ -122,7 +122,7 @@ pycparser==2.22
122
122
  cryptography==39.0.2
123
123
 
124
124
  [pdfminer:python_version >= "3.9"]
125
- cryptography==44.0.1
125
+ cryptography==44.0.2
126
126
 
127
127
  [pillow]
128
128
 
@@ -198,7 +198,7 @@ setup(
198
198
  'execnet==2.1.1',
199
199
  'iniconfig==2.0.0',
200
200
  'pluggy==1.5.0',
201
- 'pytest==8.3.4',
201
+ 'pytest==8.3.5',
202
202
  "pytest-html==4.0.2", # Newer ones had issues
203
203
  'pytest-metadata==3.1.1',
204
204
  "pytest-ordering==0.6",
@@ -259,7 +259,7 @@ setup(
259
259
  "pdfminer": [
260
260
  'pdfminer.six==20240706',
261
261
  'cryptography==39.0.2;python_version<"3.9"',
262
- 'cryptography==44.0.1;python_version>="3.9"',
262
+ 'cryptography==44.0.2;python_version>="3.9"',
263
263
  'cffi==1.17.1',
264
264
  "pycparser==2.22",
265
265
  ],
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes