seleniumbase 4.41.11__tar.gz → 4.42.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. {seleniumbase-4.41.11/seleniumbase.egg-info → seleniumbase-4.42.0}/PKG-INFO +9 -8
  2. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/README.md +4 -4
  3. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/requirements.txt +4 -3
  4. seleniumbase-4.42.0/seleniumbase/__version__.py +2 -0
  5. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/browser_launcher.py +2 -0
  6. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/sb_driver.py +10 -0
  7. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/base_case.py +14 -0
  8. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/page_actions.py +16 -0
  9. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/shared_utils.py +13 -1
  10. {seleniumbase-4.41.11 → seleniumbase-4.42.0/seleniumbase.egg-info}/PKG-INFO +9 -8
  11. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase.egg-info/requires.txt +4 -3
  12. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/setup.py +4 -3
  13. seleniumbase-4.41.11/seleniumbase/__version__.py +0 -2
  14. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/.gitignore +0 -0
  15. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/LICENSE +0 -0
  16. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/MANIFEST.in +0 -0
  17. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/install.sh +0 -0
  18. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/pyproject.toml +0 -0
  19. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/pytest.ini +0 -0
  20. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/sbase/__init__.py +0 -0
  21. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/sbase/__main__.py +0 -0
  22. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/sbase/steps.py +0 -0
  23. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/__init__.py +0 -0
  24. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/__main__.py +0 -0
  25. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/behave/__init__.py +0 -0
  26. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/behave/behave_helper.py +0 -0
  27. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/behave/behave_sb.py +0 -0
  28. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/behave/steps.py +0 -0
  29. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/common/__init__.py +0 -0
  30. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/common/decorators.py +0 -0
  31. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/common/encryption.py +0 -0
  32. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/common/exceptions.py +0 -0
  33. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/common/obfuscate.py +0 -0
  34. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/common/unobfuscate.py +0 -0
  35. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/config/__init__.py +0 -0
  36. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/config/ad_block_list.py +0 -0
  37. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/config/proxy_list.py +0 -0
  38. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/config/settings.py +0 -0
  39. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/__init__.py +0 -0
  40. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/logo_helper.py +0 -0
  41. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/rich_helper.py +0 -0
  42. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/run.py +0 -0
  43. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  44. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  45. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_commander.py +0 -0
  46. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_install.py +0 -0
  47. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  48. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  49. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  50. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  51. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  52. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  53. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_print.py +0 -0
  54. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  55. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/__init__.py +0 -0
  56. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/application_manager.py +0 -0
  57. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/capabilities_parser.py +0 -0
  58. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/colored_traceback.py +0 -0
  59. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/create_db_tables.sql +0 -0
  60. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/detect_b_ver.py +0 -0
  61. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/download_helper.py +0 -0
  62. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/encoded_images.py +0 -0
  63. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/jqc_helper.py +0 -0
  64. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/log_helper.py +0 -0
  65. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/mysql.py +0 -0
  66. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/proxy_helper.py +0 -0
  67. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/recorder_helper.py +0 -0
  68. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/report_helper.py +0 -0
  69. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/s3_manager.py +0 -0
  70. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/sb_cdp.py +0 -0
  71. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/session_helper.py +0 -0
  72. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/settings_parser.py +0 -0
  73. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/style_sheet.py +0 -0
  74. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/testcase_manager.py +0 -0
  75. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/tour_helper.py +0 -0
  76. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/visual_helper.py +0 -0
  77. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/drivers/__init__.py +0 -0
  78. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
  79. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
  80. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/extensions/__init__.py +0 -0
  81. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/extensions/ad_block.zip +0 -0
  82. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/extensions/disable_csp.zip +0 -0
  83. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/extensions/recorder.zip +0 -0
  84. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/extensions/sbase_ext.zip +0 -0
  85. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/__init__.py +0 -0
  86. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/constants.py +0 -0
  87. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  88. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/errors.py +0 -0
  89. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/js_utils.py +0 -0
  90. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/page_utils.py +0 -0
  91. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/unittest_helper.py +0 -0
  92. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/words.py +0 -0
  93. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  94. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/js_code/__init__.py +0 -0
  95. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/js_code/active_css_js.py +0 -0
  96. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/js_code/live_js.py +0 -0
  97. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/js_code/recorder_js.py +0 -0
  98. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/masterqa/__init__.py +0 -0
  99. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/masterqa/master_qa.py +0 -0
  100. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/__init__.py +0 -0
  101. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/base_plugin.py +0 -0
  102. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/basic_test_info.py +0 -0
  103. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  104. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/driver_manager.py +0 -0
  105. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/page_source.py +0 -0
  106. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/pytest_plugin.py +0 -0
  107. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  108. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/sb_manager.py +0 -0
  109. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/screen_shots.py +0 -0
  110. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/selenium_plugin.py +0 -0
  111. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/resources/__init__.py +0 -0
  112. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/__init__.py +0 -0
  113. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/chinese.py +0 -0
  114. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/dutch.py +0 -0
  115. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/french.py +0 -0
  116. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/italian.py +0 -0
  117. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/japanese.py +0 -0
  118. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/korean.py +0 -0
  119. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/master_dict.py +0 -0
  120. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/portuguese.py +0 -0
  121. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/russian.py +0 -0
  122. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/spanish.py +0 -0
  123. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/translator.py +0 -0
  124. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/__init__.py +0 -0
  125. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp.py +0 -0
  126. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  127. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  128. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
  129. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
  130. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  131. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
  132. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  133. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  134. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/dprocess.py +0 -0
  135. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/options.py +0 -0
  136. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/patcher.py +0 -0
  137. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/reactor.py +0 -0
  138. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/webelement.py +0 -0
  139. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/__init__.py +0 -0
  140. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  141. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  142. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  143. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  144. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  145. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  146. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  147. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  148. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  149. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  150. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  151. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  152. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  153. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase.egg-info/SOURCES.txt +0 -0
  154. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase.egg-info/dependency_links.txt +0 -0
  155. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase.egg-info/entry_points.txt +0 -0
  156. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase.egg-info/top_level.txt +0 -0
  157. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/setup.cfg +0 -0
  158. {seleniumbase-4.41.11 → seleniumbase-4.42.0}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.41.11
3
+ Version: 4.42.0
4
4
  Summary: A complete web automation framework for end-to-end testing.
5
5
  Home-page: https://github.com/seleniumbase/SeleniumBase
6
6
  Author: Michael Mintz
@@ -78,7 +78,8 @@ Requires-Dist: mycdp>=1.2.0
78
78
  Requires-Dist: pynose>=1.5.5
79
79
  Requires-Dist: platformdirs>=4.3.6; python_version < "3.9"
80
80
  Requires-Dist: platformdirs>=4.4.0; python_version >= "3.9"
81
- Requires-Dist: typing-extensions>=4.13.2
81
+ Requires-Dist: typing-extensions~=4.13.2; python_version < "3.9"
82
+ Requires-Dist: typing-extensions>=4.15.0; python_version >= "3.9"
82
83
  Requires-Dist: sbvirtualdisplay>=1.4.0
83
84
  Requires-Dist: MarkupSafe==2.1.5; python_version < "3.9"
84
85
  Requires-Dist: MarkupSafe>=3.0.3; python_version >= "3.9"
@@ -103,13 +104,13 @@ Requires-Dist: sniffio==1.3.1
103
104
  Requires-Dist: h11==0.16.0
104
105
  Requires-Dist: outcome==1.3.0.post0
105
106
  Requires-Dist: trio==0.27.0; python_version < "3.9"
106
- Requires-Dist: trio~=0.30.0; python_version >= "3.9"
107
+ Requires-Dist: trio<1,>=0.31.0; python_version >= "3.9"
107
108
  Requires-Dist: trio-websocket~=0.12.2
108
109
  Requires-Dist: wsproto==1.2.0
109
110
  Requires-Dist: websocket-client~=1.8.0
110
111
  Requires-Dist: selenium==4.27.1; python_version < "3.9"
111
112
  Requires-Dist: selenium==4.32.0; python_version >= "3.9" and python_version < "3.10"
112
- Requires-Dist: selenium==4.35.0; python_version >= "3.10"
113
+ Requires-Dist: selenium==4.36.0; python_version >= "3.10"
113
114
  Requires-Dist: cssselect==1.2.0; python_version < "3.9"
114
115
  Requires-Dist: cssselect==1.3.0; python_version >= "3.9"
115
116
  Requires-Dist: sortedcontainers==2.4.0
@@ -275,7 +276,7 @@ Dynamic: summary
275
276
 
276
277
  --------
277
278
 
278
- <p align="left">📗 For performing a Google Search without hitting the "unusual traffic" page, you can use SeleniumBase UC Mode.<br />Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py">SeleniumBase/examples/raw_google.py</a>, which exports results into different formats (PDF, HTML, PNG):</p>
279
+ <p align="left">📗 Here's a test script that performs a Google Search using SeleniumBase UC Mode:<br /><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py">SeleniumBase/examples/raw_google.py</a> (Results are saved as PDF, HTML, and PNG)</p>
279
280
 
280
281
  ```python
281
282
  from seleniumbase import SB
@@ -299,7 +300,7 @@ with SB(test=True, uc=True) as sb:
299
300
 
300
301
  --------
301
302
 
302
- <p align="left">📗 Here's an example of bypassing Cloudflare's challenge page with UC Mode + CDP Mode: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py">SeleniumBase/examples/cdp_mode/raw_gitlab.py</a></p>
303
+ <p align="left">📗 Here's a script that bypasses Cloudflare's challenge page with UC Mode + CDP Mode: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py">SeleniumBase/examples/cdp_mode/raw_gitlab.py</a></p>
303
304
 
304
305
  ```python
305
306
  from seleniumbase import SB
@@ -319,7 +320,7 @@ with SB(uc=True, test=True, locale="en") as sb:
319
320
 
320
321
  <img src="https://seleniumbase.github.io/other/cf_sec.jpg" title="SeleniumBase" width="332"> <img src="https://seleniumbase.github.io/other/gitlab_bypass.png" title="SeleniumBase" width="288">
321
322
 
322
- <p align="left">📙 You can also use SeleniumBase's pure CDP Mode, which doesn't use chromedriver, Selenium, or a Python context manager at all: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_gitlab.py">SeleniumBase/examples/cdp_mode/raw_cdp_gitlab.py</a></p>
323
+ <p align="left">📙 There's also SeleniumBase's "Pure CDP Mode", which doesn't use WebDriver or Selenium at all: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_gitlab.py">SeleniumBase/examples/cdp_mode/raw_cdp_gitlab.py</a></p>
323
324
 
324
325
  ```python
325
326
  from seleniumbase import sb_cdp
@@ -333,7 +334,7 @@ sb.highlight('button:contains("Sign in")')
333
334
  sb.driver.stop()
334
335
  ```
335
336
 
336
- > (Due to a change in Chrome 137 where the --load-extension switch was removed, one limitation with this format is that you can't load extensions directly. The other formats weren't affected by this change.)
337
+ > (Due to changes in Chrome 137 where the `--load-extension` switch was removed, you can't load extensions directly from this format.)
337
338
 
338
339
  --------
339
340
 
@@ -65,7 +65,7 @@
65
65
 
66
66
  --------
67
67
 
68
- <p align="left">📗 For performing a Google Search without hitting the "unusual traffic" page, you can use SeleniumBase UC Mode.<br />Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py">SeleniumBase/examples/raw_google.py</a>, which exports results into different formats (PDF, HTML, PNG):</p>
68
+ <p align="left">📗 Here's a test script that performs a Google Search using SeleniumBase UC Mode:<br /><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py">SeleniumBase/examples/raw_google.py</a> (Results are saved as PDF, HTML, and PNG)</p>
69
69
 
70
70
  ```python
71
71
  from seleniumbase import SB
@@ -89,7 +89,7 @@ with SB(test=True, uc=True) as sb:
89
89
 
90
90
  --------
91
91
 
92
- <p align="left">📗 Here's an example of bypassing Cloudflare's challenge page with UC Mode + CDP Mode: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py">SeleniumBase/examples/cdp_mode/raw_gitlab.py</a></p>
92
+ <p align="left">📗 Here's a script that bypasses Cloudflare's challenge page with UC Mode + CDP Mode: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py">SeleniumBase/examples/cdp_mode/raw_gitlab.py</a></p>
93
93
 
94
94
  ```python
95
95
  from seleniumbase import SB
@@ -109,7 +109,7 @@ with SB(uc=True, test=True, locale="en") as sb:
109
109
 
110
110
  <img src="https://seleniumbase.github.io/other/cf_sec.jpg" title="SeleniumBase" width="332"> <img src="https://seleniumbase.github.io/other/gitlab_bypass.png" title="SeleniumBase" width="288">
111
111
 
112
- <p align="left">📙 You can also use SeleniumBase's pure CDP Mode, which doesn't use chromedriver, Selenium, or a Python context manager at all: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_gitlab.py">SeleniumBase/examples/cdp_mode/raw_cdp_gitlab.py</a></p>
112
+ <p align="left">📙 There's also SeleniumBase's "Pure CDP Mode", which doesn't use WebDriver or Selenium at all: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_gitlab.py">SeleniumBase/examples/cdp_mode/raw_cdp_gitlab.py</a></p>
113
113
 
114
114
  ```python
115
115
  from seleniumbase import sb_cdp
@@ -123,7 +123,7 @@ sb.highlight('button:contains("Sign in")')
123
123
  sb.driver.stop()
124
124
  ```
125
125
 
126
- > (Due to a change in Chrome 137 where the --load-extension switch was removed, one limitation with this format is that you can't load extensions directly. The other formats weren't affected by this change.)
126
+ > (Due to changes in Chrome 137 where the `--load-extension` switch was removed, you can't load extensions directly from this format.)
127
127
 
128
128
  --------
129
129
 
@@ -16,7 +16,8 @@ mycdp>=1.2.0
16
16
  pynose>=1.5.5
17
17
  platformdirs>=4.3.6;python_version<"3.9"
18
18
  platformdirs>=4.4.0;python_version>="3.9"
19
- typing-extensions>=4.13.2
19
+ typing-extensions~=4.13.2;python_version<"3.9"
20
+ typing-extensions>=4.15.0;python_version>="3.9"
20
21
  sbvirtualdisplay>=1.4.0
21
22
  MarkupSafe==2.1.5;python_version<"3.9"
22
23
  MarkupSafe>=3.0.3;python_version>="3.9"
@@ -41,13 +42,13 @@ sniffio==1.3.1
41
42
  h11==0.16.0
42
43
  outcome==1.3.0.post0
43
44
  trio==0.27.0;python_version<"3.9"
44
- trio~=0.30.0;python_version>="3.9"
45
+ trio>=0.31.0,<1;python_version>="3.9"
45
46
  trio-websocket~=0.12.2
46
47
  wsproto==1.2.0
47
48
  websocket-client~=1.8.0
48
49
  selenium==4.27.1;python_version<"3.9"
49
50
  selenium==4.32.0;python_version>="3.9" and python_version<"3.10"
50
- selenium==4.35.0;python_version>="3.10"
51
+ selenium==4.36.0;python_version>="3.10"
51
52
  cssselect==1.2.0;python_version<"3.9"
52
53
  cssselect==1.3.0;python_version>="3.9"
53
54
  sortedcontainers==2.4.0
@@ -0,0 +1,2 @@
1
+ # seleniumbase package
2
+ __version__ = "4.42.0"
@@ -228,6 +228,8 @@ def extend_driver(
228
228
  driver.wait_for_element = DM.wait_for_element
229
229
  driver.wait_for_element_visible = DM.wait_for_element_visible
230
230
  driver.wait_for_element_present = DM.wait_for_element_present
231
+ driver.wait_for_element_absent = DM.wait_for_element_absent
232
+ driver.wait_for_element_not_visible = DM.wait_for_element_not_visible
231
233
  driver.wait_for_selector = DM.wait_for_selector
232
234
  driver.wait_for_text = DM.wait_for_text
233
235
  driver.wait_for_exact_text = DM.wait_for_exact_text
@@ -137,6 +137,16 @@ class DriverMethods(WebDriver):
137
137
  def wait_for_element_present(self, *args, **kwargs):
138
138
  return page_actions.wait_for_selector(self.driver, *args, **kwargs)
139
139
 
140
+ def wait_for_element_absent(self, *args, **kwargs):
141
+ return page_actions.wait_for_element_absent(
142
+ self.driver, *args, **kwargs
143
+ )
144
+
145
+ def wait_for_element_not_visible(self, *args, **kwargs):
146
+ return page_actions.wait_for_element_not_visible(
147
+ self.driver, *args, **kwargs
148
+ )
149
+
140
150
  def wait_for_selector(self, *args, **kwargs):
141
151
  return page_actions.wait_for_selector(self.driver, *args, **kwargs)
142
152
 
@@ -5419,6 +5419,20 @@ class BaseCase(unittest.TestCase):
5419
5419
  )
5420
5420
  ):
5421
5421
  srt_actions[n][0] = "_skip"
5422
+ for n in range(len(srt_actions)):
5423
+ if (
5424
+ (srt_actions[n][0] == "begin" or srt_actions[n][0] == "_url_")
5425
+ and n > 1
5426
+ and (
5427
+ srt_actions[n - 1][0] == "f_url"
5428
+ or srt_actions[n - 1][0] == "_url_"
5429
+ )
5430
+ and srt_actions[n][2] == srt_actions[n - 1][2]
5431
+ and (
5432
+ int(srt_actions[n][3]) - int(srt_actions[n - 1][3]) < 4800
5433
+ )
5434
+ ):
5435
+ srt_actions[n][0] = "_skip"
5422
5436
  for n in range(len(srt_actions)):
5423
5437
  if (
5424
5438
  srt_actions[n][0] == "input"
@@ -1108,6 +1108,14 @@ def wait_for_element_absent(
1108
1108
  timeout - the time to wait for elements in seconds
1109
1109
  original_selector - handle pre-converted ":contains(TEXT)" selector
1110
1110
  """
1111
+ if __is_cdp_swap_needed(driver):
1112
+ if page_utils.is_valid_by(by):
1113
+ original_selector = selector
1114
+ elif page_utils.is_valid_by(selector):
1115
+ original_selector = by
1116
+ selector, by = page_utils.recalculate_selector(original_selector, by)
1117
+ driver.cdp.wait_for_element_absent(selector)
1118
+ return True
1111
1119
  _reconnect_if_disconnected(driver)
1112
1120
  start_ms = time.time() * 1000.0
1113
1121
  stop_ms = start_ms + (timeout * 1000.0)
@@ -1156,6 +1164,14 @@ def wait_for_element_not_visible(
1156
1164
  timeout - the time to wait for the element in seconds
1157
1165
  original_selector - handle pre-converted ":contains(TEXT)" selector
1158
1166
  """
1167
+ if __is_cdp_swap_needed(driver):
1168
+ if page_utils.is_valid_by(by):
1169
+ original_selector = selector
1170
+ elif page_utils.is_valid_by(selector):
1171
+ original_selector = by
1172
+ selector, by = page_utils.recalculate_selector(original_selector, by)
1173
+ driver.cdp.wait_for_element_not_visible(selector)
1174
+ return True
1159
1175
  _reconnect_if_disconnected(driver)
1160
1176
  start_ms = time.time() * 1000.0
1161
1177
  stop_ms = start_ms + (timeout * 1000.0)
@@ -29,8 +29,20 @@ def pip_install(package, version=None):
29
29
  )
30
30
 
31
31
 
32
+ def is_arm_linux():
33
+ """Returns True if machine is ARM Linux.
34
+ This will be useful once Google adds
35
+ support for ARM Linux ChromeDriver.
36
+ (Raspberry Pi uses ARM architecture.)"""
37
+ return (
38
+ platform.system() == "Linux"
39
+ and platform.machine() == "aarch64"
40
+ )
41
+
42
+
32
43
  def is_arm_mac():
33
- """(M1 / M2 Macs use the ARM processor)"""
44
+ """Returns True if machine is ARM Mac.
45
+ (Eg. M1 / M2 Macs use ARM processors)"""
34
46
  return (
35
47
  "darwin" in sys.platform
36
48
  and (
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.41.11
3
+ Version: 4.42.0
4
4
  Summary: A complete web automation framework for end-to-end testing.
5
5
  Home-page: https://github.com/seleniumbase/SeleniumBase
6
6
  Author: Michael Mintz
@@ -78,7 +78,8 @@ Requires-Dist: mycdp>=1.2.0
78
78
  Requires-Dist: pynose>=1.5.5
79
79
  Requires-Dist: platformdirs>=4.3.6; python_version < "3.9"
80
80
  Requires-Dist: platformdirs>=4.4.0; python_version >= "3.9"
81
- Requires-Dist: typing-extensions>=4.13.2
81
+ Requires-Dist: typing-extensions~=4.13.2; python_version < "3.9"
82
+ Requires-Dist: typing-extensions>=4.15.0; python_version >= "3.9"
82
83
  Requires-Dist: sbvirtualdisplay>=1.4.0
83
84
  Requires-Dist: MarkupSafe==2.1.5; python_version < "3.9"
84
85
  Requires-Dist: MarkupSafe>=3.0.3; python_version >= "3.9"
@@ -103,13 +104,13 @@ Requires-Dist: sniffio==1.3.1
103
104
  Requires-Dist: h11==0.16.0
104
105
  Requires-Dist: outcome==1.3.0.post0
105
106
  Requires-Dist: trio==0.27.0; python_version < "3.9"
106
- Requires-Dist: trio~=0.30.0; python_version >= "3.9"
107
+ Requires-Dist: trio<1,>=0.31.0; python_version >= "3.9"
107
108
  Requires-Dist: trio-websocket~=0.12.2
108
109
  Requires-Dist: wsproto==1.2.0
109
110
  Requires-Dist: websocket-client~=1.8.0
110
111
  Requires-Dist: selenium==4.27.1; python_version < "3.9"
111
112
  Requires-Dist: selenium==4.32.0; python_version >= "3.9" and python_version < "3.10"
112
- Requires-Dist: selenium==4.35.0; python_version >= "3.10"
113
+ Requires-Dist: selenium==4.36.0; python_version >= "3.10"
113
114
  Requires-Dist: cssselect==1.2.0; python_version < "3.9"
114
115
  Requires-Dist: cssselect==1.3.0; python_version >= "3.9"
115
116
  Requires-Dist: sortedcontainers==2.4.0
@@ -275,7 +276,7 @@ Dynamic: summary
275
276
 
276
277
  --------
277
278
 
278
- <p align="left">📗 For performing a Google Search without hitting the "unusual traffic" page, you can use SeleniumBase UC Mode.<br />Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py">SeleniumBase/examples/raw_google.py</a>, which exports results into different formats (PDF, HTML, PNG):</p>
279
+ <p align="left">📗 Here's a test script that performs a Google Search using SeleniumBase UC Mode:<br /><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py">SeleniumBase/examples/raw_google.py</a> (Results are saved as PDF, HTML, and PNG)</p>
279
280
 
280
281
  ```python
281
282
  from seleniumbase import SB
@@ -299,7 +300,7 @@ with SB(test=True, uc=True) as sb:
299
300
 
300
301
  --------
301
302
 
302
- <p align="left">📗 Here's an example of bypassing Cloudflare's challenge page with UC Mode + CDP Mode: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py">SeleniumBase/examples/cdp_mode/raw_gitlab.py</a></p>
303
+ <p align="left">📗 Here's a script that bypasses Cloudflare's challenge page with UC Mode + CDP Mode: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py">SeleniumBase/examples/cdp_mode/raw_gitlab.py</a></p>
303
304
 
304
305
  ```python
305
306
  from seleniumbase import SB
@@ -319,7 +320,7 @@ with SB(uc=True, test=True, locale="en") as sb:
319
320
 
320
321
  <img src="https://seleniumbase.github.io/other/cf_sec.jpg" title="SeleniumBase" width="332"> <img src="https://seleniumbase.github.io/other/gitlab_bypass.png" title="SeleniumBase" width="288">
321
322
 
322
- <p align="left">📙 You can also use SeleniumBase's pure CDP Mode, which doesn't use chromedriver, Selenium, or a Python context manager at all: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_gitlab.py">SeleniumBase/examples/cdp_mode/raw_cdp_gitlab.py</a></p>
323
+ <p align="left">📙 There's also SeleniumBase's "Pure CDP Mode", which doesn't use WebDriver or Selenium at all: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_gitlab.py">SeleniumBase/examples/cdp_mode/raw_cdp_gitlab.py</a></p>
323
324
 
324
325
  ```python
325
326
  from seleniumbase import sb_cdp
@@ -333,7 +334,7 @@ sb.highlight('button:contains("Sign in")')
333
334
  sb.driver.stop()
334
335
  ```
335
336
 
336
- > (Due to a change in Chrome 137 where the --load-extension switch was removed, one limitation with this format is that you can't load extensions directly. The other formats weren't affected by this change.)
337
+ > (Due to changes in Chrome 137 where the `--load-extension` switch was removed, you can't load extensions directly from this format.)
337
338
 
338
339
  --------
339
340
 
@@ -6,7 +6,6 @@ exceptiongroup>=1.3.0
6
6
  fasteners>=0.20
7
7
  mycdp>=1.2.0
8
8
  pynose>=1.5.5
9
- typing-extensions>=4.13.2
10
9
  sbvirtualdisplay>=1.4.0
11
10
  Jinja2>=3.1.6
12
11
  six>=1.17.0
@@ -55,6 +54,7 @@ pip>=25.0.1
55
54
  websockets~=13.1
56
55
  filelock~=3.16.1
57
56
  platformdirs>=4.3.6
57
+ typing-extensions~=4.13.2
58
58
  MarkupSafe==2.1.5
59
59
  requests==2.32.4
60
60
  trio==0.27.0
@@ -69,7 +69,7 @@ soupsieve==2.7
69
69
  [:python_version >= "3.10"]
70
70
  setuptools>=80.9.0
71
71
  urllib3<2.6.0,>=1.26.20
72
- selenium==4.35.0
72
+ selenium==4.36.0
73
73
  markdown-it-py==4.0.0
74
74
 
75
75
  [:python_version >= "3.9"]
@@ -77,9 +77,10 @@ pip>=25.2
77
77
  websockets>=15.0.1
78
78
  filelock>=3.19.1
79
79
  platformdirs>=4.4.0
80
+ typing-extensions>=4.15.0
80
81
  MarkupSafe>=3.0.3
81
82
  requests~=2.32.5
82
- trio~=0.30.0
83
+ trio<1,>=0.31.0
83
84
  cssselect==1.3.0
84
85
  pluggy==1.6.0
85
86
  pytest==8.4.2
@@ -164,7 +164,8 @@ setup(
164
164
  "pynose>=1.5.5",
165
165
  'platformdirs>=4.3.6;python_version<"3.9"',
166
166
  'platformdirs>=4.4.0;python_version>="3.9"',
167
- 'typing-extensions>=4.13.2',
167
+ 'typing-extensions~=4.13.2;python_version<"3.9"',
168
+ 'typing-extensions>=4.15.0;python_version>="3.9"',
168
169
  "sbvirtualdisplay>=1.4.0",
169
170
  'MarkupSafe==2.1.5;python_version<"3.9"',
170
171
  'MarkupSafe>=3.0.3;python_version>="3.9"',
@@ -189,13 +190,13 @@ setup(
189
190
  'h11==0.16.0',
190
191
  'outcome==1.3.0.post0',
191
192
  'trio==0.27.0;python_version<"3.9"',
192
- 'trio~=0.30.0;python_version>="3.9"',
193
+ 'trio>=0.31.0,<1;python_version>="3.9"',
193
194
  'trio-websocket~=0.12.2',
194
195
  'wsproto==1.2.0',
195
196
  'websocket-client~=1.8.0',
196
197
  'selenium==4.27.1;python_version<"3.9"',
197
198
  'selenium==4.32.0;python_version>="3.9" and python_version<"3.10"',
198
- 'selenium==4.35.0;python_version>="3.10"',
199
+ 'selenium==4.36.0;python_version>="3.10"',
199
200
  'cssselect==1.2.0;python_version<"3.9"',
200
201
  'cssselect==1.3.0;python_version>="3.9"',
201
202
  "sortedcontainers==2.4.0",
@@ -1,2 +0,0 @@
1
- # seleniumbase package
2
- __version__ = "4.41.11"
File without changes
File without changes
File without changes
File without changes
File without changes