seleniumbase 4.54.4__tar.gz → 4.54.5__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 (164) hide show
  1. {seleniumbase-4.54.4/seleniumbase.egg-info → seleniumbase-4.54.5}/PKG-INFO +2 -2
  2. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/mcp_servers/server.py +81 -53
  3. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/requirements.txt +1 -1
  4. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/__version__.py +1 -1
  5. {seleniumbase-4.54.4 → seleniumbase-4.54.5/seleniumbase.egg-info}/PKG-INFO +2 -2
  6. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase.egg-info/requires.txt +1 -1
  7. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/setup.py +1 -1
  8. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/.gitignore +0 -0
  9. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/LICENSE +0 -0
  10. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/MANIFEST.in +0 -0
  11. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/README.md +0 -0
  12. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/install.sh +0 -0
  13. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/mcp_servers/__init__.py +0 -0
  14. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/pyproject.toml +0 -0
  15. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/pytest.ini +0 -0
  16. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/sbase/__init__.py +0 -0
  17. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/sbase/__main__.py +0 -0
  18. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/sbase/steps.py +0 -0
  19. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/__init__.py +0 -0
  20. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/__main__.py +0 -0
  21. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/behave/__init__.py +0 -0
  22. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/behave/behave_helper.py +0 -0
  23. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/behave/behave_sb.py +0 -0
  24. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/behave/steps.py +0 -0
  25. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/common/__init__.py +0 -0
  26. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/common/decorators.py +0 -0
  27. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/common/encryption.py +0 -0
  28. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/common/exceptions.py +0 -0
  29. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/common/obfuscate.py +0 -0
  30. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/common/unobfuscate.py +0 -0
  31. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/config/__init__.py +0 -0
  32. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/config/ad_block_list.py +0 -0
  33. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/config/proxy_list.py +0 -0
  34. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/config/settings.py +0 -0
  35. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/__init__.py +0 -0
  36. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/logo_helper.py +0 -0
  37. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/rich_helper.py +0 -0
  38. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/run.py +0 -0
  39. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  40. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  41. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/sb_commander.py +0 -0
  42. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/sb_install.py +0 -0
  43. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  44. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  45. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  46. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  47. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  48. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  49. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/sb_print.py +0 -0
  50. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  51. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/__init__.py +0 -0
  52. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/application_manager.py +0 -0
  53. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/browser_launcher.py +0 -0
  54. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/capabilities_parser.py +0 -0
  55. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/colored_traceback.py +0 -0
  56. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/create_db_tables.sql +0 -0
  57. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/detect_b_ver.py +0 -0
  58. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/download_helper.py +0 -0
  59. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/encoded_images.py +0 -0
  60. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/jqc_helper.py +0 -0
  61. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/log_helper.py +0 -0
  62. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/mysql.py +0 -0
  63. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/nest_asyncio.py +0 -0
  64. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/proxy_helper.py +0 -0
  65. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/recorder_helper.py +0 -0
  66. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/report_helper.py +0 -0
  67. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/s3_manager.py +0 -0
  68. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/sb_cdp.py +0 -0
  69. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/sb_driver.py +0 -0
  70. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/session_helper.py +0 -0
  71. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/settings_parser.py +0 -0
  72. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/style_sheet.py +0 -0
  73. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/testcase_manager.py +0 -0
  74. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/tour_helper.py +0 -0
  75. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/core/visual_helper.py +0 -0
  76. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/drivers/__init__.py +0 -0
  77. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
  78. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
  79. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
  80. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
  81. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
  82. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
  83. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/extensions/__init__.py +0 -0
  84. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/extensions/ad_block.zip +0 -0
  85. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/extensions/disable_csp.zip +0 -0
  86. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/extensions/recorder.zip +0 -0
  87. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/extensions/sbase_ext.zip +0 -0
  88. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/fixtures/__init__.py +0 -0
  89. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/fixtures/base_case.py +0 -0
  90. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/fixtures/constants.py +0 -0
  91. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  92. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/fixtures/errors.py +0 -0
  93. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/fixtures/js_utils.py +0 -0
  94. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/fixtures/page_actions.py +0 -0
  95. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/fixtures/page_utils.py +0 -0
  96. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/fixtures/shared_utils.py +0 -0
  97. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/fixtures/unittest_helper.py +0 -0
  98. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/fixtures/words.py +0 -0
  99. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  100. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/js_code/__init__.py +0 -0
  101. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/js_code/active_css_js.py +0 -0
  102. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/js_code/live_js.py +0 -0
  103. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/js_code/recorder_js.py +0 -0
  104. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/masterqa/__init__.py +0 -0
  105. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/masterqa/master_qa.py +0 -0
  106. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/plugins/__init__.py +0 -0
  107. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/plugins/base_plugin.py +0 -0
  108. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/plugins/basic_test_info.py +0 -0
  109. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  110. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/plugins/driver_manager.py +0 -0
  111. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/plugins/page_source.py +0 -0
  112. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/plugins/pytest_plugin.py +0 -0
  113. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  114. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/plugins/sb_manager.py +0 -0
  115. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/plugins/screen_shots.py +0 -0
  116. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/plugins/selenium_plugin.py +0 -0
  117. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/resources/__init__.py +0 -0
  118. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/translate/__init__.py +0 -0
  119. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/translate/chinese.py +0 -0
  120. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/translate/dutch.py +0 -0
  121. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/translate/french.py +0 -0
  122. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/translate/italian.py +0 -0
  123. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/translate/japanese.py +0 -0
  124. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/translate/korean.py +0 -0
  125. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/translate/master_dict.py +0 -0
  126. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/translate/portuguese.py +0 -0
  127. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/translate/russian.py +0 -0
  128. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/translate/spanish.py +0 -0
  129. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/translate/translator.py +0 -0
  130. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/undetected/__init__.py +0 -0
  131. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/undetected/cdp.py +0 -0
  132. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  133. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  134. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
  135. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
  136. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  137. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
  138. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  139. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  140. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/undetected/dprocess.py +0 -0
  141. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/undetected/options.py +0 -0
  142. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/undetected/patcher.py +0 -0
  143. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/undetected/reactor.py +0 -0
  144. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/undetected/webelement.py +0 -0
  145. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/utilities/__init__.py +0 -0
  146. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  147. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  148. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  149. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  150. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  151. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  152. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  153. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  154. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  155. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  156. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  157. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  158. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  159. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase.egg-info/SOURCES.txt +0 -0
  160. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase.egg-info/dependency_links.txt +0 -0
  161. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase.egg-info/entry_points.txt +0 -0
  162. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/seleniumbase.egg-info/top_level.txt +0 -0
  163. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/setup.cfg +0 -0
  164. {seleniumbase-4.54.4 → seleniumbase-4.54.5}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.54.4
3
+ Version: 4.54.5
4
4
  Summary: SeleniumBase is a framework for web crawling, scraping, and testing. Supports pytest. CDP Mode adds stealth. Includes many tools.
5
5
  Home-page: https://github.com/seleniumbase/SeleniumBase
6
6
  Author: Michael Mintz
@@ -126,7 +126,7 @@ Requires-Dist: allure-pytest>=2.16.0; extra == "allure"
126
126
  Requires-Dist: allure-python-commons>=2.16.0; extra == "allure"
127
127
  Requires-Dist: allure-behave>=2.16.0; extra == "allure"
128
128
  Provides-Extra: coverage
129
- Requires-Dist: coverage>=7.16.0; extra == "coverage"
129
+ Requires-Dist: coverage>=7.16.1; extra == "coverage"
130
130
  Requires-Dist: pytest-cov>=7.1.0; extra == "coverage"
131
131
  Provides-Extra: flake8
132
132
  Requires-Dist: flake8==7.3.0; extra == "flake8"
@@ -700,11 +700,11 @@ def click_element(
700
700
  parent element.
701
701
 
702
702
  Selection behavior:
703
- - `nth` is 1-based and takes precedence over every other click mode.
704
- - Otherwise, `all_matches=True` clicks every currently visible match.
705
- - Otherwise, `only_if_visible=True` clicks only if a match is visible.
706
- - Otherwise, `parent_selector` scopes the click to a nested element.
707
- - With none of the above, performs a normal SeleniumBase click.
703
+ - `nth` is 1-based and takes precedence over every other click mode.
704
+ - Otherwise, `all_matches=True` clicks every currently visible match.
705
+ - Otherwise, `only_if_visible=True` clicks only if a match is visible.
706
+ - Otherwise, `parent_selector` scopes the click to a nested element.
707
+ - With none of the above, performs a normal SeleniumBase click.
708
708
 
709
709
  Args:
710
710
  selector: CSS selector, XPath selector, or supported SeleniumBase
@@ -720,8 +720,8 @@ def click_element(
720
720
  in order of appearance. Ignored when `nth` is provided. Use only
721
721
  when multiple clicks are intentionally desired, such as for
722
722
  clicking all the checkboxes in a section of a webpage.
723
- If a click induces page navigation, then subsequent clicks are
724
- cancelled.
723
+ If any of the click actions induces page navigation, then
724
+ subsequent clicks are cancelled without any exceptions raised.
725
725
 
726
726
  only_if_visible: If True, click only when the target is already
727
727
  visible; do not wait for it to become visible.
@@ -737,14 +737,23 @@ def click_element(
737
737
  indexed click. Default: True.
738
738
 
739
739
  Examples:
740
- - Click one element: `click_element("button.submit")`
741
- - Click the 2nd matching element: `click_element("button", nth=2)`
742
- - Click all visible matches:
743
- `click_element(".dismiss", all_matches=True)`
744
- - Click only if already visible:
745
- `click_element("#menu", only_if_visible=True)`
746
- - Click inside a container:
747
- `click_element(".item", parent_selector="#result")`
740
+ - Click the first button: `click_element("button")`
741
+ - Click the 2nd button: `click_element("button", nth=2)`
742
+ - Click all checkboxes:
743
+ `click_element('input[type="checkbox"]', all_matches=True)`
744
+ - Click the first visible link:
745
+ `click_element("a", only_if_visible=True)`
746
+ - Click the first button that's inside the first iframe:
747
+ `click_element("button", parent_selector="iframe")`
748
+
749
+ Error behavior:
750
+ With the exception of using 'only_if_visible=True', if there's no
751
+ matching element found within the timeout, then @handle_sb_errors
752
+ returns details from the exception raised.
753
+
754
+ When not to use:
755
+ - Do not use this tool if you need to hover an element first before
756
+ clicking; use hover_action with action="hover_and_click" instead.
748
757
  """
749
758
  sb = _get_sb()
750
759
 
@@ -815,11 +824,15 @@ def hover_action(
815
824
  Returns:
816
825
  A confirmation message describing the performed operation's result.
817
826
 
818
- Errors:
827
+ Error behavior:
819
828
  If a required element cannot be found or interacted with within the
820
829
  applicable wait period, or if an error occurs during the action, the
821
830
  resulting exception message is returned through @handle_sb_errors.
831
+ Failing actions such as failed hover_and_click will raise exceptions.
822
832
 
833
+ When not to use:
834
+ - Do not use this tool to click if you don't need to hover an element
835
+ before clicking another; use 'click' instead.
823
836
  """
824
837
  sb = _get_sb()
825
838
 
@@ -1410,11 +1423,14 @@ def scroll_page(
1410
1423
  up/down scrolling. For example, amount=25 scrolls approximately
1411
1424
  one quarter of the viewport height.
1412
1425
 
1413
- Values greater than 100 for `amount` are allowed.
1414
- For example, 200 means approximately two viewport heights.
1426
+ Notes:
1427
+ Values greater than 100 for `amount` are allowed.
1428
+ For example, 200 means approximately two viewport heights.
1415
1429
 
1416
- Use focus_element(action="scroll_to_element") when the goal is to reveal
1417
- a specific element rather than scroll the page by a relative amount.
1430
+ Tool selection:
1431
+ - Need to reveal a specific element ->
1432
+ use 'focus_element' with action="scroll_to_element".
1433
+ - Need to scroll the page by a relative amount -> use 'scroll_page'.
1418
1434
  """
1419
1435
  sb = _get_sb()
1420
1436
 
@@ -1475,8 +1491,9 @@ def manage_window(
1475
1491
 
1476
1492
  height: Window height for "set_rect".
1477
1493
 
1478
- Use this tool for browser-window geometry and state.
1479
- Use `manage_tabs` for switching between browser tabs.
1494
+ Notes:
1495
+ Use this tool for browser-window geometry and state.
1496
+ Use `manage_tabs` for switching between browser tabs.
1480
1497
  """
1481
1498
  sb = _get_sb()
1482
1499
 
@@ -1507,12 +1524,12 @@ def manage_window(
1507
1524
  @handle_sb_errors
1508
1525
  def manage_tabs(
1509
1526
  action: Literal[
1510
- "list",
1511
- "open",
1512
- "switch",
1513
- "switch_newest",
1514
- "close_active",
1515
- ] = "list",
1527
+ "list_tabs",
1528
+ "open_new_tab",
1529
+ "switch_to_tab",
1530
+ "switch_to_newest_tab",
1531
+ "close_active_tab",
1532
+ ] = "list_tabs",
1516
1533
  url: str | None = None,
1517
1534
  tab_index: int | None = None,
1518
1535
  switch_to: bool = True,
@@ -1524,25 +1541,34 @@ def manage_tabs(
1524
1541
 
1525
1542
  Args:
1526
1543
  action:
1527
- - "list": Return each tab's index, URL, and title.
1528
- Use this to find the tab_index for "switch".
1529
- - "open": Open a new tab, optionally navigating it to `url`.
1530
- - "switch": Switch to the tab at tab_index from "list".
1531
- - "switch_newest": Switch to the newest tab.
1532
- - "close_active": Close the active tab.
1544
+ - "list_tabs": Return each tab's index, URL, and title.
1545
+ Use this to find the tab_index for "switch_to_tab".
1546
+ - "open_new_tab": Open a new tab, optionally navigating to `url`.
1547
+ - "switch_to_tab": Switch to the tab at tab_index from "list_tabs".
1548
+ - "switch_to_newest_tab": Switch to the newest tab.
1549
+ - "close_active_tab": Close the active tab. This action must be
1550
+ followed by a 'manage_tabs' action that switches to a new
1551
+ tab, such as "switch_to_tab" or "switch_to_newest_tab".
1552
+
1553
+ url: URL for "open_new_tab". If not provided, "about:blank" is used.
1533
1554
 
1534
- url: URL for "open".
1555
+ tab_index: Tab index from "list_tabs" that is only used for the
1556
+ "switch_to_tab" action.)
1535
1557
 
1536
- tab_index: Tab index from "list" for "switch".
1558
+ switch_to: If using "open_new_tab", switch to the new tab when True.
1537
1559
 
1538
- switch_to: For "open", switch to the new tab when True.
1560
+ Notes:
1561
+ Tab indexes are session-relative and may change after tabs are opened
1562
+ or closed. Use "list_tabs" to get current indexes before switching
1563
+ by index.
1539
1564
 
1540
- Tab indexes are session-relative and may change after tabs are opened or
1541
- closed. Use "list" to get current indexes before switching by index.
1565
+ Error behavior:
1566
+ If there's an error during any of the tab actions, then
1567
+ @handle_sb_errors will propagate the exception as an error message.
1542
1568
  """
1543
1569
  sb = _get_sb()
1544
1570
 
1545
- if action == "list":
1571
+ if action == "list_tabs":
1546
1572
  tabs = sb.get_tabs()
1547
1573
  return [
1548
1574
  {
@@ -1553,11 +1579,13 @@ def manage_tabs(
1553
1579
  for i, t in enumerate(tabs)
1554
1580
  ]
1555
1581
 
1556
- if action == "open":
1582
+ if action == "open_new_tab":
1583
+ if not url:
1584
+ url = "about:blank"
1557
1585
  sb.open_new_tab(url=url, switch_to=switch_to)
1558
1586
  return f"Opened new tab (url={url!r}, switch_to={switch_to})"
1559
1587
 
1560
- if action == "switch":
1588
+ if action == "switch_to_tab":
1561
1589
  if tab_index is None:
1562
1590
  return (
1563
1591
  "Error: action='switch' requires tab_index "
@@ -1575,17 +1603,17 @@ def manage_tabs(
1575
1603
  sb.switch_to_tab(tabs[tab_index])
1576
1604
  return f"Switched to tab {tab_index}"
1577
1605
 
1578
- if action == "switch_newest":
1606
+ if action == "switch_to_newest_tab":
1579
1607
  sb.switch_to_newest_tab()
1580
1608
  return "Switched to newest tab."
1581
1609
 
1582
- if action == "close_active":
1610
+ if action == "close_active_tab":
1583
1611
  sb.close_active_tab()
1584
1612
  return "Closed active tab."
1585
1613
 
1586
1614
  return (
1587
- f"Error: unknown action '{action}'. Use 'list', 'open', 'switch', "
1588
- f"'switch_newest', or 'close_active'."
1615
+ f"Error: unknown action '{action}'. Use 'list_tabs', 'open_new_tab', "
1616
+ f"'switch_to_tab', 'switch_to_newest_tab', or 'close_active_tab'."
1589
1617
  )
1590
1618
 
1591
1619
 
@@ -1601,12 +1629,12 @@ def solve_captcha() -> str:
1601
1629
 
1602
1630
  This tool attempts to interact with CAPTCHA controls such as Cloudflare
1603
1631
  Turnstile, reCAPTCHA, hCaptcha, DataDome Slider, or FriendlyCaptcha via
1604
- the Chrome DevTools Protocol (CDP), which is stealthier than JavaScript
1605
- actions because CDP actions can avoid triggering `isTrusted: false`.
1632
+ the Chrome DevTools Protocol (CDP), which is usually stealthier than
1633
+ JavaScript because CDP actions can avoid triggering `isTrusted: false`.
1606
1634
 
1607
1635
  This tool automatically detects the coordinates of CAPTCHA checkboxes
1608
1636
  for determining the correct location to perform the click. If no CAPTCHA
1609
- is detected on the current page, then no click action is performed.
1637
+ is detected on the current page, then no click action is attempted.
1610
1638
 
1611
1639
  The tool does not guarantee that the CAPTCHA was solved. Some CAPTCHA
1612
1640
  controls are embedded inside shadow DOM or otherwise do not expose an
@@ -1616,13 +1644,13 @@ def solve_captcha() -> str:
1616
1644
  Tool workflow:
1617
1645
  1. Inspect the webpage with get_content when you need to
1618
1646
  determine whether CAPTCHA-related controls are present.
1619
- 2. Call solve_captcha to attempt the CAPTCHA interaction.
1620
- 3. Use get_page_info, get_content, check_if_condition,
1621
- or manage_cookies to inspect resulting page/session state.
1647
+ 2. Call 'solve_captcha' to attempt the CAPTCHA interaction.
1648
+ 3. Use 'get_page_info', 'get_content', 'check_if_condition',
1649
+ or 'manage_cookies' to inspect resulting page/session state.
1622
1650
 
1623
1651
  Returns:
1624
1652
  A message confirming that the CAPTCHA interaction was attempted.
1625
- (There's no guarantee that the CAPTCHA challenge was solved.)
1653
+ The message is the same for both successful and failed attempts.
1626
1654
  """
1627
1655
  sb = _get_sb()
1628
1656
  sb.solve_captcha()
@@ -65,7 +65,7 @@ rich>=15.0.0,<16
65
65
  # --- Testing Requirements --- #
66
66
  # ("pip install -r requirements.txt" also installs this, but "pip install -e ." won't.)
67
67
 
68
- coverage>=7.16.0
68
+ coverage>=7.16.1
69
69
  pytest-cov>=7.1.0
70
70
  flake8==7.3.0
71
71
  mccabe==0.7.0
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.54.4"
2
+ __version__ = "4.54.5"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.54.4
3
+ Version: 4.54.5
4
4
  Summary: SeleniumBase is a framework for web crawling, scraping, and testing. Supports pytest. CDP Mode adds stealth. Includes many tools.
5
5
  Home-page: https://github.com/seleniumbase/SeleniumBase
6
6
  Author: Michael Mintz
@@ -126,7 +126,7 @@ Requires-Dist: allure-pytest>=2.16.0; extra == "allure"
126
126
  Requires-Dist: allure-python-commons>=2.16.0; extra == "allure"
127
127
  Requires-Dist: allure-behave>=2.16.0; extra == "allure"
128
128
  Provides-Extra: coverage
129
- Requires-Dist: coverage>=7.16.0; extra == "coverage"
129
+ Requires-Dist: coverage>=7.16.1; extra == "coverage"
130
130
  Requires-Dist: pytest-cov>=7.1.0; extra == "coverage"
131
131
  Provides-Extra: flake8
132
132
  Requires-Dist: flake8==7.3.0; extra == "flake8"
@@ -78,7 +78,7 @@ allure-python-commons>=2.16.0
78
78
  allure-behave>=2.16.0
79
79
 
80
80
  [coverage]
81
- coverage>=7.16.0
81
+ coverage>=7.16.1
82
82
  pytest-cov>=7.1.0
83
83
 
84
84
  [flake8]
@@ -240,7 +240,7 @@ setup(
240
240
  # pip install -e .[coverage]
241
241
  # Usage: coverage run -m pytest; coverage html; coverage report
242
242
  "coverage": [
243
- 'coverage>=7.16.0',
243
+ 'coverage>=7.16.1',
244
244
  'pytest-cov>=7.1.0',
245
245
  ],
246
246
  # pip install -e .[flake8]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes