seleniumbase 4.15.9__tar.gz → 4.15.11__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.9 → seleniumbase-4.15.11}/PKG-INFO +191 -81
  2. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/README.md +190 -80
  3. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/ReadMe.md +7 -7
  4. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/example_logs/ReadMe.md +5 -5
  5. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/github_test.py +2 -2
  6. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/hack_the_planet.py +2 -5
  7. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/protractor/ReadMe.md +8 -7
  8. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/customizing_test_runs.md +16 -10
  9. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/happy_customers.md +35 -3
  10. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/syntax_formats.md +2 -2
  11. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/requirements.txt +6 -6
  12. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/requirements.txt +5 -24
  13. seleniumbase-4.15.11/seleniumbase/__version__.py +2 -0
  14. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/plugins/pytest_plugin.py +4 -1
  15. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/plugins/selenium_plugin.py +4 -1
  16. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase.egg-info/PKG-INFO +191 -81
  17. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase.egg-info/requires.txt +9 -24
  18. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/setup.py +24 -30
  19. seleniumbase-4.15.9/seleniumbase/__version__.py +0 -2
  20. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/.github/Workflows.md +0 -0
  21. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/.github/workflows/pages.yml +0 -0
  22. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/.github/workflows/python-nightly-mac.yml +0 -0
  23. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/.github/workflows/python-nightly-ubuntu.yml +0 -0
  24. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/.github/workflows/python-nightly-windows.yml +0 -0
  25. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/.github/workflows/python-package-legacy.yml +0 -0
  26. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/.github/workflows/python-package.yml +0 -0
  27. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/.gitignore +0 -0
  28. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/.travis.yml +0 -0
  29. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/CHANGELOG.md +0 -0
  30. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/CNAME +0 -0
  31. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/CODE_OF_CONDUCT.md +0 -0
  32. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/CONTRIBUTING.md +0 -0
  33. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/Dockerfile +0 -0
  34. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/LICENSE +0 -0
  35. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/MANIFEST.in +0 -0
  36. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/SECURITY.md +0 -0
  37. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/_config.yml +0 -0
  38. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/azure-pipelines.yml +0 -0
  39. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/__init__.py +0 -0
  40. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/basic_test.py +0 -0
  41. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/behave_bdd/ReadMe.md +0 -0
  42. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/behave_bdd/__init__.py +0 -0
  43. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/behave_bdd/behave.ini +0 -0
  44. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/behave_bdd/features/__init__.py +0 -0
  45. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/behave_bdd/features/behave.ini +0 -0
  46. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/behave_bdd/features/calculator.feature +0 -0
  47. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/behave_bdd/features/environment.py +0 -0
  48. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/behave_bdd/features/fail_page.feature +0 -0
  49. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/behave_bdd/features/realworld.feature +0 -0
  50. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/behave_bdd/features/steps/__init__.py +0 -0
  51. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/behave_bdd/features/steps/calculator.py +0 -0
  52. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/behave_bdd/features/steps/fail_page.py +0 -0
  53. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/behave_bdd/features/steps/imported.py +0 -0
  54. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/behave_bdd/features/steps/swag_labs.py +0 -0
  55. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/behave_bdd/features/swag_labs.feature +0 -0
  56. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/ReadMe.md +0 -0
  57. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/__init__.py +0 -0
  58. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/base_test_case.py +0 -0
  59. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/boilerplate_test.py +0 -0
  60. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/classic_obj_test.py +0 -0
  61. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/page_objects.py +0 -0
  62. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/samples/__init__.py +0 -0
  63. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/samples/file_parsing/__init__.py +0 -0
  64. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/samples/file_parsing/parse_files.py +0 -0
  65. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/samples/file_parsing/qa_login_example.txt +0 -0
  66. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/samples/file_parsing/staging_login_example.txt +0 -0
  67. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/samples/google_objects.py +0 -0
  68. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/samples/google_test.py +0 -0
  69. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/samples/sb_swag_test.py +0 -0
  70. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/samples/swag_labs_test.py +0 -0
  71. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/samples/test_page_objects.py +0 -0
  72. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/boilerplates/sb_fixture_test.py +0 -0
  73. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/capabilities/ReadMe.md +0 -0
  74. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/capabilities/mac_cap_file.py +0 -0
  75. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/capabilities/sample_cap_file_BS.py +0 -0
  76. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/capabilities/sample_cap_file_SL.py +0 -0
  77. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/capabilities/selenoid_cap_file.py +0 -0
  78. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/capabilities/win10_cap_file.py +0 -0
  79. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/case_plans/basic_test.MyTestClass.test_basics.md +0 -0
  80. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/case_plans/my_first_test.MyTestClass.test_swag_labs.md +0 -0
  81. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/case_plans/shadow_root_test.ShadowRootTest.test_shadow_root.md +0 -0
  82. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/case_plans/test_assert_elements.ListAssertTests.test_assert_list_of_elements.md +0 -0
  83. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/case_plans/test_calculator.CalculatorTests.test_6_times_7_plus_12_equals_54.md +0 -0
  84. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/case_plans/test_demo_site.DemoSiteTests.test_demo_site.md +0 -0
  85. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/case_plans/test_login.SwagLabsLoginTests.test_swag_labs_login.md +0 -0
  86. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/case_plans/test_mfa_login.TestMFALogin.test_mfa_login.md +0 -0
  87. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/case_summary.md +0 -0
  88. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/chart_maker/ReadMe.md +0 -0
  89. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/chart_maker/chart_presentation.py +0 -0
  90. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/chart_maker/my_chart.py +0 -0
  91. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/chart_maker/pie_charts.py +0 -0
  92. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/chart_maker/test_area_chart.py +0 -0
  93. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/chart_maker/test_display_chart.py +0 -0
  94. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/chart_maker/test_line_chart.py +0 -0
  95. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/chart_maker/test_multi_series.py +0 -0
  96. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/chart_maker/test_save_chart.py +0 -0
  97. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/coffee_cart_tests.py +0 -0
  98. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/custom_settings.py +0 -0
  99. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/desktop_apps/ReadMe.md +0 -0
  100. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/desktop_apps/recorder.py +0 -0
  101. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/dialog_boxes/ReadMe.md +0 -0
  102. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/dialog_boxes/dialog_box_tour.py +0 -0
  103. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/edge_test.py +0 -0
  104. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/example_config.cfg +0 -0
  105. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/example_logs/basic_test_info.txt +0 -0
  106. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/example_logs/page_source.html +0 -0
  107. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/example_logs/screenshot.png +0 -0
  108. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/gui_test_runner.py +0 -0
  109. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/handle_alert_test.py +0 -0
  110. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/iframe_tests.py +0 -0
  111. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/locale_code_test.py +0 -0
  112. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/master_qa/ReadMe.md +0 -0
  113. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/master_qa/__init__.py +0 -0
  114. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/master_qa/basic_masterqa_test_0.py +0 -0
  115. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/master_qa/masterqa_test_1.py +0 -0
  116. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/master_qa/pytest.ini +0 -0
  117. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/__init__.py +0 -0
  118. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/protractor/__init__.py +0 -0
  119. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/protractor/example_spec.js +0 -0
  120. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/protractor/example_test.py +0 -0
  121. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/protractor/input_spec.js +0 -0
  122. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/protractor/input_test.py +0 -0
  123. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/protractor/mat_paginator_spec.js +0 -0
  124. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/protractor/mat_paginator_test.py +0 -0
  125. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/raw_selenium/ReadMe.md +0 -0
  126. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/raw_selenium/__init__.py +0 -0
  127. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/raw_selenium/flaky_messy_raw.py +0 -0
  128. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/raw_selenium/long_messy_raw.py +0 -0
  129. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/raw_selenium/messy_raw.py +0 -0
  130. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/raw_selenium/pytest.ini +0 -0
  131. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/raw_selenium/refined_raw.py +0 -0
  132. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/migration/raw_selenium/simple_sbase.py +0 -0
  133. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/my_first_test.py +0 -0
  134. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/nth_child_test.py +0 -0
  135. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/offline_examples/__init__.py +0 -0
  136. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/offline_examples/demo_page.html +0 -0
  137. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/offline_examples/load_html_test.py +0 -0
  138. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/offline_examples/test_demo_page.py +0 -0
  139. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/offline_examples/test_handle_alerts.py +0 -0
  140. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/offline_examples/test_request_fixture.py +0 -0
  141. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/offline_examples/test_user_agent.py +0 -0
  142. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/old_wordle_script.py +0 -0
  143. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/parameterized_test.py +0 -0
  144. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/performance_test.py +0 -0
  145. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/presenter/ReadMe.md +0 -0
  146. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/presenter/core_presentation.py +0 -0
  147. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/presenter/edge_presentation.py +0 -0
  148. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/presenter/fundamentals.py +0 -0
  149. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/presenter/my_presentation.py +0 -0
  150. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/presenter/py_virtual_envs.py +0 -0
  151. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/proxy_test.py +0 -0
  152. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/pytest.ini +0 -0
  153. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/rate_limiting_test.py +0 -0
  154. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/raw_browser_launcher.py +0 -0
  155. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/raw_call.py +0 -0
  156. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/raw_driver_context.py +0 -0
  157. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/raw_file_call.py +0 -0
  158. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/raw_main_call.py +0 -0
  159. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/raw_parameter_script.py +0 -0
  160. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/raw_sb.py +0 -0
  161. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/raw_test_scripts.py +0 -0
  162. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/setup.cfg +0 -0
  163. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/shadow_root_test.py +0 -0
  164. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/swag_labs_user_tests.py +0 -0
  165. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_apple_site.py +0 -0
  166. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_assert_elements.py +0 -0
  167. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_calculator.py +0 -0
  168. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_canvas.py +0 -0
  169. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_checkboxes.py +0 -0
  170. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_chinese_pdf.py +0 -0
  171. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_chromedriver.py +0 -0
  172. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_coffee_cart.py +0 -0
  173. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_console_logging.py +0 -0
  174. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_contains_selector.py +0 -0
  175. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_cycle_elements.py +0 -0
  176. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_decryption.py +0 -0
  177. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_deferred_asserts.py +0 -0
  178. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_demo_site.py +0 -0
  179. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_detect_404s.py +0 -0
  180. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_docs_site.py +0 -0
  181. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_double_click.py +0 -0
  182. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_download_files.py +0 -0
  183. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_download_images.py +0 -0
  184. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_drag_and_drop.py +0 -0
  185. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_error_page.py +0 -0
  186. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_event_firing.py +0 -0
  187. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_fail.py +0 -0
  188. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_get_locale_code.py +0 -0
  189. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_get_pdf_text.py +0 -0
  190. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_get_user_agent.py +0 -0
  191. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_hack_search.py +0 -0
  192. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_image_saving.py +0 -0
  193. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_inspect_html.py +0 -0
  194. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_login.py +0 -0
  195. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_markers.py +0 -0
  196. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_mfa_login.py +0 -0
  197. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_multiple_drivers.py +0 -0
  198. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_null.py +0 -0
  199. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_override_driver.py +0 -0
  200. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_override_sb_fixture.py +0 -0
  201. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_parse_soup.py +0 -0
  202. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_pdf_asserts.py +0 -0
  203. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_pytest_parametrize.py +0 -0
  204. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_repeat_tests.py +0 -0
  205. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_request_sb_fixture.py +0 -0
  206. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_save_screenshots.py +0 -0
  207. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_sb_fixture.py +0 -0
  208. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_scrape_bing.py +0 -0
  209. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_select_options.py +0 -0
  210. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_shadow_dom.py +0 -0
  211. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_show_file_choosers.py +0 -0
  212. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_skype_site.py +0 -0
  213. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_suite.py +0 -0
  214. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_swag_labs.py +0 -0
  215. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_tinymce.py +0 -0
  216. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_todomvc.py +0 -0
  217. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_url_asserts.py +0 -0
  218. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_usefixtures.py +0 -0
  219. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_verify_chromedriver.py +0 -0
  220. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_window_switching.py +0 -0
  221. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_xfail.py +0 -0
  222. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/test_xkcd.py +0 -0
  223. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/time_limit_test.py +0 -0
  224. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/tour_examples/ReadMe.md +0 -0
  225. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/tour_examples/bootstrap_google_tour.py +0 -0
  226. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/tour_examples/bootstrap_xkcd_tour.py +0 -0
  227. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/tour_examples/driverjs_maps_tour.py +0 -0
  228. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/tour_examples/google_tour.py +0 -0
  229. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/tour_examples/hopscotch_google_tour.py +0 -0
  230. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/tour_examples/introjs_google_tour.py +0 -0
  231. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/tour_examples/maps_introjs_tour.py +0 -0
  232. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/tour_examples/octocat_tour.py +0 -0
  233. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/tour_examples/shepherd_google_tour.py +0 -0
  234. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/tour_examples/xkcd_tour.py +0 -0
  235. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/translations/ReadMe.md +0 -0
  236. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/translations/chinese_test_1.py +0 -0
  237. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/translations/dutch_test_1.py +0 -0
  238. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/translations/english_test_1.py +0 -0
  239. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/translations/french_test_1.py +0 -0
  240. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/translations/italian_test_1.py +0 -0
  241. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/translations/japanese_test_1.py +0 -0
  242. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/translations/korean_test_1.py +0 -0
  243. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/translations/portuguese_test_1.py +0 -0
  244. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/translations/pytest.ini +0 -0
  245. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/translations/russian_test_1.py +0 -0
  246. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/translations/spanish_test_1.py +0 -0
  247. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/uc_cdp_events.py +0 -0
  248. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/unit_tests/ReadMe.md +0 -0
  249. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/unit_tests/verify_framework.py +0 -0
  250. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/upgrade_chromedriver.py +0 -0
  251. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/upload_file_test.py +0 -0
  252. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/user_agent_test.py +0 -0
  253. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/verify_undetected.py +0 -0
  254. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/visual_testing/ReadMe.md +0 -0
  255. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/visual_testing/__init__.py +0 -0
  256. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/visual_testing/case_plans/layout_test.VisualLayoutTests.test_applitools_layout_change.md +0 -0
  257. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/visual_testing/case_plans/python_home_test.VisualLayoutTests.test_python_home_layout_change.md +0 -0
  258. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/visual_testing/case_plans/test_layout_fail.VisualLayoutFailureTests.test_applitools_change.md +0 -0
  259. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/visual_testing/case_plans/test_layout_fail.VisualLayoutFailureTests.test_xkcd_logo_change.md +0 -0
  260. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/visual_testing/case_plans/test_layout_fail.VisualLayout_FixtureTests.test_python_home_change.md +0 -0
  261. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/visual_testing/case_plans/xkcd_visual_test.VisualLayoutTests.test_xkcd_layout_change.md +0 -0
  262. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/visual_testing/layout_test.py +0 -0
  263. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/visual_testing/python_home_test.py +0 -0
  264. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/visual_testing/test_layout_fail.py +0 -0
  265. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/visual_testing/xkcd_visual_test.py +0 -0
  266. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/wordle_test.py +0 -0
  267. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/xpath_test.py +0 -0
  268. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/examples/youtube_search_test.py +0 -0
  269. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/ReadMe.md +0 -0
  270. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/behave_gui.md +0 -0
  271. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/case_plans.md +0 -0
  272. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/chinese.md +0 -0
  273. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/commander.md +0 -0
  274. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/demo_mode.md +0 -0
  275. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/desired_capabilities.md +0 -0
  276. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/features_list.md +0 -0
  277. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/hidden_files_info.md +0 -0
  278. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/how_it_works.md +0 -0
  279. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/html_inspector.md +0 -0
  280. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/install.md +0 -0
  281. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/install_python_pip_git.md +0 -0
  282. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/js_package_manager.md +0 -0
  283. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/locale_codes.md +0 -0
  284. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/method_summary.md +0 -0
  285. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/mobile_testing.md +0 -0
  286. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/mysql_installation.md +0 -0
  287. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/recorder_mode.md +0 -0
  288. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/shadow_dom.md +0 -0
  289. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/thank_you.md +0 -0
  290. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/translations.md +0 -0
  291. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/useful_grep_commands.md +0 -0
  292. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/using_safari_driver.md +0 -0
  293. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/verify_webdriver.md +0 -0
  294. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/virtualenv_instructions.md +0 -0
  295. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/help_docs/webdriver_installation.md +0 -0
  296. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/install.sh +0 -0
  297. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/__init__.py +0 -0
  298. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/azure/azure_pipelines/ReadMe.md +0 -0
  299. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/azure/jenkins/ReadMe.md +0 -0
  300. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/behave/ReadMe.md +0 -0
  301. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/behave/behave.ini +0 -0
  302. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/behave/features/__init__.py +0 -0
  303. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/behave/features/behave.ini +0 -0
  304. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/behave/features/calculator.feature +0 -0
  305. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/behave/features/environment.py +0 -0
  306. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/behave/features/fail_page.feature +0 -0
  307. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/behave/features/realworld.feature +0 -0
  308. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/behave/features/steps/__init__.py +0 -0
  309. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/behave/features/steps/calculator.py +0 -0
  310. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/behave/features/steps/fail_page.py +0 -0
  311. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/behave/features/steps/real_world.py +0 -0
  312. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/behave/features/steps/swag_labs.py +0 -0
  313. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/behave/features/swag_labs.feature +0 -0
  314. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/brython/ReadMe.md +0 -0
  315. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/brython/index.html +0 -0
  316. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/brython/index.py +0 -0
  317. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/brython/library.html +0 -0
  318. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/docker/ReadMe.md +0 -0
  319. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/docker/docker-entrypoint.sh +0 -0
  320. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/docker/docker_config.cfg +0 -0
  321. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/docker/run_docker_test_in_chrome.sh +0 -0
  322. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/docker/run_docker_test_in_firefox.sh +0 -0
  323. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/github/ReadMe.md +0 -0
  324. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/github/workflows/ReadMe.md +0 -0
  325. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/github/workflows/extras.md +0 -0
  326. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/google_cloud/ReadMe.md +0 -0
  327. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/katalon/ReadMe.md +0 -0
  328. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/linux/Linuxfile.sh +0 -0
  329. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/linux/ReadMe.md +0 -0
  330. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/linux/Xvfb_launcher.sh +0 -0
  331. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/linux/jenkins_permissions.sh +0 -0
  332. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/linux/tomcat_permissions.sh +0 -0
  333. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/node_js/ReadMe.md +0 -0
  334. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/node_js/__init__.py +0 -0
  335. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/node_js/index.html +0 -0
  336. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/node_js/my_first_test.py +0 -0
  337. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/node_js/npm-shrinkwrap.json +0 -0
  338. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/node_js/package.json +0 -0
  339. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/node_js/server.js +0 -0
  340. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/node_js/test_demo_site.py +0 -0
  341. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/selenium_grid/ReadMe.md +0 -0
  342. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/integrations/selenium_ide/ReadMe.md +0 -0
  343. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs.yml +0 -0
  344. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/ReadMe.txt +0 -0
  345. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/docs_instructions.txt +0 -0
  346. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/dash_pie.png +0 -0
  347. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/dash_pie_2.png +0 -0
  348. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/dash_pie_3.png +0 -0
  349. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/favicon.ico +0 -0
  350. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/grad_logo.png +0 -0
  351. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/green_icon.png +0 -0
  352. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/green_logo.png +0 -0
  353. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/green_logo2.png +0 -0
  354. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/green_logo3.png +0 -0
  355. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/logo3.png +0 -0
  356. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/logo3a.png +0 -0
  357. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/logo3b.png +0 -0
  358. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/logo3c.png +0 -0
  359. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/logo4.png +0 -0
  360. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/logo5.png +0 -0
  361. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/logo6.png +0 -0
  362. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/logo7.png +0 -0
  363. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/sb_icon.png +0 -0
  364. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/sb_logo_10.png +0 -0
  365. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/sb_logo_7.png +0 -0
  366. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/side_by_side.png +0 -0
  367. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/social/share_facebook.svg +0 -0
  368. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/social/share_github.svg +0 -0
  369. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/social/share_gitter.svg +0 -0
  370. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/social/share_instagram.svg +0 -0
  371. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/img/social/share_twitter.svg +0 -0
  372. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/index.html +0 -0
  373. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/mkdocs_build/prepare.py +0 -0
  374. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/pytest.ini +0 -0
  375. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/sbase/ReadMe.txt +0 -0
  376. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/sbase/__init__.py +0 -0
  377. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/sbase/__main__.py +0 -0
  378. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/sbase/steps.py +0 -0
  379. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/ReadMe.md +0 -0
  380. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/__init__.py +0 -0
  381. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/__main__.py +0 -0
  382. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/behave/__init__.py +0 -0
  383. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/behave/behave_helper.py +0 -0
  384. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/behave/behave_sb.py +0 -0
  385. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/behave/steps.py +0 -0
  386. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/common/ReadMe.md +0 -0
  387. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/common/__init__.py +0 -0
  388. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/common/decorators.py +0 -0
  389. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/common/encryption.py +0 -0
  390. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/common/exceptions.py +0 -0
  391. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/common/obfuscate.py +0 -0
  392. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/common/unobfuscate.py +0 -0
  393. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/config/__init__.py +0 -0
  394. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/config/ad_block_list.py +0 -0
  395. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/config/proxy_list.py +0 -0
  396. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/config/settings.py +0 -0
  397. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/ReadMe.md +0 -0
  398. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/__init__.py +0 -0
  399. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/logo_helper.py +0 -0
  400. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/rich_helper.py +0 -0
  401. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/run.py +0 -0
  402. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  403. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  404. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/sb_commander.py +0 -0
  405. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/sb_install.py +0 -0
  406. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  407. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  408. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  409. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  410. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  411. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  412. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/sb_print.py +0 -0
  413. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  414. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/__init__.py +0 -0
  415. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/application_manager.py +0 -0
  416. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/browser_launcher.py +0 -0
  417. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/capabilities_parser.py +0 -0
  418. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/colored_traceback.py +0 -0
  419. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/create_db_tables.sql +0 -0
  420. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/detect_b_ver.py +0 -0
  421. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/download_helper.py +0 -0
  422. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/encoded_images.py +0 -0
  423. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/jqc_helper.py +0 -0
  424. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/log_helper.py +0 -0
  425. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/mysql.py +0 -0
  426. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/proxy_helper.py +0 -0
  427. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/recorder_helper.py +0 -0
  428. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/report_helper.py +0 -0
  429. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/s3_manager.py +0 -0
  430. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/session_helper.py +0 -0
  431. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/settings_parser.py +0 -0
  432. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/style_sheet.py +0 -0
  433. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/testcase_manager.py +0 -0
  434. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/tour_helper.py +0 -0
  435. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/core/visual_helper.py +0 -0
  436. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/drivers/ReadMe.md +0 -0
  437. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/drivers/__init__.py +0 -0
  438. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/extensions/ReadMe.md +0 -0
  439. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/extensions/__init__.py +0 -0
  440. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/extensions/ad_block.zip +0 -0
  441. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/extensions/disable_csp.zip +0 -0
  442. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/extensions/recorder.zip +0 -0
  443. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/extensions/sbase_ext.zip +0 -0
  444. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/fixtures/__init__.py +0 -0
  445. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/fixtures/base_case.py +0 -0
  446. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/fixtures/constants.py +0 -0
  447. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  448. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/fixtures/errors.py +0 -0
  449. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/fixtures/js_utils.py +0 -0
  450. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/fixtures/page_actions.py +0 -0
  451. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/fixtures/page_utils.py +0 -0
  452. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/fixtures/shared_utils.py +0 -0
  453. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/fixtures/unittest_helper.py +0 -0
  454. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/fixtures/words.py +0 -0
  455. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  456. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/js_code/__init__.py +0 -0
  457. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/js_code/active_css_js.py +0 -0
  458. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/js_code/live_js.py +0 -0
  459. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/js_code/recorder_js.py +0 -0
  460. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/masterqa/ReadMe.md +0 -0
  461. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/masterqa/__init__.py +0 -0
  462. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/masterqa/master_qa.py +0 -0
  463. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/plugins/__init__.py +0 -0
  464. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/plugins/base_plugin.py +0 -0
  465. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/plugins/basic_test_info.py +0 -0
  466. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  467. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/plugins/driver_manager.py +0 -0
  468. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/plugins/page_source.py +0 -0
  469. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  470. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/plugins/sb_manager.py +0 -0
  471. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/plugins/screen_shots.py +0 -0
  472. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/resources/ReadMe.md +0 -0
  473. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/resources/__init__.py +0 -0
  474. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/resources/favicon.ico +0 -0
  475. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/translate/__init__.py +0 -0
  476. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/translate/chinese.py +0 -0
  477. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/translate/dutch.py +0 -0
  478. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/translate/french.py +0 -0
  479. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/translate/italian.py +0 -0
  480. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/translate/japanese.py +0 -0
  481. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/translate/korean.py +0 -0
  482. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/translate/master_dict.py +0 -0
  483. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/translate/portuguese.py +0 -0
  484. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/translate/russian.py +0 -0
  485. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/translate/spanish.py +0 -0
  486. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/translate/translator.py +0 -0
  487. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/undetected/__init__.py +0 -0
  488. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/undetected/cdp.py +0 -0
  489. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/undetected/dprocess.py +0 -0
  490. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/undetected/options.py +0 -0
  491. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/undetected/patcher.py +0 -0
  492. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/undetected/reactor.py +0 -0
  493. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/undetected/webelement.py +0 -0
  494. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/__init__.py +0 -0
  495. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/selenium_grid/ReadMe.md +0 -0
  496. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  497. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  498. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  499. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  500. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  501. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  502. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  503. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  504. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  505. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  506. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  507. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/selenium_ide/ReadMe.md +0 -0
  508. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  509. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  510. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase.egg-info/SOURCES.txt +0 -0
  511. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase.egg-info/dependency_links.txt +0 -0
  512. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase.egg-info/entry_points.txt +0 -0
  513. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/seleniumbase.egg-info/top_level.txt +0 -0
  514. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/setup.cfg +0 -0
  515. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/virtualenv_install.sh +0 -0
  516. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/win_install.bat +0 -0
  517. {seleniumbase-4.15.9 → seleniumbase-4.15.11}/win_virtualenv.bat +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: seleniumbase
3
- Version: 4.15.9
3
+ Version: 4.15.11
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">Python-powered web automation and testing with advanced tools.</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,7 +118,40 @@ 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
+
123
+ <blockquote>
124
+ <p dir="auto"><strong>Jump to:</strong></p>
125
+ <ul dir="auto">
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
+ <li><a href="#common_methods" ><strong>Common Test Methods</strong></a></li>
129
+ <li><a href="#fun_facts" ><strong>Fun Facts / Learn More</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>
132
+ <li><a href="#directory_configuration"><strong>Directory Configuration</strong></a></li>
133
+ <li><a href="#seleniumbase_dashboard" ><strong>SeleniumBase Dashboard</strong></a></li>
134
+ <li><a href="#creating_visual_reports"><strong>Generating Test Reports</strong></a></li>
135
+ </ul>
136
+ </blockquote>
137
+
138
+ --------
139
+
121
140
  <a id="multiple_examples"></a>
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
+
144
+ ```bash
145
+ cd examples/
146
+ pytest test_demo_site.py
147
+ ```
148
+
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
+
151
+ > Easy to type, click, select, toggle, drag-and-drop, etc.
152
+
153
+ --------
154
+
122
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>
123
156
 
124
157
  ```bash
@@ -152,13 +185,15 @@ class CoffeeCartTest(BaseCase):
152
185
  self.assert_text("Thanks for your purchase.", "#app .success")
153
186
  ```
154
187
 
188
+ (For more examples, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">SeleniumBase/examples/</a> folder.)
189
+
155
190
  --------
156
191
 
157
192
  <details>
158
193
  <summary> ▶️ How is <b>SeleniumBase</b> different from raw Selenium? (<b>click to expand</b>)</summary>
159
194
  <div>
160
195
 
161
- <p>💡 SeleniumBase is a Python framework for browser automation and testing. SeleniumBase uses <a href="https://www.w3.org/TR/webdriver2/#endpoints" target="_blank">Selenium/WebDriver</a> APIs, and incorporates test-runners such as <code>pytest</code>, <code>nosetests</code>, and <code>behave</code> to provide organized structure, test discovery, test execution, test state (<i>eg. passed, failed, or skipped</i>), and command-line options for changing default settings (<i>such as choosing the browser to use</i>). With raw Selenium, you would need to set up your own options-parser for configuring tests from the command-line.</p>
196
+ <p>💡 SeleniumBase is a Python framework for browser automation and testing. SeleniumBase uses <a href="https://www.w3.org/TR/webdriver2/#endpoints" target="_blank">Selenium/WebDriver</a> APIs, and incorporates test-runners such as <code>pytest</code>, <code>pynose</code>, and <code>behave</code> to provide organized structure, test discovery, test execution, test state (<i>eg. passed, failed, or skipped</i>), and command-line options for changing default settings (<i>such as choosing the browser to use</i>). With raw Selenium, you would need to set up your own options-parser for configuring tests from the command-line.</p>
162
197
 
163
198
  <p>💡 With raw Selenium, commands that use selectors need to specify the type of selector (eg. <code>"css selector", "button#myButton"</code>). With SeleniumBase, there's auto-detection between CSS Selectors and XPath, which means you don't need to specify the type of selector in your commands (<i>but optionally you could</i>).</p>
164
199
 
@@ -193,7 +228,7 @@ With raw Selenium, that requires more code:<br />
193
228
  <summary> ▶️ Learn about different ways of writing tests (<b>click to expand</b>)</summary>
194
229
  <div>
195
230
 
196
- <p align="left">📘📝 An example test with the <b>BaseCase</b> class. Runs with <b><a href="https://docs.pytest.org/en/latest/how-to/usage.html">pytest</a></b> or <b>nosetests</b>. (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">Learn more</a>)</p>
231
+ <p align="left">📘📝 An example test with the <b>BaseCase</b> class. Runs with <b><a href="https://docs.pytest.org/en/latest/how-to/usage.html">pytest</a></b> or <b>pynose</b>. (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">Learn more</a>)</p>
197
232
 
198
233
  ```python
199
234
  from seleniumbase import BaseCase
@@ -243,7 +278,7 @@ with SB() as sb: # By default, browser="chrome" if not set.
243
278
  sb.assert_exact_text("You have been signed out!", "#top_message")
244
279
  ```
245
280
 
246
- <p align="left">📕📝 An example test with <b>behave-BDD</b> <a href="https://behave.readthedocs.io/en/stable/gherkin.html" target="_blank">Gherkin</a> structure. Runs with <b><code>behave</code></b>. (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">Learn more</a>)</p>
281
+ <p align="left">📕📝 An example test with <b>behave-BDD</b> <a href="https://behave.readthedocs.io/en/stable/gherkin.html#features" target="_blank">Gherkin</a> structure. Runs with <b><code>behave</code></b>. (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">Learn more</a>)</p>
247
282
 
248
283
  ```gherkin
249
284
  Feature: SeleniumBase scenarios for the RealWorld App
@@ -267,6 +302,8 @@ Feature: SeleniumBase scenarios for the RealWorld App
267
302
  <a id="python_installation"></a>
268
303
  <h2><img src="https://seleniumbase.github.io/cdn/img/python_logo.png" title="SeleniumBase" width="42" /> Set up Python & Git:</h2>
269
304
 
305
+ <a href="https://www.python.org/downloads/"><img src="https://img.shields.io/pypi/pyversions/seleniumbase.svg?color=FACE42" title="Supported Python Versions" /></a>
306
+
270
307
  🔵 Add <b><a href="https://www.python.org/downloads/">Python</a></b> and <b><a href="https://git-scm.com/">Git</a></b> to your System PATH.
271
308
 
272
309
  🔵 Using a <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/virtualenv_instructions.md">Python virtual env</a> is recommended.
@@ -276,7 +313,7 @@ Feature: SeleniumBase scenarios for the RealWorld App
276
313
 
277
314
  **You can install ``seleniumbase`` from [PyPI](https://pypi.org/project/seleniumbase/) or [GitHub](https://github.com/seleniumbase/SeleniumBase):**
278
315
 
279
- 🔵 **Installing ``seleniumbase`` from PyPI:**
316
+ 🔵 **How to install ``seleniumbase`` from PyPI:**
280
317
 
281
318
  ```bash
282
319
  pip install seleniumbase
@@ -286,7 +323,7 @@ pip install seleniumbase
286
323
  * (Add ``--force-reinstall`` to upgrade indirect packages.)
287
324
  * (Use ``pip3`` if multiple versions of Python are present.)
288
325
 
289
- 🔵 **Installing ``seleniumbase`` from a GitHub clone:**
326
+ 🔵 **How to install ``seleniumbase`` from a GitHub clone:**
290
327
 
291
328
  ```bash
292
329
  git clone https://github.com/seleniumbase/SeleniumBase.git
@@ -294,14 +331,14 @@ cd SeleniumBase/
294
331
  pip install -e .
295
332
  ```
296
333
 
297
- **To upgrade an existing install from a GitHub clone:**
334
+ 🔵 **How to upgrade an existing install from a GitHub clone:**
298
335
 
299
336
  ```bash
300
337
  git pull
301
338
  pip install -e .
302
339
  ```
303
340
 
304
- 🔵 Type ``seleniumbase`` or ``sbase`` to verify that SeleniumBase was installed successfully:
341
+ 🔵 **Type ``seleniumbase`` or ``sbase`` to verify that SeleniumBase was installed successfully:**
305
342
 
306
343
  ```bash
307
344
  ______ __ _ ____
@@ -348,16 +385,38 @@ COMMANDS:
348
385
  Use "pytest" for running tests.
349
386
  ```
350
387
 
351
-
352
- <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Downloading webdrivers:</h3>
388
+ <h3>🔵 Downloading webdrivers:</h3>
353
389
 
354
390
  ✅ SeleniumBase automatically downloads webdrivers as needed, such as ``chromedriver``.
355
391
 
392
+ <div></div>
393
+ <details>
394
+ <summary> ▶️ Here's output from a chromedriver download. (<b>click to expand</b>)</summary>
395
+
396
+ ```bash
397
+ *** chromedriver version for download = 114.0.5735.90 (Latest)
398
+
399
+ Downloading chromedriver_mac_arm64.zip from:
400
+ https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_mac_arm64.zip ...
401
+ Download Complete!
402
+
403
+ Extracting ['chromedriver'] from chromedriver_mac_arm64.zip ...
404
+ Unzip Complete!
405
+
406
+ The file [chromedriver] was saved to:
407
+ /Users/michael/github/SeleniumBase/seleniumbase/drivers/chromedriver
408
+
409
+ Making [chromedriver 114.0.5735.90] executable ...
410
+ [chromedriver 114.0.5735.90] is now ready for use!
411
+ ```
412
+
413
+ </details>
414
+
356
415
  ✅ To manually download a webdriver, see [Console Scripts](https://seleniumbase.io/seleniumbase/console_scripts/ReadMe/) OR [Webdriver Installation](https://seleniumbase.io/help_docs/webdriver_installation/).
357
416
 
358
417
 
359
418
  <a id="basic_example_and_usage"></a>
360
- <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Basic Example & Usage:</h3>
419
+ <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Basic Example / Usage:</h2>
361
420
 
362
421
  🔵 If you've cloned SeleniumBase, you can run tests from the [examples/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples) folder.
363
422
 
@@ -372,6 +431,8 @@ pytest my_first_test.py
372
431
 
373
432
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/my_first_test.py"><img src="https://seleniumbase.github.io/cdn/gif/swag_labs_4.gif" alt="SeleniumBase Test" title="SeleniumBase Test" width="480" /></a>
374
433
 
434
+ > SeleniumBase easily handles login, shopping, and checkout.
435
+
375
436
  <p align="left"><b>Here's the code for <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/my_first_test.py">my_first_test.py</a>:</b></p>
376
437
 
377
438
  ```python
@@ -410,7 +471,7 @@ class MyTestClass(BaseCase):
410
471
 
411
472
 
412
473
  <a id="common_methods"></a>
413
- <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Here are some common SeleniumBase methods that you might find in tests:</h3>
474
+ <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Here are some common SeleniumBase methods:</h3>
414
475
 
415
476
  ```python
416
477
  self.open(url) # Navigate the browser window to the URL.
@@ -463,12 +524,21 @@ self.assert_no_js_errors() # Verify there are no JS errors.
463
524
  self.type("input", "dogs\n")
464
525
  ```
465
526
 
466
- SeleniumBase tests can be run with <code>pytest</code> or <code>nosetests</code>. (There's also a <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave BDD</a> format.)
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>.
467
528
 
468
529
  ```bash
469
- pytest my_first_test.py --chrome
530
+ pytest coffee_cart_tests.py --rs
531
+ pytest test_sb_fixture.py
532
+ pytest test_suite.py --rs --html=report.html --dashboard
470
533
 
471
- nosetests test_suite.py --firefox
534
+ pynose basic_test.py --mobile
535
+ pynose test_suite.py --headless --report --show-report
536
+
537
+ python raw_sb.py
538
+ python raw_test_scripts.py
539
+
540
+ behave realworld.feature
541
+ behave calculator.feature -D rs -D dashboard
472
542
  ```
473
543
 
474
544
  <p>✅ <code>pytest</code> includes automatic test discovery. If you don't specify a specific file or folder to run, <code>pytest</code> will automatically search through all subdirectories for tests to run based on the following criteria:</p>
@@ -476,7 +546,7 @@ nosetests test_suite.py --firefox
476
546
  * Python files that start with ``test_`` or end with ``_test.py``.
477
547
  * Python methods that start with ``test_``.
478
548
 
479
- 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.
480
550
 
481
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>
482
552
 
@@ -484,12 +554,12 @@ With a SeleniumBase [pytest.ini](https://github.com/seleniumbase/SeleniumBase/bl
484
554
  pytest --collect-only -q
485
555
  ```
486
556
 
487
- <p>✅ You can be more specific when calling <code>pytest</code> on a file:</p>
557
+ <p>✅ You can be more specific when calling <code>pytest</code> or <code>pynose</code> on a file:</p>
488
558
 
489
559
  ```bash
490
560
  pytest [FILE_NAME.py]::[CLASS_NAME]::[METHOD_NAME]
491
561
 
492
- nosetests [FILE_NAME.py]:[CLASS_NAME].[METHOD_NAME]
562
+ pynose [FILE_NAME.py]:[CLASS_NAME].[METHOD_NAME]
493
563
  ```
494
564
 
495
565
  <p>✅ No More Flaky Tests! SeleniumBase methods automatically wait for page elements to finish loading before interacting with them (<i>up to a timeout limit</i>). This means <b>you no longer need random <span><code>time.sleep()</code></span> statements</b> in your scripts.</p>
@@ -502,39 +572,56 @@ nosetests [FILE_NAME.py]:[CLASS_NAME].[METHOD_NAME]
502
572
  ✅ SeleniumBase works on all popular CI/CD platforms:
503
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>
504
574
 
505
- <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>
506
576
 
507
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>
508
578
 
509
579
 
510
- <a id="detailed_instructions"></a>
511
- <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Detailed Instructions:</h2>
580
+ <a id="demo_mode_and_debugging"></a>
581
+ <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Demo Mode / Debugging:</h2>
512
582
 
513
- <a id="seleniumbase_demo_mode"></a>
514
- 🔵 <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:
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:
515
584
 
516
585
  ```bash
517
586
  pytest my_first_test.py --demo
518
587
  ```
519
588
 
520
- 🔵 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:
590
+
591
+ ```python
592
+ import time; time.sleep(3) # Do nothing for 3 seconds.
593
+ ```
594
+
595
+ 🔵 **Debug Mode** with Python's built-in **[pdb](https://docs.python.org/3/library/pdb.html)** library helps you debug tests:
521
596
 
522
597
  ```python
523
- import time; time.sleep(5) # Makes the test wait and do nothing for 5 seconds.
524
- import pdb; pdb.set_trace() # Enter debugging mode. n = next, c = continue, s = step.
525
- import pytest; pytest.set_trace() # Enter debugging mode. n = next, c = continue, s = step.
598
+ import pdb; pdb.set_trace()
599
+ import pytest; pytest.set_trace()
600
+ breakpoint() # Shortcut for "import pdb; pdb.set_trace()"
526
601
  ```
527
602
 
603
+ > (**``pdb``** commands: ``n``, ``c``, ``s``, ``u``, ``d`` => ``next``, ``continue``, ``step``, ``up``, ``down``)
604
+
528
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:
529
606
 
530
607
  ```bash
531
- pytest my_first_test.py --pdb
608
+ pytest test_fail.py --pdb
609
+ ```
610
+
611
+ 🔵 To start tests in Debug Mode, add **``--trace``** as a ``pytest`` option:
612
+
613
+ ```bash
614
+ pytest test_coffee_cart.py --trace
532
615
  ```
533
616
 
534
- (**``pdb``** console commands: ``n``, ``c``, ``s`` => ``next``, ``continue``, ``step``).
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>
535
622
 
536
623
  <a id="pytest_options"></a>
537
- 🔵 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>:
538
625
 
539
626
  ```bash
540
627
  -v # Verbose mode. Prints the full name of each test and shows more details.
@@ -551,7 +638,7 @@ pytest my_first_test.py --pdb
551
638
  ```
552
639
 
553
640
  <a id="new_pytest_options"></a>
554
- 🔵 SeleniumBase provides additional <code>pytest</code> command-line options for tests:
641
+ SeleniumBase provides additional <code>pytest</code> command-line options for tests:
555
642
 
556
643
  ```bash
557
644
  --browser=BROWSER # (The web browser to use. Default: "chrome".)
@@ -648,7 +735,9 @@ pytest my_first_test.py --pdb
648
735
 
649
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)**)
650
737
 
651
- 🔵 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.
652
741
 
653
742
  ```bash
654
743
  cd examples/
@@ -666,10 +755,10 @@ Here's the command-line option to add to tests: (See [examples/custom_settings.p
666
755
  🔵 To pass additional data from the command-line to tests, add ``--data="ANY STRING"``.
667
756
  Inside your tests, you can use ``self.data`` to access that.
668
757
 
758
+ <a id="directory_configuration"></a>
759
+ <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Directory Configuration:</h2>
669
760
 
670
- <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Test Directory Configuration:</h3>
671
-
672
- 🔵 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 **nosetests**, 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.
673
762
 
674
763
  🔵 ``sbase mkdir DIR`` creates a folder with config files and sample tests:
675
764
 
@@ -719,7 +808,7 @@ ui_tests/
719
808
  └── setup.cfg
720
809
  ```
721
810
 
722
- Of those files, the ``pytest.ini`` config file is the most important, followed by a blank ``__init__.py`` file. There's also a ``setup.cfg`` file (only needed for nosetests). Finally, the ``requirements.txt`` file can be used to help you install seleniumbase into your environments (if it's not already installed).
811
+ Of those files, the ``pytest.ini`` config file is the most important, followed by a blank ``__init__.py`` file. There's also a ``setup.cfg`` file (for pynose). Finally, the ``requirements.txt`` file can be used to help you install seleniumbase into your environments (if it's not already installed).
723
812
 
724
813
  --------
725
814
 
@@ -749,7 +838,8 @@ pytest test_fail.py
749
838
 
750
839
  --------
751
840
 
752
- <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> The SeleniumBase Dashboard:</h3>
841
+ <a id="seleniumbase_dashboard"></a>
842
+ <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> SeleniumBase Dashboard:</h2>
753
843
 
754
844
  🔵 The ``--dashboard`` option for pytest generates a SeleniumBase Dashboard located at ``dashboard.html``, which updates automatically as tests run and produce results. Example:
755
845
 
@@ -778,11 +868,11 @@ pytest test_suite.py --dashboard --rs --headless
778
868
  --------
779
869
 
780
870
  <a id="creating_visual_reports"></a>
781
- <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Generating Test Reports:</h3>
871
+ <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Generating Test Reports:</h2>
782
872
 
783
- <h4><b>Pytest Reports:</b></h4>
873
+ <h3>🔵 Pytest Reports:</h3>
784
874
 
785
- 🔵 Using ``--html=report.html`` gives you a fancy report of the name specified after your test suite completes.
875
+ Using ``--html=report.html`` gives you a fancy report of the name specified after your test suite completes.
786
876
 
787
877
  ```bash
788
878
  pytest test_suite.py --html=report.html
@@ -790,9 +880,9 @@ pytest test_suite.py --html=report.html
790
880
 
791
881
  <img src="https://seleniumbase.github.io/cdn/img/html_report.png" alt="Example Pytest Report" title="Example Pytest Report" width="520" />
792
882
 
793
- 🔵 When combining pytest html reports with SeleniumBase Dashboard usage, the pie chart from the Dashboard will get added to the html report. Additionally, if you set the html report URL to be the same as the Dashboard URL when also using the dashboard, (example: ``--dashboard --html=dashboard.html``), then the Dashboard will become an advanced html report when all the tests complete.
883
+ When combining pytest html reports with SeleniumBase Dashboard usage, the pie chart from the Dashboard will get added to the html report. Additionally, if you set the html report URL to be the same as the Dashboard URL when also using the dashboard, (example: ``--dashboard --html=dashboard.html``), then the Dashboard will become an advanced html report when all the tests complete.
794
884
 
795
- 🔵 Here's an example of an upgraded html report:
885
+ Here's an example of an upgraded html report:
796
886
 
797
887
  ```bash
798
888
  pytest test_suite.py --dashboard --html=report.html
@@ -808,19 +898,19 @@ You can also use ``--junit-xml=report.xml`` to get an xml report instead. Jenkin
808
898
  pytest test_suite.py --junit-xml=report.xml
809
899
  ```
810
900
 
811
- <h4><b>Nosetest Reports:</b></h4>
901
+ <h3>🔵 pynose Reports:</h3>
812
902
 
813
903
  The ``--report`` option gives you a fancy report after your test suite completes.
814
904
 
815
905
  ```bash
816
- nosetests test_suite.py --report
906
+ pynose test_suite.py --report
817
907
  ```
818
908
 
819
- <img src="https://seleniumbase.github.io/cdn/img/nose_report.png" alt="Example Nosetest Report" title="Example Nosetest Report" width="320" />
909
+ <img src="https://seleniumbase.github.io/cdn/img/nose_report.png" alt="Example pynose Report" title="Example pynose Report" width="320" />
820
910
 
821
- (NOTE: You can add ``--show-report`` to immediately display Nosetest reports after the test suite completes. Only use ``--show-report`` when running tests locally because it pauses the test run.)
911
+ (NOTE: You can add ``--show-report`` to immediately display pynose reports after the test suite completes. Only use ``--show-report`` when running tests locally because it pauses the test run.)
822
912
 
823
- <h4><b>Behave Dashboard & Reports:</b></h4>
913
+ <h3>🔵 Behave Dashboard & Reports:</h4>
824
914
 
825
915
  (The [behave_bdd/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/behave_bdd) folder can be found in the [examples/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples) folder.)
826
916
 
@@ -836,7 +926,7 @@ You can also use ``--junit`` to get ``.xml`` reports for each Behave feature. Je
836
926
  behave behave_bdd/features/ --junit -D rs -D headless
837
927
  ```
838
928
 
839
- <h4><b>Allure Reports:</b></h4>
929
+ <h3>🔵 Allure Reports:</h3>
840
930
 
841
931
  See: [https://docs.qameta.io/allure/](https://docs.qameta.io/allure/#_pytest)
842
932
 
@@ -852,6 +942,7 @@ Now your tests can create Allure results files, which can be processed by Allure
852
942
  pytest test_suite.py --alluredir=allure_results
853
943
  ```
854
944
 
945
+ --------
855
946
 
856
947
  <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Using a Proxy Server:</h3>
857
948
 
@@ -915,7 +1006,7 @@ pytest user_agent_test.py --agent="Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1
915
1006
  <ul>
916
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>
917
1008
 
918
- <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>
919
1010
 
920
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>
921
1012
 
@@ -934,7 +1025,7 @@ pytest [YOUR_TEST_FILE.py] --with-db-reporting --with-s3-logging
934
1025
  <a id="detailed_method_specifications"></a>
935
1026
  <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Detailed Method Specifications and Examples:</h3>
936
1027
 
937
- 🔵 Navigating to a web page: (and related commands)
1028
+ 🔵 **Navigating to a web page: (and related commands)**
938
1029
 
939
1030
  ```python
940
1031
  self.open("https://xkcd.com/378/") # This method opens the specified page.
@@ -959,7 +1050,7 @@ head_close_tag = source.find('</head>', head_open_tag)
959
1050
  everything_inside_head = source[head_open_tag+len('<head>'):head_close_tag]
960
1051
  ```
961
1052
 
962
- 🔵 Clicking:
1053
+ 🔵 **Clicking:**
963
1054
 
964
1055
  To click an element on the page:
965
1056
 
@@ -969,7 +1060,7 @@ self.click("div#my_id")
969
1060
 
970
1061
  **ProTip™:** In most web browsers, you can right-click on a page and select ``Inspect Element`` to see the CSS selector details that you'll need to create your own scripts.
971
1062
 
972
- 🔵 Typing Text:
1063
+ 🔵 **Typing Text:**
973
1064
 
974
1065
  <code>self.type(selector, text)</code> # updates the text from the specified element with the specified value. An exception is raised if the element is missing or if the text field is not editable. Example:
975
1066
 
@@ -979,19 +1070,19 @@ self.type("input#id_value", "2012")
979
1070
 
980
1071
  You can also use <code>self.add_text()</code> or the <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank">WebDriver</a> <code>.send_keys()</code> command, but those won't clear the text box first if there's already text inside.
981
1072
 
982
- 🔵 Getting the text from an element on a page:
1073
+ 🔵 **Getting the text from an element on a page:**
983
1074
 
984
1075
  ```python
985
1076
  text = self.get_text("header h2")
986
1077
  ```
987
1078
 
988
- 🔵 Getting the attribute value from an element on a page:
1079
+ 🔵 **Getting the attribute value from an element on a page:**
989
1080
 
990
1081
  ```python
991
1082
  attribute = self.get_attribute("#comic img", "title")
992
1083
  ```
993
1084
 
994
- 🔵 Asserting existence of an element on a page within some number of seconds:
1085
+ 🔵 **Asserting existence of an element on a page within some number of seconds:**
995
1086
 
996
1087
  ```python
997
1088
  self.wait_for_element_present("div.my_class", timeout=10)
@@ -999,7 +1090,7 @@ self.wait_for_element_present("div.my_class", timeout=10)
999
1090
 
1000
1091
  (NOTE: You can also use: ``self.assert_element_present(ELEMENT)``)
1001
1092
 
1002
- 🔵 Asserting visibility of an element on a page within some number of seconds:
1093
+ 🔵 **Asserting visibility of an element on a page within some number of seconds:**
1003
1094
 
1004
1095
  ```python
1005
1096
  self.wait_for_element_visible("a.my_class", timeout=5)
@@ -1025,7 +1116,7 @@ You can also use ``*=`` to search for any partial value in a CSS selector as sho
1025
1116
  self.click('a[name*="partial_name"]')
1026
1117
  ```
1027
1118
 
1028
- 🔵 Asserting visibility of text inside an element on a page within some number of seconds:
1119
+ 🔵 **Asserting visibility of text inside an element on a page within some number of seconds:**
1029
1120
 
1030
1121
  ```python
1031
1122
  self.assert_text("Make it so!", "div#trek div.picard div.quotes")
@@ -1034,7 +1125,7 @@ self.assert_text("Tea. Earl Grey. Hot.", "div#trek div.picard div.quotes", timeo
1034
1125
 
1035
1126
  (NOTE: ``self.find_text(TEXT, ELEMENT)`` and ``self.wait_for_text(TEXT, ELEMENT)`` also do this. For backwards compatibility, older method names were kept, but the default timeout may be different.)
1036
1127
 
1037
- 🔵 Asserting Anything:
1128
+ 🔵 **Asserting Anything:**
1038
1129
 
1039
1130
  ```python
1040
1131
  self.assert_true(var1 == var2)
@@ -1044,7 +1135,7 @@ self.assert_false(var1 == var2)
1044
1135
  self.assert_equal(var1, var2)
1045
1136
  ```
1046
1137
 
1047
- 🔵 Useful Conditional Statements: (with creative examples)
1138
+ 🔵 **Useful Conditional Statements: (with creative examples)**
1048
1139
 
1049
1140
  ❓ ``is_element_visible(selector):`` (visible on the page)
1050
1141
 
@@ -1117,7 +1208,7 @@ if self.is_link_text_visible("Stop! Hammer time!"):
1117
1208
  self.click_link("Stop! Hammer time!")
1118
1209
  ```
1119
1210
 
1120
- 🔵 Switching Tabs:
1211
+ <h3>🔵 Switching Tabs:</h3>
1121
1212
 
1122
1213
  <p>If your test opens up a new tab/window, you can switch to it. (SeleniumBase automatically switches to new tabs that don't open to <code>about:blank</code> URLs.)</p>
1123
1214
 
@@ -1125,16 +1216,27 @@ if self.is_link_text_visible("Stop! Hammer time!"):
1125
1216
  self.switch_to_window(1) # This switches to the new tab (0 is the first one)
1126
1217
  ```
1127
1218
 
1128
- 🔵 <b>ProTip™:</b> iframes follow the same principle as new windows - you need to specify the iframe if you want to take action on something in there
1219
+ <h3>🔵 How to handle iframes:</h3>
1220
+
1221
+ 🔵 <b>ProTip™:</b> iframes follow the same principle as new windows: You must first switch to the iframe if you want to perform actions in there:
1222
+
1223
+ ```python
1224
+ self.switch_to_frame("iframe")
1225
+ # ... Now perform actions inside the iframe
1226
+ self.switch_to_parent_frame() # Exit the current iframe
1227
+ ```
1228
+
1229
+ To exit from multiple iframes, use ``self.switch_to_default_content()``. If inside a single iframe, this has the same effect as ``self.switch_to_parent_frame()``.
1230
+
1231
+ 🔵 You can also use a context manager to act inside iframes:
1129
1232
 
1130
1233
  ```python
1131
- self.switch_to_frame('ContentManagerTextBody_ifr')
1132
- # Now you can act inside the iframe
1133
- # .... Do something cool (here)
1134
- self.switch_to_default_content() # Exit the iframe when you're done
1234
+ with self.frame_switch("iframe"):
1235
+ # ... Now perform actions while inside the code block
1236
+ # You have left the iframe!
1135
1237
  ```
1136
1238
 
1137
- 🔵 Executing Custom jQuery Scripts:
1239
+ <h3>🔵 How to execute custom jQuery scripts:</h3>
1138
1240
 
1139
1241
  <p>jQuery is a powerful JavaScript library that allows you to perform advanced actions in a web browser.
1140
1242
  If the web page you're on already has jQuery loaded, you can start executing jQuery scripts immediately.
@@ -1178,7 +1280,11 @@ self.execute_script("return jQuery('textarea')[2].value") # Returns the css "va
1178
1280
 
1179
1281
  </details>
1180
1282
 
1181
- 🔵 Some websites have a restrictive [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) to prevent users from loading jQuery and other external libraries onto their websites. If you need to use jQuery or another JS library on such a website, add ``--disable-csp`` on the command-line.
1283
+ <h3>🔵 How to handle a restrictive CSP:</h3>
1284
+
1285
+ 🛑 Some websites have a restrictive [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) to prevent users from loading jQuery and other external libraries onto their websites. If you need to use jQuery or another JS library on such a website, add ``--disable-csp`` as a ``pytest`` command-line option.
1286
+
1287
+ <h3>🔵 More JavaScript fun:</h3>
1182
1288
 
1183
1289
  <div></div>
1184
1290
  <details>
@@ -1197,7 +1303,7 @@ self.click("a.analytics") # Clicks the generated button
1197
1303
 
1198
1304
  </details>
1199
1305
 
1200
- 🔵 Using deferred asserts:
1306
+ <h3>🔵 How to use deferred asserts:</h3>
1201
1307
 
1202
1308
  <p>Let's say you want to verify multiple different elements on a web page in a single test, but you don't want the test to fail until you verified several elements at once so that you don't have to rerun the test to find more missing elements on the same page. That's where deferred asserts come in. Here's the example:</p>
1203
1309
 
@@ -1206,7 +1312,6 @@ from seleniumbase import BaseCase
1206
1312
  BaseCase.main(__name__, __file__)
1207
1313
 
1208
1314
  class MyTestClass(BaseCase):
1209
-
1210
1315
  def test_deferred_asserts(self):
1211
1316
  self.open('https://xkcd.com/993/')
1212
1317
  self.wait_for_element('#comic')
@@ -1222,7 +1327,7 @@ class MyTestClass(BaseCase):
1222
1327
  <code>deferred_assert_element()</code> and <code>deferred_assert_text()</code> will save any exceptions that would be raised.
1223
1328
  To flush out all the failed deferred asserts into a single exception, make sure to call <code>self.process_deferred_asserts()</code> at the end of your test method. If your test hits multiple pages, you can call <code>self.process_deferred_asserts()</code> before navigating to a new page so that the screenshot from your log files matches the URL where the deferred asserts were made.
1224
1329
 
1225
- 🔵 Accessing Raw <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank">WebDriver</a>:
1330
+ <h3>🔵 How to access raw <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank">WebDriver</a>:</h3>
1226
1331
 
1227
1332
  <p>If you need access to any commands that come with standard <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank">WebDriver</a>, you can call them directly like this:</p>
1228
1333
 
@@ -1234,9 +1339,9 @@ self.driver.find_elements("partial link text", "GitHub")
1234
1339
 
1235
1340
  (In general, you'll want to use the SeleniumBase versions of methods when available.)
1236
1341
 
1237
- 🔵 Retrying failing tests automatically:
1342
+ <h3>🔵 How to retry failing tests automatically:</h3>
1238
1343
 
1239
- <p>You can use <code>--reruns=NUM</code> to retry failing tests that many times. Use <code>--reruns-delay=SECONDS</code> to wait that many seconds between retries. Example:</p>
1344
+ <p>You can use <code>pytest --reruns=NUM</code> to retry failing tests that many times. Add <code>--reruns-delay=SECONDS</code> to wait that many seconds between retries. Example:</p>
1240
1345
 
1241
1346
  ```bash
1242
1347
  pytest --reruns=1 --reruns-delay=1
@@ -1244,10 +1349,15 @@ pytest --reruns=1 --reruns-delay=1
1244
1349
 
1245
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>
1246
1351
 
1352
+ --------
1247
1353
 
1248
- <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!"
1249
1355
 
1250
- <b>Congratulations on getting started with SeleniumBase!</b>
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>
1357
+
1358
+ --------
1359
+
1360
+ <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Wrap-Up</h3>
1251
1361
 
1252
1362
  <p>
1253
1363
  <div><b>If you see something, say something!</b></div>
@@ -1267,9 +1377,9 @@ pytest --reruns=1 --reruns-delay=1
1267
1377
  <p><a href="https://pepy.tech/project/seleniumbase" target="_blank"><img src="https://pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" /></a></p>
1268
1378
 
1269
1379
  <p><div>
1270
- <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>
1271
- <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>
1272
- <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>
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>
1273
1383
  </div></p>
1274
1384
 
1275
1385
  --------