seleniumbase 4.40.1__tar.gz → 4.40.3__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 (157) hide show
  1. {seleniumbase-4.40.1/seleniumbase.egg-info → seleniumbase-4.40.3}/PKG-INFO +3 -3
  2. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/requirements.txt +2 -2
  3. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/sbase/steps.py +9 -0
  4. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/__version__.py +1 -1
  5. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/behave/behave_helper.py +2 -0
  6. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/recorder_helper.py +3 -0
  7. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/fixtures/base_case.py +42 -3
  8. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/fixtures/page_actions.py +13 -3
  9. {seleniumbase-4.40.1 → seleniumbase-4.40.3/seleniumbase.egg-info}/PKG-INFO +3 -3
  10. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase.egg-info/requires.txt +2 -2
  11. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/setup.py +2 -2
  12. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/.gitignore +0 -0
  13. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/LICENSE +0 -0
  14. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/MANIFEST.in +0 -0
  15. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/README.md +0 -0
  16. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/install.sh +0 -0
  17. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/pyproject.toml +0 -0
  18. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/pytest.ini +0 -0
  19. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/sbase/__init__.py +0 -0
  20. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/sbase/__main__.py +0 -0
  21. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/__init__.py +0 -0
  22. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/__main__.py +0 -0
  23. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/behave/__init__.py +0 -0
  24. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/behave/behave_sb.py +0 -0
  25. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/behave/steps.py +0 -0
  26. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/common/__init__.py +0 -0
  27. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/common/decorators.py +0 -0
  28. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/common/encryption.py +0 -0
  29. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/common/exceptions.py +0 -0
  30. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/common/obfuscate.py +0 -0
  31. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/common/unobfuscate.py +0 -0
  32. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/config/__init__.py +0 -0
  33. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/config/ad_block_list.py +0 -0
  34. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/config/proxy_list.py +0 -0
  35. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/config/settings.py +0 -0
  36. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/__init__.py +0 -0
  37. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/logo_helper.py +0 -0
  38. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/rich_helper.py +0 -0
  39. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/run.py +0 -0
  40. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  41. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  42. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/sb_commander.py +0 -0
  43. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/sb_install.py +0 -0
  44. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  45. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  46. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  47. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  48. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  49. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  50. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/sb_print.py +0 -0
  51. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  52. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/__init__.py +0 -0
  53. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/application_manager.py +0 -0
  54. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/browser_launcher.py +0 -0
  55. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/capabilities_parser.py +0 -0
  56. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/colored_traceback.py +0 -0
  57. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/create_db_tables.sql +0 -0
  58. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/detect_b_ver.py +0 -0
  59. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/download_helper.py +0 -0
  60. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/encoded_images.py +0 -0
  61. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/jqc_helper.py +0 -0
  62. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/log_helper.py +0 -0
  63. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/mysql.py +0 -0
  64. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/proxy_helper.py +0 -0
  65. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/report_helper.py +0 -0
  66. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/s3_manager.py +0 -0
  67. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/sb_cdp.py +0 -0
  68. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/sb_driver.py +0 -0
  69. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/session_helper.py +0 -0
  70. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/settings_parser.py +0 -0
  71. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/style_sheet.py +0 -0
  72. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/testcase_manager.py +0 -0
  73. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/tour_helper.py +0 -0
  74. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/core/visual_helper.py +0 -0
  75. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/drivers/__init__.py +0 -0
  76. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
  77. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
  78. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/extensions/__init__.py +0 -0
  79. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/extensions/ad_block.zip +0 -0
  80. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/extensions/disable_csp.zip +0 -0
  81. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/extensions/recorder.zip +0 -0
  82. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/extensions/sbase_ext.zip +0 -0
  83. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/fixtures/__init__.py +0 -0
  84. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/fixtures/constants.py +0 -0
  85. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  86. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/fixtures/errors.py +0 -0
  87. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/fixtures/js_utils.py +0 -0
  88. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/fixtures/page_utils.py +0 -0
  89. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/fixtures/shared_utils.py +0 -0
  90. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/fixtures/unittest_helper.py +0 -0
  91. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/fixtures/words.py +0 -0
  92. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  93. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/js_code/__init__.py +0 -0
  94. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/js_code/active_css_js.py +0 -0
  95. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/js_code/live_js.py +0 -0
  96. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/js_code/recorder_js.py +0 -0
  97. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/masterqa/__init__.py +0 -0
  98. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/masterqa/master_qa.py +0 -0
  99. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/plugins/__init__.py +0 -0
  100. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/plugins/base_plugin.py +0 -0
  101. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/plugins/basic_test_info.py +0 -0
  102. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  103. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/plugins/driver_manager.py +0 -0
  104. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/plugins/page_source.py +0 -0
  105. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/plugins/pytest_plugin.py +0 -0
  106. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  107. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/plugins/sb_manager.py +0 -0
  108. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/plugins/screen_shots.py +0 -0
  109. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/plugins/selenium_plugin.py +0 -0
  110. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/resources/__init__.py +0 -0
  111. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/translate/__init__.py +0 -0
  112. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/translate/chinese.py +0 -0
  113. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/translate/dutch.py +0 -0
  114. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/translate/french.py +0 -0
  115. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/translate/italian.py +0 -0
  116. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/translate/japanese.py +0 -0
  117. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/translate/korean.py +0 -0
  118. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/translate/master_dict.py +0 -0
  119. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/translate/portuguese.py +0 -0
  120. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/translate/russian.py +0 -0
  121. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/translate/spanish.py +0 -0
  122. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/translate/translator.py +0 -0
  123. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/undetected/__init__.py +0 -0
  124. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/undetected/cdp.py +0 -0
  125. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  126. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  127. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
  128. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
  129. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  130. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
  131. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  132. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  133. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/undetected/dprocess.py +0 -0
  134. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/undetected/options.py +0 -0
  135. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/undetected/patcher.py +0 -0
  136. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/undetected/reactor.py +0 -0
  137. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/undetected/webelement.py +0 -0
  138. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/utilities/__init__.py +0 -0
  139. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  140. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  141. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  142. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  143. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  144. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  145. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  146. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  147. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  148. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  149. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  150. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  151. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  152. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase.egg-info/SOURCES.txt +0 -0
  153. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase.egg-info/dependency_links.txt +0 -0
  154. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase.egg-info/entry_points.txt +0 -0
  155. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/seleniumbase.egg-info/top_level.txt +0 -0
  156. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/setup.cfg +0 -0
  157. {seleniumbase-4.40.1 → seleniumbase-4.40.3}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.40.1
3
+ Version: 4.40.3
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
@@ -67,7 +67,7 @@ Requires-Dist: setuptools~=70.2; python_version < "3.10"
67
67
  Requires-Dist: setuptools>=80.9.0; python_version >= "3.10"
68
68
  Requires-Dist: wheel>=0.45.1
69
69
  Requires-Dist: attrs>=25.3.0
70
- Requires-Dist: certifi>=2025.6.15
70
+ Requires-Dist: certifi>=2025.7.9
71
71
  Requires-Dist: exceptiongroup>=1.3.0
72
72
  Requires-Dist: websockets~=13.1; python_version < "3.9"
73
73
  Requires-Dist: websockets>=15.0.1; python_version >= "3.9"
@@ -108,7 +108,7 @@ Requires-Dist: wsproto==1.2.0
108
108
  Requires-Dist: websocket-client==1.8.0
109
109
  Requires-Dist: selenium==4.27.1; python_version < "3.9"
110
110
  Requires-Dist: selenium==4.32.0; python_version >= "3.9" and python_version < "3.10"
111
- Requires-Dist: selenium==4.34.1; python_version >= "3.10"
111
+ Requires-Dist: selenium==4.34.2; python_version >= "3.10"
112
112
  Requires-Dist: cssselect==1.2.0; python_version < "3.9"
113
113
  Requires-Dist: cssselect==1.3.0; python_version >= "3.9"
114
114
  Requires-Dist: sortedcontainers==2.4.0
@@ -5,7 +5,7 @@ setuptools~=70.2;python_version<"3.10"
5
5
  setuptools>=80.9.0;python_version>="3.10"
6
6
  wheel>=0.45.1
7
7
  attrs>=25.3.0
8
- certifi>=2025.6.15
8
+ certifi>=2025.7.9
9
9
  exceptiongroup>=1.3.0
10
10
  websockets~=13.1;python_version<"3.9"
11
11
  websockets>=15.0.1;python_version>="3.9"
@@ -46,7 +46,7 @@ wsproto==1.2.0
46
46
  websocket-client==1.8.0
47
47
  selenium==4.27.1;python_version<"3.9"
48
48
  selenium==4.32.0;python_version>="3.9" and python_version<"3.10"
49
- selenium==4.34.1;python_version>="3.10"
49
+ selenium==4.34.2;python_version>="3.10"
50
50
  cssselect==1.2.0;python_version<"3.9"
51
51
  cssselect==1.3.0;python_version>="3.9"
52
52
  sortedcontainers==2.4.0
@@ -1191,6 +1191,15 @@ def set_attributes(context, selector, attribute, value):
1191
1191
  sb.set_attributes(selector, attribute, value)
1192
1192
 
1193
1193
 
1194
+ @step("Save page source to logs")
1195
+ @step("Save the page source to the logs")
1196
+ @step("User saves page source to logs")
1197
+ @step("User saves the page source to the logs")
1198
+ def save_page_source_to_logs(context):
1199
+ sb = context.sb
1200
+ sb.save_page_source_to_logs()
1201
+
1202
+
1194
1203
  @step("Activate CDP Mode")
1195
1204
  @step("User activates CDP Mode")
1196
1205
  def activate_cdp_mode(context):
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.40.1"
2
+ __version__ = "4.40.3"
@@ -522,6 +522,8 @@ def generate_gherkin(srt_actions):
522
522
  )
523
523
  elif action[0] == "ss_tl":
524
524
  sb_actions.append("Save screenshot to logs")
525
+ elif action[0] == "spstl":
526
+ sb_actions.append("Save page source to logs")
525
527
  elif action[0] == "sh_fc":
526
528
  sb_actions.append("Show file choosers")
527
529
  elif action[0] == "pr_da":
@@ -556,6 +556,9 @@ def generate_sbase_code(srt_actions):
556
556
  elif action[0] == "ss_tl":
557
557
  method = "save_screenshot_to_logs"
558
558
  sb_actions.append("self.%s()" % method)
559
+ elif action[0] == "spstl":
560
+ method = "save_page_source_to_logs"
561
+ sb_actions.append("self.%s()" % method)
559
562
  elif action[0] == "sh_fc":
560
563
  method = "show_file_choosers"
561
564
  sb_actions.append("self.%s()" % method)
@@ -132,6 +132,7 @@ class BaseCase(unittest.TestCase):
132
132
  self.__called_teardown = False
133
133
  self.__start_time_ms = int(time.time() * 1000.0)
134
134
  self.__requests_timeout = None
135
+ self.__page_source_count = 0
135
136
  self.__screenshot_count = 0
136
137
  self.__logs_data_count = 0
137
138
  self.__last_data_file = None
@@ -3590,7 +3591,7 @@ class BaseCase(unittest.TestCase):
3590
3591
  self.set_window_rect(x, y, width, height)
3591
3592
  self.__demo_mode_pause_if_active(tiny=True)
3592
3593
 
3593
- def switch_to_frame(self, frame="iframe", timeout=None):
3594
+ def switch_to_frame(self, frame="iframe", timeout=None, invisible=False):
3594
3595
  """Wait for an iframe to appear, and switch to it. This should be
3595
3596
  usable as a drop-in replacement for driver.switch_to.frame().
3596
3597
  The iframe identifier can be a selector, an index, an id, a name,
@@ -3598,7 +3599,8 @@ class BaseCase(unittest.TestCase):
3598
3599
  for visible iframes with a string selector.
3599
3600
  @Params
3600
3601
  frame - the frame element, name, id, index, or selector
3601
- timeout - the time to wait for the alert in seconds """
3602
+ timeout - the time to wait for the alert in seconds
3603
+ invisible - if True, the iframe can be invisible """
3602
3604
  self.__check_scope()
3603
3605
  if not timeout:
3604
3606
  timeout = settings.LARGE_TIMEOUT
@@ -3648,7 +3650,9 @@ class BaseCase(unittest.TestCase):
3648
3650
  time.sleep(0.035)
3649
3651
  if self.undetectable:
3650
3652
  time.sleep(0.035)
3651
- page_actions.switch_to_frame(self.driver, frame, timeout)
3653
+ page_actions.switch_to_frame(
3654
+ self.driver, frame, timeout, invisible=invisible
3655
+ )
3652
3656
  self.wait_for_ready_state_complete()
3653
3657
  if self.__needs_minimum_wait():
3654
3658
  time.sleep(0.015)
@@ -4512,6 +4516,40 @@ class BaseCase(unittest.TestCase):
4512
4516
  sb_config._has_logs = True
4513
4517
  return page_actions.save_screenshot(self.driver, name, test_logpath)
4514
4518
 
4519
+ def save_page_source_to_logs(self, name=None):
4520
+ """Saves the page HTML to the "latest_logs/" folder.
4521
+ Naming is automatic:
4522
+ If NO NAME provided: "_1_source.html", "_2_source.html", etc.
4523
+ If NAME IS provided, then: "_1_name.html", "_2_name.html", etc.
4524
+ (The last_page / failure page_source is always "page_source.html")"""
4525
+ if not self.__is_cdp_swap_needed():
4526
+ self.wait_for_ready_state_complete()
4527
+ test_logpath = os.path.join(self.log_path, self.__get_test_id())
4528
+ self.__create_log_path_as_needed(test_logpath)
4529
+ if name:
4530
+ name = str(name)
4531
+ self.__page_source_count += 1
4532
+ if not name or len(name) == 0:
4533
+ name = "_%s_source.html" % self.__page_source_count
4534
+ else:
4535
+ pre_name = "_%s_" % self.__page_source_count
4536
+ if len(name) >= 4 and name[-4:].lower() == ".html":
4537
+ name = name[:-4]
4538
+ if len(name) == 0:
4539
+ name = "source"
4540
+ name = "%s%s.html" % (pre_name, name)
4541
+ if self.recorder_mode:
4542
+ url = self.get_current_url()
4543
+ if url and len(url) > 0:
4544
+ if ("http:") in url or ("https:") in url or ("file:") in url:
4545
+ if self.get_session_storage_item("pause_recorder") == "no":
4546
+ time_stamp = self.execute_script("return Date.now();")
4547
+ origin = self.get_origin()
4548
+ action = ["spstl", "", origin, time_stamp]
4549
+ self.__extra_actions.append(action)
4550
+ sb_config._has_logs = True
4551
+ return page_actions.save_page_source(self.driver, name, test_logpath)
4552
+
4515
4553
  def save_data_to_logs(self, data, file_name=None):
4516
4554
  """Saves data to the "latest_logs/" data folder of the current test.
4517
4555
  If no file_name, file_name becomes: "data_1.txt", "data_2.txt", etc.
@@ -5470,6 +5508,7 @@ class BaseCase(unittest.TestCase):
5470
5508
  ext_actions.append("s_scr")
5471
5509
  ext_actions.append("ss_tf")
5472
5510
  ext_actions.append("ss_tl")
5511
+ ext_actions.append("spstl")
5473
5512
  ext_actions.append("da_el")
5474
5513
  ext_actions.append("da_ep")
5475
5514
  ext_actions.append("da_te")
@@ -1572,7 +1572,9 @@ def wait_for_and_switch_to_alert(driver, timeout=settings.LARGE_TIMEOUT):
1572
1572
  timeout_exception(Exception, message)
1573
1573
 
1574
1574
 
1575
- def switch_to_frame(driver, frame, timeout=settings.SMALL_TIMEOUT):
1575
+ def switch_to_frame(
1576
+ driver, frame, timeout=settings.SMALL_TIMEOUT, invisible=False
1577
+ ):
1576
1578
  """
1577
1579
  Wait for an iframe to appear, and switch to it. This should be
1578
1580
  usable as a drop-in replacement for driver.switch_to.frame().
@@ -1580,6 +1582,7 @@ def switch_to_frame(driver, frame, timeout=settings.SMALL_TIMEOUT):
1580
1582
  driver - the webdriver object (required)
1581
1583
  frame - the frame element, name, id, index, or selector
1582
1584
  timeout - the time to wait for the alert in seconds
1585
+ invisible - if True, the iframe can be invisible
1583
1586
  """
1584
1587
  _reconnect_if_disconnected(driver)
1585
1588
  start_ms = time.time() * 1000.0
@@ -1596,7 +1599,10 @@ def switch_to_frame(driver, frame, timeout=settings.SMALL_TIMEOUT):
1596
1599
  by = "xpath"
1597
1600
  else:
1598
1601
  by = "css selector"
1599
- if is_element_visible(driver, frame, by=by):
1602
+ if (
1603
+ is_element_visible(driver, frame, by=by)
1604
+ or (invisible and is_element_present(driver, frame, by=by))
1605
+ ):
1600
1606
  with suppress(Exception):
1601
1607
  element = driver.find_element(by=by, value=frame)
1602
1608
  driver.switch_to.frame(element)
@@ -1608,8 +1614,12 @@ def switch_to_frame(driver, frame, timeout=settings.SMALL_TIMEOUT):
1608
1614
  plural = "s"
1609
1615
  if timeout == 1:
1610
1616
  plural = ""
1611
- message = "Frame {%s} was not visible after %s second%s!" % (
1617
+ presence = "visible"
1618
+ if invisible:
1619
+ presence = "present"
1620
+ message = "Frame {%s} was not %s after %s second%s!" % (
1612
1621
  frame,
1622
+ presence,
1613
1623
  timeout,
1614
1624
  plural,
1615
1625
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.40.1
3
+ Version: 4.40.3
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
@@ -67,7 +67,7 @@ Requires-Dist: setuptools~=70.2; python_version < "3.10"
67
67
  Requires-Dist: setuptools>=80.9.0; python_version >= "3.10"
68
68
  Requires-Dist: wheel>=0.45.1
69
69
  Requires-Dist: attrs>=25.3.0
70
- Requires-Dist: certifi>=2025.6.15
70
+ Requires-Dist: certifi>=2025.7.9
71
71
  Requires-Dist: exceptiongroup>=1.3.0
72
72
  Requires-Dist: websockets~=13.1; python_version < "3.9"
73
73
  Requires-Dist: websockets>=15.0.1; python_version >= "3.9"
@@ -108,7 +108,7 @@ Requires-Dist: wsproto==1.2.0
108
108
  Requires-Dist: websocket-client==1.8.0
109
109
  Requires-Dist: selenium==4.27.1; python_version < "3.9"
110
110
  Requires-Dist: selenium==4.32.0; python_version >= "3.9" and python_version < "3.10"
111
- Requires-Dist: selenium==4.34.1; python_version >= "3.10"
111
+ Requires-Dist: selenium==4.34.2; python_version >= "3.10"
112
112
  Requires-Dist: cssselect==1.2.0; python_version < "3.9"
113
113
  Requires-Dist: cssselect==1.3.0; python_version >= "3.9"
114
114
  Requires-Dist: sortedcontainers==2.4.0
@@ -1,7 +1,7 @@
1
1
  packaging>=25.0
2
2
  wheel>=0.45.1
3
3
  attrs>=25.3.0
4
- certifi>=2025.6.15
4
+ certifi>=2025.7.9
5
5
  exceptiongroup>=1.3.0
6
6
  fasteners>=0.19
7
7
  mycdp>=1.2.0
@@ -69,7 +69,7 @@ pytest-xdist==3.6.1
69
69
  [:python_version >= "3.10"]
70
70
  setuptools>=80.9.0
71
71
  urllib3<2.6.0,>=1.26.20
72
- selenium==4.34.1
72
+ selenium==4.34.2
73
73
 
74
74
  [:python_version >= "3.9"]
75
75
  pip>=25.1.1
@@ -153,7 +153,7 @@ setup(
153
153
  'setuptools>=80.9.0;python_version>="3.10"',
154
154
  'wheel>=0.45.1',
155
155
  'attrs>=25.3.0',
156
- "certifi>=2025.6.15",
156
+ "certifi>=2025.7.9",
157
157
  "exceptiongroup>=1.3.0",
158
158
  'websockets~=13.1;python_version<"3.9"',
159
159
  'websockets>=15.0.1;python_version>="3.9"',
@@ -194,7 +194,7 @@ setup(
194
194
  'websocket-client==1.8.0',
195
195
  'selenium==4.27.1;python_version<"3.9"',
196
196
  'selenium==4.32.0;python_version>="3.9" and python_version<"3.10"',
197
- 'selenium==4.34.1;python_version>="3.10"',
197
+ 'selenium==4.34.2;python_version>="3.10"',
198
198
  'cssselect==1.2.0;python_version<"3.9"',
199
199
  'cssselect==1.3.0;python_version>="3.9"',
200
200
  "sortedcontainers==2.4.0",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes