seleniumbase 4.15.13__tar.gz → 4.15.15__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.13 → seleniumbase-4.15.15}/PKG-INFO +23 -24
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/README.md +22 -23
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/dialog_boxes/dialog_box_tour.py +1 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/translations/japanese_test_1.py +1 -1
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/translations/korean_test_1.py +1 -1
- seleniumbase-4.15.15/examples/uc_cdp_events.py +52 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/verify_undetected.py +16 -10
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/syntax_formats.md +2 -2
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/requirements.txt +1 -1
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/requirements.txt +1 -1
- seleniumbase-4.15.15/seleniumbase/__version__.py +2 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/common/exceptions.py +5 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/sb_mkchart.py +12 -7
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/sb_mkfile.py +1 -2
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/sb_mkpres.py +6 -1
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/browser_launcher.py +35 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/fixtures/base_case.py +30 -3
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/fixtures/js_utils.py +10 -7
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/fixtures/shared_utils.py +5 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase.egg-info/PKG-INFO +23 -24
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase.egg-info/requires.txt +2 -2
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/setup.py +2 -2
- seleniumbase-4.15.13/examples/uc_cdp_events.py +0 -23
- seleniumbase-4.15.13/seleniumbase/__version__.py +0 -2
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/.github/Workflows.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/.github/workflows/pages.yml +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/.github/workflows/python-nightly-mac.yml +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/.github/workflows/python-nightly-ubuntu.yml +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/.github/workflows/python-nightly-windows.yml +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/.github/workflows/python-package-legacy.yml +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/.github/workflows/python-package.yml +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/.gitignore +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/.travis.yml +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/CHANGELOG.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/CNAME +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/CODE_OF_CONDUCT.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/CONTRIBUTING.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/Dockerfile +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/LICENSE +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/MANIFEST.in +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/SECURITY.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/_config.yml +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/azure-pipelines.yml +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/basic_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/behave_bdd/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/behave_bdd/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/behave_bdd/behave.ini +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/behave_bdd/features/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/behave_bdd/features/behave.ini +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/behave_bdd/features/calculator.feature +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/behave_bdd/features/environment.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/behave_bdd/features/fail_page.feature +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/behave_bdd/features/realworld.feature +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/behave_bdd/features/steps/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/behave_bdd/features/steps/calculator.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/behave_bdd/features/steps/fail_page.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/behave_bdd/features/steps/imported.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/behave_bdd/features/steps/swag_labs.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/behave_bdd/features/swag_labs.feature +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/base_test_case.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/boilerplate_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/classic_obj_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/page_objects.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/samples/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/samples/file_parsing/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/samples/file_parsing/parse_files.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/samples/file_parsing/qa_login_example.txt +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/samples/file_parsing/staging_login_example.txt +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/samples/google_objects.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/samples/google_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/samples/sb_swag_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/samples/swag_labs_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/samples/test_page_objects.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/boilerplates/sb_fixture_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/capabilities/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/capabilities/mac_cap_file.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/capabilities/sample_cap_file_BS.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/capabilities/sample_cap_file_SL.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/capabilities/selenoid_cap_file.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/capabilities/win10_cap_file.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/case_plans/basic_test.MyTestClass.test_basics.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/case_plans/my_first_test.MyTestClass.test_swag_labs.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/case_plans/shadow_root_test.ShadowRootTest.test_shadow_root.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/case_plans/test_assert_elements.ListAssertTests.test_assert_list_of_elements.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/case_plans/test_calculator.CalculatorTests.test_6_times_7_plus_12_equals_54.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/case_plans/test_demo_site.DemoSiteTests.test_demo_site.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/case_plans/test_login.SwagLabsLoginTests.test_swag_labs_login.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/case_plans/test_mfa_login.TestMFALogin.test_mfa_login.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/case_summary.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/chart_maker/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/chart_maker/chart_presentation.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/chart_maker/my_chart.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/chart_maker/pie_charts.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/chart_maker/test_area_chart.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/chart_maker/test_display_chart.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/chart_maker/test_line_chart.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/chart_maker/test_multi_series.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/chart_maker/test_save_chart.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/coffee_cart_tests.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/custom_settings.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/desktop_apps/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/desktop_apps/recorder.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/dialog_boxes/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/edge_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/example_config.cfg +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/example_logs/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/example_logs/basic_test_info.txt +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/example_logs/page_source.html +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/example_logs/screenshot.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/github_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/gui_test_runner.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/hack_the_planet.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/handle_alert_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/iframe_tests.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/locale_code_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/master_qa/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/master_qa/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/master_qa/basic_masterqa_test_0.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/master_qa/masterqa_test_1.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/master_qa/pytest.ini +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/protractor/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/protractor/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/protractor/example_spec.js +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/protractor/example_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/protractor/input_spec.js +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/protractor/input_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/protractor/mat_paginator_spec.js +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/protractor/mat_paginator_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/raw_selenium/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/raw_selenium/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/raw_selenium/flaky_messy_raw.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/raw_selenium/long_messy_raw.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/raw_selenium/messy_raw.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/raw_selenium/pytest.ini +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/raw_selenium/refined_raw.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/migration/raw_selenium/simple_sbase.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/my_first_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/nth_child_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/offline_examples/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/offline_examples/demo_page.html +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/offline_examples/load_html_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/offline_examples/test_demo_page.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/offline_examples/test_handle_alerts.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/offline_examples/test_request_fixture.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/offline_examples/test_user_agent.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/old_wordle_script.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/parameterized_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/performance_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/presenter/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/presenter/core_presentation.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/presenter/edge_presentation.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/presenter/fundamentals.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/presenter/my_presentation.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/presenter/py_virtual_envs.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/proxy_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/pytest.ini +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/rate_limiting_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/raw_browser_launcher.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/raw_call.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/raw_driver_context.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/raw_file_call.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/raw_main_call.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/raw_parameter_script.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/raw_sb.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/raw_test_scripts.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/setup.cfg +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/shadow_root_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/swag_labs_user_tests.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_apple_site.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_assert_elements.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_calculator.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_canvas.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_checkboxes.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_chinese_pdf.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_chromedriver.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_coffee_cart.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_console_logging.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_contains_selector.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_cycle_elements.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_decryption.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_deferred_asserts.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_demo_site.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_detect_404s.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_docs_site.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_double_click.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_download_files.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_download_images.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_drag_and_drop.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_error_page.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_event_firing.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_fail.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_get_locale_code.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_get_pdf_text.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_get_user_agent.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_hack_search.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_image_saving.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_inspect_html.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_login.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_markers.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_mfa_login.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_multiple_drivers.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_null.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_override_driver.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_override_sb_fixture.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_parse_soup.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_pdf_asserts.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_pytest_parametrize.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_repeat_tests.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_request_sb_fixture.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_save_screenshots.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_sb_fixture.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_scrape_bing.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_select_options.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_shadow_dom.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_show_file_choosers.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_skype_site.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_suite.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_swag_labs.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_tinymce.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_todomvc.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_url_asserts.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_usefixtures.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_verify_chromedriver.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_window_switching.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_xfail.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/test_xkcd.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/time_limit_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/tour_examples/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/tour_examples/bootstrap_google_tour.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/tour_examples/bootstrap_xkcd_tour.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/tour_examples/driverjs_maps_tour.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/tour_examples/google_tour.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/tour_examples/hopscotch_google_tour.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/tour_examples/introjs_google_tour.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/tour_examples/maps_introjs_tour.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/tour_examples/octocat_tour.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/tour_examples/shepherd_google_tour.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/tour_examples/xkcd_tour.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/translations/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/translations/chinese_test_1.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/translations/dutch_test_1.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/translations/english_test_1.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/translations/french_test_1.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/translations/italian_test_1.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/translations/portuguese_test_1.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/translations/pytest.ini +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/translations/russian_test_1.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/translations/spanish_test_1.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/unit_tests/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/unit_tests/verify_framework.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/upgrade_chromedriver.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/upload_file_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/user_agent_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/visual_testing/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/visual_testing/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/visual_testing/case_plans/layout_test.VisualLayoutTests.test_applitools_layout_change.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/visual_testing/case_plans/python_home_test.VisualLayoutTests.test_python_home_layout_change.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/visual_testing/case_plans/test_layout_fail.VisualLayoutFailureTests.test_applitools_change.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/visual_testing/case_plans/test_layout_fail.VisualLayoutFailureTests.test_xkcd_logo_change.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/visual_testing/case_plans/test_layout_fail.VisualLayout_FixtureTests.test_python_home_change.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/visual_testing/case_plans/xkcd_visual_test.VisualLayoutTests.test_xkcd_layout_change.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/visual_testing/layout_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/visual_testing/python_home_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/visual_testing/test_layout_fail.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/visual_testing/xkcd_visual_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/wordle_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/xpath_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/examples/youtube_search_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/behave_gui.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/case_plans.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/chinese.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/commander.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/customizing_test_runs.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/demo_mode.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/desired_capabilities.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/features_list.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/happy_customers.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/hidden_files_info.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/how_it_works.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/html_inspector.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/install.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/install_python_pip_git.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/js_package_manager.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/locale_codes.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/method_summary.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/mobile_testing.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/mysql_installation.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/recorder_mode.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/shadow_dom.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/thank_you.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/translations.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/useful_grep_commands.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/using_safari_driver.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/verify_webdriver.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/virtualenv_instructions.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/help_docs/webdriver_installation.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/install.sh +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/azure/azure_pipelines/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/azure/jenkins/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/behave/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/behave/behave.ini +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/behave/features/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/behave/features/behave.ini +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/behave/features/calculator.feature +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/behave/features/environment.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/behave/features/fail_page.feature +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/behave/features/realworld.feature +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/behave/features/steps/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/behave/features/steps/calculator.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/behave/features/steps/fail_page.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/behave/features/steps/real_world.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/behave/features/steps/swag_labs.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/behave/features/swag_labs.feature +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/brython/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/brython/index.html +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/brython/index.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/brython/library.html +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/docker/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/docker/docker-entrypoint.sh +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/docker/docker_config.cfg +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/docker/run_docker_test_in_chrome.sh +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/docker/run_docker_test_in_firefox.sh +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/github/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/github/workflows/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/github/workflows/extras.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/google_cloud/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/katalon/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/linux/Linuxfile.sh +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/linux/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/linux/Xvfb_launcher.sh +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/linux/jenkins_permissions.sh +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/linux/tomcat_permissions.sh +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/node_js/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/node_js/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/node_js/index.html +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/node_js/my_first_test.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/node_js/npm-shrinkwrap.json +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/node_js/package.json +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/node_js/server.js +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/node_js/test_demo_site.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/selenium_grid/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/integrations/selenium_ide/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs.yml +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/ReadMe.txt +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/docs_instructions.txt +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/dash_pie.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/dash_pie_2.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/dash_pie_3.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/favicon.ico +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/grad_logo.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/green_icon.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/green_logo.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/green_logo2.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/green_logo3.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/logo3.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/logo3a.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/logo3b.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/logo3c.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/logo4.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/logo5.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/logo6.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/logo7.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/sb_icon.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/sb_logo_10.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/sb_logo_7.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/side_by_side.png +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/social/share_facebook.svg +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/social/share_github.svg +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/social/share_gitter.svg +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/social/share_instagram.svg +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/img/social/share_twitter.svg +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/index.html +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/mkdocs_build/prepare.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/pytest.ini +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/sbase/ReadMe.txt +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/sbase/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/sbase/__main__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/sbase/steps.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/common/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/drivers/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/extensions/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/masterqa/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/resources/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/resources/favicon.ico +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/selenium_grid/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/selenium_ide/ReadMe.md +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/setup.cfg +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/virtualenv_install.sh +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/win_install.bat +0 -0
- {seleniumbase-4.15.13 → seleniumbase-4.15.15}/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.15
|
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
|
@@ -228,7 +228,7 @@ With raw Selenium, that requires more code:<br />
|
|
228
228
|
<summary> ▶️ Learn about different ways of writing tests (<b>click to expand</b>)</summary>
|
229
229
|
<div>
|
230
230
|
|
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>
|
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><a href="https://github.com/mdmintz/pynose">pynose</a></b>. (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">Learn more</a>)</p>
|
232
232
|
|
233
233
|
```python
|
234
234
|
from seleniumbase import BaseCase
|
@@ -521,14 +521,14 @@ self.assert_no_js_errors() # Verify there are no JS errors.
|
|
521
521
|
<p>✅ SeleniumBase uses simple syntax for commands. Example:</p>
|
522
522
|
|
523
523
|
```python
|
524
|
-
self.type("input", "dogs\n")
|
524
|
+
self.type("input", "dogs\n") # (The "\n" presses ENTER)
|
525
525
|
```
|
526
526
|
|
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
530
|
pytest coffee_cart_tests.py --rs
|
531
|
-
pytest test_sb_fixture.py
|
531
|
+
pytest test_sb_fixture.py --demo
|
532
532
|
pytest test_suite.py --rs --html=report.html --dashboard
|
533
533
|
|
534
534
|
pynose basic_test.py --mobile
|
@@ -567,12 +567,14 @@ pynose [FILE_NAME.py]:[CLASS_NAME].[METHOD_NAME]
|
|
567
567
|
|
568
568
|
✅ SeleniumBase supports all major browsers and operating systems:
|
569
569
|
<p><b>Browsers:</b> Chrome, Edge, Firefox, and Safari.</p>
|
570
|
-
<p><b>Systems
|
570
|
+
<p><b>Systems:</b> Linux/Ubuntu, macOS, and Windows.</p>
|
571
571
|
|
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> to speed up manual testing with automation while
|
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 manual testers handle validation.</p>
|
576
|
+
|
577
|
+
<p>✅ SeleniumBase supports <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples/offline_examples">running tests while offline</a> (<i>assuming webdrivers have previously been downloaded when online</i>).</p>
|
576
578
|
|
577
579
|
<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
580
|
|
@@ -614,7 +616,7 @@ pytest test_fail.py --pdb
|
|
614
616
|
pytest test_coffee_cart.py --trace
|
615
617
|
```
|
616
618
|
|
617
|
-
<a href="https://github.com/
|
619
|
+
<a href="https://github.com/mdmintz/pdbp"><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
620
|
|
619
621
|
|
620
622
|
<a id="command_line_options"></a>
|
@@ -742,9 +744,9 @@ pytest test_coffee_cart.py --trace
|
|
742
744
|
```bash
|
743
745
|
cd examples/
|
744
746
|
|
745
|
-
pytest test_suite.py --
|
747
|
+
pytest test_suite.py --chrome
|
746
748
|
|
747
|
-
pytest test_suite.py --
|
749
|
+
pytest test_suite.py --firefox
|
748
750
|
```
|
749
751
|
|
750
752
|
An easy way to override seleniumbase/config/settings.py is by using a custom settings file.
|
@@ -758,7 +760,7 @@ Inside your tests, you can use ``self.data`` to access that.
|
|
758
760
|
<a id="directory_configuration"></a>
|
759
761
|
<h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Directory Configuration:</h2>
|
760
762
|
|
761
|
-
🔵 When running tests with
|
763
|
+
🔵 When running tests with **``pytest``**, you'll want a copy of **[pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/pytest.ini)** in your root folders. When running tests with **``pynose``**, you'll want a copy of **[setup.cfg](https://github.com/seleniumbase/SeleniumBase/blob/master/setup.cfg)** in your root folders. These files specify default configuration details for tests. Test folders should also include a blank **[__init__.py](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/offline_examples/__init__.py)** file to allow your test files to import other files from that folder.
|
762
764
|
|
763
765
|
🔵 ``sbase mkdir DIR`` creates a folder with config files and sample tests:
|
764
766
|
|
@@ -1282,7 +1284,7 @@ self.execute_script("return jQuery('textarea')[2].value") # Returns the css "va
|
|
1282
1284
|
|
1283
1285
|
<h3>🔵 How to handle a restrictive CSP:</h3>
|
1284
1286
|
|
1285
|
-
|
1287
|
+
❗ Some websites have a restrictive [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) to prevent users from loading jQuery and other external libraries onto their websites. If you need to use jQuery or another JS library on those websites, add ``--disable-csp`` as a ``pytest`` command-line option to load a Chromium extension that bypasses the CSP.
|
1286
1288
|
|
1287
1289
|
<h3>🔵 More JavaScript fun:</h3>
|
1288
1290
|
|
@@ -1364,25 +1366,22 @@ pytest --reruns=1 --reruns-delay=1
|
|
1364
1366
|
<div><a href="https://github.com/seleniumbase/SeleniumBase/issues?q=is%3Aissue+is%3Aclosed"><img src="https://img.shields.io/github/issues-closed-raw/seleniumbase/SeleniumBase.svg?color=22BB88" title="Closed Issues" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/pulls?q=is%3Apr+is%3Aclosed"><img src="https://img.shields.io/github/issues-pr-closed/seleniumbase/SeleniumBase.svg?logo=github&logoColor=white&color=22BB99" title="Closed Pull Requests" /></a></div>
|
1365
1367
|
</p>
|
1366
1368
|
|
1367
|
-
<p>
|
1368
|
-
<div><b>If you like SeleniumBase, star us! ⭐</b></div>
|
1369
|
-
<div><a href="https://github.com/seleniumbase/SeleniumBase/stargazers"><img src="https://img.shields.io/github/stars/seleniumbase/seleniumbase.svg?color=19A57B" title="Stargazers" /></a></div>
|
1370
|
-
</p>
|
1371
|
-
|
1372
1369
|
<p align="left"><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>
|
1373
1370
|
|
1371
|
+
<p><div>
|
1372
|
+
<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="68" /></a></span>
|
1373
|
+
<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="62" /></a></span>
|
1374
|
+
<span><a href="https://www.facebook.com/SeleniumBase"><img src="https://seleniumbase.io/img/social/share_facebook.svg" title="SeleniumBase on Facebook" alt="SeleniumBase on Facebook" width="64" /></a></span>
|
1375
|
+
<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="50" /></a></span>
|
1376
|
+
</div></p>
|
1377
|
+
|
1374
1378
|
<p><div><a href="https://github.com/mdmintz">https://github.com/mdmintz</a></div></p>
|
1375
1379
|
|
1376
1380
|
<div><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/fancy_logo_14.png" title="SeleniumBase" width="220" /></a></div> <div><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-22BBCC.svg" title="SeleniumBase" /></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></div> <div><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://img.shields.io/badge/tested%20with-SeleniumBase-04C38E.svg" alt="Tested with SeleniumBase" /></a></div> <div><a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a></div>
|
1377
|
-
<
|
1378
|
-
|
1379
|
-
<p><div>
|
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>
|
1383
|
-
</div></p>
|
1381
|
+
<div><a href="https://pepy.tech/project/seleniumbase" target="_blank"><img src="https://pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" /></a></div>
|
1382
|
+
<div><a href="https://github.com/seleniumbase/SeleniumBase/stargazers"><img src="https://img.shields.io/github/stars/seleniumbase/seleniumbase.svg?color=19A57B" title="Stargazers" /></a></div>
|
1384
1383
|
|
1385
1384
|
--------
|
1386
1385
|
|
1387
1386
|
<p><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb.png" alt="SeleniumBase" title="SeleniumBase" width="300" /></a></p>
|
1388
|
-
<p><a href="https://
|
1387
|
+
<p><a href="https://pypi.org/project/seleniumbase/" target="_blank"><img src="https://img.shields.io/pypi/pyversions/seleniumbase.svg?color=22AAEE&logo=python&logoColor=FEDC54" title="Supported Python Versions" /></a></p>
|
@@ -167,7 +167,7 @@ With raw Selenium, that requires more code:<br />
|
|
167
167
|
<summary> ▶️ Learn about different ways of writing tests (<b>click to expand</b>)</summary>
|
168
168
|
<div>
|
169
169
|
|
170
|
-
<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>
|
170
|
+
<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><a href="https://github.com/mdmintz/pynose">pynose</a></b>. (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">Learn more</a>)</p>
|
171
171
|
|
172
172
|
```python
|
173
173
|
from seleniumbase import BaseCase
|
@@ -460,14 +460,14 @@ self.assert_no_js_errors() # Verify there are no JS errors.
|
|
460
460
|
<p>✅ SeleniumBase uses simple syntax for commands. Example:</p>
|
461
461
|
|
462
462
|
```python
|
463
|
-
self.type("input", "dogs\n")
|
463
|
+
self.type("input", "dogs\n") # (The "\n" presses ENTER)
|
464
464
|
```
|
465
465
|
|
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
469
|
pytest coffee_cart_tests.py --rs
|
470
|
-
pytest test_sb_fixture.py
|
470
|
+
pytest test_sb_fixture.py --demo
|
471
471
|
pytest test_suite.py --rs --html=report.html --dashboard
|
472
472
|
|
473
473
|
pynose basic_test.py --mobile
|
@@ -506,12 +506,14 @@ pynose [FILE_NAME.py]:[CLASS_NAME].[METHOD_NAME]
|
|
506
506
|
|
507
507
|
✅ SeleniumBase supports all major browsers and operating systems:
|
508
508
|
<p><b>Browsers:</b> Chrome, Edge, Firefox, and Safari.</p>
|
509
|
-
<p><b>Systems
|
509
|
+
<p><b>Systems:</b> Linux/Ubuntu, macOS, and Windows.</p>
|
510
510
|
|
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> to speed up manual testing with automation while
|
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 manual testers handle validation.</p>
|
515
|
+
|
516
|
+
<p>✅ SeleniumBase supports <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples/offline_examples">running tests while offline</a> (<i>assuming webdrivers have previously been downloaded when online</i>).</p>
|
515
517
|
|
516
518
|
<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
519
|
|
@@ -553,7 +555,7 @@ pytest test_fail.py --pdb
|
|
553
555
|
pytest test_coffee_cart.py --trace
|
554
556
|
```
|
555
557
|
|
556
|
-
<a href="https://github.com/
|
558
|
+
<a href="https://github.com/mdmintz/pdbp"><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
559
|
|
558
560
|
|
559
561
|
<a id="command_line_options"></a>
|
@@ -681,9 +683,9 @@ pytest test_coffee_cart.py --trace
|
|
681
683
|
```bash
|
682
684
|
cd examples/
|
683
685
|
|
684
|
-
pytest test_suite.py --
|
686
|
+
pytest test_suite.py --chrome
|
685
687
|
|
686
|
-
pytest test_suite.py --
|
688
|
+
pytest test_suite.py --firefox
|
687
689
|
```
|
688
690
|
|
689
691
|
An easy way to override seleniumbase/config/settings.py is by using a custom settings file.
|
@@ -697,7 +699,7 @@ Inside your tests, you can use ``self.data`` to access that.
|
|
697
699
|
<a id="directory_configuration"></a>
|
698
700
|
<h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Directory Configuration:</h2>
|
699
701
|
|
700
|
-
🔵 When running tests with
|
702
|
+
🔵 When running tests with **``pytest``**, you'll want a copy of **[pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/pytest.ini)** in your root folders. When running tests with **``pynose``**, you'll want a copy of **[setup.cfg](https://github.com/seleniumbase/SeleniumBase/blob/master/setup.cfg)** in your root folders. These files specify default configuration details for tests. Test folders should also include a blank **[__init__.py](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/offline_examples/__init__.py)** file to allow your test files to import other files from that folder.
|
701
703
|
|
702
704
|
🔵 ``sbase mkdir DIR`` creates a folder with config files and sample tests:
|
703
705
|
|
@@ -1221,7 +1223,7 @@ self.execute_script("return jQuery('textarea')[2].value") # Returns the css "va
|
|
1221
1223
|
|
1222
1224
|
<h3>🔵 How to handle a restrictive CSP:</h3>
|
1223
1225
|
|
1224
|
-
|
1226
|
+
❗ Some websites have a restrictive [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) to prevent users from loading jQuery and other external libraries onto their websites. If you need to use jQuery or another JS library on those websites, add ``--disable-csp`` as a ``pytest`` command-line option to load a Chromium extension that bypasses the CSP.
|
1225
1227
|
|
1226
1228
|
<h3>🔵 More JavaScript fun:</h3>
|
1227
1229
|
|
@@ -1303,25 +1305,22 @@ pytest --reruns=1 --reruns-delay=1
|
|
1303
1305
|
<div><a href="https://github.com/seleniumbase/SeleniumBase/issues?q=is%3Aissue+is%3Aclosed"><img src="https://img.shields.io/github/issues-closed-raw/seleniumbase/SeleniumBase.svg?color=22BB88" title="Closed Issues" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/pulls?q=is%3Apr+is%3Aclosed"><img src="https://img.shields.io/github/issues-pr-closed/seleniumbase/SeleniumBase.svg?logo=github&logoColor=white&color=22BB99" title="Closed Pull Requests" /></a></div>
|
1304
1306
|
</p>
|
1305
1307
|
|
1306
|
-
<p>
|
1307
|
-
<div><b>If you like SeleniumBase, star us! ⭐</b></div>
|
1308
|
-
<div><a href="https://github.com/seleniumbase/SeleniumBase/stargazers"><img src="https://img.shields.io/github/stars/seleniumbase/seleniumbase.svg?color=19A57B" title="Stargazers" /></a></div>
|
1309
|
-
</p>
|
1310
|
-
|
1311
1308
|
<p align="left"><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>
|
1312
1309
|
|
1310
|
+
<p><div>
|
1311
|
+
<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="68" /></a></span>
|
1312
|
+
<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="62" /></a></span>
|
1313
|
+
<span><a href="https://www.facebook.com/SeleniumBase"><img src="https://seleniumbase.io/img/social/share_facebook.svg" title="SeleniumBase on Facebook" alt="SeleniumBase on Facebook" width="64" /></a></span>
|
1314
|
+
<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="50" /></a></span>
|
1315
|
+
</div></p>
|
1316
|
+
|
1313
1317
|
<p><div><a href="https://github.com/mdmintz">https://github.com/mdmintz</a></div></p>
|
1314
1318
|
|
1315
1319
|
<div><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/fancy_logo_14.png" title="SeleniumBase" width="220" /></a></div> <div><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-22BBCC.svg" title="SeleniumBase" /></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></div> <div><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://img.shields.io/badge/tested%20with-SeleniumBase-04C38E.svg" alt="Tested with SeleniumBase" /></a></div> <div><a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a></div>
|
1316
|
-
<
|
1317
|
-
|
1318
|
-
<p><div>
|
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>
|
1322
|
-
</div></p>
|
1320
|
+
<div><a href="https://pepy.tech/project/seleniumbase" target="_blank"><img src="https://pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" /></a></div>
|
1321
|
+
<div><a href="https://github.com/seleniumbase/SeleniumBase/stargazers"><img src="https://img.shields.io/github/stars/seleniumbase/seleniumbase.svg?color=19A57B" title="Stargazers" /></a></div>
|
1323
1322
|
|
1324
1323
|
--------
|
1325
1324
|
|
1326
1325
|
<p><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb.png" alt="SeleniumBase" title="SeleniumBase" width="300" /></a></p>
|
1327
|
-
<p><a href="https://
|
1326
|
+
<p><a href="https://pypi.org/project/seleniumbase/" target="_blank"><img src="https://img.shields.io/pypi/pyversions/seleniumbase.svg?color=22AAEE&logo=python&logoColor=FEDC54" title="Supported Python Versions" /></a></p>
|
@@ -17,7 +17,7 @@ class 私のテストクラス(セレニウムテストケース):
|
|
17
17
|
self.要素を確認する('img[alt="握り寿司"]')
|
18
18
|
self.JS入力("#searchInput", "レゴランド・ジャパン")
|
19
19
|
self.クリックして("#searchform button")
|
20
|
-
self.要素を確認する('img[
|
20
|
+
self.要素を確認する('img[src*="LEGOLAND_JAPAN"]')
|
21
21
|
self.リンクテキストを確認する("名古屋城")
|
22
22
|
self.リンクテキストをクリックします("テーマパーク")
|
23
23
|
self.テキストを確認する("テーマパーク", "#firstHeading")
|
@@ -11,7 +11,7 @@ class 테스트_클래스(셀레늄_테스트_케이스):
|
|
11
11
|
self.JS_입력("#searchform input", "김치")
|
12
12
|
self.클릭("#searchform button")
|
13
13
|
self.텍스트_확인("김치", "#firstHeading")
|
14
|
-
self.요소_확인('img[
|
14
|
+
self.요소_확인('img[src*="Various_kimchi.jpg"]')
|
15
15
|
self.링크_텍스트_확인("한국 요리")
|
16
16
|
self.JS_입력("#searchform input", "비빔밥")
|
17
17
|
self.클릭("#searchform button")
|
@@ -0,0 +1,52 @@
|
|
1
|
+
from pprint import pformat
|
2
|
+
from seleniumbase import BaseCase
|
3
|
+
|
4
|
+
if __name__ == "__main__":
|
5
|
+
from pytest import main
|
6
|
+
main([__file__, "--uc", "--uc-cdp", "--incognito", "-s"])
|
7
|
+
|
8
|
+
|
9
|
+
class CDPTests(BaseCase):
|
10
|
+
def add_cdp_listener(self):
|
11
|
+
# (To print everything, use "*". Otherwise select specific headers.)
|
12
|
+
# self.driver.add_cdp_listener("*", lambda data: print(pformat(data)))
|
13
|
+
self.driver.add_cdp_listener(
|
14
|
+
"Network.requestWillBeSentExtraInfo",
|
15
|
+
lambda data: print(pformat(data))
|
16
|
+
)
|
17
|
+
|
18
|
+
def verify_success(self):
|
19
|
+
self.assert_text("OH YEAH, you passed!", "h1", timeout=6.25)
|
20
|
+
self.sleep(2)
|
21
|
+
|
22
|
+
def fail_me(self):
|
23
|
+
self.fail('Selenium was detected! Try using: "pytest --uc"')
|
24
|
+
|
25
|
+
def test_display_cdp_events(self):
|
26
|
+
if not (self.undetectable and self.uc_cdp_events and self.incognito):
|
27
|
+
self.get_new_driver(
|
28
|
+
undetectable=True, uc_cdp_events=True, incognito=True
|
29
|
+
)
|
30
|
+
self.add_cdp_listener()
|
31
|
+
self.open("https://nowsecure.nl/#relax")
|
32
|
+
try:
|
33
|
+
self.verify_success()
|
34
|
+
except Exception:
|
35
|
+
self.clear_all_cookies()
|
36
|
+
self.get_new_driver(devtools=True)
|
37
|
+
self.add_cdp_listener()
|
38
|
+
self.open("https://nowsecure.nl/#relax")
|
39
|
+
try:
|
40
|
+
self.verify_success()
|
41
|
+
except Exception:
|
42
|
+
if self.is_element_visible('input[value*="Verify"]'):
|
43
|
+
self.click('input[value*="Verify"]')
|
44
|
+
elif self.is_element_visible('iframe[title*="challenge"]'):
|
45
|
+
self.switch_to_frame('iframe[title*="challenge"]')
|
46
|
+
self.click("span.mark")
|
47
|
+
else:
|
48
|
+
self.fail_me()
|
49
|
+
try:
|
50
|
+
self.verify_success()
|
51
|
+
except Exception:
|
52
|
+
self.fail_me()
|
@@ -5,12 +5,12 @@ from seleniumbase import BaseCase
|
|
5
5
|
|
6
6
|
if __name__ == "__main__":
|
7
7
|
from pytest import main
|
8
|
-
main([__file__, "--uc", "
|
8
|
+
main([__file__, "--uc", "-s"])
|
9
9
|
|
10
10
|
|
11
11
|
class UndetectedTest(BaseCase):
|
12
12
|
def verify_success(self):
|
13
|
-
self.assert_text("OH YEAH, you passed!", "h1", timeout=
|
13
|
+
self.assert_text("OH YEAH, you passed!", "h1", timeout=6.25)
|
14
14
|
self.post_message("Selenium wasn't detected!", duration=2.8)
|
15
15
|
self._print("\n Success! Website did not detect Selenium! ")
|
16
16
|
|
@@ -22,14 +22,20 @@ class UndetectedTest(BaseCase):
|
|
22
22
|
try:
|
23
23
|
self.verify_success()
|
24
24
|
except Exception:
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
self.switch_to_frame('iframe[title*="challenge"]')
|
29
|
-
self.click("span.mark")
|
30
|
-
else:
|
31
|
-
self.fail_me()
|
25
|
+
self.clear_all_cookies()
|
26
|
+
self.get_new_driver(devtools=True)
|
27
|
+
self.open("https://nowsecure.nl/#relax")
|
32
28
|
try:
|
33
29
|
self.verify_success()
|
34
30
|
except Exception:
|
35
|
-
self.
|
31
|
+
if self.is_element_visible('input[value*="Verify"]'):
|
32
|
+
self.click('input[value*="Verify"]')
|
33
|
+
elif self.is_element_visible('iframe[title*="challenge"]'):
|
34
|
+
self.switch_to_frame('iframe[title*="challenge"]')
|
35
|
+
self.click("span.mark")
|
36
|
+
else:
|
37
|
+
self.fail_me()
|
38
|
+
try:
|
39
|
+
self.verify_success()
|
40
|
+
except Exception:
|
41
|
+
self.fail_me()
|
@@ -546,7 +546,7 @@ class 私のテストクラス(セレニウムテストケース):
|
|
546
546
|
self.要素を確認する('img[alt="握り寿司"]')
|
547
547
|
self.JS入力("#searchInput", "レゴランド・ジャパン")
|
548
548
|
self.クリックして("#searchform button")
|
549
|
-
self.要素を確認する('img[
|
549
|
+
self.要素を確認する('img[src*="LEGOLAND_JAPAN"]')
|
550
550
|
self.リンクテキストを確認する("名古屋城")
|
551
551
|
self.リンクテキストをクリックします("テーマパーク")
|
552
552
|
self.テキストを確認する("テーマパーク", "#firstHeading")
|
@@ -572,7 +572,7 @@ class 테스트_클래스(셀레늄_테스트_케이스):
|
|
572
572
|
self.JS_입력("#searchform input", "김치")
|
573
573
|
self.클릭("#searchform button")
|
574
574
|
self.텍스트_확인("김치", "#firstHeading")
|
575
|
-
self.요소_확인('img[
|
575
|
+
self.요소_확인('img[src*="Various_kimchi.jpg"]')
|
576
576
|
self.링크_텍스트_확인("한국 요리")
|
577
577
|
self.JS_입력("#searchform input", "비빔밥")
|
578
578
|
self.클릭("#searchform button")
|
@@ -30,7 +30,7 @@ pynose==1.4.6
|
|
30
30
|
sniffio==1.3.0;python_version>="3.7"
|
31
31
|
h11==0.14.0;python_version>="3.7"
|
32
32
|
outcome==1.2.0;python_version>="3.7"
|
33
|
-
trio==0.22.
|
33
|
+
trio==0.22.2;python_version>="3.7"
|
34
34
|
trio-websocket==0.10.3;python_version>="3.7"
|
35
35
|
wsproto==1.2.0;python_version>="3.7"
|
36
36
|
selenium==3.141.0;python_version<"3.7"
|
@@ -1,5 +1,6 @@
|
|
1
1
|
""" SeleniumBase Exceptions
|
2
2
|
NoSuchFileException => Called when self.assert_downloaded_file(...) fails.
|
3
|
+
NoSuchOptionException => Called when select_option_by_*() lacks the option.
|
3
4
|
NotConnectedException => Called when Internet is not reachable when needed.
|
4
5
|
NotUsingChromeException => Used by Chrome-only methods if not using Chrome.
|
5
6
|
NotUsingChromiumException => Used by Chromium-only methods if not Chromium.
|
@@ -15,6 +16,10 @@ class NoSuchFileException(Exception):
|
|
15
16
|
pass
|
16
17
|
|
17
18
|
|
19
|
+
class NoSuchOptionException(Exception):
|
20
|
+
pass
|
21
|
+
|
22
|
+
|
18
23
|
class NotConnectedException(Exception):
|
19
24
|
pass
|
20
25
|
|
@@ -183,8 +183,8 @@ def main():
|
|
183
183
|
chart_options = '"circular", "barras", "columnas", "líneas", "área"'
|
184
184
|
|
185
185
|
import_line = "from seleniumbase import BaseCase"
|
186
|
+
main_line = "BaseCase.main(__name__, __file__)"
|
186
187
|
parent_class = "BaseCase"
|
187
|
-
class_line = "class MyTestClass(BaseCase):"
|
188
188
|
if language != "English":
|
189
189
|
from seleniumbase.translate.master_dict import MD_F
|
190
190
|
|
@@ -196,6 +196,7 @@ def main():
|
|
196
196
|
add_slide = '"<p>Chart Demo</p>" + self.extract_chart()'
|
197
197
|
data = []
|
198
198
|
data.append("%s" % import_line)
|
199
|
+
data.append("%s" % main_line)
|
199
200
|
data.append("")
|
200
201
|
data.append("")
|
201
202
|
data.append("%s" % class_line)
|
@@ -204,12 +205,12 @@ def main():
|
|
204
205
|
data.append("")
|
205
206
|
data.append(" # %s => %s" % (select_option, chart_options))
|
206
207
|
data.append(" self.create_pie_chart(%s)" % chart_settings)
|
207
|
-
data.append(' self.add_data_point("%s A",
|
208
|
-
data.append(' self.add_data_point("%s B",
|
209
|
-
data.append(' self.add_data_point("%s C",
|
210
|
-
data.append(' self.add_data_point("%s D",
|
211
|
-
data.append(' self.add_data_point("%s E",
|
212
|
-
data.append(' self.add_data_point("%s F",
|
208
|
+
data.append(' self.add_data_point("%s A", 36)' % item)
|
209
|
+
data.append(' self.add_data_point("%s B", 33)' % item)
|
210
|
+
data.append(' self.add_data_point("%s C", 27)' % item)
|
211
|
+
data.append(' self.add_data_point("%s D", 21)' % item)
|
212
|
+
data.append(' self.add_data_point("%s E", 18)' % item)
|
213
|
+
data.append(' self.add_data_point("%s F", 15)' % item)
|
213
214
|
data.append(" self.add_slide(%s)" % add_slide)
|
214
215
|
data.append("")
|
215
216
|
data.append(' self.begin_presentation(filename="%s")' % html_name)
|
@@ -243,6 +244,10 @@ def main():
|
|
243
244
|
# Example: self.assert_true("Name" in self.get_title())
|
244
245
|
line = new_line
|
245
246
|
continue
|
247
|
+
if main_line in line:
|
248
|
+
new_main = "%s.main(__name__, __file__)" % parent_class
|
249
|
+
new_line = line.replace(main_line, new_main)
|
250
|
+
found_swap = True
|
246
251
|
if found_swap:
|
247
252
|
if new_line.endswith(" # noqa"): # Remove flake8 skip
|
248
253
|
new_line = new_line[0 : -len(" # noqa")]
|
@@ -231,15 +231,14 @@ def main():
|
|
231
231
|
url = "data:text/html,<p>%s<br><input>" % hello
|
232
232
|
|
233
233
|
import_line = "from seleniumbase import BaseCase"
|
234
|
+
main_line = "BaseCase.main(__name__, __file__)"
|
234
235
|
parent_class = "BaseCase"
|
235
|
-
class_line = "class MyTestClass(BaseCase):"
|
236
236
|
if language != "English":
|
237
237
|
from seleniumbase.translate.master_dict import MD_F
|
238
238
|
|
239
239
|
import_line = MD_F.get_import_line(language)
|
240
240
|
parent_class = MD_F.get_lang_parent_class(language)
|
241
241
|
class_line = "class %s(%s):" % (class_name, parent_class)
|
242
|
-
main_line = "BaseCase.main(__name__, __file__)"
|
243
242
|
|
244
243
|
data = []
|
245
244
|
data.append("%s" % import_line)
|
@@ -194,8 +194,8 @@ def main():
|
|
194
194
|
class_name = "MiClaseDePrueba"
|
195
195
|
|
196
196
|
import_line = "from seleniumbase import BaseCase"
|
197
|
+
main_line = "BaseCase.main(__name__, __file__)"
|
197
198
|
parent_class = "BaseCase"
|
198
|
-
class_line = "class MyTestClass(BaseCase):"
|
199
199
|
if language != "English":
|
200
200
|
from seleniumbase.translate.master_dict import MD_F
|
201
201
|
|
@@ -223,6 +223,7 @@ def main():
|
|
223
223
|
|
224
224
|
data = []
|
225
225
|
data.append("%s" % import_line)
|
226
|
+
data.append("%s" % main_line)
|
226
227
|
data.append("")
|
227
228
|
data.append("")
|
228
229
|
data.append("%s" % class_line)
|
@@ -262,6 +263,10 @@ def main():
|
|
262
263
|
# Example: self.assert_true("Name" in self.get_title())
|
263
264
|
line = new_line
|
264
265
|
continue
|
266
|
+
if main_line in line:
|
267
|
+
new_main = "%s.main(__name__, __file__)" % parent_class
|
268
|
+
new_line = line.replace(main_line, new_main)
|
269
|
+
found_swap = True
|
265
270
|
if found_swap:
|
266
271
|
if new_line.endswith(" # noqa"): # Remove flake8 skip
|
267
272
|
new_line = new_line[0 : -len(" # noqa")]
|