seleniumbase 4.45.1__tar.gz → 4.45.12__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 (163) hide show
  1. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/.gitignore +10 -0
  2. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/LICENSE +1 -1
  3. {seleniumbase-4.45.1/seleniumbase.egg-info → seleniumbase-4.45.12}/PKG-INFO +80 -70
  4. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/README.md +69 -61
  5. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/pyproject.toml +1 -0
  6. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/requirements.txt +7 -6
  7. seleniumbase-4.45.12/seleniumbase/__version__.py +2 -0
  8. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/behave/behave_sb.py +6 -0
  9. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/run.py +1 -0
  10. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/sb_install.py +145 -2
  11. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/sb_mkdir.py +76 -0
  12. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/sb_mkrec.py +5 -0
  13. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/sb_recorder.py +2 -0
  14. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/browser_launcher.py +150 -38
  15. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/sb_cdp.py +139 -26
  16. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/fixtures/base_case.py +53 -50
  17. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/fixtures/js_utils.py +6 -2
  18. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/plugins/driver_manager.py +11 -4
  19. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/plugins/pytest_plugin.py +20 -4
  20. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/plugins/sb_manager.py +9 -4
  21. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/plugins/selenium_plugin.py +15 -3
  22. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/undetected/cdp_driver/browser.py +81 -30
  23. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/undetected/cdp_driver/cdp_util.py +34 -18
  24. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/undetected/cdp_driver/config.py +61 -2
  25. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/undetected/cdp_driver/connection.py +25 -16
  26. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/undetected/cdp_driver/element.py +31 -19
  27. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/undetected/cdp_driver/tab.py +35 -2
  28. seleniumbase-4.45.12/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  29. {seleniumbase-4.45.1 → seleniumbase-4.45.12/seleniumbase.egg-info}/PKG-INFO +80 -70
  30. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase.egg-info/SOURCES.txt +1 -0
  31. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase.egg-info/requires.txt +14 -8
  32. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/setup.py +11 -8
  33. seleniumbase-4.45.1/seleniumbase/__version__.py +0 -2
  34. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/MANIFEST.in +0 -0
  35. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/install.sh +0 -0
  36. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/pytest.ini +0 -0
  37. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/sbase/__init__.py +0 -0
  38. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/sbase/__main__.py +0 -0
  39. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/sbase/steps.py +0 -0
  40. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/__init__.py +0 -0
  41. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/__main__.py +0 -0
  42. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/behave/__init__.py +0 -0
  43. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/behave/behave_helper.py +0 -0
  44. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/behave/steps.py +0 -0
  45. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/common/__init__.py +0 -0
  46. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/common/decorators.py +0 -0
  47. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/common/encryption.py +0 -0
  48. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/common/exceptions.py +0 -0
  49. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/common/obfuscate.py +0 -0
  50. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/common/unobfuscate.py +0 -0
  51. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/config/__init__.py +0 -0
  52. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/config/ad_block_list.py +0 -0
  53. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/config/proxy_list.py +0 -0
  54. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/config/settings.py +0 -0
  55. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/__init__.py +0 -0
  56. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/logo_helper.py +0 -0
  57. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/rich_helper.py +0 -0
  58. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  59. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  60. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/sb_commander.py +0 -0
  61. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  62. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  63. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  64. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  65. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/console_scripts/sb_print.py +0 -0
  66. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/__init__.py +0 -0
  67. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/application_manager.py +0 -0
  68. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/capabilities_parser.py +0 -0
  69. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/colored_traceback.py +0 -0
  70. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/create_db_tables.sql +0 -0
  71. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/detect_b_ver.py +0 -0
  72. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/download_helper.py +0 -0
  73. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/encoded_images.py +0 -0
  74. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/jqc_helper.py +0 -0
  75. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/log_helper.py +0 -0
  76. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/mysql.py +0 -0
  77. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/proxy_helper.py +0 -0
  78. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/recorder_helper.py +0 -0
  79. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/report_helper.py +0 -0
  80. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/s3_manager.py +0 -0
  81. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/sb_driver.py +0 -0
  82. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/session_helper.py +0 -0
  83. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/settings_parser.py +0 -0
  84. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/style_sheet.py +0 -0
  85. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/testcase_manager.py +0 -0
  86. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/tour_helper.py +0 -0
  87. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/core/visual_helper.py +0 -0
  88. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/drivers/__init__.py +0 -0
  89. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/drivers/atlas_drivers/__init__.py +0 -0
  90. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
  91. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
  92. {seleniumbase-4.45.1/seleniumbase/drivers/chs_drivers → seleniumbase-4.45.12/seleniumbase/drivers/chromium_drivers}/__init__.py +0 -0
  93. {seleniumbase-4.45.1/seleniumbase/drivers/comet_drivers → seleniumbase-4.45.12/seleniumbase/drivers/chs_drivers}/__init__.py +0 -0
  94. {seleniumbase-4.45.1/seleniumbase/drivers/opera_drivers → seleniumbase-4.45.12/seleniumbase/drivers/comet_drivers}/__init__.py +0 -0
  95. {seleniumbase-4.45.1/seleniumbase/extensions → seleniumbase-4.45.12/seleniumbase/drivers/opera_drivers}/__init__.py +0 -0
  96. {seleniumbase-4.45.1/seleniumbase/fixtures → seleniumbase-4.45.12/seleniumbase/extensions}/__init__.py +0 -0
  97. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/extensions/ad_block.zip +0 -0
  98. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/extensions/disable_csp.zip +0 -0
  99. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/extensions/recorder.zip +0 -0
  100. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/extensions/sbase_ext.zip +0 -0
  101. {seleniumbase-4.45.1/seleniumbase/js_code → seleniumbase-4.45.12/seleniumbase/fixtures}/__init__.py +0 -0
  102. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/fixtures/constants.py +0 -0
  103. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  104. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/fixtures/errors.py +0 -0
  105. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/fixtures/page_actions.py +0 -0
  106. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/fixtures/page_utils.py +0 -0
  107. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/fixtures/shared_utils.py +0 -0
  108. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/fixtures/unittest_helper.py +0 -0
  109. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/fixtures/words.py +0 -0
  110. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  111. {seleniumbase-4.45.1/seleniumbase/masterqa → seleniumbase-4.45.12/seleniumbase/js_code}/__init__.py +0 -0
  112. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/js_code/active_css_js.py +0 -0
  113. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/js_code/live_js.py +0 -0
  114. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/js_code/recorder_js.py +0 -0
  115. {seleniumbase-4.45.1/seleniumbase/plugins → seleniumbase-4.45.12/seleniumbase/masterqa}/__init__.py +0 -0
  116. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/masterqa/master_qa.py +0 -0
  117. {seleniumbase-4.45.1/seleniumbase/resources → seleniumbase-4.45.12/seleniumbase/plugins}/__init__.py +0 -0
  118. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/plugins/base_plugin.py +0 -0
  119. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/plugins/basic_test_info.py +0 -0
  120. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  121. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/plugins/page_source.py +0 -0
  122. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  123. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/plugins/screen_shots.py +0 -0
  124. {seleniumbase-4.45.1/seleniumbase/utilities → seleniumbase-4.45.12/seleniumbase/resources}/__init__.py +0 -0
  125. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/translate/__init__.py +0 -0
  126. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/translate/chinese.py +0 -0
  127. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/translate/dutch.py +0 -0
  128. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/translate/french.py +0 -0
  129. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/translate/italian.py +0 -0
  130. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/translate/japanese.py +0 -0
  131. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/translate/korean.py +0 -0
  132. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/translate/master_dict.py +0 -0
  133. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/translate/portuguese.py +0 -0
  134. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/translate/russian.py +0 -0
  135. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/translate/spanish.py +0 -0
  136. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/translate/translator.py +0 -0
  137. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/undetected/__init__.py +0 -0
  138. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/undetected/cdp.py +0 -0
  139. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  140. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  141. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/undetected/dprocess.py +0 -0
  142. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/undetected/options.py +0 -0
  143. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/undetected/patcher.py +0 -0
  144. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/undetected/reactor.py +0 -0
  145. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/undetected/webelement.py +0 -0
  146. {seleniumbase-4.45.1/seleniumbase/utilities/selenium_grid → seleniumbase-4.45.12/seleniumbase/utilities}/__init__.py +0 -0
  147. {seleniumbase-4.45.1/seleniumbase/utilities/selenium_ide → seleniumbase-4.45.12/seleniumbase/utilities/selenium_grid}/__init__.py +0 -0
  148. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  149. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  150. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  151. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  152. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  153. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  154. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  155. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  156. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  157. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  158. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  159. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase.egg-info/dependency_links.txt +0 -0
  160. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase.egg-info/entry_points.txt +0 -0
  161. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/seleniumbase.egg-info/top_level.txt +0 -0
  162. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/setup.cfg +0 -0
  163. {seleniumbase-4.45.1 → seleniumbase-4.45.12}/virtualenv_install.sh +0 -0
@@ -82,6 +82,16 @@ msedgedriver.exe
82
82
  operadriver.exe
83
83
  uc_driver.exe
84
84
 
85
+ # Chromium Zip Files
86
+ chrome-mac.zip
87
+ chrome-linux.zip
88
+ chrome-win.zip
89
+
90
+ # Chromium folders
91
+ chrome-mac
92
+ chrome-linux
93
+ chrome-win
94
+
85
95
  # Chrome for Testing Zip Files
86
96
  chrome-mac-arm64.zip
87
97
  chrome-mac-x64.zip
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2014-2025 Michael Mintz
3
+ Copyright (c) 2014-2026 Michael Mintz
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.45.1
3
+ Version: 4.45.12
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
@@ -64,11 +64,12 @@ Requires-Dist: setuptools~=70.2; python_version < "3.10"
64
64
  Requires-Dist: setuptools>=80.9.0; python_version >= "3.10"
65
65
  Requires-Dist: wheel>=0.45.1
66
66
  Requires-Dist: attrs>=25.4.0
67
- Requires-Dist: certifi>=2025.11.12
67
+ Requires-Dist: certifi>=2026.1.4
68
68
  Requires-Dist: exceptiongroup>=1.3.1
69
- Requires-Dist: websockets>=15.0.1
69
+ Requires-Dist: websockets~=15.0.1; python_version < "3.10"
70
+ Requires-Dist: websockets>=16.0; python_version >= "3.10"
70
71
  Requires-Dist: filelock~=3.19.1; python_version < "3.10"
71
- Requires-Dist: filelock>=3.20.0; python_version >= "3.10"
72
+ Requires-Dist: filelock>=3.20.3; python_version >= "3.10"
72
73
  Requires-Dist: fasteners>=0.20
73
74
  Requires-Dist: mycdp>=1.3.2
74
75
  Requires-Dist: pynose>=1.5.5
@@ -86,7 +87,7 @@ Requires-Dist: pyyaml>=6.0.3
86
87
  Requires-Dist: pygments>=2.19.2
87
88
  Requires-Dist: pyreadline3>=3.5.4; platform_system == "Windows"
88
89
  Requires-Dist: tabcompleter>=1.4.0
89
- Requires-Dist: pdbp>=1.8.1
90
+ Requires-Dist: pdbp>=1.8.2
90
91
  Requires-Dist: idna>=3.11
91
92
  Requires-Dist: chardet==5.2.0
92
93
  Requires-Dist: charset-normalizer<4,>=3.4.4
@@ -122,7 +123,7 @@ Requires-Dist: pytest-rerunfailures==16.1; python_version >= "3.10"
122
123
  Requires-Dist: pytest-xdist==3.8.0
123
124
  Requires-Dist: parameterized==0.9.0
124
125
  Requires-Dist: behave==1.2.6
125
- Requires-Dist: soupsieve~=2.8
126
+ Requires-Dist: soupsieve~=2.8.1
126
127
  Requires-Dist: beautifulsoup4~=4.14.3
127
128
  Requires-Dist: pyotp==2.9.0
128
129
  Requires-Dist: python-xlib==0.33; platform_system == "Linux"
@@ -137,7 +138,7 @@ Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
137
138
  Requires-Dist: allure-behave>=2.13.5; extra == "allure"
138
139
  Provides-Extra: coverage
139
140
  Requires-Dist: coverage>=7.10.7; python_version < "3.10" and extra == "coverage"
140
- Requires-Dist: coverage>=7.13.0; python_version >= "3.10" and extra == "coverage"
141
+ Requires-Dist: coverage>=7.13.1; python_version >= "3.10" and extra == "coverage"
141
142
  Requires-Dist: pytest-cov>=7.0.0; extra == "coverage"
142
143
  Provides-Extra: flake8
143
144
  Requires-Dist: flake8==7.3.0; extra == "flake8"
@@ -150,13 +151,14 @@ Requires-Dist: ipython==7.34.0; extra == "ipdb"
150
151
  Provides-Extra: mss
151
152
  Requires-Dist: mss==10.1.0; extra == "mss"
152
153
  Provides-Extra: pdfminer
153
- Requires-Dist: pdfminer.six==20251107; extra == "pdfminer"
154
+ Requires-Dist: pdfminer.six==20251107; python_version < "3.10" and extra == "pdfminer"
155
+ Requires-Dist: pdfminer.six==20260107; python_version >= "3.10" and extra == "pdfminer"
154
156
  Requires-Dist: cryptography==46.0.3; extra == "pdfminer"
155
157
  Requires-Dist: cffi==2.0.0; extra == "pdfminer"
156
158
  Requires-Dist: pycparser==2.23; extra == "pdfminer"
157
159
  Provides-Extra: pillow
158
160
  Requires-Dist: Pillow>=11.3.0; python_version < "3.10" and extra == "pillow"
159
- Requires-Dist: Pillow>=12.0.0; python_version >= "3.10" and extra == "pillow"
161
+ Requires-Dist: Pillow>=12.1.0; python_version >= "3.10" and extra == "pillow"
160
162
  Provides-Extra: pip-system-certs
161
163
  Requires-Dist: pip-system-certs==4.0; platform_system == "Windows" and extra == "pip-system-certs"
162
164
  Provides-Extra: proxy
@@ -218,22 +220,21 @@ Dynamic: summary
218
220
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/features_list.md">🏰 Features</a> |
219
221
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/customizing_test_runs.md">🎛️ Options</a> |
220
222
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">📚 Examples</a> |
221
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/console_scripts/ReadMe.md">🌠 Scripts</a> |
223
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/console_scripts/ReadMe.md">🪄 Scripts</a> |
222
224
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/mobile_testing.md">📱 Mobile</a>
223
225
  <br />
224
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/method_summary.md">📘 API</a> |
225
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md"> 🔠 Syntaxes</a> |
226
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/method_summary.md">📘 The API</a> |
227
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md"> 🔠 SyntaxFormats</a> |
226
228
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/recorder_mode.md">🔴 Recorder</a> |
227
229
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/example_logs/ReadMe.md">📊 Dashboard</a> |
228
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/locale_codes.md">🗾 Locale</a> |
229
- <a href="https://seleniumbase.io/devices/?url=seleniumbase.com">💻 Farm</a>
230
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/locale_codes.md">🗾 Locale</a>
230
231
  <br />
231
232
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/commander.md">🎖️ GUI</a> |
232
233
  <a href="https://seleniumbase.io/demo_page">📰 TestPage</a> |
233
234
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md">👤 UC Mode</a> |
234
235
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">🐙 CDP Mode</a> |
235
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/chart_maker/ReadMe.md">📶 Charts</a> |
236
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">🌐 Grid</a>
236
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/chart_maker/ReadMe.md">📶 Charts</a> |
237
+ <a href="https://seleniumbase.io/devices/?url=seleniumbase.com">🖥️ Farm</a>
237
238
  <br />
238
239
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/how_it_works.md">👁️ How</a> |
239
240
  <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples/migration/raw_selenium">🚝 Migration</a> |
@@ -242,7 +243,7 @@ Dynamic: summary
242
243
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/tour_examples/ReadMe.md">🚎 Tours</a>
243
244
  <br />
244
245
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/github/workflows/ReadMe.md">🤖 CI/CD</a> |
245
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/js_package_manager.md">🕹️ JSMgr</a> |
246
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/js_package_manager.md">❇️ JSMgr</a> |
246
247
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/translations.md">🌏 Translator</a> |
247
248
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/presenter/ReadMe.md">🎞️ Presenter</a> |
248
249
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/visual_testing/ReadMe.md">🖼️ Visual</a> |
@@ -352,7 +353,7 @@ class MyTestClass(BaseCase):
352
353
 
353
354
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py"><img src="https://seleniumbase.github.io/cdn/gif/fast_swag_2.gif" alt="SeleniumBase Test" title="SeleniumBase Test" width="480" /></a>
354
355
 
355
- > (The default browser is ``--chrome`` if not set.)
356
+ > (The default browser is `--chrome` if not set.)
356
357
 
357
358
  --------
358
359
 
@@ -516,18 +517,18 @@ finally:
516
517
  <a id="install_seleniumbase"></a>
517
518
  <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Install SeleniumBase:</h2>
518
519
 
519
- **You can install ``seleniumbase`` from [PyPI](https://pypi.org/project/seleniumbase/) or [GitHub](https://github.com/seleniumbase/SeleniumBase):**
520
+ **You can install `seleniumbase` from [PyPI](https://pypi.org/project/seleniumbase/) or [GitHub](https://github.com/seleniumbase/SeleniumBase):**
520
521
 
521
- 🔵 **How to install ``seleniumbase`` from PyPI:**
522
+ 🔵 **How to install `seleniumbase` from PyPI:**
522
523
 
523
524
  ```zsh
524
525
  pip install seleniumbase
525
526
  ```
526
527
 
527
- * (Add ``--upgrade`` OR ``-U`` to upgrade SeleniumBase.)
528
- * (Add ``--force-reinstall`` to upgrade indirect packages.)
528
+ * (Add `--upgrade` OR `-U` to upgrade SeleniumBase.)
529
+ * (Add `--force-reinstall` to upgrade indirect packages.)
529
530
 
530
- 🔵 **How to install ``seleniumbase`` from a GitHub clone:**
531
+ 🔵 **How to install `seleniumbase` from a GitHub clone:**
531
532
 
532
533
  ```zsh
533
534
  git clone https://github.com/seleniumbase/SeleniumBase.git
@@ -542,7 +543,7 @@ git pull
542
543
  pip install -e .
543
544
  ```
544
545
 
545
- 🔵 **Type ``seleniumbase`` or ``sbase`` to verify that SeleniumBase was installed successfully:**
546
+ 🔵 **Type `seleniumbase` or `sbase` to verify that SeleniumBase was installed successfully:**
546
547
 
547
548
  ```zsh
548
549
  ___ _ _ ___
@@ -592,7 +593,7 @@ pip install -e .
592
593
 
593
594
  <h3>🔵 Downloading webdrivers:</h3>
594
595
 
595
- ✅ SeleniumBase automatically downloads webdrivers as needed, such as ``chromedriver``.
596
+ ✅ SeleniumBase automatically downloads webdrivers as needed, such as `chromedriver`.
596
597
 
597
598
  <div></div>
598
599
  <details>
@@ -725,7 +726,7 @@ self.assert_no_js_errors() # Verify there are no JS errors.
725
726
  self.type("input", "dogs\n") # (The "\n" presses ENTER)
726
727
  ```
727
728
 
728
- Most SeleniumBase scripts can be run with <code translate="no">pytest</code>, <code translate="no">pynose</code>, or pure <code translate="no">python</code>. Not all test runners can run all test formats. For example, tests that use the ``sb`` pytest fixture can only be run with ``pytest``. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/stable/gherkin.html#features" target="_blank">Gherkin</a> test format that runs with <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave</a>.
729
+ Most SeleniumBase scripts can be run with <code translate="no">pytest</code>, <code translate="no">pynose</code>, or pure <code translate="no">python</code>. Not all test runners can run all test formats. For example, tests that use the `sb` pytest fixture can only be run with `pytest`. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/stable/gherkin.html#features" target="_blank">Gherkin</a> test format that runs with <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave</a>.
729
730
 
730
731
  ```zsh
731
732
  pytest coffee_cart_tests.py --rs
@@ -744,10 +745,10 @@ behave calculator.feature -D rs -D dashboard
744
745
 
745
746
  <p>✅ <code translate="no">pytest</code> includes automatic test discovery. If you don't specify a specific file or folder to run, <code translate="no">pytest</code> will automatically search through all subdirectories for tests to run based on the following criteria:</p>
746
747
 
747
- * Python files that start with ``test_`` or end with ``_test.py``.
748
- * Python methods that start with ``test_``.
748
+ * Python files that start with `test_` or end with `_test.py`.
749
+ * Python methods that start with `test_`.
749
750
 
750
- With a SeleniumBase [pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/pytest.ini) file present, you can modify default discovery settings. The Python class name can be anything because ``seleniumbase.BaseCase`` inherits ``unittest.TestCase`` to trigger autodiscovery.
751
+ With a SeleniumBase [pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/pytest.ini) file present, you can modify default discovery settings. The Python class name can be anything because `seleniumbase.BaseCase` inherits `unittest.TestCase` to trigger autodiscovery.
751
752
 
752
753
  <p>✅ You can do a pre-flight check to see which tests would get discovered by <code translate="no">pytest</code> before the actual run:</p>
753
754
 
@@ -789,7 +790,7 @@ pynose [FILE_NAME.py]:[CLASS_NAME].[METHOD_NAME]
789
790
  pytest my_first_test.py --demo
790
791
  ```
791
792
 
792
- 🔵 ``time.sleep(seconds)`` can be used to make a test wait at a specific spot:
793
+ 🔵 `time.sleep(seconds)` can be used to make a test wait at a specific spot:
793
794
 
794
795
  ```python
795
796
  import time; time.sleep(3) # Do nothing for 3 seconds.
@@ -803,15 +804,15 @@ import pytest; pytest.set_trace()
803
804
  breakpoint() # Shortcut for "import pdb; pdb.set_trace()"
804
805
  ```
805
806
 
806
- > (**``pdb``** commands: ``n``, ``c``, ``s``, ``u``, ``d`` => ``next``, ``continue``, ``step``, ``up``, ``down``)
807
+ > (**`pdb`** commands: `n`, `c`, `s`, `u`, `d` => `next`, `continue`, `step`, `up`, `down`)
807
808
 
808
- 🔵 To pause an active test that throws an exception or error, (*and keep the browser window open while **Debug Mode** begins in the console*), add **``--pdb``** as a ``pytest`` option:
809
+ 🔵 To pause an active test that throws an exception or error, (*and keep the browser window open while **Debug Mode** begins in the console*), add **`--pdb`** as a `pytest` option:
809
810
 
810
811
  ```zsh
811
812
  pytest test_fail.py --pdb
812
813
  ```
813
814
 
814
- 🔵 To start tests in Debug Mode, add **``--trace``** as a ``pytest`` option:
815
+ 🔵 To start tests in Debug Mode, add **`--trace`** as a `pytest` option:
815
816
 
816
817
  ```zsh
817
818
  pytest test_coffee_cart.py --trace
@@ -956,7 +957,7 @@ pytest test_coffee_cart.py --trace
956
957
 
957
958
  --------
958
959
 
959
- 🔵 During test failures, logs and screenshots from the most recent test run will get saved to the ``latest_logs/`` folder. Those logs will get moved to ``archived_logs/`` if you add --archive_logs to command-line options, or have ``ARCHIVE_EXISTING_LOGS`` set to True in [settings.py](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/config/settings.py), otherwise log files with be cleaned up at the start of the next test run. The ``test_suite.py`` collection contains tests that fail on purpose so that you can see how logging works.
960
+ 🔵 During test failures, logs and screenshots from the most recent test run will get saved to the `latest_logs/` folder. Those logs will get moved to `archived_logs/` if you add --archive_logs to command-line options, or have `ARCHIVE_EXISTING_LOGS` set to True in [settings.py](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/config/settings.py), otherwise log files with be cleaned up at the start of the next test run. The `test_suite.py` collection contains tests that fail on purpose so that you can see how logging works.
960
961
 
961
962
  ```zsh
962
963
  cd examples/
@@ -968,18 +969,18 @@ pytest test_suite.py --firefox
968
969
 
969
970
  An easy way to override seleniumbase/config/settings.py is by using a custom settings file.
970
971
  Here's the command-line option to add to tests: (See [examples/custom_settings.py](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/custom_settings.py))
971
- ``--settings_file=custom_settings.py``
972
+ `--settings_file=custom_settings.py`
972
973
  (Settings include default timeout values, a two-factor auth key, DB credentials, S3 credentials, and other important settings used by tests.)
973
974
 
974
- 🔵 To pass additional data from the command-line to tests, add ``--data="ANY STRING"``.
975
- Inside your tests, you can use ``self.data`` to access that.
975
+ 🔵 To pass additional data from the command-line to tests, add `--data="ANY STRING"`.
976
+ Inside your tests, you can use `self.data` to access that.
976
977
 
977
978
  <a id="directory_configuration"></a>
978
979
  <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Directory Configuration:</h2>
979
980
 
980
- 🔵 When running tests with **``pytest``**, you'll want a copy of **[pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/pytest.ini)** in your root folders. When running tests with **``pynose``**, you'll want a copy of **[setup.cfg](https://github.com/seleniumbase/SeleniumBase/blob/master/setup.cfg)** in your root folders. These files specify default configuration details for tests. Test folders should also include a blank **[__init__.py](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/offline_examples/__init__.py)** file to allow your test files to import other files from that folder.
981
+ 🔵 When running tests with **`pytest`**, you'll want a copy of **[pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/pytest.ini)** in your root folders. When running tests with **`pynose`**, you'll want a copy of **[setup.cfg](https://github.com/seleniumbase/SeleniumBase/blob/master/setup.cfg)** in your root folders. These files specify default configuration details for tests. Test folders should also include a blank **[__init__.py](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/offline_examples/__init__.py)** file to allow your test files to import other files from that folder.
981
982
 
982
- 🔵 ``sbase mkdir DIR`` creates a folder with config files and sample tests:
983
+ 🔵 `sbase mkdir DIR` creates a folder with config files and sample tests:
983
984
 
984
985
  ```zsh
985
986
  sbase mkdir ui_tests
@@ -1011,7 +1012,7 @@ ui_tests/
1011
1012
  └── swag_labs_test.py
1012
1013
  ```
1013
1014
 
1014
- <b>ProTip™:</b> You can also create a boilerplate folder without any sample tests in it by adding ``-b`` or ``--basic`` to the ``sbase mkdir`` command:
1015
+ <b>ProTip™:</b> You can also create a boilerplate folder without any sample tests in it by adding `-b` or `--basic` to the `sbase mkdir` command:
1015
1016
 
1016
1017
  ```zsh
1017
1018
  sbase mkdir ui_tests --basic
@@ -1027,7 +1028,16 @@ ui_tests/
1027
1028
  └── setup.cfg
1028
1029
  ```
1029
1030
 
1030
- Of those files, the ``pytest.ini`` config file is the most important, followed by a blank ``__init__.py`` file. There's also a ``setup.cfg`` file (for pynose). Finally, the ``requirements.txt`` file can be used to help you install seleniumbase into your environments (if it's not already installed).
1031
+ Of those files, the `pytest.ini` config file is the most important, followed by a blank `__init__.py` file. There's also a `setup.cfg` file (for pynose). Finally, the `requirements.txt` file can be used to help you install seleniumbase into your environments (if it's not already installed).
1032
+
1033
+ <b>ProTip™:</b> Add `--gha` to include a GitHub Actions `.yml` file with default settings:
1034
+
1035
+ ```zsh
1036
+ ui_tests/
1037
+ └── .github
1038
+ └── workflows/
1039
+ └── python-package.yml
1040
+ ```
1031
1041
 
1032
1042
  --------
1033
1043
 
@@ -1047,20 +1057,20 @@ class MyTestClass(BaseCase):
1047
1057
  self.assert_element("div#ARMY_OF_ROBOTS", timeout=1) # This should fail
1048
1058
  ```
1049
1059
 
1050
- You can run it from the ``examples/`` folder like this:
1060
+ You can run it from the `examples/` folder like this:
1051
1061
 
1052
1062
  ```zsh
1053
1063
  pytest test_fail.py
1054
1064
  ```
1055
1065
 
1056
- 🔵 You'll notice that a logs folder, ``./latest_logs/``, was created to hold information (and screenshots) about the failing test. During test runs, past results get moved to the archived_logs folder if you have ARCHIVE_EXISTING_LOGS set to True in [settings.py](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/config/settings.py), or if your run tests with ``--archive-logs``. If you choose not to archive existing logs, they will be deleted and replaced by the logs of the latest test run.
1066
+ 🔵 You'll notice that a logs folder, `./latest_logs/`, was created to hold information (and screenshots) about the failing test. During test runs, past results get moved to the archived_logs folder if you have ARCHIVE_EXISTING_LOGS set to True in [settings.py](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/config/settings.py), or if your run tests with `--archive-logs`. If you choose not to archive existing logs, they will be deleted and replaced by the logs of the latest test run.
1057
1067
 
1058
1068
  --------
1059
1069
 
1060
1070
  <a id="seleniumbase_dashboard"></a>
1061
1071
  <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> SeleniumBase Dashboard:</h2>
1062
1072
 
1063
- 🔵 The ``--dashboard`` option for pytest generates a SeleniumBase Dashboard located at ``dashboard.html``, which updates automatically as tests run and produce results. Example:
1073
+ 🔵 The `--dashboard` option for pytest generates a SeleniumBase Dashboard located at `dashboard.html`, which updates automatically as tests run and produce results. Example:
1064
1074
 
1065
1075
  ```zsh
1066
1076
  pytest --dashboard --rs --headless
@@ -1068,13 +1078,13 @@ pytest --dashboard --rs --headless
1068
1078
 
1069
1079
  <img src="https://seleniumbase.github.io/cdn/img/dashboard_1.png" alt="The SeleniumBase Dashboard" title="The SeleniumBase Dashboard" width="380" />
1070
1080
 
1071
- 🔵 Additionally, you can host your own SeleniumBase Dashboard Server on a port of your choice. Here's an example of that using Python's ``http.server``:
1081
+ 🔵 Additionally, you can host your own SeleniumBase Dashboard Server on a port of your choice. Here's an example of that using Python's `http.server`:
1072
1082
 
1073
1083
  ```zsh
1074
1084
  python -m http.server 1948
1075
1085
  ```
1076
1086
 
1077
- 🔵 Now you can navigate to ``http://localhost:1948/dashboard.html`` in order to view the dashboard as a web app. This requires two different terminal windows: one for running the server, and another for running the tests, which should be run from the same directory. (Use <kbd>Ctrl+C</kbd> to stop the http server.)
1087
+ 🔵 Now you can navigate to `http://localhost:1948/dashboard.html` in order to view the dashboard as a web app. This requires two different terminal windows: one for running the server, and another for running the tests, which should be run from the same directory. (Use <kbd>Ctrl+C</kbd> to stop the http server.)
1078
1088
 
1079
1089
  🔵 Here's a full example of what the SeleniumBase Dashboard may look like:
1080
1090
 
@@ -1091,7 +1101,7 @@ pytest test_suite.py test_image_saving.py --dashboard --rs --headless
1091
1101
 
1092
1102
  <h3>🔵 <code>pytest</code> HTML Reports:</h3>
1093
1103
 
1094
- ✅ Using ``--html=report.html`` gives you a fancy report of the name specified after your test suite completes.
1104
+ ✅ Using `--html=report.html` gives you a fancy report of the name specified after your test suite completes.
1095
1105
 
1096
1106
  ```zsh
1097
1107
  pytest test_suite.py --html=report.html
@@ -1099,7 +1109,7 @@ pytest test_suite.py --html=report.html
1099
1109
 
1100
1110
  <img src="https://seleniumbase.github.io/cdn/img/html_report.png" alt="Example Pytest Report" title="Example Pytest Report" width="520" />
1101
1111
 
1102
- ✅ When combining pytest html reports with SeleniumBase Dashboard usage, the pie chart from the Dashboard will get added to the html report. Additionally, if you set the html report URL to be the same as the Dashboard URL when also using the dashboard, (example: ``--dashboard --html=dashboard.html``), then the Dashboard will become an advanced html report when all the tests complete.
1112
+ ✅ When combining pytest html reports with SeleniumBase Dashboard usage, the pie chart from the Dashboard will get added to the html report. Additionally, if you set the html report URL to be the same as the Dashboard URL when also using the dashboard, (example: `--dashboard --html=dashboard.html`), then the Dashboard will become an advanced html report when all the tests complete.
1103
1113
 
1104
1114
  ✅ Here's an example of an upgraded html report:
1105
1115
 
@@ -1111,7 +1121,7 @@ pytest test_suite.py --dashboard --html=report.html
1111
1121
 
1112
1122
  If viewing pytest html reports in [Jenkins](https://www.jenkins.io/), you may need to [configure Jenkins settings](https://stackoverflow.com/a/46197356/7058266) for the html to render correctly. This is due to [Jenkins CSP changes](https://www.jenkins.io/doc/book/system-administration/security/configuring-content-security-policy/).
1113
1123
 
1114
- You can also use ``--junit-xml=report.xml`` to get an xml report instead. Jenkins can use this file to display better reporting for your tests.
1124
+ You can also use `--junit-xml=report.xml` to get an xml report instead. Jenkins can use this file to display better reporting for your tests.
1115
1125
 
1116
1126
  ```zsh
1117
1127
  pytest test_suite.py --junit-xml=report.xml
@@ -1119,7 +1129,7 @@ pytest test_suite.py --junit-xml=report.xml
1119
1129
 
1120
1130
  <h3>🔵 <code>pynose</code> Reports:</h3>
1121
1131
 
1122
- The ``--report`` option gives you a fancy report after your test suite completes.
1132
+ The `--report` option gives you a fancy report after your test suite completes.
1123
1133
 
1124
1134
  ```zsh
1125
1135
  pynose test_suite.py --report
@@ -1127,7 +1137,7 @@ pynose test_suite.py --report
1127
1137
 
1128
1138
  <img src="https://seleniumbase.github.io/cdn/img/nose_report.png" alt="Example pynose Report" title="Example pynose Report" width="320" />
1129
1139
 
1130
- (NOTE: You can add ``--show-report`` to immediately display pynose reports after the test suite completes. Only use ``--show-report`` when running tests locally because it pauses the test run.)
1140
+ (NOTE: You can add `--show-report` to immediately display pynose reports after the test suite completes. Only use `--show-report` when running tests locally because it pauses the test run.)
1131
1141
 
1132
1142
  <h3>🔵 <code>behave</code> Dashboard & Reports:</h3>
1133
1143
 
@@ -1139,7 +1149,7 @@ behave behave_bdd/features/ -D dashboard -D headless
1139
1149
 
1140
1150
  <img src="https://seleniumbase.github.io/cdn/img/sb_behave_dashboard.png" title="SeleniumBase" width="520">
1141
1151
 
1142
- You can also use ``--junit`` to get ``.xml`` reports for each <code translate="no">behave</code> feature. Jenkins can use these files to display better reporting for your tests.
1152
+ You can also use `--junit` to get `.xml` reports for each <code translate="no">behave</code> feature. Jenkins can use these files to display better reporting for your tests.
1143
1153
 
1144
1154
  ```zsh
1145
1155
  behave behave_bdd/features/ --junit -D rs -D headless
@@ -1149,7 +1159,7 @@ behave behave_bdd/features/ --junit -D rs -D headless
1149
1159
 
1150
1160
  See: [https://allurereport.org/docs/pytest/](https://allurereport.org/docs/pytest/)
1151
1161
 
1152
- SeleniumBase no longer includes ``allure-pytest`` as part of installed dependencies. If you want to use it, install it first:
1162
+ SeleniumBase no longer includes `allure-pytest` as part of installed dependencies. If you want to use it, install it first:
1153
1163
 
1154
1164
  ```zsh
1155
1165
  pip install allure-pytest
@@ -1165,7 +1175,7 @@ pytest test_suite.py --alluredir=allure_results
1165
1175
 
1166
1176
  <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Using a Proxy Server:</h3>
1167
1177
 
1168
- If you wish to use a proxy server for your browser tests (Chromium or Firefox), you can add ``--proxy=IP_ADDRESS:PORT`` as an argument on the command line.
1178
+ If you wish to use a proxy server for your browser tests (Chromium or Firefox), you can add `--proxy=IP_ADDRESS:PORT` as an argument on the command line.
1169
1179
 
1170
1180
  ```zsh
1171
1181
  pytest proxy_test.py --proxy=IP_ADDRESS:PORT
@@ -1185,7 +1195,7 @@ pytest proxy_test.py --proxy="socks4://IP_ADDRESS:PORT"
1185
1195
  pytest proxy_test.py --proxy="socks5://IP_ADDRESS:PORT"
1186
1196
  ```
1187
1197
 
1188
- To make things easier, you can add your frequently-used proxies to PROXY_LIST in [proxy_list.py](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/config/proxy_list.py), and then use ``--proxy=KEY_FROM_PROXY_LIST`` to use the IP_ADDRESS:PORT of that key.
1198
+ To make things easier, you can add your frequently-used proxies to PROXY_LIST in [proxy_list.py](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/config/proxy_list.py), and then use `--proxy=KEY_FROM_PROXY_LIST` to use the IP_ADDRESS:PORT of that key.
1189
1199
 
1190
1200
  ```zsh
1191
1201
  pytest proxy_test.py --proxy=proxy1
@@ -1194,7 +1204,7 @@ pytest proxy_test.py --proxy=proxy1
1194
1204
 
1195
1205
  <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Changing the User-Agent:</h3>
1196
1206
 
1197
- 🔵 If you wish to change the User-Agent for your browser tests (Chromium and Firefox only), you can add ``--agent="USER AGENT STRING"`` as an argument on the command-line.
1207
+ 🔵 If you wish to change the User-Agent for your browser tests (Chromium and Firefox only), you can add `--agent="USER AGENT STRING"` as an argument on the command-line.
1198
1208
 
1199
1209
  ```zsh
1200
1210
  pytest user_agent_test.py --agent="Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1.7412.EU"
@@ -1208,7 +1218,7 @@ pytest user_agent_test.py --agent="Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1
1208
1218
 
1209
1219
  <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Building Guided Tours for Websites:</h3>
1210
1220
 
1211
- 🔵 Learn about <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/tour_examples/ReadMe.md">SeleniumBase Interactive Walkthroughs</a> (in the ``examples/tour_examples/`` folder). It's great for prototyping a website onboarding experience.
1221
+ 🔵 Learn about <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/tour_examples/ReadMe.md">SeleniumBase Interactive Walkthroughs</a> (in the `examples/tour_examples/` folder). It's great for prototyping a website onboarding experience.
1212
1222
 
1213
1223
 
1214
1224
  <a id="utilizing_advanced_features"></a>
@@ -1277,7 +1287,7 @@ To click an element on the page:
1277
1287
  self.click("div#my_id")
1278
1288
  ```
1279
1289
 
1280
- **ProTip™:** In most web browsers, you can right-click on a page and select ``Inspect Element`` to see the CSS selector details that you'll need to create your own scripts.
1290
+ **ProTip™:** In most web browsers, you can right-click on a page and select `Inspect Element` to see the CSS selector details that you'll need to create your own scripts.
1281
1291
 
1282
1292
  🔵 **Typing Text:**
1283
1293
 
@@ -1307,7 +1317,7 @@ attribute = self.get_attribute("#comic img", "title")
1307
1317
  self.wait_for_element_present("div.my_class", timeout=10)
1308
1318
  ```
1309
1319
 
1310
- (NOTE: You can also use: ``self.assert_element_present(ELEMENT)``)
1320
+ (NOTE: You can also use: `self.assert_element_present(ELEMENT)`)
1311
1321
 
1312
1322
  🔵 **Asserting visibility of an element on a page within some number of seconds:**
1313
1323
 
@@ -1315,9 +1325,9 @@ self.wait_for_element_present("div.my_class", timeout=10)
1315
1325
  self.wait_for_element_visible("a.my_class", timeout=5)
1316
1326
  ```
1317
1327
 
1318
- (NOTE: The short versions of that are ``self.find_element(ELEMENT)`` and ``self.assert_element(ELEMENT)``. The ``find_element()`` version returns the element.)
1328
+ (NOTE: The short versions of that are `self.find_element(ELEMENT)` and `self.assert_element(ELEMENT)`. The `find_element()` version returns the element.)
1319
1329
 
1320
- Since the line above returns the element, you can combine that with ``.click()`` as shown below:
1330
+ Since the line above returns the element, you can combine that with `.click()` as shown below:
1321
1331
 
1322
1332
  ```python
1323
1333
  self.find_element("a.my_class", timeout=5).click()
@@ -1327,9 +1337,9 @@ self.find_element("a.my_class", timeout=5).click()
1327
1337
  self.click("a.my_class") # DO IT THIS WAY!
1328
1338
  ```
1329
1339
 
1330
- **ProTip™:** You can use dots to signify class names (Ex: ``div.class_name``) as a simplified version of ``div[class="class_name"]`` within a CSS selector.
1340
+ **ProTip™:** You can use dots to signify class names (Ex: `div.class_name`) as a simplified version of `div[class="class_name"]` within a CSS selector.
1331
1341
 
1332
- You can also use ``*=`` to search for any partial value in a CSS selector as shown below:
1342
+ You can also use `*=` to search for any partial value in a CSS selector as shown below:
1333
1343
 
1334
1344
  ```python
1335
1345
  self.click('a[name*="partial_name"]')
@@ -1342,7 +1352,7 @@ self.assert_text("Make it so!", "div#trek div.picard div.quotes")
1342
1352
  self.assert_text("Tea. Earl Grey. Hot.", "div#trek div.picard div.quotes", timeout=3)
1343
1353
  ```
1344
1354
 
1345
- (NOTE: ``self.find_text(TEXT, ELEMENT)`` and ``self.wait_for_text(TEXT, ELEMENT)`` also do this. For backwards compatibility, older method names were kept, but the default timeout may be different.)
1355
+ (NOTE: `self.find_text(TEXT, ELEMENT)` and `self.wait_for_text(TEXT, ELEMENT)` also do this. For backwards compatibility, older method names were kept, but the default timeout may be different.)
1346
1356
 
1347
1357
  🔵 **Asserting Anything:**
1348
1358
 
@@ -1356,14 +1366,14 @@ self.assert_equal(var1, var2)
1356
1366
 
1357
1367
  🔵 **Useful Conditional Statements: (with creative examples)**
1358
1368
 
1359
- ``is_element_visible(selector):`` (visible on the page)
1369
+ `is_element_visible(selector):` (visible on the page)
1360
1370
 
1361
1371
  ```python
1362
1372
  if self.is_element_visible('div#warning'):
1363
1373
  print("Red Alert: Something bad might be happening!")
1364
1374
  ```
1365
1375
 
1366
- ``is_element_present(selector):`` (present in the HTML)
1376
+ `is_element_present(selector):` (present in the HTML)
1367
1377
 
1368
1378
  ```python
1369
1379
  if self.is_element_present('div#top_secret img.tracking_cookie'):
@@ -1380,7 +1390,7 @@ def is_there_a_cloaked_klingon_ship_on_this_page():
1380
1390
  return False
1381
1391
  ```
1382
1392
 
1383
- ``is_text_visible(text, selector):`` (text visible on element)
1393
+ `is_text_visible(text, selector):` (text visible on element)
1384
1394
 
1385
1395
  ```python
1386
1396
  if self.is_text_visible("You Shall Not Pass!", "h1"):
@@ -1420,7 +1430,7 @@ def get_mirror_universe_captain_picard_superbowl_ad(superbowl_year):
1420
1430
 
1421
1431
  </details>
1422
1432
 
1423
- ``is_link_text_visible(link_text):``
1433
+ `is_link_text_visible(link_text):`
1424
1434
 
1425
1435
  ```python
1426
1436
  if self.is_link_text_visible("Stop! Hammer time!"):
@@ -1445,7 +1455,7 @@ self.switch_to_frame("iframe")
1445
1455
  self.switch_to_parent_frame() # Exit the current iframe
1446
1456
  ```
1447
1457
 
1448
- To exit from multiple iframes, use ``self.switch_to_default_content()``. (If inside a single iframe, this has the same effect as ``self.switch_to_parent_frame()``.)
1458
+ To exit from multiple iframes, use `self.switch_to_default_content()`. (If inside a single iframe, this has the same effect as `self.switch_to_parent_frame()`.)
1449
1459
 
1450
1460
  ```python
1451
1461
  self.switch_to_frame('iframe[name="frame1"]')
@@ -1518,7 +1528,7 @@ self.execute_script("return jQuery('textarea')[2].value") # Returns the css "va
1518
1528
 
1519
1529
  <h3>🔵 How to handle a restrictive CSP:</h3>
1520
1530
 
1521
- ❗ Some websites have a restrictive [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) to prevent users from loading jQuery and other external libraries onto their websites. If you need to use jQuery or another JS library on those websites, add ``--disable-csp`` as a ``pytest`` command-line option to load a Chromium extension that bypasses the CSP.
1531
+ ❗ Some websites have a restrictive [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) to prevent users from loading jQuery and other external libraries onto their websites. If you need to use jQuery or another JS library on those websites, add `--disable-csp` as a `pytest` command-line option to load a Chromium extension that bypasses the CSP.
1522
1532
 
1523
1533
  <h3>🔵 More JavaScript fun:</h3>
1524
1534