seleniumbase 4.15.10__tar.gz → 4.15.12__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/PKG-INFO +57 -40
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/README.md +56 -39
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/requirements.txt +3 -3
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/requirements.txt +1 -20
- seleniumbase-4.15.12/seleniumbase/__version__.py +2 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/mysql.py +3 -2
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase.egg-info/PKG-INFO +57 -40
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase.egg-info/requires.txt +5 -20
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/setup.py +20 -26
- seleniumbase-4.15.10/seleniumbase/__version__.py +0 -2
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.github/Workflows.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.github/workflows/pages.yml +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.github/workflows/python-nightly-mac.yml +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.github/workflows/python-nightly-ubuntu.yml +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.github/workflows/python-nightly-windows.yml +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.github/workflows/python-package-legacy.yml +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.github/workflows/python-package.yml +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.gitignore +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/.travis.yml +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/CHANGELOG.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/CNAME +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/CODE_OF_CONDUCT.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/CONTRIBUTING.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/Dockerfile +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/LICENSE +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/MANIFEST.in +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/SECURITY.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/_config.yml +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/azure-pipelines.yml +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/basic_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/behave.ini +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/behave.ini +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/calculator.feature +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/environment.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/fail_page.feature +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/realworld.feature +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/steps/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/steps/calculator.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/steps/fail_page.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/steps/imported.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/steps/swag_labs.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/behave_bdd/features/swag_labs.feature +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/base_test_case.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/boilerplate_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/classic_obj_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/page_objects.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/file_parsing/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/file_parsing/parse_files.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/file_parsing/qa_login_example.txt +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/file_parsing/staging_login_example.txt +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/google_objects.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/google_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/sb_swag_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/swag_labs_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/samples/test_page_objects.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/boilerplates/sb_fixture_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/capabilities/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/capabilities/mac_cap_file.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/capabilities/sample_cap_file_BS.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/capabilities/sample_cap_file_SL.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/capabilities/selenoid_cap_file.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/capabilities/win10_cap_file.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/basic_test.MyTestClass.test_basics.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/my_first_test.MyTestClass.test_swag_labs.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/shadow_root_test.ShadowRootTest.test_shadow_root.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/test_assert_elements.ListAssertTests.test_assert_list_of_elements.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/test_calculator.CalculatorTests.test_6_times_7_plus_12_equals_54.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/test_demo_site.DemoSiteTests.test_demo_site.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/test_login.SwagLabsLoginTests.test_swag_labs_login.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_plans/test_mfa_login.TestMFALogin.test_mfa_login.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/case_summary.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/chart_presentation.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/my_chart.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/pie_charts.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/test_area_chart.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/test_display_chart.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/test_line_chart.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/test_multi_series.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/chart_maker/test_save_chart.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/coffee_cart_tests.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/custom_settings.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/desktop_apps/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/desktop_apps/recorder.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/dialog_boxes/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/dialog_boxes/dialog_box_tour.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/edge_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/example_config.cfg +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/example_logs/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/example_logs/basic_test_info.txt +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/example_logs/page_source.html +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/example_logs/screenshot.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/github_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/gui_test_runner.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/hack_the_planet.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/handle_alert_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/iframe_tests.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/locale_code_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/master_qa/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/master_qa/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/master_qa/basic_masterqa_test_0.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/master_qa/masterqa_test_1.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/master_qa/pytest.ini +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/example_spec.js +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/example_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/input_spec.js +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/input_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/mat_paginator_spec.js +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/protractor/mat_paginator_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/flaky_messy_raw.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/long_messy_raw.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/messy_raw.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/pytest.ini +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/refined_raw.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/migration/raw_selenium/simple_sbase.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/my_first_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/nth_child_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/offline_examples/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/offline_examples/demo_page.html +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/offline_examples/load_html_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/offline_examples/test_demo_page.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/offline_examples/test_handle_alerts.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/offline_examples/test_request_fixture.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/offline_examples/test_user_agent.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/old_wordle_script.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/parameterized_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/performance_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/presenter/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/presenter/core_presentation.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/presenter/edge_presentation.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/presenter/fundamentals.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/presenter/my_presentation.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/presenter/py_virtual_envs.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/proxy_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/pytest.ini +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/rate_limiting_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_browser_launcher.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_call.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_driver_context.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_file_call.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_main_call.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_parameter_script.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_sb.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/raw_test_scripts.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/setup.cfg +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/shadow_root_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/swag_labs_user_tests.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_apple_site.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_assert_elements.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_calculator.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_canvas.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_checkboxes.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_chinese_pdf.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_chromedriver.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_coffee_cart.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_console_logging.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_contains_selector.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_cycle_elements.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_decryption.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_deferred_asserts.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_demo_site.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_detect_404s.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_docs_site.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_double_click.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_download_files.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_download_images.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_drag_and_drop.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_error_page.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_event_firing.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_fail.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_get_locale_code.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_get_pdf_text.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_get_user_agent.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_hack_search.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_image_saving.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_inspect_html.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_login.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_markers.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_mfa_login.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_multiple_drivers.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_null.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_override_driver.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_override_sb_fixture.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_parse_soup.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_pdf_asserts.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_pytest_parametrize.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_repeat_tests.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_request_sb_fixture.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_save_screenshots.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_sb_fixture.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_scrape_bing.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_select_options.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_shadow_dom.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_show_file_choosers.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_skype_site.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_suite.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_swag_labs.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_tinymce.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_todomvc.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_url_asserts.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_usefixtures.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_verify_chromedriver.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_window_switching.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_xfail.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/test_xkcd.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/time_limit_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/bootstrap_google_tour.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/bootstrap_xkcd_tour.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/driverjs_maps_tour.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/google_tour.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/hopscotch_google_tour.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/introjs_google_tour.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/maps_introjs_tour.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/octocat_tour.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/shepherd_google_tour.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/tour_examples/xkcd_tour.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/chinese_test_1.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/dutch_test_1.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/english_test_1.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/french_test_1.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/italian_test_1.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/japanese_test_1.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/korean_test_1.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/portuguese_test_1.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/pytest.ini +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/russian_test_1.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/translations/spanish_test_1.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/uc_cdp_events.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/unit_tests/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/unit_tests/verify_framework.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/upgrade_chromedriver.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/upload_file_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/user_agent_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/verify_undetected.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/case_plans/layout_test.VisualLayoutTests.test_applitools_layout_change.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/case_plans/python_home_test.VisualLayoutTests.test_python_home_layout_change.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/case_plans/test_layout_fail.VisualLayoutFailureTests.test_applitools_change.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/case_plans/test_layout_fail.VisualLayoutFailureTests.test_xkcd_logo_change.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/case_plans/test_layout_fail.VisualLayout_FixtureTests.test_python_home_change.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/case_plans/xkcd_visual_test.VisualLayoutTests.test_xkcd_layout_change.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/layout_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/python_home_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/test_layout_fail.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/visual_testing/xkcd_visual_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/wordle_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/xpath_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/examples/youtube_search_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/behave_gui.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/case_plans.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/chinese.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/commander.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/customizing_test_runs.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/demo_mode.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/desired_capabilities.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/features_list.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/happy_customers.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/hidden_files_info.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/how_it_works.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/html_inspector.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/install.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/install_python_pip_git.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/js_package_manager.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/locale_codes.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/method_summary.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/mobile_testing.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/mysql_installation.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/recorder_mode.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/shadow_dom.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/syntax_formats.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/thank_you.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/translations.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/useful_grep_commands.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/using_safari_driver.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/verify_webdriver.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/virtualenv_instructions.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/help_docs/webdriver_installation.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/install.sh +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/azure/azure_pipelines/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/azure/jenkins/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/behave.ini +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/behave.ini +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/calculator.feature +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/environment.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/fail_page.feature +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/realworld.feature +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/steps/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/steps/calculator.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/steps/fail_page.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/steps/real_world.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/steps/swag_labs.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/behave/features/swag_labs.feature +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/brython/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/brython/index.html +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/brython/index.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/brython/library.html +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/docker/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/docker/docker-entrypoint.sh +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/docker/docker_config.cfg +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/docker/run_docker_test_in_chrome.sh +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/docker/run_docker_test_in_firefox.sh +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/github/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/github/workflows/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/github/workflows/extras.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/google_cloud/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/katalon/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/linux/Linuxfile.sh +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/linux/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/linux/Xvfb_launcher.sh +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/linux/jenkins_permissions.sh +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/linux/tomcat_permissions.sh +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/index.html +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/my_first_test.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/npm-shrinkwrap.json +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/package.json +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/server.js +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/node_js/test_demo_site.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/selenium_grid/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/integrations/selenium_ide/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs.yml +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/ReadMe.txt +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/docs_instructions.txt +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/dash_pie.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/dash_pie_2.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/dash_pie_3.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/favicon.ico +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/grad_logo.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/green_icon.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/green_logo.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/green_logo2.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/green_logo3.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo3.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo3a.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo3b.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo3c.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo4.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo5.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo6.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/logo7.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/sb_icon.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/sb_logo_10.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/sb_logo_7.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/side_by_side.png +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/social/share_facebook.svg +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/social/share_github.svg +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/social/share_gitter.svg +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/social/share_instagram.svg +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/img/social/share_twitter.svg +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/index.html +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/mkdocs_build/prepare.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/pytest.ini +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/sbase/ReadMe.txt +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/sbase/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/sbase/__main__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/sbase/steps.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/common/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/browser_launcher.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/drivers/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/extensions/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/base_case.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/masterqa/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/resources/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/resources/favicon.ico +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_ide/ReadMe.md +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/setup.cfg +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/virtualenv_install.sh +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/win_install.bat +0 -0
- {seleniumbase-4.15.10 → seleniumbase-4.15.12}/win_virtualenv.bat +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.15.
|
3
|
+
Version: 4.15.12
|
4
4
|
Summary: A complete web automation framework for end-to-end testing.
|
5
5
|
Home-page: https://github.com/seleniumbase/SeleniumBase
|
6
6
|
Author: Michael Mintz
|
@@ -70,13 +70,13 @@ License-File: LICENSE
|
|
70
70
|
|
71
71
|
<h1>SeleniumBase</h1>
|
72
72
|
|
73
|
-
<
|
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
|
-
<
|
75
|
+
<h2 align="center" class="hero__title">All-in-one Test Automation Framework</h2>
|
76
76
|
|
77
|
-
<
|
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
|
-
<
|
79
|
+
<p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/releases" target="_blank"><img src="https://img.shields.io/github/v/release/seleniumbase/SeleniumBase.svg?color=22AAEE" alt="GitHub version" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/CI%20build/badge.svg" alt="SeleniumBase GitHub Actions" /></a> <a href="https://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://img.shields.io/gitter/room/seleniumbase/SeleniumBase.svg" alt="Gitter chat"/></a></p>
|
80
80
|
|
81
81
|
<p align="center">
|
82
82
|
<a href="#python_installation">🚀 Start</a> |
|
@@ -118,18 +118,17 @@ License-File: LICENSE
|
|
118
118
|
|
119
119
|
--------
|
120
120
|
|
121
|
+
<p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/sb_logo_p3.png" alt="SeleniumBase" title="SeleniumBase" width="232" /></a></p>
|
122
|
+
|
121
123
|
<blockquote>
|
122
124
|
<p dir="auto"><strong>Jump to:</strong></p>
|
123
125
|
<ul dir="auto">
|
124
|
-
<li><a href="#
|
125
|
-
<li><a href="#
|
126
|
-
<li><a href="#install_seleniumbase" ><strong>Install SeleniumBase</strong></a></li>
|
127
|
-
<li><a href="#basic_example_and_usage"><strong>Basic Example & Usage</strong></a></li>
|
126
|
+
<li><a href="#install_seleniumbase" ><strong>Get Started / Installation</strong></a></li>
|
127
|
+
<li><a href="#basic_example_and_usage"><strong>Basic Example / Usage</strong></a></li>
|
128
128
|
<li><a href="#common_methods" ><strong>Common Test Methods</strong></a></li>
|
129
129
|
<li><a href="#fun_facts" ><strong>Fun Facts / Learn More</strong></a></li>
|
130
|
-
<li><a href="#demo_mode_and_debugging"><strong>Demo /
|
131
|
-
<li><a href="#
|
132
|
-
<li><a href="#new_pytest_options" ><strong>SeleniumBase Options</strong></a></li>
|
130
|
+
<li><a href="#demo_mode_and_debugging"><strong>Demo Mode / Debugging</strong></a></li>
|
131
|
+
<li><a href="#command_line_options" ><strong>Command-line Options</strong></a></li>
|
133
132
|
<li><a href="#directory_configuration"><strong>Directory Configuration</strong></a></li>
|
134
133
|
<li><a href="#seleniumbase_dashboard" ><strong>SeleniumBase Dashboard</strong></a></li>
|
135
134
|
<li><a href="#creating_visual_reports"><strong>Generating Test Reports</strong></a></li>
|
@@ -139,7 +138,8 @@ License-File: LICENSE
|
|
139
138
|
--------
|
140
139
|
|
141
140
|
<a id="multiple_examples"></a>
|
142
|
-
|
141
|
+
|
142
|
+
<p align="left"><b>Example:</b> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">test_demo_site.py</a> from <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples" target="_blank">./examples/</a> (Uses <code>--chrome</code> by default)</p>
|
143
143
|
|
144
144
|
```bash
|
145
145
|
cd examples/
|
@@ -148,12 +148,10 @@ pytest test_demo_site.py
|
|
148
148
|
|
149
149
|
<p align="left"><a href="https://seleniumbase.io/demo_page" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/demo_page_5.gif" width="480" alt="SeleniumBase Example" title="SeleniumBase Example" /></a></p>
|
150
150
|
|
151
|
-
>
|
151
|
+
> Easy to type, click, select, toggle, drag-and-drop, etc.
|
152
152
|
|
153
153
|
--------
|
154
154
|
|
155
|
-
Looking for overpriced coffee? Try running this test:
|
156
|
-
|
157
155
|
<p align="left"><b>Example:</b> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">test_coffee_cart.py</a> from <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples" target="_blank">./examples/</a></p>
|
158
156
|
|
159
157
|
```bash
|
@@ -187,6 +185,8 @@ class CoffeeCartTest(BaseCase):
|
|
187
185
|
self.assert_text("Thanks for your purchase.", "#app .success")
|
188
186
|
```
|
189
187
|
|
188
|
+
(For more examples, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">SeleniumBase/examples/</a> folder.)
|
189
|
+
|
190
190
|
--------
|
191
191
|
|
192
192
|
<details>
|
@@ -416,7 +416,7 @@ Making [chromedriver 114.0.5735.90] executable ...
|
|
416
416
|
|
417
417
|
|
418
418
|
<a id="basic_example_and_usage"></a>
|
419
|
-
<h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Basic Example
|
419
|
+
<h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Basic Example / Usage:</h2>
|
420
420
|
|
421
421
|
🔵 If you've cloned SeleniumBase, you can run tests from the [examples/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples) folder.
|
422
422
|
|
@@ -527,8 +527,8 @@ self.type("input", "dogs\n")
|
|
527
527
|
Most SeleniumBase scripts can be run with <code>pytest</code>, <code>pynose</code>, or pure <code>python</code>. Not all test runners can run all test formats. For example, tests that use the ``sb`` pytest fixture can only be run with ``pytest``. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/stable/gherkin.html#features" target="_blank">Gherkin</a> test format that runs with <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave</a>.
|
528
528
|
|
529
529
|
```bash
|
530
|
-
pytest test_sb_fixture.py
|
531
530
|
pytest coffee_cart_tests.py --rs
|
531
|
+
pytest test_sb_fixture.py
|
532
532
|
pytest test_suite.py --rs --html=report.html --dashboard
|
533
533
|
|
534
534
|
pynose basic_test.py --mobile
|
@@ -546,7 +546,7 @@ behave calculator.feature -D rs -D dashboard
|
|
546
546
|
* Python files that start with ``test_`` or end with ``_test.py``.
|
547
547
|
* Python methods that start with ``test_``.
|
548
548
|
|
549
|
-
With a SeleniumBase [pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/pytest.ini) file present, you can modify default discovery settings. The Python class name can be anything because ``seleniumbase.BaseCase`` inherits ``unittest.TestCase
|
549
|
+
With a SeleniumBase [pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/pytest.ini) file present, you can modify default discovery settings. The Python class name can be anything because ``seleniumbase.BaseCase`` inherits ``unittest.TestCase`` to trigger autodiscovery.
|
550
550
|
|
551
551
|
<p>✅ You can do a pre-flight check to see which tests would get discovered by <code>pytest</code> before the real flight:</p>
|
552
552
|
|
@@ -572,29 +572,36 @@ pynose [FILE_NAME.py]:[CLASS_NAME].[METHOD_NAME]
|
|
572
572
|
✅ SeleniumBase works on all popular CI/CD platforms:
|
573
573
|
<p><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/github/workflows/ReadMe.md"><img alt="GitHub Actions integration" src="https://img.shields.io/badge/GitHub_Actions-12B2C2.svg?logo=GitHubActions&logoColor=CFFFC2" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/jenkins/ReadMe.md"><img alt="Jenkins integration" src="https://img.shields.io/badge/Jenkins-32B242.svg?logo=jenkins&logoColor=white" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/azure_pipelines/ReadMe.md"><img alt="Azure integration" src="https://img.shields.io/badge/Azure-2288EE.svg?logo=AzurePipelines&logoColor=white" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/google_cloud/ReadMe.md"><img alt="Google Cloud integration" src="https://img.shields.io/badge/Google_Cloud-11CAE8.svg?logo=GoogleCloud&logoColor=EE0066" /></a> <a href="#utilizing_advanced_features"><img alt="AWS integration" src="https://img.shields.io/badge/AWS-4488DD.svg?logo=AmazonAWS&logoColor=FFFF44" /></a> <a href="https://en.wikipedia.org/wiki/Personal_computer" target="_blank"><img alt="Your Computer" src="https://img.shields.io/badge/💻_Your_Computer-44E6E6.svg" /></a></p>
|
574
574
|
|
575
|
-
<p>✅ SeleniumBase includes an automated/manual hybrid solution called <b><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/master_qa/ReadMe.md">MasterQA</a></b
|
575
|
+
<p>✅ SeleniumBase includes an automated/manual hybrid solution called <b><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/master_qa/ReadMe.md">MasterQA</a></b> to speed up manual testing with automation while the manual tester handles validation.</p>
|
576
576
|
|
577
577
|
<p>✅ For a full list of SeleniumBase features, <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/features_list.md">Click Here</a>.</p>
|
578
578
|
|
579
579
|
|
580
|
-
<a id="detailed_instructions"></a>
|
581
|
-
<h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Detailed Instructions:</h2>
|
582
|
-
|
583
580
|
<a id="demo_mode_and_debugging"></a>
|
584
|
-
|
581
|
+
<h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Demo Mode / Debugging:</h2>
|
582
|
+
|
583
|
+
🔵 <b>Demo Mode</b> helps you see what a test is doing. If a test is moving too fast for your eyes, run it in <b>Demo Mode</b> to pause the browser briefly between actions, highlight page elements being acted on, and display assertions:
|
585
584
|
|
586
585
|
```bash
|
587
586
|
pytest my_first_test.py --demo
|
588
587
|
```
|
589
588
|
|
590
|
-
🔵
|
589
|
+
🔵 ``time.sleep(seconds)`` can be used to make a test wait at a specific spot:
|
591
590
|
|
592
591
|
```python
|
593
|
-
import time; time.sleep(
|
594
|
-
import pdb; pdb.set_trace() # Debug Mode. n: next, c: continue, s: step, u: up, d: down.
|
595
|
-
import pytest; pytest.set_trace() # Debug Mode. n: next, c: continue, s: step, u: up, d: down.
|
592
|
+
import time; time.sleep(3) # Do nothing for 3 seconds.
|
596
593
|
```
|
597
594
|
|
595
|
+
🔵 **Debug Mode** with Python's built-in **[pdb](https://docs.python.org/3/library/pdb.html)** library helps you debug tests:
|
596
|
+
|
597
|
+
```python
|
598
|
+
import pdb; pdb.set_trace()
|
599
|
+
import pytest; pytest.set_trace()
|
600
|
+
breakpoint() # Shortcut for "import pdb; pdb.set_trace()"
|
601
|
+
```
|
602
|
+
|
603
|
+
> (**``pdb``** commands: ``n``, ``c``, ``s``, ``u``, ``d`` => ``next``, ``continue``, ``step``, ``up``, ``down``)
|
604
|
+
|
598
605
|
🔵 To pause an active test that throws an exception or error, (*and keep the browser window open while **Debug Mode** begins in the console*), add **``--pdb``** as a ``pytest`` option:
|
599
606
|
|
600
607
|
```bash
|
@@ -607,10 +614,14 @@ pytest test_fail.py --pdb
|
|
607
614
|
pytest test_coffee_cart.py --trace
|
608
615
|
```
|
609
616
|
|
610
|
-
|
617
|
+
<a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/cdn/gif/coffee_pdbp.gif" alt="SeleniumBase test with the pdbp (Pdb+) debugger" title="SeleniumBase test with the pdbp (Pdb+) debugger" /></a>
|
618
|
+
|
619
|
+
|
620
|
+
<a id="command_line_options"></a>
|
621
|
+
<h2>🔵 Command-line Options:</h2>
|
611
622
|
|
612
623
|
<a id="pytest_options"></a>
|
613
|
-
|
624
|
+
✅ Here are some useful command-line options that come with <code>pytest</code>:
|
614
625
|
|
615
626
|
```bash
|
616
627
|
-v # Verbose mode. Prints the full name of each test and shows more details.
|
@@ -627,7 +638,7 @@ pytest test_coffee_cart.py --trace
|
|
627
638
|
```
|
628
639
|
|
629
640
|
<a id="new_pytest_options"></a>
|
630
|
-
|
641
|
+
✅ SeleniumBase provides additional <code>pytest</code> command-line options for tests:
|
631
642
|
|
632
643
|
```bash
|
633
644
|
--browser=BROWSER # (The web browser to use. Default: "chrome".)
|
@@ -724,7 +735,9 @@ pytest test_coffee_cart.py --trace
|
|
724
735
|
|
725
736
|
(See the full list of command-line option definitions **[here](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/plugins/pytest_plugin.py)**. For detailed examples of command-line options, see **[customizing_test_runs.md](https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/customizing_test_runs.md)**)
|
726
737
|
|
727
|
-
|
738
|
+
--------
|
739
|
+
|
740
|
+
🔵 During test failures, logs and screenshots from the most recent test run will get saved to the ``latest_logs/`` folder. Those logs will get moved to ``archived_logs/`` if you add --archive_logs to command-line options, or have ``ARCHIVE_EXISTING_LOGS`` set to True in [settings.py](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/config/settings.py), otherwise log files with be cleaned up at the start of the next test run. The ``test_suite.py`` collection contains tests that fail on purpose so that you can see how logging works.
|
728
741
|
|
729
742
|
```bash
|
730
743
|
cd examples/
|
@@ -745,7 +758,7 @@ Inside your tests, you can use ``self.data`` to access that.
|
|
745
758
|
<a id="directory_configuration"></a>
|
746
759
|
<h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Directory Configuration:</h2>
|
747
760
|
|
748
|
-
🔵 When running tests with **pytest**, you'll want a copy of **[pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/pytest.ini)** in your root folders. When running tests with **pynose**, you'll want a copy of **[setup.cfg](https://github.com/seleniumbase/SeleniumBase/blob/master/setup.cfg)** in your root folders. These files specify default configuration details for tests. Folders should also include a blank ``__init__.py`` file
|
761
|
+
🔵 When running tests with **pytest**, you'll want a copy of **[pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/pytest.ini)** in your root folders. When running tests with **pynose**, you'll want a copy of **[setup.cfg](https://github.com/seleniumbase/SeleniumBase/blob/master/setup.cfg)** in your root folders. These files specify default configuration details for tests. Folders should also include a blank ``__init__.py`` file to allow your tests to import files from that folder.
|
749
762
|
|
750
763
|
🔵 ``sbase mkdir DIR`` creates a folder with config files and sample tests:
|
751
764
|
|
@@ -993,7 +1006,7 @@ pytest user_agent_test.py --agent="Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1
|
|
993
1006
|
<ul>
|
994
1007
|
<li>You can set up a <a href="https://jenkins.io/" target="_blank">Jenkins</a> build server for running tests at regular intervals. For a real-world Jenkins example of headless browser automation in action, check out the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/jenkins/ReadMe.md">SeleniumBase Jenkins example on Azure</a> or the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/google_cloud/ReadMe.md">SeleniumBase Jenkins example on Google Cloud</a>.</li>
|
995
1008
|
|
996
|
-
<li>You can use <a href="https://selenium.dev/documentation/en/grid/" target="_blank">the Selenium Grid</a> to scale your testing by distributing tests on several machines with parallel execution. To do this, check out the <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/utilities/selenium_grid">SeleniumBase selenium_grid folder</a>, which should have everything you need, including the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">Selenium Grid ReadMe</a
|
1009
|
+
<li>You can use <a href="https://selenium.dev/documentation/en/grid/" target="_blank">the Selenium Grid</a> to scale your testing by distributing tests on several machines with parallel execution. To do this, check out the <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/utilities/selenium_grid">SeleniumBase selenium_grid folder</a>, which should have everything you need, including the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">Selenium Grid ReadMe</a> to help you get started.</li>
|
997
1010
|
|
998
1011
|
<li>If you're using the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/mysql_installation.md">SeleniumBase MySQL feature</a> to save results from tests running on a server machine, you can install <a href="https://dev.mysql.com/downloads/tools/workbench/">MySQL Workbench</a> to help you read & write from your DB more easily.</li>
|
999
1012
|
|
@@ -1336,10 +1349,15 @@ pytest --reruns=1 --reruns-delay=1
|
|
1336
1349
|
|
1337
1350
|
<p>You can use the <code>@retry_on_exception()</code> decorator to retry failing methods. (First import: <code>from seleniumbase import decorators</code>). To learn more about SeleniumBase decorators, <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/common">click here</a>.</p>
|
1338
1351
|
|
1352
|
+
--------
|
1339
1353
|
|
1340
|
-
|
1354
|
+
> "Catch bugs in QA before deploying code to Production!"
|
1355
|
+
|
1356
|
+
<p align="left"><a href="https://seleniumbase.io/error_page" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/error_page.gif" alt="Catch bugs in QA before deploying code to Production!" title="Catch bugs in QA before deploying code to Production!" /></a></p>
|
1341
1357
|
|
1342
|
-
|
1358
|
+
--------
|
1359
|
+
|
1360
|
+
<h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Wrap-Up</h3>
|
1343
1361
|
|
1344
1362
|
<p>
|
1345
1363
|
<div><b>If you see something, say something!</b></div>
|
@@ -1359,10 +1377,9 @@ pytest --reruns=1 --reruns-delay=1
|
|
1359
1377
|
<p><a href="https://pepy.tech/project/seleniumbase" target="_blank"><img src="https://pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" /></a></p>
|
1360
1378
|
|
1361
1379
|
<p><div>
|
1362
|
-
<span><a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://seleniumbase.github.io/cdn/img/youtube.png" title="SeleniumBase Playlist on YouTube" alt="SeleniumBase Playlist on YouTube" width="
|
1363
|
-
<span><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/img/social/share_github.svg" title="SeleniumBase on GitHub" alt="SeleniumBase on GitHub" width="
|
1364
|
-
<span><a href="https://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://seleniumbase.github.io/img/social/share_gitter.svg" title="SeleniumBase on Gitter" alt="SeleniumBase on Gitter" width="
|
1365
|
-
<span><a href="https://twitter.com/seleniumbase" target="_blank"><img src="https://seleniumbase.io/img/social/share_twitter.svg" title="SeleniumBase on Twitter" alt="SeleniumBase on Twitter" width="50" /></a></span>
|
1380
|
+
<span><a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://seleniumbase.github.io/cdn/img/youtube.png" title="SeleniumBase Playlist on YouTube" alt="SeleniumBase Playlist on YouTube" width="70" /></a></span>
|
1381
|
+
<span><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/img/social/share_github.svg" title="SeleniumBase on GitHub" alt="SeleniumBase on GitHub" width="64" /></a></span>
|
1382
|
+
<span><a href="https://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://seleniumbase.github.io/img/social/share_gitter.svg" title="SeleniumBase on Gitter" alt="SeleniumBase on Gitter" width="52" /></a></span>
|
1366
1383
|
</div></p>
|
1367
1384
|
|
1368
1385
|
--------
|
@@ -9,13 +9,13 @@
|
|
9
9
|
|
10
10
|
<h1>SeleniumBase</h1>
|
11
11
|
|
12
|
-
<
|
12
|
+
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/sb_logo_10t.png" alt="SeleniumBase" title="SeleniumBase" width="266" /></a></p>
|
13
13
|
|
14
|
-
<
|
14
|
+
<h2 align="center" class="hero__title">All-in-one Test Automation Framework</h2>
|
15
15
|
|
16
|
-
<
|
16
|
+
<h3 align="center"><img src="https://seleniumbase.github.io/cdn/img/python_logo.png" title="SeleniumBase" width="29" /> For Python enthusiasts and enterprise developers <img src="https://seleniumbase.github.io/cdn/img/python_logo.png" title="SeleniumBase" width="29" /></h3>
|
17
17
|
|
18
|
-
<
|
18
|
+
<p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/releases" target="_blank"><img src="https://img.shields.io/github/v/release/seleniumbase/SeleniumBase.svg?color=22AAEE" alt="GitHub version" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/CI%20build/badge.svg" alt="SeleniumBase GitHub Actions" /></a> <a href="https://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://img.shields.io/gitter/room/seleniumbase/SeleniumBase.svg" alt="Gitter chat"/></a></p>
|
19
19
|
|
20
20
|
<p align="center">
|
21
21
|
<a href="#python_installation">🚀 Start</a> |
|
@@ -57,18 +57,17 @@
|
|
57
57
|
|
58
58
|
--------
|
59
59
|
|
60
|
+
<p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/sb_logo_p3.png" alt="SeleniumBase" title="SeleniumBase" width="232" /></a></p>
|
61
|
+
|
60
62
|
<blockquote>
|
61
63
|
<p dir="auto"><strong>Jump to:</strong></p>
|
62
64
|
<ul dir="auto">
|
63
|
-
<li><a href="#
|
64
|
-
<li><a href="#
|
65
|
-
<li><a href="#install_seleniumbase" ><strong>Install SeleniumBase</strong></a></li>
|
66
|
-
<li><a href="#basic_example_and_usage"><strong>Basic Example & Usage</strong></a></li>
|
65
|
+
<li><a href="#install_seleniumbase" ><strong>Get Started / Installation</strong></a></li>
|
66
|
+
<li><a href="#basic_example_and_usage"><strong>Basic Example / Usage</strong></a></li>
|
67
67
|
<li><a href="#common_methods" ><strong>Common Test Methods</strong></a></li>
|
68
68
|
<li><a href="#fun_facts" ><strong>Fun Facts / Learn More</strong></a></li>
|
69
|
-
<li><a href="#demo_mode_and_debugging"><strong>Demo /
|
70
|
-
<li><a href="#
|
71
|
-
<li><a href="#new_pytest_options" ><strong>SeleniumBase Options</strong></a></li>
|
69
|
+
<li><a href="#demo_mode_and_debugging"><strong>Demo Mode / Debugging</strong></a></li>
|
70
|
+
<li><a href="#command_line_options" ><strong>Command-line Options</strong></a></li>
|
72
71
|
<li><a href="#directory_configuration"><strong>Directory Configuration</strong></a></li>
|
73
72
|
<li><a href="#seleniumbase_dashboard" ><strong>SeleniumBase Dashboard</strong></a></li>
|
74
73
|
<li><a href="#creating_visual_reports"><strong>Generating Test Reports</strong></a></li>
|
@@ -78,7 +77,8 @@
|
|
78
77
|
--------
|
79
78
|
|
80
79
|
<a id="multiple_examples"></a>
|
81
|
-
|
80
|
+
|
81
|
+
<p align="left"><b>Example:</b> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">test_demo_site.py</a> from <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples" target="_blank">./examples/</a> (Uses <code>--chrome</code> by default)</p>
|
82
82
|
|
83
83
|
```bash
|
84
84
|
cd examples/
|
@@ -87,12 +87,10 @@ pytest test_demo_site.py
|
|
87
87
|
|
88
88
|
<p align="left"><a href="https://seleniumbase.io/demo_page" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/demo_page_5.gif" width="480" alt="SeleniumBase Example" title="SeleniumBase Example" /></a></p>
|
89
89
|
|
90
|
-
>
|
90
|
+
> Easy to type, click, select, toggle, drag-and-drop, etc.
|
91
91
|
|
92
92
|
--------
|
93
93
|
|
94
|
-
Looking for overpriced coffee? Try running this test:
|
95
|
-
|
96
94
|
<p align="left"><b>Example:</b> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">test_coffee_cart.py</a> from <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples" target="_blank">./examples/</a></p>
|
97
95
|
|
98
96
|
```bash
|
@@ -126,6 +124,8 @@ class CoffeeCartTest(BaseCase):
|
|
126
124
|
self.assert_text("Thanks for your purchase.", "#app .success")
|
127
125
|
```
|
128
126
|
|
127
|
+
(For more examples, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">SeleniumBase/examples/</a> folder.)
|
128
|
+
|
129
129
|
--------
|
130
130
|
|
131
131
|
<details>
|
@@ -355,7 +355,7 @@ Making [chromedriver 114.0.5735.90] executable ...
|
|
355
355
|
|
356
356
|
|
357
357
|
<a id="basic_example_and_usage"></a>
|
358
|
-
<h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Basic Example
|
358
|
+
<h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Basic Example / Usage:</h2>
|
359
359
|
|
360
360
|
🔵 If you've cloned SeleniumBase, you can run tests from the [examples/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples) folder.
|
361
361
|
|
@@ -466,8 +466,8 @@ self.type("input", "dogs\n")
|
|
466
466
|
Most SeleniumBase scripts can be run with <code>pytest</code>, <code>pynose</code>, or pure <code>python</code>. Not all test runners can run all test formats. For example, tests that use the ``sb`` pytest fixture can only be run with ``pytest``. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/stable/gherkin.html#features" target="_blank">Gherkin</a> test format that runs with <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave</a>.
|
467
467
|
|
468
468
|
```bash
|
469
|
-
pytest test_sb_fixture.py
|
470
469
|
pytest coffee_cart_tests.py --rs
|
470
|
+
pytest test_sb_fixture.py
|
471
471
|
pytest test_suite.py --rs --html=report.html --dashboard
|
472
472
|
|
473
473
|
pynose basic_test.py --mobile
|
@@ -485,7 +485,7 @@ behave calculator.feature -D rs -D dashboard
|
|
485
485
|
* Python files that start with ``test_`` or end with ``_test.py``.
|
486
486
|
* Python methods that start with ``test_``.
|
487
487
|
|
488
|
-
With a SeleniumBase [pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/pytest.ini) file present, you can modify default discovery settings. The Python class name can be anything because ``seleniumbase.BaseCase`` inherits ``unittest.TestCase
|
488
|
+
With a SeleniumBase [pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/pytest.ini) file present, you can modify default discovery settings. The Python class name can be anything because ``seleniumbase.BaseCase`` inherits ``unittest.TestCase`` to trigger autodiscovery.
|
489
489
|
|
490
490
|
<p>✅ You can do a pre-flight check to see which tests would get discovered by <code>pytest</code> before the real flight:</p>
|
491
491
|
|
@@ -511,29 +511,36 @@ pynose [FILE_NAME.py]:[CLASS_NAME].[METHOD_NAME]
|
|
511
511
|
✅ SeleniumBase works on all popular CI/CD platforms:
|
512
512
|
<p><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/github/workflows/ReadMe.md"><img alt="GitHub Actions integration" src="https://img.shields.io/badge/GitHub_Actions-12B2C2.svg?logo=GitHubActions&logoColor=CFFFC2" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/jenkins/ReadMe.md"><img alt="Jenkins integration" src="https://img.shields.io/badge/Jenkins-32B242.svg?logo=jenkins&logoColor=white" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/azure_pipelines/ReadMe.md"><img alt="Azure integration" src="https://img.shields.io/badge/Azure-2288EE.svg?logo=AzurePipelines&logoColor=white" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/google_cloud/ReadMe.md"><img alt="Google Cloud integration" src="https://img.shields.io/badge/Google_Cloud-11CAE8.svg?logo=GoogleCloud&logoColor=EE0066" /></a> <a href="#utilizing_advanced_features"><img alt="AWS integration" src="https://img.shields.io/badge/AWS-4488DD.svg?logo=AmazonAWS&logoColor=FFFF44" /></a> <a href="https://en.wikipedia.org/wiki/Personal_computer" target="_blank"><img alt="Your Computer" src="https://img.shields.io/badge/💻_Your_Computer-44E6E6.svg" /></a></p>
|
513
513
|
|
514
|
-
<p>✅ SeleniumBase includes an automated/manual hybrid solution called <b><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/master_qa/ReadMe.md">MasterQA</a></b
|
514
|
+
<p>✅ SeleniumBase includes an automated/manual hybrid solution called <b><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/master_qa/ReadMe.md">MasterQA</a></b> to speed up manual testing with automation while the manual tester handles validation.</p>
|
515
515
|
|
516
516
|
<p>✅ For a full list of SeleniumBase features, <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/features_list.md">Click Here</a>.</p>
|
517
517
|
|
518
518
|
|
519
|
-
<a id="detailed_instructions"></a>
|
520
|
-
<h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Detailed Instructions:</h2>
|
521
|
-
|
522
519
|
<a id="demo_mode_and_debugging"></a>
|
523
|
-
|
520
|
+
<h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Demo Mode / Debugging:</h2>
|
521
|
+
|
522
|
+
🔵 <b>Demo Mode</b> helps you see what a test is doing. If a test is moving too fast for your eyes, run it in <b>Demo Mode</b> to pause the browser briefly between actions, highlight page elements being acted on, and display assertions:
|
524
523
|
|
525
524
|
```bash
|
526
525
|
pytest my_first_test.py --demo
|
527
526
|
```
|
528
527
|
|
529
|
-
🔵
|
528
|
+
🔵 ``time.sleep(seconds)`` can be used to make a test wait at a specific spot:
|
530
529
|
|
531
530
|
```python
|
532
|
-
import time; time.sleep(
|
533
|
-
import pdb; pdb.set_trace() # Debug Mode. n: next, c: continue, s: step, u: up, d: down.
|
534
|
-
import pytest; pytest.set_trace() # Debug Mode. n: next, c: continue, s: step, u: up, d: down.
|
531
|
+
import time; time.sleep(3) # Do nothing for 3 seconds.
|
535
532
|
```
|
536
533
|
|
534
|
+
🔵 **Debug Mode** with Python's built-in **[pdb](https://docs.python.org/3/library/pdb.html)** library helps you debug tests:
|
535
|
+
|
536
|
+
```python
|
537
|
+
import pdb; pdb.set_trace()
|
538
|
+
import pytest; pytest.set_trace()
|
539
|
+
breakpoint() # Shortcut for "import pdb; pdb.set_trace()"
|
540
|
+
```
|
541
|
+
|
542
|
+
> (**``pdb``** commands: ``n``, ``c``, ``s``, ``u``, ``d`` => ``next``, ``continue``, ``step``, ``up``, ``down``)
|
543
|
+
|
537
544
|
🔵 To pause an active test that throws an exception or error, (*and keep the browser window open while **Debug Mode** begins in the console*), add **``--pdb``** as a ``pytest`` option:
|
538
545
|
|
539
546
|
```bash
|
@@ -546,10 +553,14 @@ pytest test_fail.py --pdb
|
|
546
553
|
pytest test_coffee_cart.py --trace
|
547
554
|
```
|
548
555
|
|
549
|
-
|
556
|
+
<a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/cdn/gif/coffee_pdbp.gif" alt="SeleniumBase test with the pdbp (Pdb+) debugger" title="SeleniumBase test with the pdbp (Pdb+) debugger" /></a>
|
557
|
+
|
558
|
+
|
559
|
+
<a id="command_line_options"></a>
|
560
|
+
<h2>🔵 Command-line Options:</h2>
|
550
561
|
|
551
562
|
<a id="pytest_options"></a>
|
552
|
-
|
563
|
+
✅ Here are some useful command-line options that come with <code>pytest</code>:
|
553
564
|
|
554
565
|
```bash
|
555
566
|
-v # Verbose mode. Prints the full name of each test and shows more details.
|
@@ -566,7 +577,7 @@ pytest test_coffee_cart.py --trace
|
|
566
577
|
```
|
567
578
|
|
568
579
|
<a id="new_pytest_options"></a>
|
569
|
-
|
580
|
+
✅ SeleniumBase provides additional <code>pytest</code> command-line options for tests:
|
570
581
|
|
571
582
|
```bash
|
572
583
|
--browser=BROWSER # (The web browser to use. Default: "chrome".)
|
@@ -663,7 +674,9 @@ pytest test_coffee_cart.py --trace
|
|
663
674
|
|
664
675
|
(See the full list of command-line option definitions **[here](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/plugins/pytest_plugin.py)**. For detailed examples of command-line options, see **[customizing_test_runs.md](https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/customizing_test_runs.md)**)
|
665
676
|
|
666
|
-
|
677
|
+
--------
|
678
|
+
|
679
|
+
🔵 During test failures, logs and screenshots from the most recent test run will get saved to the ``latest_logs/`` folder. Those logs will get moved to ``archived_logs/`` if you add --archive_logs to command-line options, or have ``ARCHIVE_EXISTING_LOGS`` set to True in [settings.py](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/config/settings.py), otherwise log files with be cleaned up at the start of the next test run. The ``test_suite.py`` collection contains tests that fail on purpose so that you can see how logging works.
|
667
680
|
|
668
681
|
```bash
|
669
682
|
cd examples/
|
@@ -684,7 +697,7 @@ Inside your tests, you can use ``self.data`` to access that.
|
|
684
697
|
<a id="directory_configuration"></a>
|
685
698
|
<h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Directory Configuration:</h2>
|
686
699
|
|
687
|
-
🔵 When running tests with **pytest**, you'll want a copy of **[pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/pytest.ini)** in your root folders. When running tests with **pynose**, you'll want a copy of **[setup.cfg](https://github.com/seleniumbase/SeleniumBase/blob/master/setup.cfg)** in your root folders. These files specify default configuration details for tests. Folders should also include a blank ``__init__.py`` file
|
700
|
+
🔵 When running tests with **pytest**, you'll want a copy of **[pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/pytest.ini)** in your root folders. When running tests with **pynose**, you'll want a copy of **[setup.cfg](https://github.com/seleniumbase/SeleniumBase/blob/master/setup.cfg)** in your root folders. These files specify default configuration details for tests. Folders should also include a blank ``__init__.py`` file to allow your tests to import files from that folder.
|
688
701
|
|
689
702
|
🔵 ``sbase mkdir DIR`` creates a folder with config files and sample tests:
|
690
703
|
|
@@ -932,7 +945,7 @@ pytest user_agent_test.py --agent="Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1
|
|
932
945
|
<ul>
|
933
946
|
<li>You can set up a <a href="https://jenkins.io/" target="_blank">Jenkins</a> build server for running tests at regular intervals. For a real-world Jenkins example of headless browser automation in action, check out the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/jenkins/ReadMe.md">SeleniumBase Jenkins example on Azure</a> or the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/google_cloud/ReadMe.md">SeleniumBase Jenkins example on Google Cloud</a>.</li>
|
934
947
|
|
935
|
-
<li>You can use <a href="https://selenium.dev/documentation/en/grid/" target="_blank">the Selenium Grid</a> to scale your testing by distributing tests on several machines with parallel execution. To do this, check out the <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/utilities/selenium_grid">SeleniumBase selenium_grid folder</a>, which should have everything you need, including the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">Selenium Grid ReadMe</a
|
948
|
+
<li>You can use <a href="https://selenium.dev/documentation/en/grid/" target="_blank">the Selenium Grid</a> to scale your testing by distributing tests on several machines with parallel execution. To do this, check out the <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/utilities/selenium_grid">SeleniumBase selenium_grid folder</a>, which should have everything you need, including the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">Selenium Grid ReadMe</a> to help you get started.</li>
|
936
949
|
|
937
950
|
<li>If you're using the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/mysql_installation.md">SeleniumBase MySQL feature</a> to save results from tests running on a server machine, you can install <a href="https://dev.mysql.com/downloads/tools/workbench/">MySQL Workbench</a> to help you read & write from your DB more easily.</li>
|
938
951
|
|
@@ -1275,10 +1288,15 @@ pytest --reruns=1 --reruns-delay=1
|
|
1275
1288
|
|
1276
1289
|
<p>You can use the <code>@retry_on_exception()</code> decorator to retry failing methods. (First import: <code>from seleniumbase import decorators</code>). To learn more about SeleniumBase decorators, <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/common">click here</a>.</p>
|
1277
1290
|
|
1291
|
+
--------
|
1278
1292
|
|
1279
|
-
|
1293
|
+
> "Catch bugs in QA before deploying code to Production!"
|
1294
|
+
|
1295
|
+
<p align="left"><a href="https://seleniumbase.io/error_page" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/error_page.gif" alt="Catch bugs in QA before deploying code to Production!" title="Catch bugs in QA before deploying code to Production!" /></a></p>
|
1280
1296
|
|
1281
|
-
|
1297
|
+
--------
|
1298
|
+
|
1299
|
+
<h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Wrap-Up</h3>
|
1282
1300
|
|
1283
1301
|
<p>
|
1284
1302
|
<div><b>If you see something, say something!</b></div>
|
@@ -1298,10 +1316,9 @@ pytest --reruns=1 --reruns-delay=1
|
|
1298
1316
|
<p><a href="https://pepy.tech/project/seleniumbase" target="_blank"><img src="https://pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" /></a></p>
|
1299
1317
|
|
1300
1318
|
<p><div>
|
1301
|
-
<span><a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://seleniumbase.github.io/cdn/img/youtube.png" title="SeleniumBase Playlist on YouTube" alt="SeleniumBase Playlist on YouTube" width="
|
1302
|
-
<span><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/img/social/share_github.svg" title="SeleniumBase on GitHub" alt="SeleniumBase on GitHub" width="
|
1303
|
-
<span><a href="https://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://seleniumbase.github.io/img/social/share_gitter.svg" title="SeleniumBase on Gitter" alt="SeleniumBase on Gitter" width="
|
1304
|
-
<span><a href="https://twitter.com/seleniumbase" target="_blank"><img src="https://seleniumbase.io/img/social/share_twitter.svg" title="SeleniumBase on Twitter" alt="SeleniumBase on Twitter" width="50" /></a></span>
|
1319
|
+
<span><a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://seleniumbase.github.io/cdn/img/youtube.png" title="SeleniumBase Playlist on YouTube" alt="SeleniumBase Playlist on YouTube" width="70" /></a></span>
|
1320
|
+
<span><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/img/social/share_github.svg" title="SeleniumBase on GitHub" alt="SeleniumBase on GitHub" width="64" /></a></span>
|
1321
|
+
<span><a href="https://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://seleniumbase.github.io/img/social/share_gitter.svg" title="SeleniumBase on Gitter" alt="SeleniumBase on Gitter" width="52" /></a></span>
|
1305
1322
|
</div></p>
|
1306
1323
|
|
1307
1324
|
--------
|
@@ -7,8 +7,9 @@ readme-renderer>=40.0
|
|
7
7
|
pymdown-extensions>=10.0.1
|
8
8
|
importlib-metadata>=6.8.0
|
9
9
|
pipdeptree>=2.9.4
|
10
|
-
|
11
|
-
|
10
|
+
bleach>=6.0.0
|
11
|
+
docutils>=0.20.1
|
12
|
+
python-dateutil>=2.8.2
|
12
13
|
livereload==2.6.3
|
13
14
|
joblib==1.3.1
|
14
15
|
Markdown==3.3.7
|
@@ -16,7 +17,6 @@ MarkupSafe==2.1.3
|
|
16
17
|
Jinja2==3.1.2
|
17
18
|
click==8.1.4
|
18
19
|
ghp-import==2.1.0
|
19
|
-
bleach==6.0.0
|
20
20
|
lunr==0.6.2
|
21
21
|
nltk==3.8.1
|
22
22
|
tornado==6.3.2
|