seleniumbase 4.26.3__tar.gz → 4.27.0__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.26.3 → seleniumbase-4.27.0}/PKG-INFO +12 -9
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/README.md +1 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/hack_the_planet.py +9 -12
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/presenter/fundamentals.py +0 -1
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/raw_parameter_script.py +1 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/uc_cdp_events.py +1 -1
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/customizing_test_runs.md +1 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/method_summary.md +2 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/recorder_mode.md +2 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/requirements.txt +6 -6
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/requirements.txt +6 -5
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/ReadMe.md +1 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/run.py +2 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/sb_mkrec.py +39 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/sb_recorder.py +2 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/browser_launcher.py +63 -6
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/fixtures/base_case.py +68 -4
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/fixtures/constants.py +1 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/plugins/pytest_plugin.py +12 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/plugins/selenium_plugin.py +12 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/undetected/webelement.py +1 -1
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase.egg-info/PKG-INFO +12 -9
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase.egg-info/requires.txt +14 -8
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/setup.py +10 -8
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/.github/Workflows.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/.github/workflows/pages.yml +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/.github/workflows/python-nightly-mac.yml +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/.github/workflows/python-nightly-ubuntu.yml +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/.github/workflows/python-nightly-windows.yml +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/.github/workflows/python-package.yml +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/.gitignore +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/CHANGELOG.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/CNAME +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/CODE_OF_CONDUCT.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/CONTRIBUTING.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/Dockerfile +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/LICENSE +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/MANIFEST.in +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/SECURITY.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/_config.yml +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/azure-pipelines.yml +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/basic_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/behave_bdd/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/behave_bdd/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/behave_bdd/behave.ini +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/behave_bdd/features/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/behave_bdd/features/behave.ini +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/behave_bdd/features/calculator.feature +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/behave_bdd/features/environment.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/behave_bdd/features/fail_page.feature +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/behave_bdd/features/realworld.feature +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/behave_bdd/features/steps/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/behave_bdd/features/steps/calculator.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/behave_bdd/features/steps/fail_page.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/behave_bdd/features/steps/imported.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/behave_bdd/features/steps/swag_labs.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/behave_bdd/features/swag_labs.feature +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/base_test_case.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/boilerplate_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/classic_obj_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/page_objects.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/samples/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/samples/file_parsing/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/samples/file_parsing/parse_files.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/samples/file_parsing/qa_login_example.txt +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/samples/file_parsing/staging_login_example.txt +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/samples/google_objects.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/samples/google_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/samples/sb_swag_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/samples/swag_labs_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/samples/test_page_objects.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/boilerplates/sb_fixture_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/capabilities/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/capabilities/mac_cap_file.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/capabilities/sample_cap_file_BS.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/capabilities/sample_cap_file_SL.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/capabilities/selenoid_cap_file.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/capabilities/win10_cap_file.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/case_plans/basic_test.MyTestClass.test_basics.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/case_plans/my_first_test.MyTestClass.test_swag_labs.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/case_plans/shadow_root_test.ShadowRootTest.test_shadow_root.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/case_plans/test_assert_elements.ListAssertTests.test_assert_list_of_elements.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/case_plans/test_calculator.CalculatorTests.test_6_times_7_plus_12_equals_54.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/case_plans/test_demo_site.DemoSiteTests.test_demo_site.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/case_plans/test_login.SwagLabsLoginTests.test_swag_labs_login.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/case_plans/test_mfa_login.TestMFALogin.test_mfa_login.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/case_summary.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/chart_maker/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/chart_maker/chart_presentation.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/chart_maker/my_chart.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/chart_maker/pie_charts.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/chart_maker/test_area_chart.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/chart_maker/test_display_chart.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/chart_maker/test_line_chart.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/chart_maker/test_multi_series.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/chart_maker/test_save_chart.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/coffee_cart_tests.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/custom_settings.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/desktop_apps/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/desktop_apps/recorder.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/dialog_boxes/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/dialog_boxes/dialog_box_tour.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/edge_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/example_config.cfg +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/example_logs/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/example_logs/basic_test_info.txt +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/example_logs/page_source.html +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/example_logs/screenshot.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/github_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/gui_test_runner.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/handle_alert_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/iframe_tests.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/locale_code_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/master_qa/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/master_qa/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/master_qa/basic_masterqa_test_0.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/master_qa/masterqa_test_1.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/master_qa/pytest.ini +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/protractor/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/protractor/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/protractor/example_spec.js +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/protractor/example_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/protractor/input_spec.js +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/protractor/input_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/protractor/mat_paginator_spec.js +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/protractor/mat_paginator_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/raw_selenium/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/raw_selenium/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/raw_selenium/flaky_messy_raw.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/raw_selenium/long_messy_raw.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/raw_selenium/messy_raw.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/raw_selenium/pytest.ini +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/raw_selenium/refined_raw.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/migration/raw_selenium/simple_sbase.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/my_first_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/nth_child_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/offline_examples/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/offline_examples/demo_page.html +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/offline_examples/load_html_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/offline_examples/test_demo_page.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/offline_examples/test_handle_alerts.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/offline_examples/test_request_fixture.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/offline_examples/test_user_agent.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/old_wordle_script.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/parameterized_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/performance_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/presenter/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/presenter/core_presentation.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/presenter/edge_presentation.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/presenter/my_presentation.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/presenter/py_virtual_envs.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/proxy_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/pytest.ini +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/rate_limiting_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/raw_call.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/raw_driver_context.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/raw_file_call.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/raw_main_call.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/raw_sb.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/raw_test_scripts.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/raw_uc_mode.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/setup.cfg +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/shadow_root_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/swag_labs_user_tests.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_apple_site.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_assert_elements.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_calculator.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_canvas.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_checkboxes.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_chinese_pdf.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_chromedriver.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_coffee_cart.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_console_logging.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_contains_selector.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_cycle_elements.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_decryption.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_deferred_asserts.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_demo_site.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_detect_404s.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_docs_site.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_double_click.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_download_files.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_download_images.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_drag_and_drop.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_error_page.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_event_firing.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_fail.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_geolocation.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_get_coffee.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_get_locale_code.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_get_pdf_text.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_get_user_agent.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_hack_search.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_image_saving.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_inspect_html.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_login.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_markers.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_mfa_login.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_multiple_drivers.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_null.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_override_driver.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_override_sb_fixture.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_parse_soup.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_pdf_asserts.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_pytest_parametrize.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_repeat_tests.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_request_sb_fixture.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_save_screenshots.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_sb_fixture.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_scrape_bing.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_select_options.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_shadow_dom.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_show_file_choosers.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_skype_site.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_suite.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_swag_labs.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_tinymce.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_todomvc.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_url_asserts.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_usefixtures.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_verify_chromedriver.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_window_switching.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_xfail.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/test_xkcd.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/time_limit_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/tour_examples/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/tour_examples/bootstrap_google_tour.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/tour_examples/bootstrap_xkcd_tour.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/tour_examples/driverjs_maps_tour.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/tour_examples/google_tour.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/tour_examples/hopscotch_google_tour.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/tour_examples/introjs_google_tour.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/tour_examples/maps_introjs_tour.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/tour_examples/octocat_tour.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/tour_examples/shepherd_google_tour.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/tour_examples/xkcd_tour.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/translations/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/translations/chinese_test_1.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/translations/dutch_test_1.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/translations/english_test_1.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/translations/french_test_1.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/translations/italian_test_1.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/translations/japanese_test_1.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/translations/korean_test_1.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/translations/portuguese_test_1.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/translations/pytest.ini +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/translations/russian_test_1.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/translations/spanish_test_1.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/unit_tests/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/unit_tests/verify_framework.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/upgrade_chromedriver.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/upload_file_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/user_agent_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/verify_undetected.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/visual_testing/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/visual_testing/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/visual_testing/case_plans/layout_test.VisualLayoutTests.test_applitools_layout_change.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/visual_testing/case_plans/python_home_test.VisualLayoutTests.test_python_home_layout_change.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/visual_testing/case_plans/test_layout_fail.VisualLayoutFailureTests.test_applitools_change.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/visual_testing/case_plans/test_layout_fail.VisualLayoutFailureTests.test_xkcd_logo_change.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/visual_testing/case_plans/test_layout_fail.VisualLayout_FixtureTests.test_python_home_change.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/visual_testing/case_plans/xkcd_visual_test.VisualLayoutTests.test_xkcd_layout_change.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/visual_testing/layout_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/visual_testing/python_home_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/visual_testing/test_layout_fail.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/visual_testing/xkcd_visual_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/wordle_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/xpath_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/examples/youtube_search_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/behave_gui.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/case_plans.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/chinese.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/commander.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/demo_mode.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/desired_capabilities.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/features_list.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/handling_iframes.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/happy_customers.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/hidden_files_info.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/how_it_works.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/html_inspector.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/install.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/install_python_pip_git.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/js_package_manager.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/locale_codes.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/mobile_testing.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/mysql_installation.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/shadow_dom.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/syntax_formats.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/thank_you.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/translations.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/useful_grep_commands.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/using_safari_driver.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/verify_webdriver.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/virtualenv_instructions.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/help_docs/webdriver_installation.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/install.sh +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/azure/azure_pipelines/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/azure/jenkins/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/behave/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/behave/behave.ini +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/behave/features/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/behave/features/behave.ini +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/behave/features/calculator.feature +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/behave/features/environment.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/behave/features/fail_page.feature +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/behave/features/realworld.feature +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/behave/features/steps/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/behave/features/steps/calculator.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/behave/features/steps/fail_page.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/behave/features/steps/real_world.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/behave/features/steps/swag_labs.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/behave/features/swag_labs.feature +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/brython/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/brython/index.html +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/brython/index.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/brython/library.html +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/docker/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/docker/docker-entrypoint.sh +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/docker/run_docker_test_in_chrome.sh +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/github/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/github/workflows/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/github/workflows/extras.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/google_cloud/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/katalon/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/linux/Linuxfile.sh +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/linux/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/linux/Xvfb_launcher.sh +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/linux/jenkins_permissions.sh +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/linux/tomcat_permissions.sh +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/node_js/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/node_js/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/node_js/index.html +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/node_js/my_first_test.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/node_js/npm-shrinkwrap.json +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/node_js/package.json +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/node_js/server.js +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/node_js/test_demo_site.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/selenium_grid/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/integrations/selenium_ide/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs.yml +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/ReadMe.txt +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/docs_instructions.txt +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/dash_pie.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/dash_pie_2.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/dash_pie_3.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/favicon.ico +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/grad_logo.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/green_icon.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/green_logo.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/green_logo2.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/green_logo3.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/logo3.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/logo3a.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/logo3b.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/logo3c.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/logo4.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/logo5.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/logo6.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/logo7.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/sb_icon.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/sb_logo_10.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/sb_logo_7.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/side_by_side.png +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/social/share_facebook.svg +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/social/share_github.svg +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/social/share_gitter.svg +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/social/share_instagram.svg +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/img/social/share_twitter.svg +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/index.txt +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/mkdocs_build/prepare.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/pytest.ini +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/sbase/ReadMe.txt +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/sbase/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/sbase/__main__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/sbase/steps.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/common/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/drivers/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/extensions/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/masterqa/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/resources/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/resources/favicon.ico +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/selenium_grid/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/selenium_ide/ReadMe.md +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/setup.cfg +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/virtualenv_install.sh +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/win_install.bat +0 -0
- {seleniumbase-4.26.3 → seleniumbase-4.27.0}/win_virtualenv.bat +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.
|
3
|
+
Version: 4.27.0
|
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,7 +70,7 @@ Requires-Dist: exceptiongroup>=1.2.1
|
|
70
70
|
Requires-Dist: filelock>=3.12.2; python_version < "3.8"
|
71
71
|
Requires-Dist: filelock>=3.14.0; python_version >= "3.8"
|
72
72
|
Requires-Dist: platformdirs>=4.0.0; python_version < "3.8"
|
73
|
-
Requires-Dist: platformdirs>=4.2.
|
73
|
+
Requires-Dist: platformdirs>=4.2.2; python_version >= "3.8"
|
74
74
|
Requires-Dist: typing-extensions>=4.11.0; python_version >= "3.8"
|
75
75
|
Requires-Dist: parse>=1.20.1
|
76
76
|
Requires-Dist: parse-type>=0.6.2
|
@@ -87,11 +87,11 @@ Requires-Dist: sniffio==1.3.1
|
|
87
87
|
Requires-Dist: h11==0.14.0
|
88
88
|
Requires-Dist: outcome==1.3.0.post0
|
89
89
|
Requires-Dist: trio==0.22.2; python_version < "3.8"
|
90
|
-
Requires-Dist: trio==0.25.
|
90
|
+
Requires-Dist: trio==0.25.1; python_version >= "3.8"
|
91
91
|
Requires-Dist: trio-websocket==0.11.1
|
92
92
|
Requires-Dist: wsproto==1.2.0
|
93
93
|
Requires-Dist: selenium==4.11.2; python_version < "3.8"
|
94
|
-
Requires-Dist: selenium==4.
|
94
|
+
Requires-Dist: selenium==4.21.0; python_version >= "3.8"
|
95
95
|
Requires-Dist: cssselect==1.2.0
|
96
96
|
Requires-Dist: sortedcontainers==2.4.0
|
97
97
|
Requires-Dist: fasteners==0.19
|
@@ -117,7 +117,8 @@ Requires-Dist: behave==1.2.6
|
|
117
117
|
Requires-Dist: soupsieve==2.4.1; python_version < "3.8"
|
118
118
|
Requires-Dist: soupsieve==2.5; python_version >= "3.8"
|
119
119
|
Requires-Dist: beautifulsoup4==4.12.3
|
120
|
-
Requires-Dist: pygments==2.17.2
|
120
|
+
Requires-Dist: pygments==2.17.2; python_version < "3.8"
|
121
|
+
Requires-Dist: pygments==2.18.0; python_version >= "3.8"
|
121
122
|
Requires-Dist: pyreadline3==3.4.1; platform_system == "Windows"
|
122
123
|
Requires-Dist: tabcompleter==1.3.0
|
123
124
|
Requires-Dist: pdbp==1.5.0
|
@@ -133,7 +134,7 @@ Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
|
|
133
134
|
Requires-Dist: allure-behave>=2.13.5; extra == "allure"
|
134
135
|
Provides-Extra: coverage
|
135
136
|
Requires-Dist: coverage==7.2.7; python_version < "3.8" and extra == "coverage"
|
136
|
-
Requires-Dist: coverage>=7.5.
|
137
|
+
Requires-Dist: coverage>=7.5.1; python_version >= "3.8" and extra == "coverage"
|
137
138
|
Requires-Dist: pytest-cov==4.1.0; python_version < "3.8" and extra == "coverage"
|
138
139
|
Requires-Dist: pytest-cov>=5.0.0; python_version >= "3.8" and extra == "coverage"
|
139
140
|
Provides-Extra: flake8
|
@@ -151,7 +152,7 @@ Provides-Extra: pdfminer
|
|
151
152
|
Requires-Dist: pdfminer.six==20221105; python_version < "3.8" and extra == "pdfminer"
|
152
153
|
Requires-Dist: pdfminer.six==20231228; python_version >= "3.8" and extra == "pdfminer"
|
153
154
|
Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
|
154
|
-
Requires-Dist: cryptography==42.0.
|
155
|
+
Requires-Dist: cryptography==42.0.7; python_version >= "3.9" and extra == "pdfminer"
|
155
156
|
Requires-Dist: cffi==1.15.1; python_version < "3.8" and extra == "pdfminer"
|
156
157
|
Requires-Dist: cffi==1.16.0; python_version >= "3.8" and extra == "pdfminer"
|
157
158
|
Requires-Dist: pycparser==2.22; extra == "pdfminer"
|
@@ -161,7 +162,7 @@ Requires-Dist: Pillow>=10.3.0; python_version >= "3.8" and extra == "pillow"
|
|
161
162
|
Provides-Extra: pip-system-certs
|
162
163
|
Requires-Dist: pip-system-certs==4.0; platform_system == "Windows" and extra == "pip-system-certs"
|
163
164
|
Provides-Extra: proxy
|
164
|
-
Requires-Dist: proxy.py==2.4.
|
165
|
+
Requires-Dist: proxy.py==2.4.4; extra == "proxy"
|
165
166
|
Provides-Extra: psutil
|
166
167
|
Requires-Dist: psutil==5.9.8; extra == "psutil"
|
167
168
|
Provides-Extra: selenium-stealth
|
@@ -174,7 +175,8 @@ Requires-Dist: h2==4.1.0; extra == "selenium-wire"
|
|
174
175
|
Requires-Dist: hpack==4.0.0; extra == "selenium-wire"
|
175
176
|
Requires-Dist: hyperframe==6.0.1; extra == "selenium-wire"
|
176
177
|
Requires-Dist: kaitaistruct==0.10; extra == "selenium-wire"
|
177
|
-
Requires-Dist: pyasn1==0.5.1; extra == "selenium-wire"
|
178
|
+
Requires-Dist: pyasn1==0.5.1; python_version < "3.8" and extra == "selenium-wire"
|
179
|
+
Requires-Dist: pyasn1==0.6.0; python_version >= "3.8" and extra == "selenium-wire"
|
178
180
|
Requires-Dist: zstandard==0.22.0; extra == "selenium-wire"
|
179
181
|
|
180
182
|
<!-- SeleniumBase Docs -->
|
@@ -844,6 +846,7 @@ pytest test_coffee_cart.py --trace
|
|
844
846
|
--block-images # (Block images from loading during tests.)
|
845
847
|
--do-not-track # (Indicate to websites that you don't want to be tracked.)
|
846
848
|
--verify-delay=SECONDS # (The delay before MasterQA verification checks.)
|
849
|
+
--ee | --esc-end # (Lets the user end the current test via the ESC key.)
|
847
850
|
--recorder # (Enables the Recorder for turning browser actions into code.)
|
848
851
|
--rec-behave # (Same as Recorder Mode, but also generates behave-gherkin.)
|
849
852
|
--rec-sleep # (If the Recorder is enabled, also records self.sleep calls.)
|
@@ -671,6 +671,7 @@ pytest test_coffee_cart.py --trace
|
|
671
671
|
--block-images # (Block images from loading during tests.)
|
672
672
|
--do-not-track # (Indicate to websites that you don't want to be tracked.)
|
673
673
|
--verify-delay=SECONDS # (The delay before MasterQA verification checks.)
|
674
|
+
--ee | --esc-end # (Lets the user end the current test via the ESC key.)
|
674
675
|
--recorder # (Enables the Recorder for turning browser actions into code.)
|
675
676
|
--rec-behave # (Same as Recorder Mode, but also generates behave-gherkin.)
|
676
677
|
--rec-sleep # (If the Recorder is enabled, also records self.sleep calls.)
|
@@ -86,14 +86,11 @@ class HackTests(BaseCase):
|
|
86
86
|
self.highlight('form[role="search"]', loops=8)
|
87
87
|
|
88
88
|
self.open("https://github.com/features/actions")
|
89
|
-
self.set_text_content(
|
90
|
-
self.set_text_content("
|
91
|
-
self.
|
92
|
-
self.
|
93
|
-
self.
|
94
|
-
self.set_text_content("h1 span:nth-of-type(5)", "US")
|
95
|
-
self.highlight('a[href="/pricing"]', loops=6, scroll=False)
|
96
|
-
self.highlight("h1.h2-mktg", loops=7, scroll=False)
|
89
|
+
self.set_text_content("h2.h2-mktg", aybabtu)
|
90
|
+
self.set_text_content("a.btn-large-mktg", aybabtu)
|
91
|
+
self.highlight("h2.h2-mktg", loops=8, scroll=False)
|
92
|
+
self.scroll_to("h2.h2-mktg")
|
93
|
+
self.highlight("a.btn-large-mktg", loops=8, scroll=False)
|
97
94
|
|
98
95
|
self.open("https://dev.to/top/infinity")
|
99
96
|
self.click_if_visible('button[aria-label="Close campaign banner"]')
|
@@ -290,14 +287,14 @@ class HackTests(BaseCase):
|
|
290
287
|
self.highlight("h1", loops=10, scroll=False)
|
291
288
|
|
292
289
|
self.open("https://wordpress.com/")
|
293
|
-
zoom_out = "h1
|
290
|
+
zoom_out = "h1{zoom: 0.8;-moz-transform: scale(0.8);}"
|
294
291
|
self.add_css_style(zoom_out)
|
295
292
|
zoom_in = "a.wp-element-button{zoom: 1.4;-moz-transform: scale(1.4);}"
|
296
293
|
self.add_css_style(zoom_in)
|
297
|
-
self.set_text_content("h1
|
294
|
+
self.set_text_content("h1", aybabtu)
|
298
295
|
self.set_text_content("a.wp-element-button", "Use SeleniumBase!")
|
299
|
-
self.highlight("h1
|
300
|
-
self.highlight("a.wp-element-button", loops=
|
296
|
+
self.highlight("h1", loops=8, scroll=False)
|
297
|
+
self.highlight("a.wp-element-button", loops=8, scroll=False)
|
301
298
|
|
302
299
|
self.open("https://seleniumbase.com/")
|
303
300
|
self.set_text_content("h1", aybabtu)
|
@@ -14,7 +14,7 @@ class CDPTests(BaseCase):
|
|
14
14
|
|
15
15
|
def click_turnstile_and_verify(sb):
|
16
16
|
sb.switch_to_frame("iframe")
|
17
|
-
sb.driver.uc_click("span
|
17
|
+
sb.driver.uc_click("span")
|
18
18
|
sb.assert_element("img#captcha-success", timeout=3)
|
19
19
|
sb.highlight("img#captcha-success", loops=8)
|
20
20
|
|
@@ -164,6 +164,7 @@ pytest my_first_test.py --settings-file=custom_settings.py
|
|
164
164
|
--block-images # (Block images from loading during tests.)
|
165
165
|
--do-not-track # (Indicate to websites that you don't want to be tracked.)
|
166
166
|
--verify-delay=SECONDS # (The delay before MasterQA verification checks.)
|
167
|
+
--ee | --esc-end # (Lets the user end the current test via the ESC key.)
|
167
168
|
--recorder # (Enables the Recorder for turning browser actions into code.)
|
168
169
|
--rec-behave # (Same as Recorder Mode, but also generates behave-gherkin.)
|
169
170
|
--rec-sleep # (If the Recorder is enabled, also records self.sleep calls.)
|
@@ -1046,6 +1046,8 @@ driver.uc_open_with_tab(url) # (New tab with default reconnect_time)
|
|
1046
1046
|
|
1047
1047
|
driver.uc_open_with_reconnect(url, reconnect_time=None) # (New tab)
|
1048
1048
|
|
1049
|
+
driver.uc_open_with_disconnect(url) # Open in new tab + disconnect()
|
1050
|
+
|
1049
1051
|
driver.reconnect(timeout) # disconnect() + sleep(timeout) + connect()
|
1050
1052
|
|
1051
1053
|
driver.disconnect() # Stops the webdriver service to prevent detection
|
@@ -121,6 +121,8 @@ pytest TEST_NAME.py --trace --rec -s
|
|
121
121
|
|
122
122
|
⏺️ Inside recorded tests, you might find the <code>self.open_if_not_url(URL)</code> method, which opens the URL given if the browser is not currently on that page. SeleniumBase uses this method in recorded scripts when the Recorder detects that a browser action changed the current URL. This method prevents an unnecessary page load and shows what page the test visited after a browser action.
|
123
123
|
|
124
|
+
⏺️ By launching the Recorder App with <code>sbase recorder --ee</code>, you can end the recording by pressing {<code>SHIFT</code>+<code>ESC</code>} instead of the usual way of ending the recording by typing <code>c</code> from a <code>breakpoint()</code> and pressing <code>Enter</code>. Those buttons don't need to be pressed at the same time, but <code>SHIFT</code> must be pressed directly before <code>ESC</code>.
|
125
|
+
|
124
126
|
--------
|
125
127
|
|
126
128
|
<div>To learn more about SeleniumBase, check out the Docs Site:</div>
|
@@ -1,26 +1,26 @@
|
|
1
1
|
# mkdocs dependencies for generating the seleniumbase.io website
|
2
2
|
# Minimum Python version: 3.8 (for generating docs only)
|
3
3
|
|
4
|
-
regex>=2024.
|
4
|
+
regex>=2024.5.15
|
5
5
|
pymdown-extensions>=10.8.1
|
6
|
-
pipdeptree>=2.
|
6
|
+
pipdeptree>=2.20.0
|
7
7
|
python-dateutil>=2.8.2
|
8
8
|
Markdown==3.6
|
9
9
|
markdown2==2.4.13
|
10
10
|
MarkupSafe==2.1.5
|
11
|
-
Jinja2==3.1.
|
11
|
+
Jinja2==3.1.4
|
12
12
|
click==8.1.7
|
13
13
|
ghp-import==2.1.0
|
14
14
|
watchdog==4.0.0
|
15
15
|
cairocffi==1.7.0
|
16
16
|
pathspec==0.12.1
|
17
|
-
Babel==2.
|
17
|
+
Babel==2.15.0
|
18
18
|
paginate==0.5.6
|
19
|
-
lxml==5.2.
|
19
|
+
lxml==5.2.2
|
20
20
|
pyquery==2.0.0
|
21
21
|
readtime==3.0.0
|
22
22
|
mkdocs==1.6.0
|
23
|
-
mkdocs-material==9.5.
|
23
|
+
mkdocs-material==9.5.23
|
24
24
|
mkdocs-exclude-search==0.6.6
|
25
25
|
mkdocs-simple-hooks==0.1.5
|
26
26
|
mkdocs-material-extensions==1.3.1
|
@@ -10,7 +10,7 @@ exceptiongroup>=1.2.1
|
|
10
10
|
filelock>=3.12.2;python_version<"3.8"
|
11
11
|
filelock>=3.14.0;python_version>="3.8"
|
12
12
|
platformdirs>=4.0.0;python_version<"3.8"
|
13
|
-
platformdirs>=4.2.
|
13
|
+
platformdirs>=4.2.2;python_version>="3.8"
|
14
14
|
typing-extensions>=4.11.0;python_version>="3.8"
|
15
15
|
parse>=1.20.1
|
16
16
|
parse-type>=0.6.2
|
@@ -27,11 +27,11 @@ sniffio==1.3.1
|
|
27
27
|
h11==0.14.0
|
28
28
|
outcome==1.3.0.post0
|
29
29
|
trio==0.22.2;python_version<"3.8"
|
30
|
-
trio==0.25.
|
30
|
+
trio==0.25.1;python_version>="3.8"
|
31
31
|
trio-websocket==0.11.1
|
32
32
|
wsproto==1.2.0
|
33
33
|
selenium==4.11.2;python_version<"3.8"
|
34
|
-
selenium==4.
|
34
|
+
selenium==4.21.0;python_version>="3.8"
|
35
35
|
cssselect==1.2.0
|
36
36
|
sortedcontainers==2.4.0
|
37
37
|
fasteners==0.19
|
@@ -57,7 +57,8 @@ behave==1.2.6
|
|
57
57
|
soupsieve==2.4.1;python_version<"3.8"
|
58
58
|
soupsieve==2.5;python_version>="3.8"
|
59
59
|
beautifulsoup4==4.12.3
|
60
|
-
pygments==2.17.2
|
60
|
+
pygments==2.17.2;python_version<"3.8"
|
61
|
+
pygments==2.18.0;python_version>="3.8"
|
61
62
|
pyreadline3==3.4.1;platform_system=="Windows"
|
62
63
|
tabcompleter==1.3.0
|
63
64
|
pdbp==1.5.0
|
@@ -72,7 +73,7 @@ rich==13.7.1
|
|
72
73
|
# ("pip install -r requirements.txt" also installs this, but "pip install -e ." won't.)
|
73
74
|
|
74
75
|
coverage==7.2.7;python_version<"3.8"
|
75
|
-
coverage>=7.5.
|
76
|
+
coverage>=7.5.1;python_version>="3.8"
|
76
77
|
pytest-cov==4.1.0;python_version<"3.8"
|
77
78
|
pytest-cov>=5.0.0;python_version>="3.8"
|
78
79
|
flake8==5.0.4;python_version<"3.9"
|
@@ -1,2 +1,2 @@
|
|
1
1
|
# seleniumbase package
|
2
|
-
__version__ = "4.
|
2
|
+
__version__ = "4.27.0"
|
@@ -406,6 +406,7 @@ sbase codegen new_test.py --url=wikipedia.org
|
|
406
406
|
``--edge`` (Use Edge browser instead of Chrome.)
|
407
407
|
``--gui`` / ``--headed`` (Use headed mode on Linux.)
|
408
408
|
``--uc`` / ``--undetected`` (Use undetectable mode.)
|
409
|
+
``--ee`` (Use SHIFT + ESC to end the recording.)
|
409
410
|
``--overwrite`` (Overwrite file when it exists.)
|
410
411
|
``--behave`` (Also output Behave/Gherkin files.)
|
411
412
|
|
@@ -310,6 +310,7 @@ def show_mkrec_usage():
|
|
310
310
|
print(" --edge (Use Edge browser instead of Chrome.)")
|
311
311
|
print(" --gui / --headed (Use headed mode on Linux.)")
|
312
312
|
print(" --uc / --undetected (Use undetectable mode.)")
|
313
|
+
print(" --ee (Use SHIFT + ESC to end the recording.)")
|
313
314
|
print(" --overwrite (Overwrite file when it exists.)")
|
314
315
|
print(" --behave (Also output Behave/Gherkin files.)")
|
315
316
|
print(" Output:")
|
@@ -336,6 +337,7 @@ def show_codegen_usage():
|
|
336
337
|
print(" --edge (Use Edge browser instead of Chrome.)")
|
337
338
|
print(" --gui / --headed (Use headed mode on Linux.)")
|
338
339
|
print(" --uc / --undetected (Use undetectable mode.)")
|
340
|
+
print(" --ee (Use SHIFT + ESC to end the recording.)")
|
339
341
|
print(" --overwrite (Overwrite file when it exists.)")
|
340
342
|
print(" --behave (Also output Behave/Gherkin files.)")
|
341
343
|
print(" Output:")
|
@@ -93,6 +93,7 @@ def main():
|
|
93
93
|
invalid_cmd = None
|
94
94
|
use_edge = False
|
95
95
|
use_uc = False
|
96
|
+
esc_end = False
|
96
97
|
start_page = None
|
97
98
|
next_is_url = False
|
98
99
|
use_colors = True
|
@@ -145,6 +146,8 @@ def main():
|
|
145
146
|
help_me = True
|
146
147
|
elif option.lower() == "--edge":
|
147
148
|
use_edge = True
|
149
|
+
elif option.lower() == "--ee":
|
150
|
+
esc_end = True
|
148
151
|
elif option.lower() in ("--gui", "--headed"):
|
149
152
|
if "linux" in sys.platform:
|
150
153
|
force_gui = True
|
@@ -183,6 +186,42 @@ def main():
|
|
183
186
|
data.append(' # type "c", and press [Enter].')
|
184
187
|
data.append(" import pdb; pdb.set_trace()")
|
185
188
|
data.append("")
|
189
|
+
|
190
|
+
if esc_end:
|
191
|
+
msg = ">>> Use [SHIFT + ESC] in the browser to end recording!"
|
192
|
+
d2 = []
|
193
|
+
d2.append("from seleniumbase import BaseCase")
|
194
|
+
d2.append("")
|
195
|
+
d2.append("")
|
196
|
+
d2.append("class RecorderTest(BaseCase):")
|
197
|
+
d2.append(" def test_recording(self):")
|
198
|
+
d2.append(" if self.recorder_ext:")
|
199
|
+
d2.append(" print(")
|
200
|
+
d2.append(' "\\n\\n%s\\n"' % msg)
|
201
|
+
d2.append(" )")
|
202
|
+
d2.append(' script = self._get_rec_shift_esc_script()')
|
203
|
+
d2.append(' esc = "return document.sb_esc_end;"')
|
204
|
+
d2.append(" start_time = self.time()")
|
205
|
+
d2.append(" last_handles_num = self._get_num_handles()")
|
206
|
+
d2.append(" for i in range(1200):")
|
207
|
+
d2.append(" try:")
|
208
|
+
d2.append(" self.execute_script(script)")
|
209
|
+
d2.append(" handles_num = self._get_num_handles()")
|
210
|
+
d2.append(" if handles_num < 1:")
|
211
|
+
d2.append(" return")
|
212
|
+
d2.append(" elif handles_num != last_handles_num:")
|
213
|
+
d2.append(" self.switch_to_window(-1)")
|
214
|
+
d2.append(" last_handles_num = handles_num")
|
215
|
+
d2.append(' if self.execute_script(esc) == "yes":')
|
216
|
+
d2.append(" return")
|
217
|
+
d2.append(" elif self.time() - start_time > 600:")
|
218
|
+
d2.append(" return")
|
219
|
+
d2.append(" self.sleep(0.5)")
|
220
|
+
d2.append(" except Exception:")
|
221
|
+
d2.append(" return")
|
222
|
+
d2.append("")
|
223
|
+
data = d2
|
224
|
+
|
186
225
|
file = codecs.open(file_path, "w+", "utf-8")
|
187
226
|
file.writelines("\r\n".join(data))
|
188
227
|
file.close()
|
@@ -162,6 +162,8 @@ def do_recording(file_name, url, overwrite_enabled, use_chrome, window):
|
|
162
162
|
or "--undetectable" in command_args
|
163
163
|
):
|
164
164
|
command += " --uc"
|
165
|
+
if "--ee" in command_args:
|
166
|
+
command += " --ee"
|
165
167
|
command += add_on
|
166
168
|
poll = None
|
167
169
|
if sb_config.rec_subprocess_used:
|
@@ -443,8 +443,32 @@ def uc_open_with_reconnect(driver, url, reconnect_time=None):
|
|
443
443
|
js_utils.call_me_later(driver, script, 3)
|
444
444
|
time.sleep(0.007)
|
445
445
|
driver.close()
|
446
|
-
|
447
|
-
|
446
|
+
if reconnect_time == "disconnect":
|
447
|
+
driver.disconnect()
|
448
|
+
time.sleep(0.007)
|
449
|
+
else:
|
450
|
+
driver.reconnect(reconnect_time)
|
451
|
+
driver.switch_to.window(driver.window_handles[-1])
|
452
|
+
else:
|
453
|
+
driver.default_get(url) # The original one
|
454
|
+
return None
|
455
|
+
|
456
|
+
|
457
|
+
def uc_open_with_disconnect(driver, url):
|
458
|
+
"""Open a url and disconnect chromedriver.
|
459
|
+
Note: You can't perform Selenium actions again
|
460
|
+
until after you've called driver.connect()."""
|
461
|
+
if url.startswith("//"):
|
462
|
+
url = "https:" + url
|
463
|
+
elif ":" not in url:
|
464
|
+
url = "https://" + url
|
465
|
+
if (url.startswith("http:") or url.startswith("https:")):
|
466
|
+
script = 'window.open("%s","_blank");' % url
|
467
|
+
js_utils.call_me_later(driver, script, 3)
|
468
|
+
time.sleep(0.007)
|
469
|
+
driver.close()
|
470
|
+
driver.disconnect()
|
471
|
+
time.sleep(0.007)
|
448
472
|
else:
|
449
473
|
driver.default_get(url) # The original one
|
450
474
|
return None
|
@@ -1748,14 +1772,28 @@ def get_remote_driver(
|
|
1748
1772
|
pip_find_lock = fasteners.InterProcessLock(
|
1749
1773
|
constants.PipInstall.FINDLOCK
|
1750
1774
|
)
|
1751
|
-
with pip_find_lock:
|
1775
|
+
with pip_find_lock: # Prevent issues with multiple processes
|
1752
1776
|
try:
|
1753
1777
|
from seleniumwire import webdriver
|
1778
|
+
import blinker
|
1779
|
+
try:
|
1780
|
+
use_blinker_ver = constants.SeleniumWire.BLINKER_VER
|
1781
|
+
if blinker.__version__ != use_blinker_ver:
|
1782
|
+
shared_utils.pip_install(
|
1783
|
+
"blinker", version=use_blinker_ver
|
1784
|
+
)
|
1785
|
+
except Exception:
|
1786
|
+
pass
|
1787
|
+
del blinker
|
1754
1788
|
except Exception:
|
1789
|
+
shared_utils.pip_install(
|
1790
|
+
"blinker", version=constants.SeleniumWire.BLINKER_VER
|
1791
|
+
)
|
1755
1792
|
shared_utils.pip_install(
|
1756
1793
|
"selenium-wire", version=constants.SeleniumWire.VER
|
1757
1794
|
)
|
1758
1795
|
from seleniumwire import webdriver
|
1796
|
+
warnings.simplefilter("ignore", category=DeprecationWarning)
|
1759
1797
|
else:
|
1760
1798
|
from selenium import webdriver
|
1761
1799
|
|
@@ -2162,17 +2200,31 @@ def get_local_driver(
|
|
2162
2200
|
downloads_path = DOWNLOADS_FOLDER
|
2163
2201
|
b_path = binary_location
|
2164
2202
|
if use_wire:
|
2165
|
-
|
2166
|
-
constants.
|
2203
|
+
pip_find_lock = fasteners.InterProcessLock(
|
2204
|
+
constants.PipInstall.FINDLOCK
|
2167
2205
|
)
|
2168
|
-
with
|
2206
|
+
with pip_find_lock: # Prevent issues with multiple processes
|
2169
2207
|
try:
|
2170
2208
|
from seleniumwire import webdriver
|
2209
|
+
import blinker
|
2210
|
+
try:
|
2211
|
+
use_blinker_ver = constants.SeleniumWire.BLINKER_VER
|
2212
|
+
if blinker.__version__ != use_blinker_ver:
|
2213
|
+
shared_utils.pip_install(
|
2214
|
+
"blinker", version=use_blinker_ver
|
2215
|
+
)
|
2216
|
+
except Exception:
|
2217
|
+
pass
|
2218
|
+
del blinker
|
2171
2219
|
except Exception:
|
2220
|
+
shared_utils.pip_install(
|
2221
|
+
"blinker", version=constants.SeleniumWire.BLINKER_VER
|
2222
|
+
)
|
2172
2223
|
shared_utils.pip_install(
|
2173
2224
|
"selenium-wire", version=constants.SeleniumWire.VER
|
2174
2225
|
)
|
2175
2226
|
from seleniumwire import webdriver
|
2227
|
+
warnings.simplefilter("ignore", category=DeprecationWarning)
|
2176
2228
|
else:
|
2177
2229
|
from selenium import webdriver
|
2178
2230
|
|
@@ -3754,6 +3806,11 @@ def get_local_driver(
|
|
3754
3806
|
driver, *args, **kwargs
|
3755
3807
|
)
|
3756
3808
|
)
|
3809
|
+
driver.uc_open_with_disconnect = (
|
3810
|
+
lambda *args, **kwargs: uc_open_with_disconnect(
|
3811
|
+
driver, *args, **kwargs
|
3812
|
+
)
|
3813
|
+
)
|
3757
3814
|
driver.uc_click = lambda *args, **kwargs: uc_click(
|
3758
3815
|
driver, *args, **kwargs
|
3759
3816
|
)
|
@@ -114,6 +114,7 @@ class BaseCase(unittest.TestCase):
|
|
114
114
|
]
|
115
115
|
self.version_tuple = tuple(self.version_list)
|
116
116
|
self.version_info = self.version_tuple
|
117
|
+
self.time = time.time
|
117
118
|
self.__page_sources = []
|
118
119
|
self.__extra_actions = []
|
119
120
|
self.__js_start_time = 0
|
@@ -381,6 +382,7 @@ class BaseCase(unittest.TestCase):
|
|
381
382
|
self, selector, by="css selector", timeout=None, delay=0, scroll=True
|
382
383
|
):
|
383
384
|
self.__check_scope()
|
385
|
+
self.__skip_if_esc()
|
384
386
|
if not timeout:
|
385
387
|
timeout = settings.SMALL_TIMEOUT
|
386
388
|
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
|
@@ -671,6 +673,7 @@ class BaseCase(unittest.TestCase):
|
|
671
673
|
self.__demo_mode_pause_if_active(tiny=True)
|
672
674
|
elif self.slow_mode:
|
673
675
|
self.__slow_mode_pause_if_active()
|
676
|
+
self.__set_esc_skip()
|
674
677
|
|
675
678
|
def slow_click(self, selector, by="css selector", timeout=None):
|
676
679
|
"""Similar to click(), but pauses for a brief moment before clicking.
|
@@ -1586,6 +1589,7 @@ class BaseCase(unittest.TestCase):
|
|
1586
1589
|
def click_link_text(self, link_text, timeout=None):
|
1587
1590
|
"""This method clicks link text on a page."""
|
1588
1591
|
self.__check_scope()
|
1592
|
+
self.__skip_if_esc()
|
1589
1593
|
if not timeout:
|
1590
1594
|
timeout = settings.SMALL_TIMEOUT
|
1591
1595
|
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
|
@@ -4142,6 +4146,10 @@ class BaseCase(unittest.TestCase):
|
|
4142
4146
|
self.uc_open_with_tab = new_driver.uc_open_with_tab
|
4143
4147
|
if hasattr(new_driver, "uc_open_with_reconnect"):
|
4144
4148
|
self.uc_open_with_reconnect = new_driver.uc_open_with_reconnect
|
4149
|
+
if hasattr(new_driver, "uc_open_with_disconnect"):
|
4150
|
+
self.uc_open_with_disconnect = (
|
4151
|
+
new_driver.uc_open_with_disconnect
|
4152
|
+
)
|
4145
4153
|
if hasattr(new_driver, "reconnect"):
|
4146
4154
|
self.reconnect = new_driver.reconnect
|
4147
4155
|
if hasattr(new_driver, "disconnect"):
|
@@ -4404,11 +4412,35 @@ class BaseCase(unittest.TestCase):
|
|
4404
4412
|
for cookie_dict in cookies:
|
4405
4413
|
self.driver.add_cookie(cookie_dict)
|
4406
4414
|
|
4415
|
+
def __set_esc_skip(self):
|
4416
|
+
if hasattr(self, "esc_end") and self.esc_end:
|
4417
|
+
script = (
|
4418
|
+
"""document.onkeydown = function(evt) {
|
4419
|
+
evt = evt || window.event;
|
4420
|
+
var isEscape = false;
|
4421
|
+
if ("key" in evt) {
|
4422
|
+
isEscape = (evt.key === "Escape" || evt.key === "Esc");
|
4423
|
+
} else {
|
4424
|
+
isEscape = (evt.keyCode === 27);
|
4425
|
+
}
|
4426
|
+
if (isEscape) {
|
4427
|
+
document.sb_esc_end = 'yes';
|
4428
|
+
}
|
4429
|
+
};"""
|
4430
|
+
)
|
4431
|
+
self.execute_script(script)
|
4432
|
+
|
4433
|
+
def __skip_if_esc(self):
|
4434
|
+
if hasattr(self, "esc_end") and self.esc_end:
|
4435
|
+
if self.execute_script("return document.sb_esc_end;") == "yes":
|
4436
|
+
self.skip()
|
4437
|
+
|
4407
4438
|
def wait_for_ready_state_complete(self, timeout=None):
|
4408
4439
|
"""Waits for the "readyState" of the page to be "complete".
|
4409
4440
|
Returns True when the method completes."""
|
4410
4441
|
self.__check_scope()
|
4411
4442
|
self._check_browser()
|
4443
|
+
self.__skip_if_esc()
|
4412
4444
|
if not timeout:
|
4413
4445
|
timeout = settings.EXTREME_TIMEOUT
|
4414
4446
|
if self.timeout_multiplier and timeout == settings.EXTREME_TIMEOUT:
|
@@ -4427,6 +4459,7 @@ class BaseCase(unittest.TestCase):
|
|
4427
4459
|
time.sleep(0.01)
|
4428
4460
|
if self.undetectable:
|
4429
4461
|
time.sleep(0.035)
|
4462
|
+
self.__set_esc_skip()
|
4430
4463
|
return True
|
4431
4464
|
|
4432
4465
|
def wait_for_angularjs(self, timeout=None, **kwargs):
|
@@ -5775,6 +5808,7 @@ class BaseCase(unittest.TestCase):
|
|
5775
5808
|
scroll - the option to scroll to the element first (Default: True)
|
5776
5809
|
timeout - the time to wait for the element to appear """
|
5777
5810
|
self.__check_scope()
|
5811
|
+
self.__skip_if_esc()
|
5778
5812
|
if isinstance(selector, WebElement):
|
5779
5813
|
self.__highlight_element(selector, loops=loops, scroll=scroll)
|
5780
5814
|
return
|
@@ -6760,10 +6794,7 @@ class BaseCase(unittest.TestCase):
|
|
6760
6794
|
constants.PipInstall.FINDLOCK
|
6761
6795
|
)
|
6762
6796
|
with pip_find_lock:
|
6763
|
-
if (
|
6764
|
-
sys.version_info >= (3, 7)
|
6765
|
-
and sys.version_info < (3, 9)
|
6766
|
-
):
|
6797
|
+
if sys.version_info < (3, 9):
|
6767
6798
|
# Fix bug in newer cryptography for Python 3.7 and 3.8:
|
6768
6799
|
# "pyo3_runtime.PanicException: Python API call failed"
|
6769
6800
|
try:
|
@@ -8709,6 +8740,7 @@ class BaseCase(unittest.TestCase):
|
|
8709
8740
|
):
|
8710
8741
|
"""Same as self.wait_for_element()"""
|
8711
8742
|
self.__check_scope()
|
8743
|
+
self.__skip_if_esc()
|
8712
8744
|
if not timeout:
|
8713
8745
|
timeout = settings.LARGE_TIMEOUT
|
8714
8746
|
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
|
@@ -13478,6 +13510,7 @@ class BaseCase(unittest.TestCase):
|
|
13478
13510
|
self.slow_scroll_to(selector, by=by)
|
13479
13511
|
|
13480
13512
|
def __demo_mode_highlight_if_active(self, selector, by):
|
13513
|
+
self.__skip_if_esc()
|
13481
13514
|
if self.demo_mode:
|
13482
13515
|
# Includes self.slow_scroll_to(selector, by=by) by default
|
13483
13516
|
self.__highlight(selector, by=by)
|
@@ -14379,6 +14412,7 @@ class BaseCase(unittest.TestCase):
|
|
14379
14412
|
self.firefox_arg = sb_config.firefox_arg
|
14380
14413
|
self.firefox_pref = sb_config.firefox_pref
|
14381
14414
|
self.verify_delay = sb_config.verify_delay
|
14415
|
+
self.esc_end = sb_config.esc_end
|
14382
14416
|
self.recorder_mode = sb_config.recorder_mode
|
14383
14417
|
self.recorder_ext = sb_config.recorder_mode
|
14384
14418
|
self.rec_print = sb_config.rec_print
|
@@ -15698,6 +15732,31 @@ class BaseCase(unittest.TestCase):
|
|
15698
15732
|
else:
|
15699
15733
|
return None
|
15700
15734
|
|
15735
|
+
def _get_num_handles(self):
|
15736
|
+
return len(self.driver.window_handles)
|
15737
|
+
|
15738
|
+
def _get_rec_shift_esc_script(self):
|
15739
|
+
return (
|
15740
|
+
"""document.onkeydown = function(evt) {
|
15741
|
+
evt = evt || window.event;
|
15742
|
+
var isEscape = false;
|
15743
|
+
if ("key" in evt) {
|
15744
|
+
isEscape = (evt.key === "Escape" || evt.key === "Esc");
|
15745
|
+
last_key = evt.key;
|
15746
|
+
} else {
|
15747
|
+
isEscape = (evt.keyCode === 27);
|
15748
|
+
last_key = evt.keyCode;
|
15749
|
+
if (last_key === 16) {
|
15750
|
+
last_key = "Shift";
|
15751
|
+
}
|
15752
|
+
}
|
15753
|
+
if (isEscape && document.sb_last_key === "Shift") {
|
15754
|
+
document.sb_esc_end = "yes";
|
15755
|
+
}
|
15756
|
+
document.sb_last_key = last_key;
|
15757
|
+
};"""
|
15758
|
+
)
|
15759
|
+
|
15701
15760
|
def _addSkip(self, result, test_case, reason):
|
15702
15761
|
"""This method should NOT be called directly from tests."""
|
15703
15762
|
addSkip = getattr(result, 'addSkip', None)
|
@@ -15828,6 +15887,11 @@ class BaseCase(unittest.TestCase):
|
|
15828
15887
|
)
|
15829
15888
|
raise Exception(message)
|
15830
15889
|
# *** Start tearDown() officially ***
|
15890
|
+
if self.undetectable:
|
15891
|
+
try:
|
15892
|
+
self.driver.window_handles
|
15893
|
+
except urllib3.exceptions.MaxRetryError:
|
15894
|
+
self.driver.connect()
|
15831
15895
|
self.__slow_mode_pause_if_active()
|
15832
15896
|
has_exception = self.__has_exception()
|
15833
15897
|
sb_config._has_exception = has_exception
|