seleniumbase 4.15.10__tar.gz → 4.15.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 (517) hide show
  1. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/PKG-INFO +57 -40
  2. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/README.md +56 -39
  3. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/requirements.txt +3 -3
  4. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/requirements.txt +1 -20
  5. seleniumbase-4.15.12/seleniumbase/__version__.py +2 -0
  6. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/mysql.py +3 -2
  7. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase.egg-info/PKG-INFO +57 -40
  8. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase.egg-info/requires.txt +5 -20
  9. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/setup.py +20 -26
  10. seleniumbase-4.15.10/seleniumbase/__version__.py +0 -2
  11. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.github/Workflows.md +0 -0
  12. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.github/workflows/pages.yml +0 -0
  13. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.github/workflows/python-nightly-mac.yml +0 -0
  14. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.github/workflows/python-nightly-ubuntu.yml +0 -0
  15. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.github/workflows/python-nightly-windows.yml +0 -0
  16. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.github/workflows/python-package-legacy.yml +0 -0
  17. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.github/workflows/python-package.yml +0 -0
  18. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.gitignore +0 -0
  19. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.travis.yml +0 -0
  20. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/CHANGELOG.md +0 -0
  21. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/CNAME +0 -0
  22. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/CODE_OF_CONDUCT.md +0 -0
  23. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/CONTRIBUTING.md +0 -0
  24. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/Dockerfile +0 -0
  25. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/LICENSE +0 -0
  26. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/MANIFEST.in +0 -0
  27. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/SECURITY.md +0 -0
  28. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/_config.yml +0 -0
  29. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/azure-pipelines.yml +0 -0
  30. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/ReadMe.md +0 -0
  31. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/__init__.py +0 -0
  32. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/basic_test.py +0 -0
  33. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/ReadMe.md +0 -0
  34. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/__init__.py +0 -0
  35. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/behave.ini +0 -0
  36. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/__init__.py +0 -0
  37. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/behave.ini +0 -0
  38. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/calculator.feature +0 -0
  39. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/environment.py +0 -0
  40. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/fail_page.feature +0 -0
  41. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/realworld.feature +0 -0
  42. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/steps/__init__.py +0 -0
  43. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/steps/calculator.py +0 -0
  44. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/steps/fail_page.py +0 -0
  45. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/steps/imported.py +0 -0
  46. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/steps/swag_labs.py +0 -0
  47. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/swag_labs.feature +0 -0
  48. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/ReadMe.md +0 -0
  49. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/__init__.py +0 -0
  50. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/base_test_case.py +0 -0
  51. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/boilerplate_test.py +0 -0
  52. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/classic_obj_test.py +0 -0
  53. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/page_objects.py +0 -0
  54. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/__init__.py +0 -0
  55. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/file_parsing/__init__.py +0 -0
  56. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/file_parsing/parse_files.py +0 -0
  57. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/file_parsing/qa_login_example.txt +0 -0
  58. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/file_parsing/staging_login_example.txt +0 -0
  59. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/google_objects.py +0 -0
  60. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/google_test.py +0 -0
  61. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/sb_swag_test.py +0 -0
  62. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/swag_labs_test.py +0 -0
  63. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/test_page_objects.py +0 -0
  64. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/sb_fixture_test.py +0 -0
  65. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/capabilities/ReadMe.md +0 -0
  66. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/capabilities/mac_cap_file.py +0 -0
  67. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/capabilities/sample_cap_file_BS.py +0 -0
  68. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/capabilities/sample_cap_file_SL.py +0 -0
  69. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/capabilities/selenoid_cap_file.py +0 -0
  70. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/capabilities/win10_cap_file.py +0 -0
  71. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/basic_test.MyTestClass.test_basics.md +0 -0
  72. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/my_first_test.MyTestClass.test_swag_labs.md +0 -0
  73. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/shadow_root_test.ShadowRootTest.test_shadow_root.md +0 -0
  74. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/test_assert_elements.ListAssertTests.test_assert_list_of_elements.md +0 -0
  75. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/test_calculator.CalculatorTests.test_6_times_7_plus_12_equals_54.md +0 -0
  76. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/test_demo_site.DemoSiteTests.test_demo_site.md +0 -0
  77. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/test_login.SwagLabsLoginTests.test_swag_labs_login.md +0 -0
  78. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/test_mfa_login.TestMFALogin.test_mfa_login.md +0 -0
  79. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_summary.md +0 -0
  80. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/ReadMe.md +0 -0
  81. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/chart_presentation.py +0 -0
  82. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/my_chart.py +0 -0
  83. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/pie_charts.py +0 -0
  84. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/test_area_chart.py +0 -0
  85. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/test_display_chart.py +0 -0
  86. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/test_line_chart.py +0 -0
  87. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/test_multi_series.py +0 -0
  88. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/test_save_chart.py +0 -0
  89. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/coffee_cart_tests.py +0 -0
  90. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/custom_settings.py +0 -0
  91. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/desktop_apps/ReadMe.md +0 -0
  92. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/desktop_apps/recorder.py +0 -0
  93. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/dialog_boxes/ReadMe.md +0 -0
  94. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/dialog_boxes/dialog_box_tour.py +0 -0
  95. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/edge_test.py +0 -0
  96. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/example_config.cfg +0 -0
  97. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/example_logs/ReadMe.md +0 -0
  98. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/example_logs/basic_test_info.txt +0 -0
  99. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/example_logs/page_source.html +0 -0
  100. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/example_logs/screenshot.png +0 -0
  101. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/github_test.py +0 -0
  102. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/gui_test_runner.py +0 -0
  103. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/hack_the_planet.py +0 -0
  104. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/handle_alert_test.py +0 -0
  105. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/iframe_tests.py +0 -0
  106. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/locale_code_test.py +0 -0
  107. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/master_qa/ReadMe.md +0 -0
  108. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/master_qa/__init__.py +0 -0
  109. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/master_qa/basic_masterqa_test_0.py +0 -0
  110. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/master_qa/masterqa_test_1.py +0 -0
  111. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/master_qa/pytest.ini +0 -0
  112. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/__init__.py +0 -0
  113. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/ReadMe.md +0 -0
  114. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/__init__.py +0 -0
  115. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/example_spec.js +0 -0
  116. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/example_test.py +0 -0
  117. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/input_spec.js +0 -0
  118. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/input_test.py +0 -0
  119. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/mat_paginator_spec.js +0 -0
  120. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/mat_paginator_test.py +0 -0
  121. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/ReadMe.md +0 -0
  122. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/__init__.py +0 -0
  123. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/flaky_messy_raw.py +0 -0
  124. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/long_messy_raw.py +0 -0
  125. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/messy_raw.py +0 -0
  126. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/pytest.ini +0 -0
  127. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/refined_raw.py +0 -0
  128. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/simple_sbase.py +0 -0
  129. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/my_first_test.py +0 -0
  130. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/nth_child_test.py +0 -0
  131. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/offline_examples/__init__.py +0 -0
  132. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/offline_examples/demo_page.html +0 -0
  133. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/offline_examples/load_html_test.py +0 -0
  134. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/offline_examples/test_demo_page.py +0 -0
  135. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/offline_examples/test_handle_alerts.py +0 -0
  136. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/offline_examples/test_request_fixture.py +0 -0
  137. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/offline_examples/test_user_agent.py +0 -0
  138. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/old_wordle_script.py +0 -0
  139. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/parameterized_test.py +0 -0
  140. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/performance_test.py +0 -0
  141. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/presenter/ReadMe.md +0 -0
  142. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/presenter/core_presentation.py +0 -0
  143. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/presenter/edge_presentation.py +0 -0
  144. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/presenter/fundamentals.py +0 -0
  145. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/presenter/my_presentation.py +0 -0
  146. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/presenter/py_virtual_envs.py +0 -0
  147. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/proxy_test.py +0 -0
  148. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/pytest.ini +0 -0
  149. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/rate_limiting_test.py +0 -0
  150. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_browser_launcher.py +0 -0
  151. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_call.py +0 -0
  152. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_driver_context.py +0 -0
  153. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_file_call.py +0 -0
  154. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_main_call.py +0 -0
  155. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_parameter_script.py +0 -0
  156. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_sb.py +0 -0
  157. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_test_scripts.py +0 -0
  158. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/setup.cfg +0 -0
  159. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/shadow_root_test.py +0 -0
  160. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/swag_labs_user_tests.py +0 -0
  161. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_apple_site.py +0 -0
  162. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_assert_elements.py +0 -0
  163. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_calculator.py +0 -0
  164. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_canvas.py +0 -0
  165. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_checkboxes.py +0 -0
  166. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_chinese_pdf.py +0 -0
  167. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_chromedriver.py +0 -0
  168. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_coffee_cart.py +0 -0
  169. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_console_logging.py +0 -0
  170. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_contains_selector.py +0 -0
  171. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_cycle_elements.py +0 -0
  172. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_decryption.py +0 -0
  173. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_deferred_asserts.py +0 -0
  174. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_demo_site.py +0 -0
  175. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_detect_404s.py +0 -0
  176. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_docs_site.py +0 -0
  177. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_double_click.py +0 -0
  178. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_download_files.py +0 -0
  179. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_download_images.py +0 -0
  180. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_drag_and_drop.py +0 -0
  181. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_error_page.py +0 -0
  182. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_event_firing.py +0 -0
  183. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_fail.py +0 -0
  184. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_get_locale_code.py +0 -0
  185. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_get_pdf_text.py +0 -0
  186. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_get_user_agent.py +0 -0
  187. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_hack_search.py +0 -0
  188. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_image_saving.py +0 -0
  189. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_inspect_html.py +0 -0
  190. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_login.py +0 -0
  191. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_markers.py +0 -0
  192. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_mfa_login.py +0 -0
  193. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_multiple_drivers.py +0 -0
  194. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_null.py +0 -0
  195. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_override_driver.py +0 -0
  196. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_override_sb_fixture.py +0 -0
  197. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_parse_soup.py +0 -0
  198. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_pdf_asserts.py +0 -0
  199. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_pytest_parametrize.py +0 -0
  200. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_repeat_tests.py +0 -0
  201. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_request_sb_fixture.py +0 -0
  202. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_save_screenshots.py +0 -0
  203. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_sb_fixture.py +0 -0
  204. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_scrape_bing.py +0 -0
  205. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_select_options.py +0 -0
  206. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_shadow_dom.py +0 -0
  207. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_show_file_choosers.py +0 -0
  208. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_skype_site.py +0 -0
  209. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_suite.py +0 -0
  210. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_swag_labs.py +0 -0
  211. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_tinymce.py +0 -0
  212. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_todomvc.py +0 -0
  213. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_url_asserts.py +0 -0
  214. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_usefixtures.py +0 -0
  215. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_verify_chromedriver.py +0 -0
  216. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_window_switching.py +0 -0
  217. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_xfail.py +0 -0
  218. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_xkcd.py +0 -0
  219. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/time_limit_test.py +0 -0
  220. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/ReadMe.md +0 -0
  221. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/bootstrap_google_tour.py +0 -0
  222. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/bootstrap_xkcd_tour.py +0 -0
  223. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/driverjs_maps_tour.py +0 -0
  224. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/google_tour.py +0 -0
  225. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/hopscotch_google_tour.py +0 -0
  226. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/introjs_google_tour.py +0 -0
  227. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/maps_introjs_tour.py +0 -0
  228. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/octocat_tour.py +0 -0
  229. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/shepherd_google_tour.py +0 -0
  230. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/xkcd_tour.py +0 -0
  231. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/ReadMe.md +0 -0
  232. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/chinese_test_1.py +0 -0
  233. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/dutch_test_1.py +0 -0
  234. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/english_test_1.py +0 -0
  235. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/french_test_1.py +0 -0
  236. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/italian_test_1.py +0 -0
  237. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/japanese_test_1.py +0 -0
  238. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/korean_test_1.py +0 -0
  239. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/portuguese_test_1.py +0 -0
  240. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/pytest.ini +0 -0
  241. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/russian_test_1.py +0 -0
  242. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/spanish_test_1.py +0 -0
  243. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/uc_cdp_events.py +0 -0
  244. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/unit_tests/ReadMe.md +0 -0
  245. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/unit_tests/verify_framework.py +0 -0
  246. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/upgrade_chromedriver.py +0 -0
  247. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/upload_file_test.py +0 -0
  248. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/user_agent_test.py +0 -0
  249. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/verify_undetected.py +0 -0
  250. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/ReadMe.md +0 -0
  251. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/__init__.py +0 -0
  252. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/case_plans/layout_test.VisualLayoutTests.test_applitools_layout_change.md +0 -0
  253. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/case_plans/python_home_test.VisualLayoutTests.test_python_home_layout_change.md +0 -0
  254. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/case_plans/test_layout_fail.VisualLayoutFailureTests.test_applitools_change.md +0 -0
  255. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/case_plans/test_layout_fail.VisualLayoutFailureTests.test_xkcd_logo_change.md +0 -0
  256. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/case_plans/test_layout_fail.VisualLayout_FixtureTests.test_python_home_change.md +0 -0
  257. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/case_plans/xkcd_visual_test.VisualLayoutTests.test_xkcd_layout_change.md +0 -0
  258. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/layout_test.py +0 -0
  259. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/python_home_test.py +0 -0
  260. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/test_layout_fail.py +0 -0
  261. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/xkcd_visual_test.py +0 -0
  262. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/wordle_test.py +0 -0
  263. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/xpath_test.py +0 -0
  264. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/youtube_search_test.py +0 -0
  265. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/ReadMe.md +0 -0
  266. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/behave_gui.md +0 -0
  267. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/case_plans.md +0 -0
  268. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/chinese.md +0 -0
  269. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/commander.md +0 -0
  270. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/customizing_test_runs.md +0 -0
  271. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/demo_mode.md +0 -0
  272. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/desired_capabilities.md +0 -0
  273. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/features_list.md +0 -0
  274. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/happy_customers.md +0 -0
  275. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/hidden_files_info.md +0 -0
  276. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/how_it_works.md +0 -0
  277. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/html_inspector.md +0 -0
  278. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/install.md +0 -0
  279. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/install_python_pip_git.md +0 -0
  280. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/js_package_manager.md +0 -0
  281. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/locale_codes.md +0 -0
  282. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/method_summary.md +0 -0
  283. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/mobile_testing.md +0 -0
  284. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/mysql_installation.md +0 -0
  285. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/recorder_mode.md +0 -0
  286. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/shadow_dom.md +0 -0
  287. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/syntax_formats.md +0 -0
  288. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/thank_you.md +0 -0
  289. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/translations.md +0 -0
  290. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/useful_grep_commands.md +0 -0
  291. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/using_safari_driver.md +0 -0
  292. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/verify_webdriver.md +0 -0
  293. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/virtualenv_instructions.md +0 -0
  294. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/webdriver_installation.md +0 -0
  295. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/install.sh +0 -0
  296. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/__init__.py +0 -0
  297. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/azure/azure_pipelines/ReadMe.md +0 -0
  298. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/azure/jenkins/ReadMe.md +0 -0
  299. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/ReadMe.md +0 -0
  300. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/behave.ini +0 -0
  301. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/__init__.py +0 -0
  302. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/behave.ini +0 -0
  303. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/calculator.feature +0 -0
  304. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/environment.py +0 -0
  305. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/fail_page.feature +0 -0
  306. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/realworld.feature +0 -0
  307. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/steps/__init__.py +0 -0
  308. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/steps/calculator.py +0 -0
  309. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/steps/fail_page.py +0 -0
  310. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/steps/real_world.py +0 -0
  311. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/steps/swag_labs.py +0 -0
  312. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/swag_labs.feature +0 -0
  313. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/brython/ReadMe.md +0 -0
  314. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/brython/index.html +0 -0
  315. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/brython/index.py +0 -0
  316. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/brython/library.html +0 -0
  317. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/docker/ReadMe.md +0 -0
  318. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/docker/docker-entrypoint.sh +0 -0
  319. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/docker/docker_config.cfg +0 -0
  320. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/docker/run_docker_test_in_chrome.sh +0 -0
  321. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/docker/run_docker_test_in_firefox.sh +0 -0
  322. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/github/ReadMe.md +0 -0
  323. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/github/workflows/ReadMe.md +0 -0
  324. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/github/workflows/extras.md +0 -0
  325. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/google_cloud/ReadMe.md +0 -0
  326. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/katalon/ReadMe.md +0 -0
  327. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/linux/Linuxfile.sh +0 -0
  328. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/linux/ReadMe.md +0 -0
  329. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/linux/Xvfb_launcher.sh +0 -0
  330. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/linux/jenkins_permissions.sh +0 -0
  331. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/linux/tomcat_permissions.sh +0 -0
  332. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/ReadMe.md +0 -0
  333. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/__init__.py +0 -0
  334. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/index.html +0 -0
  335. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/my_first_test.py +0 -0
  336. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/npm-shrinkwrap.json +0 -0
  337. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/package.json +0 -0
  338. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/server.js +0 -0
  339. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/test_demo_site.py +0 -0
  340. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/selenium_grid/ReadMe.md +0 -0
  341. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/selenium_ide/ReadMe.md +0 -0
  342. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs.yml +0 -0
  343. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/ReadMe.txt +0 -0
  344. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/docs_instructions.txt +0 -0
  345. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/dash_pie.png +0 -0
  346. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/dash_pie_2.png +0 -0
  347. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/dash_pie_3.png +0 -0
  348. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/favicon.ico +0 -0
  349. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/grad_logo.png +0 -0
  350. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/green_icon.png +0 -0
  351. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/green_logo.png +0 -0
  352. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/green_logo2.png +0 -0
  353. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/green_logo3.png +0 -0
  354. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo3.png +0 -0
  355. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo3a.png +0 -0
  356. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo3b.png +0 -0
  357. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo3c.png +0 -0
  358. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo4.png +0 -0
  359. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo5.png +0 -0
  360. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo6.png +0 -0
  361. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo7.png +0 -0
  362. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/sb_icon.png +0 -0
  363. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/sb_logo_10.png +0 -0
  364. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/sb_logo_7.png +0 -0
  365. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/side_by_side.png +0 -0
  366. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/social/share_facebook.svg +0 -0
  367. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/social/share_github.svg +0 -0
  368. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/social/share_gitter.svg +0 -0
  369. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/social/share_instagram.svg +0 -0
  370. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/social/share_twitter.svg +0 -0
  371. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/index.html +0 -0
  372. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/prepare.py +0 -0
  373. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/pytest.ini +0 -0
  374. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/sbase/ReadMe.txt +0 -0
  375. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/sbase/__init__.py +0 -0
  376. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/sbase/__main__.py +0 -0
  377. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/sbase/steps.py +0 -0
  378. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/ReadMe.md +0 -0
  379. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/__init__.py +0 -0
  380. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/__main__.py +0 -0
  381. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/behave/__init__.py +0 -0
  382. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/behave/behave_helper.py +0 -0
  383. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/behave/behave_sb.py +0 -0
  384. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/behave/steps.py +0 -0
  385. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/common/ReadMe.md +0 -0
  386. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/common/__init__.py +0 -0
  387. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/common/decorators.py +0 -0
  388. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/common/encryption.py +0 -0
  389. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/common/exceptions.py +0 -0
  390. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/common/obfuscate.py +0 -0
  391. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/common/unobfuscate.py +0 -0
  392. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/config/__init__.py +0 -0
  393. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/config/ad_block_list.py +0 -0
  394. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/config/proxy_list.py +0 -0
  395. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/config/settings.py +0 -0
  396. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/ReadMe.md +0 -0
  397. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/__init__.py +0 -0
  398. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/logo_helper.py +0 -0
  399. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/rich_helper.py +0 -0
  400. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/run.py +0 -0
  401. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  402. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  403. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_commander.py +0 -0
  404. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_install.py +0 -0
  405. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  406. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  407. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  408. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  409. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  410. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  411. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_print.py +0 -0
  412. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  413. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/__init__.py +0 -0
  414. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/application_manager.py +0 -0
  415. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/browser_launcher.py +0 -0
  416. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/capabilities_parser.py +0 -0
  417. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/colored_traceback.py +0 -0
  418. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/create_db_tables.sql +0 -0
  419. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/detect_b_ver.py +0 -0
  420. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/download_helper.py +0 -0
  421. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/encoded_images.py +0 -0
  422. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/jqc_helper.py +0 -0
  423. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/log_helper.py +0 -0
  424. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/proxy_helper.py +0 -0
  425. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/recorder_helper.py +0 -0
  426. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/report_helper.py +0 -0
  427. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/s3_manager.py +0 -0
  428. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/session_helper.py +0 -0
  429. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/settings_parser.py +0 -0
  430. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/style_sheet.py +0 -0
  431. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/testcase_manager.py +0 -0
  432. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/tour_helper.py +0 -0
  433. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/visual_helper.py +0 -0
  434. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/drivers/ReadMe.md +0 -0
  435. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/drivers/__init__.py +0 -0
  436. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/extensions/ReadMe.md +0 -0
  437. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/extensions/__init__.py +0 -0
  438. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/extensions/ad_block.zip +0 -0
  439. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/extensions/disable_csp.zip +0 -0
  440. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/extensions/recorder.zip +0 -0
  441. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/extensions/sbase_ext.zip +0 -0
  442. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/__init__.py +0 -0
  443. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/base_case.py +0 -0
  444. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/constants.py +0 -0
  445. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  446. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/errors.py +0 -0
  447. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/js_utils.py +0 -0
  448. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/page_actions.py +0 -0
  449. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/page_utils.py +0 -0
  450. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/shared_utils.py +0 -0
  451. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/unittest_helper.py +0 -0
  452. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/words.py +0 -0
  453. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  454. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/js_code/__init__.py +0 -0
  455. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/js_code/active_css_js.py +0 -0
  456. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/js_code/live_js.py +0 -0
  457. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/js_code/recorder_js.py +0 -0
  458. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/masterqa/ReadMe.md +0 -0
  459. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/masterqa/__init__.py +0 -0
  460. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/masterqa/master_qa.py +0 -0
  461. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/__init__.py +0 -0
  462. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/base_plugin.py +0 -0
  463. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/basic_test_info.py +0 -0
  464. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  465. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/driver_manager.py +0 -0
  466. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/page_source.py +0 -0
  467. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/pytest_plugin.py +0 -0
  468. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  469. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/sb_manager.py +0 -0
  470. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/screen_shots.py +0 -0
  471. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/selenium_plugin.py +0 -0
  472. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/resources/ReadMe.md +0 -0
  473. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/resources/__init__.py +0 -0
  474. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/resources/favicon.ico +0 -0
  475. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/__init__.py +0 -0
  476. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/chinese.py +0 -0
  477. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/dutch.py +0 -0
  478. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/french.py +0 -0
  479. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/italian.py +0 -0
  480. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/japanese.py +0 -0
  481. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/korean.py +0 -0
  482. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/master_dict.py +0 -0
  483. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/portuguese.py +0 -0
  484. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/russian.py +0 -0
  485. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/spanish.py +0 -0
  486. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/translator.py +0 -0
  487. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/undetected/__init__.py +0 -0
  488. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/undetected/cdp.py +0 -0
  489. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/undetected/dprocess.py +0 -0
  490. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/undetected/options.py +0 -0
  491. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/undetected/patcher.py +0 -0
  492. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/undetected/reactor.py +0 -0
  493. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/undetected/webelement.py +0 -0
  494. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/__init__.py +0 -0
  495. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/ReadMe.md +0 -0
  496. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  497. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  498. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  499. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  500. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  501. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  502. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  503. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  504. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  505. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  506. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  507. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_ide/ReadMe.md +0 -0
  508. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  509. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  510. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase.egg-info/SOURCES.txt +0 -0
  511. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase.egg-info/dependency_links.txt +0 -0
  512. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase.egg-info/entry_points.txt +0 -0
  513. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase.egg-info/top_level.txt +0 -0
  514. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/setup.cfg +0 -0
  515. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/virtualenv_install.sh +0 -0
  516. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/win_install.bat +0 -0
  517. {seleniumbase-4.15.10 → seleniumbase-4.15.12}/win_virtualenv.bat +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: seleniumbase
3
- Version: 4.15.10
3
+ Version: 4.15.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
@@ -70,13 +70,13 @@ License-File: LICENSE
70
70
 
71
71
  <h1>SeleniumBase</h1>
72
72
 
73
- <h3 align="center">Automate & test web apps on any platform, with Python.</h3>
73
+ <p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/sb_logo_10t.png" alt="SeleniumBase" title="SeleniumBase" width="266" /></a></p>
74
74
 
75
- <h3 align="center"><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/cdn/gif/coffee_pdbp.gif" alt="SeleniumBase test with the pdbp debugger" title="SeleniumBase test with the pdbp debugger" /></a></h3>
75
+ <h2 align="center" class="hero__title">All-in-one Test Automation Framework</h2>
76
76
 
77
- <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://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://img.shields.io/gitter/room/seleniumbase/SeleniumBase.svg" alt="Gitter chat"/></a></p>
77
+ <h3 align="center"><img src="https://seleniumbase.github.io/cdn/img/python_logo.png" title="SeleniumBase" width="29" /> For Python enthusiasts and enterprise developers <img src="https://seleniumbase.github.io/cdn/img/python_logo.png" title="SeleniumBase" width="29" /></h3>
78
78
 
79
- <h4 align="center">Shortcuts / tutorials / tools / integrations:</h4>
79
+ <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://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://img.shields.io/gitter/room/seleniumbase/SeleniumBase.svg" alt="Gitter chat"/></a></p>
80
80
 
81
81
  <p align="center">
82
82
  <a href="#python_installation">🚀 Start</a> |
@@ -118,18 +118,17 @@ License-File: LICENSE
118
118
 
119
119
  --------
120
120
 
121
+ <p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/sb_logo_p3.png" alt="SeleniumBase" title="SeleniumBase" width="232" /></a></p>
122
+
121
123
  <blockquote>
122
124
  <p dir="auto"><strong>Jump to:</strong></p>
123
125
  <ul dir="auto">
124
- <li><a href="#multiple_examples" ><strong>Multiple Examples</strong></a></li>
125
- <li><a href="#python_installation" ><strong>Set up Python & Git</strong></a></li>
126
- <li><a href="#install_seleniumbase" ><strong>Install SeleniumBase</strong></a></li>
127
- <li><a href="#basic_example_and_usage"><strong>Basic Example & Usage</strong></a></li>
126
+ <li><a href="#install_seleniumbase" ><strong>Get Started / Installation</strong></a></li>
127
+ <li><a href="#basic_example_and_usage"><strong>Basic Example / Usage</strong></a></li>
128
128
  <li><a href="#common_methods" ><strong>Common Test Methods</strong></a></li>
129
129
  <li><a href="#fun_facts" ><strong>Fun Facts / Learn More</strong></a></li>
130
- <li><a href="#demo_mode_and_debugging"><strong>Demo / Debug Modes</strong></a></li>
131
- <li><a href="#pytest_options" ><strong>Useful pytest Options</strong></a></li>
132
- <li><a href="#new_pytest_options" ><strong>SeleniumBase Options</strong></a></li>
130
+ <li><a href="#demo_mode_and_debugging"><strong>Demo Mode / Debugging</strong></a></li>
131
+ <li><a href="#command_line_options" ><strong>Command-line Options</strong></a></li>
133
132
  <li><a href="#directory_configuration"><strong>Directory Configuration</strong></a></li>
134
133
  <li><a href="#seleniumbase_dashboard" ><strong>SeleniumBase Dashboard</strong></a></li>
135
134
  <li><a href="#creating_visual_reports"><strong>Generating Test Reports</strong></a></li>
@@ -139,7 +138,8 @@ License-File: LICENSE
139
138
  --------
140
139
 
141
140
  <a id="multiple_examples"></a>
142
- <p align="left">Run <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">test_demo_site.py</a> from <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples" target="_blank">examples/</a> (<code>--chrome</code> is the default browser):</p>
141
+
142
+ <p align="left"><b>Example:</b> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">test_demo_site.py</a> from <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples" target="_blank">./examples/</a> (Uses <code>--chrome</code> by default)</p>
143
143
 
144
144
  ```bash
145
145
  cd examples/
@@ -148,12 +148,10 @@ pytest test_demo_site.py
148
148
 
149
149
  <p align="left"><a href="https://seleniumbase.io/demo_page" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/demo_page_5.gif" width="480" alt="SeleniumBase Example" title="SeleniumBase Example" /></a></p>
150
150
 
151
- > Type text, click, select, toggle, drag-and-drop, etc. Even handle iframes.
151
+ > Easy to type, click, select, toggle, drag-and-drop, etc.
152
152
 
153
153
  --------
154
154
 
155
- Looking for overpriced coffee? Try running this test:
156
-
157
155
  <p align="left"><b>Example:</b> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">test_coffee_cart.py</a> from <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples" target="_blank">./examples/</a></p>
158
156
 
159
157
  ```bash
@@ -187,6 +185,8 @@ class CoffeeCartTest(BaseCase):
187
185
  self.assert_text("Thanks for your purchase.", "#app .success")
188
186
  ```
189
187
 
188
+ (For more examples, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">SeleniumBase/examples/</a> folder.)
189
+
190
190
  --------
191
191
 
192
192
  <details>
@@ -416,7 +416,7 @@ Making [chromedriver 114.0.5735.90] executable ...
416
416
 
417
417
 
418
418
  <a id="basic_example_and_usage"></a>
419
- <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Basic Example & Usage:</h2>
419
+ <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Basic Example / Usage:</h2>
420
420
 
421
421
  🔵 If you've cloned SeleniumBase, you can run tests from the [examples/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples) folder.
422
422
 
@@ -527,8 +527,8 @@ self.type("input", "dogs\n")
527
527
  Most SeleniumBase scripts can be run with <code>pytest</code>, <code>pynose</code>, or pure <code>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>.
528
528
 
529
529
  ```bash
530
- pytest test_sb_fixture.py
531
530
  pytest coffee_cart_tests.py --rs
531
+ pytest test_sb_fixture.py
532
532
  pytest test_suite.py --rs --html=report.html --dashboard
533
533
 
534
534
  pynose basic_test.py --mobile
@@ -546,7 +546,7 @@ behave calculator.feature -D rs -D dashboard
546
546
  * Python files that start with ``test_`` or end with ``_test.py``.
547
547
  * Python methods that start with ``test_``.
548
548
 
549
- 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``, which triggers autodiscovery.
549
+ 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.
550
550
 
551
551
  <p>✅ You can do a pre-flight check to see which tests would get discovered by <code>pytest</code> before the real flight:</p>
552
552
 
@@ -572,29 +572,36 @@ pynose [FILE_NAME.py]:[CLASS_NAME].[METHOD_NAME]
572
572
  ✅ SeleniumBase works on all popular CI/CD platforms:
573
573
  <p><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/github/workflows/ReadMe.md"><img alt="GitHub Actions integration" src="https://img.shields.io/badge/GitHub_Actions-12B2C2.svg?logo=GitHubActions&logoColor=CFFFC2" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/jenkins/ReadMe.md"><img alt="Jenkins integration" src="https://img.shields.io/badge/Jenkins-32B242.svg?logo=jenkins&logoColor=white" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/azure_pipelines/ReadMe.md"><img alt="Azure integration" src="https://img.shields.io/badge/Azure-2288EE.svg?logo=AzurePipelines&logoColor=white" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/google_cloud/ReadMe.md"><img alt="Google Cloud integration" src="https://img.shields.io/badge/Google_Cloud-11CAE8.svg?logo=GoogleCloud&logoColor=EE0066" /></a> <a href="#utilizing_advanced_features"><img alt="AWS integration" src="https://img.shields.io/badge/AWS-4488DD.svg?logo=AmazonAWS&logoColor=FFFF44" /></a> <a href="https://en.wikipedia.org/wiki/Personal_computer" target="_blank"><img alt="Your Computer" src="https://img.shields.io/badge/💻_Your_Computer-44E6E6.svg" /></a></p>
574
574
 
575
- <p>✅ SeleniumBase includes an automated/manual hybrid solution called <b><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/master_qa/ReadMe.md">MasterQA</a></b>, which speeds up manual testing by having automation perform all the browser actions while the manual tester handles validation.</p>
575
+ <p>✅ SeleniumBase includes an automated/manual hybrid solution called <b><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/master_qa/ReadMe.md">MasterQA</a></b> to speed up manual testing with automation while the manual tester handles validation.</p>
576
576
 
577
577
  <p>✅ For a full list of SeleniumBase features, <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/features_list.md">Click Here</a>.</p>
578
578
 
579
579
 
580
- <a id="detailed_instructions"></a>
581
- <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Detailed Instructions:</h2>
582
-
583
580
  <a id="demo_mode_and_debugging"></a>
584
- 🔵 <b>Demo Mode</b> helps you see what a test is doing. If a test is moving too fast for your eyes, run it in <b>Demo Mode</b>, which pauses the browser briefly between actions, highlights page elements being acted on, and displays assertions:
581
+ <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Demo Mode / Debugging:</h2>
582
+
583
+ 🔵 <b>Demo Mode</b> helps you see what a test is doing. If a test is moving too fast for your eyes, run it in <b>Demo Mode</b> to pause the browser briefly between actions, highlight page elements being acted on, and display assertions:
585
584
 
586
585
  ```bash
587
586
  pytest my_first_test.py --demo
588
587
  ```
589
588
 
590
- 🔵 You can use the following calls in your scripts to help you debug issues:
589
+ 🔵 ``time.sleep(seconds)`` can be used to make a test wait at a specific spot:
591
590
 
592
591
  ```python
593
- import time; time.sleep(5) # Makes the test wait and do nothing for 5 seconds.
594
- import pdb; pdb.set_trace() # Debug Mode. n: next, c: continue, s: step, u: up, d: down.
595
- import pytest; pytest.set_trace() # Debug Mode. n: next, c: continue, s: step, u: up, d: down.
592
+ import time; time.sleep(3) # Do nothing for 3 seconds.
596
593
  ```
597
594
 
595
+ 🔵 **Debug Mode** with Python's built-in **[pdb](https://docs.python.org/3/library/pdb.html)** library helps you debug tests:
596
+
597
+ ```python
598
+ import pdb; pdb.set_trace()
599
+ import pytest; pytest.set_trace()
600
+ breakpoint() # Shortcut for "import pdb; pdb.set_trace()"
601
+ ```
602
+
603
+ > (**``pdb``** commands: ``n``, ``c``, ``s``, ``u``, ``d`` => ``next``, ``continue``, ``step``, ``up``, ``down``)
604
+
598
605
  🔵 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:
599
606
 
600
607
  ```bash
@@ -607,10 +614,14 @@ pytest test_fail.py --pdb
607
614
  pytest test_coffee_cart.py --trace
608
615
  ```
609
616
 
610
- (**``pdb``** commands: ``n``, ``c``, ``s``, ``u``, ``d`` => ``next``, ``continue``, ``step``, ``up``, ``down``).
617
+ <a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/cdn/gif/coffee_pdbp.gif" alt="SeleniumBase test with the pdbp (Pdb+) debugger" title="SeleniumBase test with the pdbp (Pdb+) debugger" /></a>
618
+
619
+
620
+ <a id="command_line_options"></a>
621
+ <h2>🔵 Command-line Options:</h2>
611
622
 
612
623
  <a id="pytest_options"></a>
613
- 🔵 Here are some useful command-line options that come with <code>pytest</code>:
624
+ Here are some useful command-line options that come with <code>pytest</code>:
614
625
 
615
626
  ```bash
616
627
  -v # Verbose mode. Prints the full name of each test and shows more details.
@@ -627,7 +638,7 @@ pytest test_coffee_cart.py --trace
627
638
  ```
628
639
 
629
640
  <a id="new_pytest_options"></a>
630
- 🔵 SeleniumBase provides additional <code>pytest</code> command-line options for tests:
641
+ SeleniumBase provides additional <code>pytest</code> command-line options for tests:
631
642
 
632
643
  ```bash
633
644
  --browser=BROWSER # (The web browser to use. Default: "chrome".)
@@ -724,7 +735,9 @@ pytest test_coffee_cart.py --trace
724
735
 
725
736
  (See the full list of command-line option definitions **[here](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/plugins/pytest_plugin.py)**. For detailed examples of command-line options, see **[customizing_test_runs.md](https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/customizing_test_runs.md)**)
726
737
 
727
- 🔵 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.
738
+ --------
739
+
740
+ 🔵 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.
728
741
 
729
742
  ```bash
730
743
  cd examples/
@@ -745,7 +758,7 @@ Inside your tests, you can use ``self.data`` to access that.
745
758
  <a id="directory_configuration"></a>
746
759
  <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Directory Configuration:</h2>
747
760
 
748
- 🔵 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. Folders should also include a blank ``__init__.py`` file, which allows your tests to import files from that folder.
761
+ 🔵 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. Folders should also include a blank ``__init__.py`` file to allow your tests to import files from that folder.
749
762
 
750
763
  🔵 ``sbase mkdir DIR`` creates a folder with config files and sample tests:
751
764
 
@@ -993,7 +1006,7 @@ pytest user_agent_test.py --agent="Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1
993
1006
  <ul>
994
1007
  <li>You can set up a <a href="https://jenkins.io/" target="_blank">Jenkins</a> build server for running tests at regular intervals. For a real-world Jenkins example of headless browser automation in action, check out the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/jenkins/ReadMe.md">SeleniumBase Jenkins example on Azure</a> or the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/google_cloud/ReadMe.md">SeleniumBase Jenkins example on Google Cloud</a>.</li>
995
1008
 
996
- <li>You can use <a href="https://selenium.dev/documentation/en/grid/" target="_blank">the Selenium Grid</a> to scale your testing by distributing tests on several machines with parallel execution. To do this, check out the <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/utilities/selenium_grid">SeleniumBase selenium_grid folder</a>, which should have everything you need, including the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">Selenium Grid ReadMe</a>, which will help you get started.</li>
1009
+ <li>You can use <a href="https://selenium.dev/documentation/en/grid/" target="_blank">the Selenium Grid</a> to scale your testing by distributing tests on several machines with parallel execution. To do this, check out the <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/utilities/selenium_grid">SeleniumBase selenium_grid folder</a>, which should have everything you need, including the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">Selenium Grid ReadMe</a> to help you get started.</li>
997
1010
 
998
1011
  <li>If you're using the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/mysql_installation.md">SeleniumBase MySQL feature</a> to save results from tests running on a server machine, you can install <a href="https://dev.mysql.com/downloads/tools/workbench/">MySQL Workbench</a> to help you read & write from your DB more easily.</li>
999
1012
 
@@ -1336,10 +1349,15 @@ pytest --reruns=1 --reruns-delay=1
1336
1349
 
1337
1350
  <p>You can use the <code>@retry_on_exception()</code> decorator to retry failing methods. (First import: <code>from seleniumbase import decorators</code>). To learn more about SeleniumBase decorators, <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/common">click here</a>.</p>
1338
1351
 
1352
+ --------
1339
1353
 
1340
- <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Wrap-Up</h3>
1354
+ > "Catch bugs in QA before deploying code to Production!"
1355
+
1356
+ <p align="left"><a href="https://seleniumbase.io/error_page" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/error_page.gif" alt="Catch bugs in QA before deploying code to Production!" title="Catch bugs in QA before deploying code to Production!" /></a></p>
1341
1357
 
1342
- <b>Congratulations on getting started with SeleniumBase!</b>
1358
+ --------
1359
+
1360
+ <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Wrap-Up</h3>
1343
1361
 
1344
1362
  <p>
1345
1363
  <div><b>If you see something, say something!</b></div>
@@ -1359,10 +1377,9 @@ pytest --reruns=1 --reruns-delay=1
1359
1377
  <p><a href="https://pepy.tech/project/seleniumbase" target="_blank"><img src="https://pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" /></a></p>
1360
1378
 
1361
1379
  <p><div>
1362
- <span><a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://seleniumbase.github.io/cdn/img/youtube.png" title="SeleniumBase Playlist on YouTube" alt="SeleniumBase Playlist on YouTube" width="54" /></a></span>
1363
- <span><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/img/social/share_github.svg" title="SeleniumBase on GitHub" alt="SeleniumBase on GitHub" width="50" /></a></span>
1364
- <span><a href="https://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://seleniumbase.github.io/img/social/share_gitter.svg" title="SeleniumBase on Gitter" alt="SeleniumBase on Gitter" width="38" /></a></span>
1365
- <span><a href="https://twitter.com/seleniumbase" target="_blank"><img src="https://seleniumbase.io/img/social/share_twitter.svg" title="SeleniumBase on Twitter" alt="SeleniumBase on Twitter" width="50" /></a></span>
1380
+ <span><a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://seleniumbase.github.io/cdn/img/youtube.png" title="SeleniumBase Playlist on YouTube" alt="SeleniumBase Playlist on YouTube" width="70" /></a></span>
1381
+ <span><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/img/social/share_github.svg" title="SeleniumBase on GitHub" alt="SeleniumBase on GitHub" width="64" /></a></span>
1382
+ <span><a href="https://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://seleniumbase.github.io/img/social/share_gitter.svg" title="SeleniumBase on Gitter" alt="SeleniumBase on Gitter" width="52" /></a></span>
1366
1383
  </div></p>
1367
1384
 
1368
1385
  --------
@@ -9,13 +9,13 @@
9
9
 
10
10
  <h1>SeleniumBase</h1>
11
11
 
12
- <h3 align="center">Automate & test web apps on any platform, with Python.</h3>
12
+ <p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/sb_logo_10t.png" alt="SeleniumBase" title="SeleniumBase" width="266" /></a></p>
13
13
 
14
- <h3 align="center"><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/cdn/gif/coffee_pdbp.gif" alt="SeleniumBase test with the pdbp debugger" title="SeleniumBase test with the pdbp debugger" /></a></h3>
14
+ <h2 align="center" class="hero__title">All-in-one Test Automation Framework</h2>
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://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://img.shields.io/gitter/room/seleniumbase/SeleniumBase.svg" alt="Gitter chat"/></a></p>
16
+ <h3 align="center"><img src="https://seleniumbase.github.io/cdn/img/python_logo.png" title="SeleniumBase" width="29" /> For Python enthusiasts and enterprise developers <img src="https://seleniumbase.github.io/cdn/img/python_logo.png" title="SeleniumBase" width="29" /></h3>
17
17
 
18
- <h4 align="center">Shortcuts / tutorials / tools / integrations:</h4>
18
+ <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://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://img.shields.io/gitter/room/seleniumbase/SeleniumBase.svg" alt="Gitter chat"/></a></p>
19
19
 
20
20
  <p align="center">
21
21
  <a href="#python_installation">🚀 Start</a> |
@@ -57,18 +57,17 @@
57
57
 
58
58
  --------
59
59
 
60
+ <p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/sb_logo_p3.png" alt="SeleniumBase" title="SeleniumBase" width="232" /></a></p>
61
+
60
62
  <blockquote>
61
63
  <p dir="auto"><strong>Jump to:</strong></p>
62
64
  <ul dir="auto">
63
- <li><a href="#multiple_examples" ><strong>Multiple Examples</strong></a></li>
64
- <li><a href="#python_installation" ><strong>Set up Python & Git</strong></a></li>
65
- <li><a href="#install_seleniumbase" ><strong>Install SeleniumBase</strong></a></li>
66
- <li><a href="#basic_example_and_usage"><strong>Basic Example & Usage</strong></a></li>
65
+ <li><a href="#install_seleniumbase" ><strong>Get Started / Installation</strong></a></li>
66
+ <li><a href="#basic_example_and_usage"><strong>Basic Example / Usage</strong></a></li>
67
67
  <li><a href="#common_methods" ><strong>Common Test Methods</strong></a></li>
68
68
  <li><a href="#fun_facts" ><strong>Fun Facts / Learn More</strong></a></li>
69
- <li><a href="#demo_mode_and_debugging"><strong>Demo / Debug Modes</strong></a></li>
70
- <li><a href="#pytest_options" ><strong>Useful pytest Options</strong></a></li>
71
- <li><a href="#new_pytest_options" ><strong>SeleniumBase Options</strong></a></li>
69
+ <li><a href="#demo_mode_and_debugging"><strong>Demo Mode / Debugging</strong></a></li>
70
+ <li><a href="#command_line_options" ><strong>Command-line Options</strong></a></li>
72
71
  <li><a href="#directory_configuration"><strong>Directory Configuration</strong></a></li>
73
72
  <li><a href="#seleniumbase_dashboard" ><strong>SeleniumBase Dashboard</strong></a></li>
74
73
  <li><a href="#creating_visual_reports"><strong>Generating Test Reports</strong></a></li>
@@ -78,7 +77,8 @@
78
77
  --------
79
78
 
80
79
  <a id="multiple_examples"></a>
81
- <p align="left">Run <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">test_demo_site.py</a> from <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples" target="_blank">examples/</a> (<code>--chrome</code> is the default browser):</p>
80
+
81
+ <p align="left"><b>Example:</b> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">test_demo_site.py</a> from <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples" target="_blank">./examples/</a> (Uses <code>--chrome</code> by default)</p>
82
82
 
83
83
  ```bash
84
84
  cd examples/
@@ -87,12 +87,10 @@ pytest test_demo_site.py
87
87
 
88
88
  <p align="left"><a href="https://seleniumbase.io/demo_page" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/demo_page_5.gif" width="480" alt="SeleniumBase Example" title="SeleniumBase Example" /></a></p>
89
89
 
90
- > Type text, click, select, toggle, drag-and-drop, etc. Even handle iframes.
90
+ > Easy to type, click, select, toggle, drag-and-drop, etc.
91
91
 
92
92
  --------
93
93
 
94
- Looking for overpriced coffee? Try running this test:
95
-
96
94
  <p align="left"><b>Example:</b> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">test_coffee_cart.py</a> from <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples" target="_blank">./examples/</a></p>
97
95
 
98
96
  ```bash
@@ -126,6 +124,8 @@ class CoffeeCartTest(BaseCase):
126
124
  self.assert_text("Thanks for your purchase.", "#app .success")
127
125
  ```
128
126
 
127
+ (For more examples, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">SeleniumBase/examples/</a> folder.)
128
+
129
129
  --------
130
130
 
131
131
  <details>
@@ -355,7 +355,7 @@ Making [chromedriver 114.0.5735.90] executable ...
355
355
 
356
356
 
357
357
  <a id="basic_example_and_usage"></a>
358
- <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Basic Example & Usage:</h2>
358
+ <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Basic Example / Usage:</h2>
359
359
 
360
360
  🔵 If you've cloned SeleniumBase, you can run tests from the [examples/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples) folder.
361
361
 
@@ -466,8 +466,8 @@ self.type("input", "dogs\n")
466
466
  Most SeleniumBase scripts can be run with <code>pytest</code>, <code>pynose</code>, or pure <code>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>.
467
467
 
468
468
  ```bash
469
- pytest test_sb_fixture.py
470
469
  pytest coffee_cart_tests.py --rs
470
+ pytest test_sb_fixture.py
471
471
  pytest test_suite.py --rs --html=report.html --dashboard
472
472
 
473
473
  pynose basic_test.py --mobile
@@ -485,7 +485,7 @@ behave calculator.feature -D rs -D dashboard
485
485
  * Python files that start with ``test_`` or end with ``_test.py``.
486
486
  * Python methods that start with ``test_``.
487
487
 
488
- 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``, which triggers autodiscovery.
488
+ 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.
489
489
 
490
490
  <p>✅ You can do a pre-flight check to see which tests would get discovered by <code>pytest</code> before the real flight:</p>
491
491
 
@@ -511,29 +511,36 @@ pynose [FILE_NAME.py]:[CLASS_NAME].[METHOD_NAME]
511
511
  ✅ SeleniumBase works on all popular CI/CD platforms:
512
512
  <p><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/github/workflows/ReadMe.md"><img alt="GitHub Actions integration" src="https://img.shields.io/badge/GitHub_Actions-12B2C2.svg?logo=GitHubActions&logoColor=CFFFC2" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/jenkins/ReadMe.md"><img alt="Jenkins integration" src="https://img.shields.io/badge/Jenkins-32B242.svg?logo=jenkins&logoColor=white" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/azure_pipelines/ReadMe.md"><img alt="Azure integration" src="https://img.shields.io/badge/Azure-2288EE.svg?logo=AzurePipelines&logoColor=white" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/google_cloud/ReadMe.md"><img alt="Google Cloud integration" src="https://img.shields.io/badge/Google_Cloud-11CAE8.svg?logo=GoogleCloud&logoColor=EE0066" /></a> <a href="#utilizing_advanced_features"><img alt="AWS integration" src="https://img.shields.io/badge/AWS-4488DD.svg?logo=AmazonAWS&logoColor=FFFF44" /></a> <a href="https://en.wikipedia.org/wiki/Personal_computer" target="_blank"><img alt="Your Computer" src="https://img.shields.io/badge/💻_Your_Computer-44E6E6.svg" /></a></p>
513
513
 
514
- <p>✅ SeleniumBase includes an automated/manual hybrid solution called <b><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/master_qa/ReadMe.md">MasterQA</a></b>, which speeds up manual testing by having automation perform all the browser actions while the manual tester handles validation.</p>
514
+ <p>✅ SeleniumBase includes an automated/manual hybrid solution called <b><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/master_qa/ReadMe.md">MasterQA</a></b> to speed up manual testing with automation while the manual tester handles validation.</p>
515
515
 
516
516
  <p>✅ For a full list of SeleniumBase features, <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/features_list.md">Click Here</a>.</p>
517
517
 
518
518
 
519
- <a id="detailed_instructions"></a>
520
- <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Detailed Instructions:</h2>
521
-
522
519
  <a id="demo_mode_and_debugging"></a>
523
- 🔵 <b>Demo Mode</b> helps you see what a test is doing. If a test is moving too fast for your eyes, run it in <b>Demo Mode</b>, which pauses the browser briefly between actions, highlights page elements being acted on, and displays assertions:
520
+ <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Demo Mode / Debugging:</h2>
521
+
522
+ 🔵 <b>Demo Mode</b> helps you see what a test is doing. If a test is moving too fast for your eyes, run it in <b>Demo Mode</b> to pause the browser briefly between actions, highlight page elements being acted on, and display assertions:
524
523
 
525
524
  ```bash
526
525
  pytest my_first_test.py --demo
527
526
  ```
528
527
 
529
- 🔵 You can use the following calls in your scripts to help you debug issues:
528
+ 🔵 ``time.sleep(seconds)`` can be used to make a test wait at a specific spot:
530
529
 
531
530
  ```python
532
- import time; time.sleep(5) # Makes the test wait and do nothing for 5 seconds.
533
- import pdb; pdb.set_trace() # Debug Mode. n: next, c: continue, s: step, u: up, d: down.
534
- import pytest; pytest.set_trace() # Debug Mode. n: next, c: continue, s: step, u: up, d: down.
531
+ import time; time.sleep(3) # Do nothing for 3 seconds.
535
532
  ```
536
533
 
534
+ 🔵 **Debug Mode** with Python's built-in **[pdb](https://docs.python.org/3/library/pdb.html)** library helps you debug tests:
535
+
536
+ ```python
537
+ import pdb; pdb.set_trace()
538
+ import pytest; pytest.set_trace()
539
+ breakpoint() # Shortcut for "import pdb; pdb.set_trace()"
540
+ ```
541
+
542
+ > (**``pdb``** commands: ``n``, ``c``, ``s``, ``u``, ``d`` => ``next``, ``continue``, ``step``, ``up``, ``down``)
543
+
537
544
  🔵 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:
538
545
 
539
546
  ```bash
@@ -546,10 +553,14 @@ pytest test_fail.py --pdb
546
553
  pytest test_coffee_cart.py --trace
547
554
  ```
548
555
 
549
- (**``pdb``** commands: ``n``, ``c``, ``s``, ``u``, ``d`` => ``next``, ``continue``, ``step``, ``up``, ``down``).
556
+ <a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/cdn/gif/coffee_pdbp.gif" alt="SeleniumBase test with the pdbp (Pdb+) debugger" title="SeleniumBase test with the pdbp (Pdb+) debugger" /></a>
557
+
558
+
559
+ <a id="command_line_options"></a>
560
+ <h2>🔵 Command-line Options:</h2>
550
561
 
551
562
  <a id="pytest_options"></a>
552
- 🔵 Here are some useful command-line options that come with <code>pytest</code>:
563
+ Here are some useful command-line options that come with <code>pytest</code>:
553
564
 
554
565
  ```bash
555
566
  -v # Verbose mode. Prints the full name of each test and shows more details.
@@ -566,7 +577,7 @@ pytest test_coffee_cart.py --trace
566
577
  ```
567
578
 
568
579
  <a id="new_pytest_options"></a>
569
- 🔵 SeleniumBase provides additional <code>pytest</code> command-line options for tests:
580
+ SeleniumBase provides additional <code>pytest</code> command-line options for tests:
570
581
 
571
582
  ```bash
572
583
  --browser=BROWSER # (The web browser to use. Default: "chrome".)
@@ -663,7 +674,9 @@ pytest test_coffee_cart.py --trace
663
674
 
664
675
  (See the full list of command-line option definitions **[here](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/plugins/pytest_plugin.py)**. For detailed examples of command-line options, see **[customizing_test_runs.md](https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/customizing_test_runs.md)**)
665
676
 
666
- 🔵 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.
677
+ --------
678
+
679
+ 🔵 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.
667
680
 
668
681
  ```bash
669
682
  cd examples/
@@ -684,7 +697,7 @@ Inside your tests, you can use ``self.data`` to access that.
684
697
  <a id="directory_configuration"></a>
685
698
  <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Directory Configuration:</h2>
686
699
 
687
- 🔵 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. Folders should also include a blank ``__init__.py`` file, which allows your tests to import files from that folder.
700
+ 🔵 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. Folders should also include a blank ``__init__.py`` file to allow your tests to import files from that folder.
688
701
 
689
702
  🔵 ``sbase mkdir DIR`` creates a folder with config files and sample tests:
690
703
 
@@ -932,7 +945,7 @@ pytest user_agent_test.py --agent="Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1
932
945
  <ul>
933
946
  <li>You can set up a <a href="https://jenkins.io/" target="_blank">Jenkins</a> build server for running tests at regular intervals. For a real-world Jenkins example of headless browser automation in action, check out the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/jenkins/ReadMe.md">SeleniumBase Jenkins example on Azure</a> or the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/google_cloud/ReadMe.md">SeleniumBase Jenkins example on Google Cloud</a>.</li>
934
947
 
935
- <li>You can use <a href="https://selenium.dev/documentation/en/grid/" target="_blank">the Selenium Grid</a> to scale your testing by distributing tests on several machines with parallel execution. To do this, check out the <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/utilities/selenium_grid">SeleniumBase selenium_grid folder</a>, which should have everything you need, including the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">Selenium Grid ReadMe</a>, which will help you get started.</li>
948
+ <li>You can use <a href="https://selenium.dev/documentation/en/grid/" target="_blank">the Selenium Grid</a> to scale your testing by distributing tests on several machines with parallel execution. To do this, check out the <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/utilities/selenium_grid">SeleniumBase selenium_grid folder</a>, which should have everything you need, including the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">Selenium Grid ReadMe</a> to help you get started.</li>
936
949
 
937
950
  <li>If you're using the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/mysql_installation.md">SeleniumBase MySQL feature</a> to save results from tests running on a server machine, you can install <a href="https://dev.mysql.com/downloads/tools/workbench/">MySQL Workbench</a> to help you read & write from your DB more easily.</li>
938
951
 
@@ -1275,10 +1288,15 @@ pytest --reruns=1 --reruns-delay=1
1275
1288
 
1276
1289
  <p>You can use the <code>@retry_on_exception()</code> decorator to retry failing methods. (First import: <code>from seleniumbase import decorators</code>). To learn more about SeleniumBase decorators, <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/common">click here</a>.</p>
1277
1290
 
1291
+ --------
1278
1292
 
1279
- <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Wrap-Up</h3>
1293
+ > "Catch bugs in QA before deploying code to Production!"
1294
+
1295
+ <p align="left"><a href="https://seleniumbase.io/error_page" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/error_page.gif" alt="Catch bugs in QA before deploying code to Production!" title="Catch bugs in QA before deploying code to Production!" /></a></p>
1280
1296
 
1281
- <b>Congratulations on getting started with SeleniumBase!</b>
1297
+ --------
1298
+
1299
+ <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Wrap-Up</h3>
1282
1300
 
1283
1301
  <p>
1284
1302
  <div><b>If you see something, say something!</b></div>
@@ -1298,10 +1316,9 @@ pytest --reruns=1 --reruns-delay=1
1298
1316
  <p><a href="https://pepy.tech/project/seleniumbase" target="_blank"><img src="https://pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" /></a></p>
1299
1317
 
1300
1318
  <p><div>
1301
- <span><a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://seleniumbase.github.io/cdn/img/youtube.png" title="SeleniumBase Playlist on YouTube" alt="SeleniumBase Playlist on YouTube" width="54" /></a></span>
1302
- <span><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/img/social/share_github.svg" title="SeleniumBase on GitHub" alt="SeleniumBase on GitHub" width="50" /></a></span>
1303
- <span><a href="https://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://seleniumbase.github.io/img/social/share_gitter.svg" title="SeleniumBase on Gitter" alt="SeleniumBase on Gitter" width="38" /></a></span>
1304
- <span><a href="https://twitter.com/seleniumbase" target="_blank"><img src="https://seleniumbase.io/img/social/share_twitter.svg" title="SeleniumBase on Twitter" alt="SeleniumBase on Twitter" width="50" /></a></span>
1319
+ <span><a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://seleniumbase.github.io/cdn/img/youtube.png" title="SeleniumBase Playlist on YouTube" alt="SeleniumBase Playlist on YouTube" width="70" /></a></span>
1320
+ <span><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/img/social/share_github.svg" title="SeleniumBase on GitHub" alt="SeleniumBase on GitHub" width="64" /></a></span>
1321
+ <span><a href="https://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://seleniumbase.github.io/img/social/share_gitter.svg" title="SeleniumBase on Gitter" alt="SeleniumBase on Gitter" width="52" /></a></span>
1305
1322
  </div></p>
1306
1323
 
1307
1324
  --------
@@ -7,8 +7,9 @@ readme-renderer>=40.0
7
7
  pymdown-extensions>=10.0.1
8
8
  importlib-metadata>=6.8.0
9
9
  pipdeptree>=2.9.4
10
- docutils==0.20.1
11
- python-dateutil==2.8.2
10
+ bleach>=6.0.0
11
+ docutils>=0.20.1
12
+ python-dateutil>=2.8.2
12
13
  livereload==2.6.3
13
14
  joblib==1.3.1
14
15
  Markdown==3.3.7
@@ -16,7 +17,6 @@ MarkupSafe==2.1.3
16
17
  Jinja2==3.1.2
17
18
  click==8.1.4
18
19
  ghp-import==2.1.0
19
- bleach==6.0.0
20
20
  lunr==0.6.2
21
21
  nltk==3.8.1
22
22
  tornado==6.3.2