seleniumbase 4.42.6__tar.gz → 4.43.1__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.

Potentially problematic release.


This version of seleniumbase might be problematic. Click here for more details.

Files changed (157) hide show
  1. {seleniumbase-4.42.6/seleniumbase.egg-info → seleniumbase-4.43.1}/PKG-INFO +13 -12
  2. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/README.md +8 -8
  3. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/requirements.txt +3 -2
  4. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/__version__.py +1 -1
  5. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/behave/behave_sb.py +2 -3
  6. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/sb_caseplans.py +2 -3
  7. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/sb_mkchart.py +1 -2
  8. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/sb_mkdir.py +23 -29
  9. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/sb_mkfile.py +1 -2
  10. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/sb_mkpres.py +1 -2
  11. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/sb_mkrec.py +1 -2
  12. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/sb_objectify.py +2 -3
  13. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/browser_launcher.py +1 -3
  14. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/log_helper.py +3 -4
  15. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/report_helper.py +1 -2
  16. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/sb_cdp.py +17 -41
  17. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/tour_helper.py +1 -2
  18. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/fixtures/base_case.py +26 -25
  19. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/fixtures/page_actions.py +1 -2
  20. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/fixtures/page_utils.py +2 -3
  21. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/plugins/basic_test_info.py +2 -3
  22. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/plugins/page_source.py +2 -3
  23. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/plugins/pytest_plugin.py +2 -3
  24. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/translate/translator.py +1 -2
  25. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/undetected/cdp_driver/browser.py +2 -1
  26. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/undetected/cdp_driver/connection.py +0 -2
  27. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/utilities/selenium_grid/grid_hub.py +1 -2
  28. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/utilities/selenium_grid/grid_node.py +2 -3
  29. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/utilities/selenium_ide/convert_ide.py +1 -2
  30. {seleniumbase-4.42.6 → seleniumbase-4.43.1/seleniumbase.egg-info}/PKG-INFO +13 -12
  31. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase.egg-info/requires.txt +4 -3
  32. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/setup.py +4 -3
  33. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/.gitignore +0 -0
  34. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/LICENSE +0 -0
  35. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/MANIFEST.in +0 -0
  36. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/install.sh +0 -0
  37. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/pyproject.toml +0 -0
  38. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/pytest.ini +0 -0
  39. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/sbase/__init__.py +0 -0
  40. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/sbase/__main__.py +0 -0
  41. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/sbase/steps.py +0 -0
  42. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/__init__.py +0 -0
  43. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/__main__.py +0 -0
  44. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/behave/__init__.py +0 -0
  45. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/behave/behave_helper.py +0 -0
  46. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/behave/steps.py +0 -0
  47. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/common/__init__.py +0 -0
  48. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/common/decorators.py +0 -0
  49. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/common/encryption.py +0 -0
  50. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/common/exceptions.py +0 -0
  51. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/common/obfuscate.py +0 -0
  52. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/common/unobfuscate.py +0 -0
  53. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/config/__init__.py +0 -0
  54. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/config/ad_block_list.py +0 -0
  55. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/config/proxy_list.py +0 -0
  56. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/config/settings.py +0 -0
  57. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/__init__.py +0 -0
  58. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/logo_helper.py +0 -0
  59. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/rich_helper.py +0 -0
  60. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/run.py +0 -0
  61. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  62. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/sb_commander.py +0 -0
  63. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/sb_install.py +0 -0
  64. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/sb_print.py +0 -0
  65. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  66. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/__init__.py +0 -0
  67. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/application_manager.py +0 -0
  68. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/capabilities_parser.py +0 -0
  69. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/colored_traceback.py +0 -0
  70. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/create_db_tables.sql +0 -0
  71. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/detect_b_ver.py +0 -0
  72. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/download_helper.py +0 -0
  73. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/encoded_images.py +0 -0
  74. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/jqc_helper.py +0 -0
  75. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/mysql.py +0 -0
  76. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/proxy_helper.py +0 -0
  77. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/recorder_helper.py +0 -0
  78. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/s3_manager.py +0 -0
  79. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/sb_driver.py +0 -0
  80. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/session_helper.py +0 -0
  81. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/settings_parser.py +0 -0
  82. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/style_sheet.py +0 -0
  83. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/testcase_manager.py +0 -0
  84. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/core/visual_helper.py +0 -0
  85. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/drivers/__init__.py +0 -0
  86. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
  87. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
  88. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/extensions/__init__.py +0 -0
  89. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/extensions/ad_block.zip +0 -0
  90. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/extensions/disable_csp.zip +0 -0
  91. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/extensions/recorder.zip +0 -0
  92. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/extensions/sbase_ext.zip +0 -0
  93. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/fixtures/__init__.py +0 -0
  94. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/fixtures/constants.py +0 -0
  95. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  96. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/fixtures/errors.py +0 -0
  97. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/fixtures/js_utils.py +0 -0
  98. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/fixtures/shared_utils.py +0 -0
  99. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/fixtures/unittest_helper.py +0 -0
  100. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/fixtures/words.py +0 -0
  101. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  102. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/js_code/__init__.py +0 -0
  103. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/js_code/active_css_js.py +0 -0
  104. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/js_code/live_js.py +0 -0
  105. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/js_code/recorder_js.py +0 -0
  106. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/masterqa/__init__.py +0 -0
  107. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/masterqa/master_qa.py +0 -0
  108. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/plugins/__init__.py +0 -0
  109. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/plugins/base_plugin.py +0 -0
  110. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  111. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/plugins/driver_manager.py +0 -0
  112. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  113. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/plugins/sb_manager.py +0 -0
  114. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/plugins/screen_shots.py +0 -0
  115. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/plugins/selenium_plugin.py +0 -0
  116. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/resources/__init__.py +0 -0
  117. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/translate/__init__.py +0 -0
  118. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/translate/chinese.py +0 -0
  119. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/translate/dutch.py +0 -0
  120. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/translate/french.py +0 -0
  121. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/translate/italian.py +0 -0
  122. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/translate/japanese.py +0 -0
  123. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/translate/korean.py +0 -0
  124. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/translate/master_dict.py +0 -0
  125. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/translate/portuguese.py +0 -0
  126. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/translate/russian.py +0 -0
  127. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/translate/spanish.py +0 -0
  128. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/undetected/__init__.py +0 -0
  129. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/undetected/cdp.py +0 -0
  130. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  131. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  132. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
  133. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  134. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  135. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  136. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/undetected/dprocess.py +0 -0
  137. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/undetected/options.py +0 -0
  138. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/undetected/patcher.py +0 -0
  139. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/undetected/reactor.py +0 -0
  140. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/undetected/webelement.py +0 -0
  141. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/utilities/__init__.py +0 -0
  142. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  143. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  144. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  145. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  146. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  147. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  148. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  149. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  150. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  151. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  152. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase.egg-info/SOURCES.txt +0 -0
  153. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase.egg-info/dependency_links.txt +0 -0
  154. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase.egg-info/entry_points.txt +0 -0
  155. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/seleniumbase.egg-info/top_level.txt +0 -0
  156. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/setup.cfg +0 -0
  157. {seleniumbase-4.42.6 → seleniumbase-4.43.1}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.42.6
3
+ Version: 4.43.1
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
@@ -113,12 +113,13 @@ Requires-Dist: websocket-client~=1.8.0; python_version < "3.9"
113
113
  Requires-Dist: websocket-client~=1.9.0; python_version >= "3.9"
114
114
  Requires-Dist: selenium==4.27.1; python_version < "3.9"
115
115
  Requires-Dist: selenium==4.32.0; python_version >= "3.9" and python_version < "3.10"
116
- Requires-Dist: selenium==4.36.0; python_version >= "3.10"
116
+ Requires-Dist: selenium==4.37.0; python_version >= "3.10"
117
117
  Requires-Dist: cssselect==1.2.0; python_version < "3.9"
118
118
  Requires-Dist: cssselect==1.3.0; python_version >= "3.9"
119
119
  Requires-Dist: sortedcontainers==2.4.0
120
120
  Requires-Dist: execnet==2.1.1
121
- Requires-Dist: iniconfig==2.1.0
121
+ Requires-Dist: iniconfig==2.1.0; python_version < "3.10"
122
+ Requires-Dist: iniconfig==2.3.0; python_version >= "3.10"
122
123
  Requires-Dist: pluggy==1.5.0; python_version < "3.9"
123
124
  Requires-Dist: pluggy==1.6.0; python_version >= "3.9"
124
125
  Requires-Dist: pytest==8.3.5; python_version < "3.9"
@@ -171,7 +172,7 @@ Provides-Extra: pdfminer
171
172
  Requires-Dist: pdfminer.six==20250324; python_version < "3.9" and extra == "pdfminer"
172
173
  Requires-Dist: pdfminer.six==20250506; python_version >= "3.9" and extra == "pdfminer"
173
174
  Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
174
- Requires-Dist: cryptography==46.0.2; python_version >= "3.9" and extra == "pdfminer"
175
+ Requires-Dist: cryptography==46.0.3; python_version >= "3.9" and extra == "pdfminer"
175
176
  Requires-Dist: cffi==1.17.1; python_version < "3.9" and extra == "pdfminer"
176
177
  Requires-Dist: cffi==2.0.0; python_version >= "3.9" and extra == "pdfminer"
177
178
  Requires-Dist: pycparser==2.22; python_version < "3.9" and extra == "pdfminer"
@@ -229,9 +230,10 @@ Dynamic: summary
229
230
 
230
231
  <p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" alt="SeleniumBase" title="SeleniumBase" width="350" /></a></p>
231
232
 
232
- <p align="center" class="hero__title"><b>All-in-one Browser Automation Framework:<br />Web Crawling / Testing / Scraping / Stealth</b></p>
233
+ <p align="center" class="hero__title"><b>Automate, test, and scrape the web on your own terms.<br /></b></p>
233
234
 
234
- <p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/releases" target="_blank"><img src="https://img.shields.io/github/v/release/seleniumbase/SeleniumBase.svg?color=22AAEE" alt="GitHub version" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/CI%20build/badge.svg" alt="SeleniumBase GitHub Actions" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank"><img src="https://img.shields.io/discord/727927627830001734?color=7289DA&label=Discord&logo=discord&logoColor=white"/></a></p>
235
+ <p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/releases" target="_blank"><img src="https://img.shields.io/github/v/release/seleniumbase/SeleniumBase.svg?color=22AAEE" alt="GitHub version" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a></p>
236
+ <p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/CI%20build/badge.svg" alt="SeleniumBase GitHub Actions" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/stargazers"><img src="https://img.shields.io/github/stars/seleniumbase/SeleniumBase?style=social"></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank"><img src="https://img.shields.io/discord/727927627830001734?color=7289DA&label=Discord&logo=discord&logoColor=white"/></a></p>
235
237
 
236
238
  <p align="center">
237
239
  <a href="#python_installation">🚀 Start</a> |
@@ -271,7 +273,7 @@ Dynamic: summary
271
273
  <br />
272
274
  </p>
273
275
 
274
- <p>SeleniumBase is used for automating browsers, testing websites, scraping data, and bypassing CAPTCHAs.</p>
276
+ <p>SeleniumBase is a browser automation framework for the modern web. Both new and experienced Python users alike can easily get started. With special stealth features like UC Mode and CDP Mode, you'll be evading bot-detection and bypassing CAPTCHAs in minutes.</p>
275
277
 
276
278
  --------
277
279
 
@@ -545,7 +547,6 @@ pip install seleniumbase
545
547
 
546
548
  * (Add ``--upgrade`` OR ``-U`` to upgrade SeleniumBase.)
547
549
  * (Add ``--force-reinstall`` to upgrade indirect packages.)
548
- * (Use ``pip3`` if multiple versions of Python are present.)
549
550
 
550
551
  🔵 **How to install ``seleniumbase`` from a GitHub clone:**
551
552
 
@@ -619,10 +620,10 @@ pip install -e .
619
620
  <summary> ▶️ Here's sample output from a chromedriver download. (<b>click to expand</b>)</summary>
620
621
 
621
622
  ```zsh
622
- *** chromedriver to download = 131.0.6778.108 (Latest Stable)
623
+ *** chromedriver to download = 141.0.7390.78 (Latest Stable)
623
624
 
624
625
  Downloading chromedriver-mac-arm64.zip from:
625
- https://storage.googleapis.com/chrome-for-testing-public/131.0.6778.108/mac-arm64/chromedriver-mac-arm64.zip ...
626
+ https://storage.googleapis.com/chrome-for-testing-public/141.0.7390.78/mac-arm64/chromedriver-mac-arm64.zip ...
626
627
  Download Complete!
627
628
 
628
629
  Extracting ['chromedriver'] from chromedriver-mac-arm64.zip ...
@@ -632,8 +633,8 @@ The file [chromedriver] was saved to:
632
633
  ~/github/SeleniumBase/seleniumbase/drivers/
633
634
  chromedriver
634
635
 
635
- Making [chromedriver 131.0.6778.108] executable ...
636
- [chromedriver 131.0.6778.108] is now ready for use!
636
+ Making [chromedriver 141.0.7390.78] executable ...
637
+ [chromedriver 141.0.7390.78] is now ready for use!
637
638
  ```
638
639
 
639
640
  </details>
@@ -11,9 +11,10 @@
11
11
 
12
12
  <p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" alt="SeleniumBase" title="SeleniumBase" width="350" /></a></p>
13
13
 
14
- <p align="center" class="hero__title"><b>All-in-one Browser Automation Framework:<br />Web Crawling / Testing / Scraping / Stealth</b></p>
14
+ <p align="center" class="hero__title"><b>Automate, test, and scrape the web on your own terms.<br /></b></p>
15
15
 
16
- <p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/releases" target="_blank"><img src="https://img.shields.io/github/v/release/seleniumbase/SeleniumBase.svg?color=22AAEE" alt="GitHub version" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/CI%20build/badge.svg" alt="SeleniumBase GitHub Actions" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank"><img src="https://img.shields.io/discord/727927627830001734?color=7289DA&label=Discord&logo=discord&logoColor=white"/></a></p>
16
+ <p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/releases" target="_blank"><img src="https://img.shields.io/github/v/release/seleniumbase/SeleniumBase.svg?color=22AAEE" alt="GitHub version" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a></p>
17
+ <p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/CI%20build/badge.svg" alt="SeleniumBase GitHub Actions" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/stargazers"><img src="https://img.shields.io/github/stars/seleniumbase/SeleniumBase?style=social"></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank"><img src="https://img.shields.io/discord/727927627830001734?color=7289DA&label=Discord&logo=discord&logoColor=white"/></a></p>
17
18
 
18
19
  <p align="center">
19
20
  <a href="#python_installation">🚀 Start</a> |
@@ -53,7 +54,7 @@
53
54
  <br />
54
55
  </p>
55
56
 
56
- <p>SeleniumBase is used for automating browsers, testing websites, scraping data, and bypassing CAPTCHAs.</p>
57
+ <p>SeleniumBase is a browser automation framework for the modern web. Both new and experienced Python users alike can easily get started. With special stealth features like UC Mode and CDP Mode, you'll be evading bot-detection and bypassing CAPTCHAs in minutes.</p>
57
58
 
58
59
  --------
59
60
 
@@ -327,7 +328,6 @@ pip install seleniumbase
327
328
 
328
329
  * (Add ``--upgrade`` OR ``-U`` to upgrade SeleniumBase.)
329
330
  * (Add ``--force-reinstall`` to upgrade indirect packages.)
330
- * (Use ``pip3`` if multiple versions of Python are present.)
331
331
 
332
332
  🔵 **How to install ``seleniumbase`` from a GitHub clone:**
333
333
 
@@ -401,10 +401,10 @@ pip install -e .
401
401
  <summary> ▶️ Here's sample output from a chromedriver download. (<b>click to expand</b>)</summary>
402
402
 
403
403
  ```zsh
404
- *** chromedriver to download = 131.0.6778.108 (Latest Stable)
404
+ *** chromedriver to download = 141.0.7390.78 (Latest Stable)
405
405
 
406
406
  Downloading chromedriver-mac-arm64.zip from:
407
- https://storage.googleapis.com/chrome-for-testing-public/131.0.6778.108/mac-arm64/chromedriver-mac-arm64.zip ...
407
+ https://storage.googleapis.com/chrome-for-testing-public/141.0.7390.78/mac-arm64/chromedriver-mac-arm64.zip ...
408
408
  Download Complete!
409
409
 
410
410
  Extracting ['chromedriver'] from chromedriver-mac-arm64.zip ...
@@ -414,8 +414,8 @@ The file [chromedriver] was saved to:
414
414
  ~/github/SeleniumBase/seleniumbase/drivers/
415
415
  chromedriver
416
416
 
417
- Making [chromedriver 131.0.6778.108] executable ...
418
- [chromedriver 131.0.6778.108] is now ready for use!
417
+ Making [chromedriver 141.0.7390.78] executable ...
418
+ [chromedriver 141.0.7390.78] is now ready for use!
419
419
  ```
420
420
 
421
421
  </details>
@@ -52,12 +52,13 @@ websocket-client~=1.8.0;python_version<"3.9"
52
52
  websocket-client~=1.9.0;python_version>="3.9"
53
53
  selenium==4.27.1;python_version<"3.9"
54
54
  selenium==4.32.0;python_version>="3.9" and python_version<"3.10"
55
- selenium==4.36.0;python_version>="3.10"
55
+ selenium==4.37.0;python_version>="3.10"
56
56
  cssselect==1.2.0;python_version<"3.9"
57
57
  cssselect==1.3.0;python_version>="3.9"
58
58
  sortedcontainers==2.4.0
59
59
  execnet==2.1.1
60
- iniconfig==2.1.0
60
+ iniconfig==2.1.0;python_version<"3.10"
61
+ iniconfig==2.3.0;python_version>="3.10"
61
62
  pluggy==1.5.0;python_version<"3.9"
62
63
  pluggy==1.6.0;python_version>="3.9"
63
64
  pytest==8.3.5;python_version<"3.9"
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.42.6"
2
+ __version__ = "4.43.1"
@@ -1205,7 +1205,6 @@ def dashboard_pre_processing():
1205
1205
 
1206
1206
 
1207
1207
  def _create_dashboard_assets_():
1208
- import codecs
1209
1208
  from seleniumbase.js_code.live_js import live_js
1210
1209
  from seleniumbase.core.style_sheet import get_pytest_style
1211
1210
 
@@ -1222,7 +1221,7 @@ def _create_dashboard_assets_():
1222
1221
  if existing_pytest_style == get_pytest_style():
1223
1222
  add_pytest_style_css = False
1224
1223
  if add_pytest_style_css:
1225
- out_file = codecs.open(pytest_style_css, "w+", encoding="utf-8")
1224
+ out_file = open(pytest_style_css, "w+", encoding="utf-8")
1226
1225
  out_file.writelines(get_pytest_style())
1227
1226
  out_file.close()
1228
1227
  live_js_file = os.path.join(assets_folder, "live.js")
@@ -1234,7 +1233,7 @@ def _create_dashboard_assets_():
1234
1233
  if existing_live_js == live_js:
1235
1234
  add_live_js_file = False
1236
1235
  if add_live_js_file:
1237
- out_file = codecs.open(live_js_file, "w+", encoding="utf-8")
1236
+ out_file = open(live_js_file, "w+", encoding="utf-8")
1238
1237
  out_file.writelines(live_js)
1239
1238
  out_file.close()
1240
1239
 
@@ -15,7 +15,6 @@ Examples:
15
15
  Output:
16
16
  Launches the SeleniumBase Case Plans Generator.
17
17
  """
18
- import codecs
19
18
  import colorama
20
19
  import os
21
20
  import subprocess
@@ -135,7 +134,7 @@ def generate_case_plan_boilerplates(
135
134
  file_name = case_id
136
135
  file_path = os.path.join(full_folder_path, file_name)
137
136
  if not os.path.exists(file_path):
138
- out_file = codecs.open(file_path, "w+", "utf-8")
137
+ out_file = open(file_path, "w+", "utf-8")
139
138
  out_file.writelines("\r\n".join(data))
140
139
  out_file.close()
141
140
  new_plans += 1
@@ -316,7 +315,7 @@ def view_summary_of_existing_case_plans(root, tests):
316
315
  full_plan = plan_head
317
316
 
318
317
  file_path = "case_summary.md"
319
- file = codecs.open(file_path, "w+", "utf-8")
318
+ file = open(file_path, "w+", "utf-8")
320
319
  file.writelines("\r\n".join(full_plan))
321
320
  file.close()
322
321
 
@@ -22,7 +22,6 @@ Output:
22
22
  and use a "sky" theme with "slide" transition.
23
23
  The chart can be used as a basic boilerplate.
24
24
  """
25
- import codecs
26
25
  import colorama
27
26
  import os
28
27
  import sys
@@ -254,7 +253,7 @@ def main():
254
253
  continue
255
254
  new_data.append(line)
256
255
  data = new_data
257
- file = codecs.open(file_path, "w+", "utf-8")
256
+ file = open(file_path, "w+", "utf-8")
258
257
  file.writelines("\r\n".join(data))
259
258
  file.close()
260
259
  if " " not in file_name:
@@ -18,7 +18,6 @@ Output:
18
18
  and Python boilerplates for setting up customized
19
19
  test frameworks.
20
20
  """
21
- import codecs
22
21
  import colorama
23
22
  import os
24
23
  import sys
@@ -114,7 +113,7 @@ def main():
114
113
  data.append(seleniumbase_req)
115
114
  data.append("")
116
115
  file_path = "%s/%s" % (dir_name, "requirements.txt")
117
- file = codecs.open(file_path, "w+", "utf-8")
116
+ file = open(file_path, "w+", "utf-8")
118
117
  file.writelines("\r\n".join(data))
119
118
  file.close()
120
119
 
@@ -152,7 +151,7 @@ def main():
152
151
  data.append(" production: custom marker")
153
152
  data.append("")
154
153
  file_path = "%s/%s" % (dir_name, "pytest.ini")
155
- file = codecs.open(file_path, "w+", "utf-8")
154
+ file = open(file_path, "w+", "utf-8")
156
155
  file.writelines("\r\n".join(data))
157
156
  file.close()
158
157
 
@@ -169,14 +168,14 @@ def main():
169
168
  data.append("show_skipped=false")
170
169
  data.append("show_timings=false")
171
170
  file_path = "%s/%s" % (dir_name, "setup.cfg")
172
- file = codecs.open(file_path, "w+", "utf-8")
171
+ file = open(file_path, "w+", "utf-8")
173
172
  file.writelines("\r\n".join(data))
174
173
  file.close()
175
174
 
176
175
  data = []
177
176
  data.append("")
178
177
  file_path = "%s/%s" % (dir_name, "__init__.py")
179
- file = codecs.open(file_path, "w+", "utf-8")
178
+ file = open(file_path, "w+", "utf-8")
180
179
  file.writelines("\r\n".join(data))
181
180
  file.close()
182
181
 
@@ -312,7 +311,7 @@ def main():
312
311
  data.append("temp_*/")
313
312
  data.append("node_modules")
314
313
  file_path = "%s/%s" % (dir_name, ".gitignore")
315
- file = codecs.open(file_path, "w+", "utf-8")
314
+ file = open(file_path, "w+", "utf-8")
316
315
  file.writelines("\r\n".join(data))
317
316
  file.close()
318
317
 
@@ -324,7 +323,7 @@ def main():
324
323
  data.append(" ├── requirements.txt")
325
324
  data.append(" └── setup.cfg")
326
325
  file_path = "%s/%s" % (dir_name, "outline.rst")
327
- file = codecs.open(file_path, "w+", "utf-8")
326
+ file = open(file_path, "w+", "utf-8")
328
327
  file.writelines("\r\n".join(data))
329
328
  file.close()
330
329
  os.system("sbase print %s -n" % file_path)
@@ -368,7 +367,7 @@ def main():
368
367
  data.append(' self.assert_element("div#login_button_container")')
369
368
  data.append("")
370
369
  file_path = "%s/%s" % (dir_name, "my_first_test.py")
371
- file = codecs.open(file_path, "w+", "utf-8")
370
+ file = open(file_path, "w+", "utf-8")
372
371
  file.writelines("\r\n".join(data))
373
372
  file.close()
374
373
 
@@ -461,7 +460,7 @@ def main():
461
460
  data.append(' self.assert_text("SeleniumBase", "h2")')
462
461
  data.append("")
463
462
  file_path = "%s/%s" % (dir_name, "test_demo_site.py")
464
- file = codecs.open(file_path, "w+", "utf-8")
463
+ file = open(file_path, "w+", "utf-8")
465
464
  file.writelines("\r\n".join(data))
466
465
  file.close()
467
466
 
@@ -500,7 +499,7 @@ def main():
500
499
  data.append(' self.assert_title_contains(title_text)')
501
500
  data.append("")
502
501
  file_path = "%s/%s" % (dir_name, "parameterized_test.py")
503
- file = codecs.open(file_path, "w+", "utf-8")
502
+ file = open(file_path, "w+", "utf-8")
504
503
  file.writelines("\r\n".join(data))
505
504
  file.close()
506
505
 
@@ -510,7 +509,7 @@ def main():
510
509
  data = []
511
510
  data.append("")
512
511
  file_path = "%s/%s" % (dir_name_2, "__init__.py")
513
- file = codecs.open(file_path, "w+", "utf-8")
512
+ file = open(file_path, "w+", "utf-8")
514
513
  file.writelines("\r\n".join(data))
515
514
  file.close()
516
515
 
@@ -545,7 +544,7 @@ def main():
545
544
  data.append(" pass")
546
545
  data.append("")
547
546
  file_path = "%s/%s" % (dir_name_2, "base_test_case.py")
548
- file = codecs.open(file_path, "w+", "utf-8")
547
+ file = open(file_path, "w+", "utf-8")
549
548
  file.writelines("\r\n".join(data))
550
549
  file.close()
551
550
 
@@ -554,7 +553,7 @@ def main():
554
553
  data.append(' html = "html"')
555
554
  data.append("")
556
555
  file_path = "%s/%s" % (dir_name_2, "page_objects.py")
557
- file = codecs.open(file_path, "w+", "utf-8")
556
+ file = open(file_path, "w+", "utf-8")
558
557
  file.writelines("\r\n".join(data))
559
558
  file.close()
560
559
 
@@ -570,7 +569,7 @@ def main():
570
569
  data.append(" self.assert_element(Page.html)")
571
570
  data.append("")
572
571
  file_path = "%s/%s" % (dir_name_2, "boilerplate_test.py")
573
- file = codecs.open(file_path, "w+", "utf-8")
572
+ file = open(file_path, "w+", "utf-8")
574
573
  file.writelines("\r\n".join(data))
575
574
  file.close()
576
575
 
@@ -594,7 +593,7 @@ def main():
594
593
  data.append(' DataPage().add_input_text(self, "Goodbye!")')
595
594
  data.append("")
596
595
  file_path = "%s/%s" % (dir_name_2, "classic_obj_test.py")
597
- file = codecs.open(file_path, "w+", "utf-8")
596
+ file = open(file_path, "w+", "utf-8")
598
597
  file.writelines("\r\n".join(data))
599
598
  file.close()
600
599
 
@@ -614,7 +613,7 @@ def main():
614
613
  data.append(' DataPage().add_input_text(sb, "Goodbye!")')
615
614
  data.append("")
616
615
  file_path = "%s/%s" % (dir_name_2, "sb_fixture_test.py")
617
- file = codecs.open(file_path, "w+", "utf-8")
616
+ file = open(file_path, "w+", "utf-8")
618
617
  file.writelines("\r\n".join(data))
619
618
  file.close()
620
619
 
@@ -624,7 +623,7 @@ def main():
624
623
  data = []
625
624
  data.append("")
626
625
  file_path = "%s/%s" % (dir_name_3, "__init__.py")
627
- file = codecs.open(file_path, "w+", "utf-8")
626
+ file = open(file_path, "w+", "utf-8")
628
627
  file.writelines("\r\n".join(data))
629
628
  file.close()
630
629
 
@@ -636,17 +635,12 @@ def main():
636
635
  data.append("")
637
636
  data.append("class GoogleTests(BaseCase):")
638
637
  data.append(" def test_google_dot_com(self):")
638
+ data.append(" if self.headless:")
639
+ data.append(' self.skip("Skipping test in headless mode.")')
639
640
  data.append(" if not self.undetectable:")
640
641
  data.append(" self.get_new_driver(undetectable=True)")
641
642
  data.append(' self.open("https://google.com/ncr")')
642
643
  data.append(' self.assert_title_contains("Google")')
643
- data.append(" self.sleep(0.05)")
644
- data.append(" self.save_screenshot_to_logs()")
645
- data.append(
646
- " self.wait_for_element('iframe[role=\"presentation\"]')"
647
- )
648
- data.append(" self.hide_elements('iframe')")
649
- data.append(" self.sleep(0.05)")
650
644
  data.append(" self.save_screenshot_to_logs()")
651
645
  data.append(' self.type(HomePage.search_box, "github.com")')
652
646
  data.append(" self.assert_element(HomePage.search_button)")
@@ -657,7 +651,7 @@ def main():
657
651
  )
658
652
  data.append("")
659
653
  file_path = "%s/%s" % (dir_name_3, "google_test.py")
660
- file = codecs.open(file_path, "w+", "utf-8")
654
+ file = open(file_path, "w+", "utf-8")
661
655
  file.writelines("\r\n".join(data))
662
656
  file.close()
663
657
 
@@ -675,7 +669,7 @@ def main():
675
669
  data.append(' search_results = "div#center_col"')
676
670
  data.append("")
677
671
  file_path = "%s/%s" % (dir_name_3, "google_objects.py")
678
- file = codecs.open(file_path, "w+", "utf-8")
672
+ file = open(file_path, "w+", "utf-8")
679
673
  file.writelines("\r\n".join(data))
680
674
  file.close()
681
675
 
@@ -707,7 +701,7 @@ def main():
707
701
  data.append(' self.assert_element("div#login_button_container")')
708
702
  data.append("")
709
703
  file_path = "%s/%s" % (dir_name_3, "swag_labs_test.py")
710
- file = codecs.open(file_path, "w+", "utf-8")
704
+ file = open(file_path, "w+", "utf-8")
711
705
  file.writelines("\r\n".join(data))
712
706
  file.close()
713
707
 
@@ -734,7 +728,7 @@ def main():
734
728
  data.append(' sb.assert_element("div#login_button_container")')
735
729
  data.append("")
736
730
  file_path = "%s/%s" % (dir_name_3, "sb_swag_test.py")
737
- file = codecs.open(file_path, "w+", "utf-8")
731
+ file = open(file_path, "w+", "utf-8")
738
732
  file.writelines("\r\n".join(data))
739
733
  file.close()
740
734
 
@@ -761,7 +755,7 @@ def main():
761
755
  data.append(" ├── sb_swag_test.py")
762
756
  data.append(" └── swag_labs_test.py")
763
757
  file_path = "%s/%s" % (dir_name, "outline.rst")
764
- file = codecs.open(file_path, "w+", "utf-8")
758
+ file = open(file_path, "w+", "utf-8")
765
759
  file.writelines("\r\n".join(data))
766
760
  file.close()
767
761
  if " " not in file_path:
@@ -40,7 +40,6 @@ Output:
40
40
  BaseCase format supports Languages or Recorder Mode.
41
41
  UC Mode automatically uses English with SB() format.
42
42
  """
43
- import codecs
44
43
  import colorama
45
44
  import os
46
45
  import sys
@@ -413,7 +412,7 @@ def main():
413
412
  continue
414
413
  new_data.append(line)
415
414
  data = new_data
416
- file = codecs.open(file_path, "w+", "utf-8")
415
+ file = open(file_path, "w+", "utf-8")
417
416
  file.writelines("\r\n".join(data))
418
417
  file.close()
419
418
  if " " not in file_name:
@@ -22,7 +22,6 @@ Output:
22
22
  and use "serif" theme with "slide" transition.
23
23
  The slides can be used as a basic boilerplate.
24
24
  """
25
- import codecs
26
25
  import colorama
27
26
  import os
28
27
  import sys
@@ -273,7 +272,7 @@ def main():
273
272
  continue
274
273
  new_data.append(line)
275
274
  data = new_data
276
- file = codecs.open(file_path, "w+", "utf-8")
275
+ file = open(file_path, "w+", "utf-8")
277
276
  file.writelines("\r\n".join(data))
278
277
  file.close()
279
278
  if " " not in file_name:
@@ -29,7 +29,6 @@ Output:
29
29
  Creates a new SeleniumBase test using the Recorder.
30
30
  If the filename already exists, an error is raised.
31
31
  """
32
- import codecs
33
32
  import colorama
34
33
  import shutil
35
34
  import os
@@ -240,7 +239,7 @@ def main():
240
239
  d2.append("")
241
240
  data = d2
242
241
 
243
- file = codecs.open(file_path, "w+", "utf-8")
242
+ file = open(file_path, "w+", "utf-8")
244
243
  file.writelines("\r\n".join(data))
245
244
  file.close()
246
245
  success = (
@@ -8,7 +8,6 @@ Output:
8
8
  have been replaced with variable names defined in
9
9
  "page_objects.py", supporting the Page Object Pattern.
10
10
  """
11
- import codecs
12
11
  import os
13
12
  import re
14
13
  import sys
@@ -136,7 +135,7 @@ def create_objects_file(selector_list_dict=None):
136
135
  data.append(' html = "html"')
137
136
  data.append("")
138
137
  file_path = PAGE_OBJECTS_FILE
139
- file = codecs.open(file_path, "w+", "utf-8")
138
+ file = open(file_path, "w+", "utf-8")
140
139
  file.writelines("\r\n".join(data))
141
140
  file.close()
142
141
  if not selector_list_dict:
@@ -3189,7 +3188,7 @@ def main(shell_command):
3189
3188
  # Create SeleniumBase test file
3190
3189
  base_file_name = seleniumbase_file.split(".py")[0]
3191
3190
  converted_file_name = base_file_name + ".py" # Change end to make a copy
3192
- out_file = codecs.open(converted_file_name, "w+", encoding="utf-8")
3191
+ out_file = open(converted_file_name, "w+", encoding="utf-8")
3193
3192
  out_file.writelines(seleniumbase_code)
3194
3193
  out_file.close()
3195
3194
  print('\n>>> ["%s"] was updated!\n' % converted_file_name)
@@ -2006,14 +2006,12 @@ def _repair_edgedriver(edge_version):
2006
2006
 
2007
2007
 
2008
2008
  def _mark_driver_repaired():
2009
- import codecs
2010
-
2011
2009
  abs_path = os.path.abspath(".")
2012
2010
  driver_repaired_lock = constants.MultiBrowser.DRIVER_REPAIRED
2013
2011
  file_path = os.path.join(abs_path, driver_repaired_lock)
2014
2012
  if not os.path.exists(DOWNLOADS_FOLDER):
2015
2013
  os.makedirs(DOWNLOADS_FOLDER)
2016
- out_file = codecs.open(file_path, "w+", encoding="utf-8")
2014
+ out_file = open(file_path, "w+", encoding="utf-8")
2017
2015
  out_file.writelines("")
2018
2016
  out_file.close()
2019
2017
 
@@ -1,4 +1,3 @@
1
- import codecs
2
1
  import os
3
2
  import shutil
4
3
  import sys
@@ -298,7 +297,7 @@ def log_test_failure_data(test, test_logpath, driver, browser, url=None):
298
297
  with suppress(Exception):
299
298
  os.makedirs(test_logpath)
300
299
  with suppress(Exception):
301
- log_file = codecs.open(basic_file_path, "w+", encoding="utf-8")
300
+ log_file = open(basic_file_path, "w+", encoding="utf-8")
302
301
  log_file.writelines("\r\n".join(data_to_save))
303
302
  log_file.close()
304
303
  shared_utils.make_writable(basic_file_path)
@@ -353,7 +352,7 @@ def log_skipped_test_data(test, test_logpath, driver, browser, reason):
353
352
  data_to_save.append("")
354
353
  file_path = os.path.join(test_logpath, "skip_reason.txt")
355
354
  with suppress(Exception):
356
- log_file = codecs.open(file_path, "w+", encoding="utf-8")
355
+ log_file = open(file_path, "w+", encoding="utf-8")
357
356
  log_file.writelines("\r\n".join(data_to_save))
358
357
  log_file.close()
359
358
  shared_utils.make_writable(file_path)
@@ -388,7 +387,7 @@ def log_page_source(test_logpath, driver, source=None):
388
387
  os.makedirs(test_logpath)
389
388
  html_file_path = os.path.join(test_logpath, html_file_name)
390
389
  with suppress(Exception):
391
- html_file = codecs.open(html_file_path, "w+", encoding="utf-8")
390
+ html_file = open(html_file_path, "w+", encoding="utf-8")
392
391
  html_file.write(page_source)
393
392
  html_file.close()
394
393
  shared_utils.make_writable(html_file_path)
@@ -1,4 +1,3 @@
1
- import codecs
2
1
  import os
3
2
  import shutil
4
3
  import sys
@@ -48,7 +47,7 @@ def save_test_failure_data(test, name, folder=None):
48
47
  failure_data_file_path = os.path.join(file_path, name)
49
48
  else:
50
49
  failure_data_file_path = name
51
- failure_data_file = codecs.open(failure_data_file_path, "w+", "utf-8")
50
+ failure_data_file = open(failure_data_file_path, "w+", "utf-8")
52
51
  data_to_save = []
53
52
  if not hasattr(sb_config, "_report_test_id"):
54
53
  exc_message = "(Unknown Exception)"