seleniumbase 4.43.1__tar.gz → 4.43.2__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.43.1/seleniumbase.egg-info → seleniumbase-4.43.2}/PKG-INFO +2 -2
  2. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/requirements.txt +1 -1
  3. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/__version__.py +1 -1
  4. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/behave/behave_sb.py +7 -7
  5. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/sb_caseplans.py +3 -3
  6. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/sb_mkchart.py +1 -1
  7. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/sb_mkdir.py +21 -21
  8. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/sb_mkfile.py +1 -1
  9. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/sb_mkpres.py +1 -1
  10. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/sb_mkrec.py +1 -1
  11. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/sb_objectify.py +4 -4
  12. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/sb_print.py +1 -1
  13. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/browser_launcher.py +14 -1
  14. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/detect_b_ver.py +214 -8
  15. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/log_helper.py +4 -4
  16. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/report_helper.py +6 -4
  17. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/sb_cdp.py +17 -1
  18. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/tour_helper.py +1 -1
  19. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/fixtures/constants.py +11 -0
  20. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/fixtures/js_utils.py +14 -2
  21. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/fixtures/page_utils.py +13 -7
  22. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/plugins/basic_test_info.py +2 -2
  23. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/plugins/page_source.py +2 -2
  24. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/plugins/pytest_plugin.py +23 -19
  25. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/translate/translator.py +2 -2
  26. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/undetected/cdp_driver/cdp_util.py +42 -38
  27. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/undetected/cdp_driver/connection.py +1 -0
  28. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +1 -1
  29. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/utilities/selenium_grid/grid_hub.py +1 -1
  30. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/utilities/selenium_grid/grid_node.py +2 -2
  31. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/utilities/selenium_ide/convert_ide.py +2 -2
  32. {seleniumbase-4.43.1 → seleniumbase-4.43.2/seleniumbase.egg-info}/PKG-INFO +2 -2
  33. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase.egg-info/requires.txt +1 -1
  34. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/setup.py +5 -3
  35. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/.gitignore +0 -0
  36. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/LICENSE +0 -0
  37. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/MANIFEST.in +0 -0
  38. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/README.md +0 -0
  39. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/install.sh +0 -0
  40. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/pyproject.toml +0 -0
  41. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/pytest.ini +0 -0
  42. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/sbase/__init__.py +0 -0
  43. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/sbase/__main__.py +0 -0
  44. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/sbase/steps.py +0 -0
  45. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/__init__.py +0 -0
  46. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/__main__.py +0 -0
  47. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/behave/__init__.py +0 -0
  48. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/behave/behave_helper.py +0 -0
  49. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/behave/steps.py +0 -0
  50. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/common/__init__.py +0 -0
  51. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/common/decorators.py +0 -0
  52. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/common/encryption.py +0 -0
  53. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/common/exceptions.py +0 -0
  54. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/common/obfuscate.py +0 -0
  55. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/common/unobfuscate.py +0 -0
  56. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/config/__init__.py +0 -0
  57. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/config/ad_block_list.py +0 -0
  58. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/config/proxy_list.py +0 -0
  59. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/config/settings.py +0 -0
  60. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/__init__.py +0 -0
  61. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/logo_helper.py +0 -0
  62. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/rich_helper.py +0 -0
  63. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/run.py +0 -0
  64. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  65. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/sb_commander.py +0 -0
  66. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/sb_install.py +0 -0
  67. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  68. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/__init__.py +0 -0
  69. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/application_manager.py +0 -0
  70. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/capabilities_parser.py +0 -0
  71. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/colored_traceback.py +0 -0
  72. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/create_db_tables.sql +0 -0
  73. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/download_helper.py +0 -0
  74. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/encoded_images.py +0 -0
  75. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/jqc_helper.py +0 -0
  76. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/mysql.py +0 -0
  77. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/proxy_helper.py +0 -0
  78. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/recorder_helper.py +0 -0
  79. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/s3_manager.py +0 -0
  80. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/sb_driver.py +0 -0
  81. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/session_helper.py +0 -0
  82. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/settings_parser.py +0 -0
  83. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/style_sheet.py +0 -0
  84. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/testcase_manager.py +0 -0
  85. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/core/visual_helper.py +0 -0
  86. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/drivers/__init__.py +0 -0
  87. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
  88. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
  89. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/extensions/__init__.py +0 -0
  90. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/extensions/ad_block.zip +0 -0
  91. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/extensions/disable_csp.zip +0 -0
  92. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/extensions/recorder.zip +0 -0
  93. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/extensions/sbase_ext.zip +0 -0
  94. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/fixtures/__init__.py +0 -0
  95. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/fixtures/base_case.py +0 -0
  96. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  97. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/fixtures/errors.py +0 -0
  98. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/fixtures/page_actions.py +0 -0
  99. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/fixtures/shared_utils.py +0 -0
  100. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/fixtures/unittest_helper.py +0 -0
  101. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/fixtures/words.py +0 -0
  102. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  103. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/js_code/__init__.py +0 -0
  104. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/js_code/active_css_js.py +0 -0
  105. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/js_code/live_js.py +0 -0
  106. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/js_code/recorder_js.py +0 -0
  107. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/masterqa/__init__.py +0 -0
  108. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/masterqa/master_qa.py +0 -0
  109. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/plugins/__init__.py +0 -0
  110. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/plugins/base_plugin.py +0 -0
  111. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  112. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/plugins/driver_manager.py +0 -0
  113. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  114. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/plugins/sb_manager.py +0 -0
  115. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/plugins/screen_shots.py +0 -0
  116. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/plugins/selenium_plugin.py +0 -0
  117. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/resources/__init__.py +0 -0
  118. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/translate/__init__.py +0 -0
  119. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/translate/chinese.py +0 -0
  120. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/translate/dutch.py +0 -0
  121. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/translate/french.py +0 -0
  122. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/translate/italian.py +0 -0
  123. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/translate/japanese.py +0 -0
  124. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/translate/korean.py +0 -0
  125. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/translate/master_dict.py +0 -0
  126. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/translate/portuguese.py +0 -0
  127. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/translate/russian.py +0 -0
  128. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/translate/spanish.py +0 -0
  129. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/undetected/__init__.py +0 -0
  130. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/undetected/cdp.py +0 -0
  131. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  132. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  133. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
  134. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  135. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  136. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  137. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/undetected/dprocess.py +0 -0
  138. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/undetected/options.py +0 -0
  139. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/undetected/patcher.py +0 -0
  140. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/undetected/reactor.py +0 -0
  141. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/undetected/webelement.py +0 -0
  142. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/utilities/__init__.py +0 -0
  143. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  144. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  145. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  146. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  147. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  148. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  149. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  150. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  151. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  152. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase.egg-info/SOURCES.txt +0 -0
  153. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase.egg-info/dependency_links.txt +0 -0
  154. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase.egg-info/entry_points.txt +0 -0
  155. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/seleniumbase.egg-info/top_level.txt +0 -0
  156. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/setup.cfg +0 -0
  157. {seleniumbase-4.43.1 → seleniumbase-4.43.2}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.43.1
3
+ Version: 4.43.2
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
@@ -94,7 +94,7 @@ Requires-Dist: pyyaml>=6.0.3
94
94
  Requires-Dist: pygments>=2.19.2
95
95
  Requires-Dist: pyreadline3>=3.5.4; platform_system == "Windows"
96
96
  Requires-Dist: tabcompleter>=1.4.0
97
- Requires-Dist: pdbp>=1.7.1
97
+ Requires-Dist: pdbp>=1.8.0
98
98
  Requires-Dist: idna>=3.11
99
99
  Requires-Dist: chardet==5.2.0
100
100
  Requires-Dist: charset-normalizer<4,>=3.4.4
@@ -33,7 +33,7 @@ pyyaml>=6.0.3
33
33
  pygments>=2.19.2
34
34
  pyreadline3>=3.5.4;platform_system=="Windows"
35
35
  tabcompleter>=1.4.0
36
- pdbp>=1.7.1
36
+ pdbp>=1.8.0
37
37
  idna>=3.11
38
38
  chardet==5.2.0
39
39
  charset-normalizer>=3.4.4,<4
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.43.1"
2
+ __version__ = "4.43.2"
@@ -1216,24 +1216,24 @@ def _create_dashboard_assets_():
1216
1216
  add_pytest_style_css = True
1217
1217
  if os.path.exists(pytest_style_css):
1218
1218
  existing_pytest_style = None
1219
- with open(pytest_style_css, "r") as f:
1219
+ with open(pytest_style_css, mode="r") as f:
1220
1220
  existing_pytest_style = f.read()
1221
1221
  if existing_pytest_style == get_pytest_style():
1222
1222
  add_pytest_style_css = False
1223
1223
  if add_pytest_style_css:
1224
- out_file = open(pytest_style_css, "w+", encoding="utf-8")
1224
+ out_file = open(pytest_style_css, mode="w+", encoding="utf-8")
1225
1225
  out_file.writelines(get_pytest_style())
1226
1226
  out_file.close()
1227
1227
  live_js_file = os.path.join(assets_folder, "live.js")
1228
1228
  add_live_js_file = True
1229
1229
  if os.path.exists(live_js_file):
1230
1230
  existing_live_js = None
1231
- with open(live_js_file, "r") as f:
1231
+ with open(live_js_file, mode="r") as f:
1232
1232
  existing_live_js = f.read()
1233
1233
  if existing_live_js == live_js:
1234
1234
  add_live_js_file = False
1235
1235
  if add_live_js_file:
1236
- out_file = open(live_js_file, "w+", encoding="utf-8")
1236
+ out_file = open(live_js_file, mode="w+", encoding="utf-8")
1237
1237
  out_file.writelines(live_js)
1238
1238
  out_file.close()
1239
1239
 
@@ -1306,7 +1306,7 @@ def _perform_behave_unconfigure_():
1306
1306
  # Part 1: Finalizing the dashboard / integrating html report
1307
1307
  if os.path.exists(dashboard_path):
1308
1308
  the_html_d = None
1309
- with open(dashboard_path, "r", encoding="utf-8") as f:
1309
+ with open(dashboard_path, mode="r", encoding="utf-8") as f:
1310
1310
  the_html_d = f.read()
1311
1311
  if sb_config._multithreaded and "-c" in sys.argv:
1312
1312
  # Threads have "-c" in sys.argv, except for the last
@@ -1317,7 +1317,7 @@ def _perform_behave_unconfigure_():
1317
1317
  if os.path.exists(pie_path):
1318
1318
  import json
1319
1319
 
1320
- with open(pie_path, "r") as f:
1320
+ with open(pie_path, mode="r") as f:
1321
1321
  dash_pie = f.read().strip()
1322
1322
  sb_config._saved_dashboard_pie = json.loads(dash_pie)
1323
1323
  # If the test run doesn't complete by itself, stop refresh
@@ -1326,7 +1326,7 @@ def _perform_behave_unconfigure_():
1326
1326
  the_html_d = the_html_d.replace(find_it_3, swap_with_3)
1327
1327
  the_html_d = the_html_d.replace(find_it_4, swap_with_4)
1328
1328
  the_html_d += stamp
1329
- with open(dashboard_path, "w", encoding="utf-8") as f:
1329
+ with open(dashboard_path, mode="w", encoding="utf-8") as f:
1330
1330
  f.write(the_html_d) # Finalize the dashboard
1331
1331
  except KeyboardInterrupt:
1332
1332
  pass
@@ -134,7 +134,7 @@ def generate_case_plan_boilerplates(
134
134
  file_name = case_id
135
135
  file_path = os.path.join(full_folder_path, file_name)
136
136
  if not os.path.exists(file_path):
137
- out_file = open(file_path, "w+", "utf-8")
137
+ out_file = open(file_path, mode="w+", encoding="utf-8")
138
138
  out_file.writelines("\r\n".join(data))
139
139
  out_file.close()
140
140
  new_plans += 1
@@ -182,7 +182,7 @@ def view_summary_of_existing_case_plans(root, tests):
182
182
  else:
183
183
  case_path = os.path.join(folder_path, "case_plans", case_id)
184
184
  if os.path.exists(case_path):
185
- f = open(case_path, "r")
185
+ f = open(case_path, mode="r")
186
186
  case_data = f.read()
187
187
  f.close()
188
188
  case_data_storage.append(case_data)
@@ -315,7 +315,7 @@ def view_summary_of_existing_case_plans(root, tests):
315
315
  full_plan = plan_head
316
316
 
317
317
  file_path = "case_summary.md"
318
- file = open(file_path, "w+", "utf-8")
318
+ file = open(file_path, mode="w+", encoding="utf-8")
319
319
  file.writelines("\r\n".join(full_plan))
320
320
  file.close()
321
321
 
@@ -253,7 +253,7 @@ def main():
253
253
  continue
254
254
  new_data.append(line)
255
255
  data = new_data
256
- file = open(file_path, "w+", "utf-8")
256
+ file = open(file_path, mode="w+", encoding="utf-8")
257
257
  file.writelines("\r\n".join(data))
258
258
  file.close()
259
259
  if " " not in file_name:
@@ -113,7 +113,7 @@ def main():
113
113
  data.append(seleniumbase_req)
114
114
  data.append("")
115
115
  file_path = "%s/%s" % (dir_name, "requirements.txt")
116
- file = open(file_path, "w+", "utf-8")
116
+ file = open(file_path, mode="w+", encoding="utf-8")
117
117
  file.writelines("\r\n".join(data))
118
118
  file.close()
119
119
 
@@ -151,7 +151,7 @@ def main():
151
151
  data.append(" production: custom marker")
152
152
  data.append("")
153
153
  file_path = "%s/%s" % (dir_name, "pytest.ini")
154
- file = open(file_path, "w+", "utf-8")
154
+ file = open(file_path, mode="w+", encoding="utf-8")
155
155
  file.writelines("\r\n".join(data))
156
156
  file.close()
157
157
 
@@ -168,14 +168,14 @@ def main():
168
168
  data.append("show_skipped=false")
169
169
  data.append("show_timings=false")
170
170
  file_path = "%s/%s" % (dir_name, "setup.cfg")
171
- file = open(file_path, "w+", "utf-8")
171
+ file = open(file_path, mode="w+", encoding="utf-8")
172
172
  file.writelines("\r\n".join(data))
173
173
  file.close()
174
174
 
175
175
  data = []
176
176
  data.append("")
177
177
  file_path = "%s/%s" % (dir_name, "__init__.py")
178
- file = open(file_path, "w+", "utf-8")
178
+ file = open(file_path, mode="w+", encoding="utf-8")
179
179
  file.writelines("\r\n".join(data))
180
180
  file.close()
181
181
 
@@ -311,7 +311,7 @@ def main():
311
311
  data.append("temp_*/")
312
312
  data.append("node_modules")
313
313
  file_path = "%s/%s" % (dir_name, ".gitignore")
314
- file = open(file_path, "w+", "utf-8")
314
+ file = open(file_path, mode="w+", encoding="utf-8")
315
315
  file.writelines("\r\n".join(data))
316
316
  file.close()
317
317
 
@@ -323,7 +323,7 @@ def main():
323
323
  data.append(" ├── requirements.txt")
324
324
  data.append(" └── setup.cfg")
325
325
  file_path = "%s/%s" % (dir_name, "outline.rst")
326
- file = open(file_path, "w+", "utf-8")
326
+ file = open(file_path, mode="w+", encoding="utf-8")
327
327
  file.writelines("\r\n".join(data))
328
328
  file.close()
329
329
  os.system("sbase print %s -n" % file_path)
@@ -367,7 +367,7 @@ def main():
367
367
  data.append(' self.assert_element("div#login_button_container")')
368
368
  data.append("")
369
369
  file_path = "%s/%s" % (dir_name, "my_first_test.py")
370
- file = open(file_path, "w+", "utf-8")
370
+ file = open(file_path, mode="w+", encoding="utf-8")
371
371
  file.writelines("\r\n".join(data))
372
372
  file.close()
373
373
 
@@ -460,7 +460,7 @@ def main():
460
460
  data.append(' self.assert_text("SeleniumBase", "h2")')
461
461
  data.append("")
462
462
  file_path = "%s/%s" % (dir_name, "test_demo_site.py")
463
- file = open(file_path, "w+", "utf-8")
463
+ file = open(file_path, mode="w+", encoding="utf-8")
464
464
  file.writelines("\r\n".join(data))
465
465
  file.close()
466
466
 
@@ -499,7 +499,7 @@ def main():
499
499
  data.append(' self.assert_title_contains(title_text)')
500
500
  data.append("")
501
501
  file_path = "%s/%s" % (dir_name, "parameterized_test.py")
502
- file = open(file_path, "w+", "utf-8")
502
+ file = open(file_path, mode="w+", encoding="utf-8")
503
503
  file.writelines("\r\n".join(data))
504
504
  file.close()
505
505
 
@@ -509,7 +509,7 @@ def main():
509
509
  data = []
510
510
  data.append("")
511
511
  file_path = "%s/%s" % (dir_name_2, "__init__.py")
512
- file = open(file_path, "w+", "utf-8")
512
+ file = open(file_path, mode="w+", encoding="utf-8")
513
513
  file.writelines("\r\n".join(data))
514
514
  file.close()
515
515
 
@@ -544,7 +544,7 @@ def main():
544
544
  data.append(" pass")
545
545
  data.append("")
546
546
  file_path = "%s/%s" % (dir_name_2, "base_test_case.py")
547
- file = open(file_path, "w+", "utf-8")
547
+ file = open(file_path, mode="w+", encoding="utf-8")
548
548
  file.writelines("\r\n".join(data))
549
549
  file.close()
550
550
 
@@ -553,7 +553,7 @@ def main():
553
553
  data.append(' html = "html"')
554
554
  data.append("")
555
555
  file_path = "%s/%s" % (dir_name_2, "page_objects.py")
556
- file = open(file_path, "w+", "utf-8")
556
+ file = open(file_path, mode="w+", encoding="utf-8")
557
557
  file.writelines("\r\n".join(data))
558
558
  file.close()
559
559
 
@@ -569,7 +569,7 @@ def main():
569
569
  data.append(" self.assert_element(Page.html)")
570
570
  data.append("")
571
571
  file_path = "%s/%s" % (dir_name_2, "boilerplate_test.py")
572
- file = open(file_path, "w+", "utf-8")
572
+ file = open(file_path, mode="w+", encoding="utf-8")
573
573
  file.writelines("\r\n".join(data))
574
574
  file.close()
575
575
 
@@ -593,7 +593,7 @@ def main():
593
593
  data.append(' DataPage().add_input_text(self, "Goodbye!")')
594
594
  data.append("")
595
595
  file_path = "%s/%s" % (dir_name_2, "classic_obj_test.py")
596
- file = open(file_path, "w+", "utf-8")
596
+ file = open(file_path, mode="w+", encoding="utf-8")
597
597
  file.writelines("\r\n".join(data))
598
598
  file.close()
599
599
 
@@ -613,7 +613,7 @@ def main():
613
613
  data.append(' DataPage().add_input_text(sb, "Goodbye!")')
614
614
  data.append("")
615
615
  file_path = "%s/%s" % (dir_name_2, "sb_fixture_test.py")
616
- file = open(file_path, "w+", "utf-8")
616
+ file = open(file_path, mode="w+", encoding="utf-8")
617
617
  file.writelines("\r\n".join(data))
618
618
  file.close()
619
619
 
@@ -623,7 +623,7 @@ def main():
623
623
  data = []
624
624
  data.append("")
625
625
  file_path = "%s/%s" % (dir_name_3, "__init__.py")
626
- file = open(file_path, "w+", "utf-8")
626
+ file = open(file_path, mode="w+", encoding="utf-8")
627
627
  file.writelines("\r\n".join(data))
628
628
  file.close()
629
629
 
@@ -651,7 +651,7 @@ def main():
651
651
  )
652
652
  data.append("")
653
653
  file_path = "%s/%s" % (dir_name_3, "google_test.py")
654
- file = open(file_path, "w+", "utf-8")
654
+ file = open(file_path, mode="w+", encoding="utf-8")
655
655
  file.writelines("\r\n".join(data))
656
656
  file.close()
657
657
 
@@ -669,7 +669,7 @@ def main():
669
669
  data.append(' search_results = "div#center_col"')
670
670
  data.append("")
671
671
  file_path = "%s/%s" % (dir_name_3, "google_objects.py")
672
- file = open(file_path, "w+", "utf-8")
672
+ file = open(file_path, mode="w+", encoding="utf-8")
673
673
  file.writelines("\r\n".join(data))
674
674
  file.close()
675
675
 
@@ -701,7 +701,7 @@ def main():
701
701
  data.append(' self.assert_element("div#login_button_container")')
702
702
  data.append("")
703
703
  file_path = "%s/%s" % (dir_name_3, "swag_labs_test.py")
704
- file = open(file_path, "w+", "utf-8")
704
+ file = open(file_path, mode="w+", encoding="utf-8")
705
705
  file.writelines("\r\n".join(data))
706
706
  file.close()
707
707
 
@@ -728,7 +728,7 @@ def main():
728
728
  data.append(' sb.assert_element("div#login_button_container")')
729
729
  data.append("")
730
730
  file_path = "%s/%s" % (dir_name_3, "sb_swag_test.py")
731
- file = open(file_path, "w+", "utf-8")
731
+ file = open(file_path, mode="w+", encoding="utf-8")
732
732
  file.writelines("\r\n".join(data))
733
733
  file.close()
734
734
 
@@ -755,7 +755,7 @@ def main():
755
755
  data.append(" ├── sb_swag_test.py")
756
756
  data.append(" └── swag_labs_test.py")
757
757
  file_path = "%s/%s" % (dir_name, "outline.rst")
758
- file = open(file_path, "w+", "utf-8")
758
+ file = open(file_path, mode="w+", encoding="utf-8")
759
759
  file.writelines("\r\n".join(data))
760
760
  file.close()
761
761
  if " " not in file_path:
@@ -412,7 +412,7 @@ def main():
412
412
  continue
413
413
  new_data.append(line)
414
414
  data = new_data
415
- file = open(file_path, "w+", "utf-8")
415
+ file = open(file_path, mode="w+", encoding="utf-8")
416
416
  file.writelines("\r\n".join(data))
417
417
  file.close()
418
418
  if " " not in file_name:
@@ -272,7 +272,7 @@ def main():
272
272
  continue
273
273
  new_data.append(line)
274
274
  data = new_data
275
- file = open(file_path, "w+", "utf-8")
275
+ file = open(file_path, mode="w+", encoding="utf-8")
276
276
  file.writelines("\r\n".join(data))
277
277
  file.close()
278
278
  if " " not in file_name:
@@ -239,7 +239,7 @@ def main():
239
239
  d2.append("")
240
240
  data = d2
241
241
 
242
- file = open(file_path, "w+", "utf-8")
242
+ file = open(file_path, mode="w+", encoding="utf-8")
243
243
  file.writelines("\r\n".join(data))
244
244
  file.close()
245
245
  success = (
@@ -135,7 +135,7 @@ def create_objects_file(selector_list_dict=None):
135
135
  data.append(' html = "html"')
136
136
  data.append("")
137
137
  file_path = PAGE_OBJECTS_FILE
138
- file = open(file_path, "w+", "utf-8")
138
+ file = open(file_path, mode="w+", encoding="utf-8")
139
139
  file.writelines("\r\n".join(data))
140
140
  file.close()
141
141
  if not selector_list_dict:
@@ -149,7 +149,7 @@ def scan_objects_file():
149
149
  create_objects_file()
150
150
 
151
151
  page_selectors = {}
152
- with open(PAGE_OBJECTS_FILE, "r", encoding="utf-8") as f:
152
+ with open(PAGE_OBJECTS_FILE, mode="r", encoding="utf-8") as f:
153
153
  all_code = f.read()
154
154
 
155
155
  var_names = []
@@ -3089,7 +3089,7 @@ def main(shell_command):
3089
3089
  "Expecting: %s\n" % (seleniumbase_file, expected_arg)
3090
3090
  )
3091
3091
 
3092
- with open(seleniumbase_file, "r", encoding="utf-8") as f:
3092
+ with open(seleniumbase_file, mode="r", encoding="utf-8") as f:
3093
3093
  all_code = f.read()
3094
3094
  if "def test_" not in all_code:
3095
3095
  raise Exception(
@@ -3188,7 +3188,7 @@ def main(shell_command):
3188
3188
  # Create SeleniumBase test file
3189
3189
  base_file_name = seleniumbase_file.split(".py")[0]
3190
3190
  converted_file_name = base_file_name + ".py" # Change end to make a copy
3191
- out_file = open(converted_file_name, "w+", encoding="utf-8")
3191
+ out_file = open(converted_file_name, mode="w+", encoding="utf-8")
3192
3192
  out_file.writelines(seleniumbase_code)
3193
3193
  out_file.close()
3194
3194
  print('\n>>> ["%s"] was updated!\n' % converted_file_name)
@@ -123,7 +123,7 @@ def main():
123
123
 
124
124
  all_code = None
125
125
  with open(
126
- file_to_print, "r+", encoding="utf-8", errors="ignore"
126
+ file_to_print, mode="r+", encoding="utf-8", errors="ignore"
127
127
  ) as f:
128
128
  all_code = f.read()
129
129
  all_code = all_code.replace("\t", " ")
@@ -2011,7 +2011,7 @@ def _mark_driver_repaired():
2011
2011
  file_path = os.path.join(abs_path, driver_repaired_lock)
2012
2012
  if not os.path.exists(DOWNLOADS_FOLDER):
2013
2013
  os.makedirs(DOWNLOADS_FOLDER)
2014
- out_file = open(file_path, "w+", encoding="utf-8")
2014
+ out_file = open(file_path, mode="w+", encoding="utf-8")
2015
2015
  out_file.writelines("")
2016
2016
  out_file.close()
2017
2017
 
@@ -2396,6 +2396,19 @@ def _set_chrome_options(
2396
2396
  and not recorder_ext
2397
2397
  and (not extension_zip and not extension_dir)
2398
2398
  ):
2399
+ if (
2400
+ binary_location
2401
+ and isinstance(binary_location, str)
2402
+ and (
2403
+ binary_location.lower().endswith("comet")
2404
+ or binary_location.lower().endswith("comet.exe")
2405
+ or binary_location.lower().endswith("atlas")
2406
+ or binary_location.lower().endswith("atlas.exe")
2407
+ )
2408
+ ):
2409
+ # AI browsers don't like Incognito / Guest Mode
2410
+ incognito = False
2411
+ guest_mode = False
2399
2412
  if incognito:
2400
2413
  # Use Chrome's Incognito Mode
2401
2414
  # Incognito Mode prevents Chrome extensions from loading,