seleniumbase 4.26.2__tar.gz → 4.26.4__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.2 → seleniumbase-4.26.4}/PKG-INFO +7 -5
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/README.md +1 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/raw_parameter_script.py +1 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/uc_cdp_events.py +1 -1
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/customizing_test_runs.md +1 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/method_summary.md +4 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/recorder_mode.md +2 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/requirements.txt +5 -5
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/requirements.txt +3 -2
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/ReadMe.md +1 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/run.py +2 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/sb_mkrec.py +39 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/sb_recorder.py +2 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/browser_launcher.py +31 -2
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/fixtures/base_case.py +132 -5
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/plugins/pytest_plugin.py +12 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/plugins/selenium_plugin.py +12 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/undetected/webelement.py +1 -1
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase.egg-info/PKG-INFO +7 -5
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase.egg-info/requires.txt +5 -4
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/setup.py +5 -4
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/.github/Workflows.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/.github/workflows/pages.yml +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/.github/workflows/python-nightly-mac.yml +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/.github/workflows/python-nightly-ubuntu.yml +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/.github/workflows/python-nightly-windows.yml +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/.github/workflows/python-package.yml +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/.gitignore +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/CHANGELOG.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/CNAME +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/CODE_OF_CONDUCT.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/CONTRIBUTING.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/Dockerfile +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/LICENSE +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/MANIFEST.in +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/SECURITY.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/_config.yml +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/azure-pipelines.yml +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/basic_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/behave_bdd/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/behave_bdd/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/behave_bdd/behave.ini +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/behave_bdd/features/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/behave_bdd/features/behave.ini +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/behave_bdd/features/calculator.feature +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/behave_bdd/features/environment.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/behave_bdd/features/fail_page.feature +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/behave_bdd/features/realworld.feature +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/behave_bdd/features/steps/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/behave_bdd/features/steps/calculator.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/behave_bdd/features/steps/fail_page.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/behave_bdd/features/steps/imported.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/behave_bdd/features/steps/swag_labs.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/behave_bdd/features/swag_labs.feature +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/base_test_case.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/boilerplate_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/classic_obj_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/page_objects.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/samples/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/samples/file_parsing/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/samples/file_parsing/parse_files.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/samples/file_parsing/qa_login_example.txt +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/samples/file_parsing/staging_login_example.txt +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/samples/google_objects.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/samples/google_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/samples/sb_swag_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/samples/swag_labs_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/samples/test_page_objects.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/boilerplates/sb_fixture_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/capabilities/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/capabilities/mac_cap_file.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/capabilities/sample_cap_file_BS.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/capabilities/sample_cap_file_SL.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/capabilities/selenoid_cap_file.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/capabilities/win10_cap_file.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/case_plans/basic_test.MyTestClass.test_basics.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/case_plans/my_first_test.MyTestClass.test_swag_labs.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/case_plans/shadow_root_test.ShadowRootTest.test_shadow_root.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/case_plans/test_assert_elements.ListAssertTests.test_assert_list_of_elements.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/case_plans/test_calculator.CalculatorTests.test_6_times_7_plus_12_equals_54.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/case_plans/test_demo_site.DemoSiteTests.test_demo_site.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/case_plans/test_login.SwagLabsLoginTests.test_swag_labs_login.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/case_plans/test_mfa_login.TestMFALogin.test_mfa_login.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/case_summary.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/chart_maker/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/chart_maker/chart_presentation.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/chart_maker/my_chart.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/chart_maker/pie_charts.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/chart_maker/test_area_chart.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/chart_maker/test_display_chart.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/chart_maker/test_line_chart.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/chart_maker/test_multi_series.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/chart_maker/test_save_chart.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/coffee_cart_tests.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/custom_settings.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/desktop_apps/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/desktop_apps/recorder.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/dialog_boxes/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/dialog_boxes/dialog_box_tour.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/edge_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/example_config.cfg +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/example_logs/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/example_logs/basic_test_info.txt +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/example_logs/page_source.html +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/example_logs/screenshot.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/github_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/gui_test_runner.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/hack_the_planet.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/handle_alert_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/iframe_tests.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/locale_code_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/master_qa/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/master_qa/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/master_qa/basic_masterqa_test_0.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/master_qa/masterqa_test_1.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/master_qa/pytest.ini +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/protractor/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/protractor/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/protractor/example_spec.js +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/protractor/example_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/protractor/input_spec.js +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/protractor/input_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/protractor/mat_paginator_spec.js +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/protractor/mat_paginator_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/raw_selenium/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/raw_selenium/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/raw_selenium/flaky_messy_raw.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/raw_selenium/long_messy_raw.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/raw_selenium/messy_raw.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/raw_selenium/pytest.ini +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/raw_selenium/refined_raw.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/migration/raw_selenium/simple_sbase.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/my_first_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/nth_child_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/offline_examples/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/offline_examples/demo_page.html +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/offline_examples/load_html_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/offline_examples/test_demo_page.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/offline_examples/test_handle_alerts.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/offline_examples/test_request_fixture.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/offline_examples/test_user_agent.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/old_wordle_script.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/parameterized_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/performance_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/presenter/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/presenter/core_presentation.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/presenter/edge_presentation.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/presenter/fundamentals.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/presenter/my_presentation.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/presenter/py_virtual_envs.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/proxy_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/pytest.ini +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/rate_limiting_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/raw_call.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/raw_driver_context.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/raw_file_call.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/raw_main_call.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/raw_sb.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/raw_test_scripts.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/raw_uc_mode.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/setup.cfg +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/shadow_root_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/swag_labs_user_tests.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_apple_site.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_assert_elements.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_calculator.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_canvas.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_checkboxes.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_chinese_pdf.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_chromedriver.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_coffee_cart.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_console_logging.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_contains_selector.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_cycle_elements.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_decryption.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_deferred_asserts.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_demo_site.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_detect_404s.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_docs_site.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_double_click.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_download_files.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_download_images.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_drag_and_drop.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_error_page.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_event_firing.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_fail.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_geolocation.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_get_coffee.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_get_locale_code.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_get_pdf_text.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_get_user_agent.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_hack_search.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_image_saving.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_inspect_html.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_login.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_markers.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_mfa_login.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_multiple_drivers.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_null.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_override_driver.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_override_sb_fixture.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_parse_soup.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_pdf_asserts.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_pytest_parametrize.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_repeat_tests.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_request_sb_fixture.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_save_screenshots.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_sb_fixture.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_scrape_bing.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_select_options.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_shadow_dom.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_show_file_choosers.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_skype_site.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_suite.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_swag_labs.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_tinymce.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_todomvc.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_url_asserts.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_usefixtures.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_verify_chromedriver.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_window_switching.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_xfail.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/test_xkcd.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/time_limit_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/tour_examples/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/tour_examples/bootstrap_google_tour.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/tour_examples/bootstrap_xkcd_tour.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/tour_examples/driverjs_maps_tour.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/tour_examples/google_tour.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/tour_examples/hopscotch_google_tour.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/tour_examples/introjs_google_tour.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/tour_examples/maps_introjs_tour.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/tour_examples/octocat_tour.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/tour_examples/shepherd_google_tour.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/tour_examples/xkcd_tour.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/translations/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/translations/chinese_test_1.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/translations/dutch_test_1.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/translations/english_test_1.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/translations/french_test_1.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/translations/italian_test_1.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/translations/japanese_test_1.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/translations/korean_test_1.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/translations/portuguese_test_1.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/translations/pytest.ini +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/translations/russian_test_1.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/translations/spanish_test_1.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/unit_tests/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/unit_tests/verify_framework.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/upgrade_chromedriver.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/upload_file_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/user_agent_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/verify_undetected.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/visual_testing/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/visual_testing/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/visual_testing/case_plans/layout_test.VisualLayoutTests.test_applitools_layout_change.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/visual_testing/case_plans/python_home_test.VisualLayoutTests.test_python_home_layout_change.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/visual_testing/case_plans/test_layout_fail.VisualLayoutFailureTests.test_applitools_change.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/visual_testing/case_plans/test_layout_fail.VisualLayoutFailureTests.test_xkcd_logo_change.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/visual_testing/case_plans/test_layout_fail.VisualLayout_FixtureTests.test_python_home_change.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/visual_testing/case_plans/xkcd_visual_test.VisualLayoutTests.test_xkcd_layout_change.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/visual_testing/layout_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/visual_testing/python_home_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/visual_testing/test_layout_fail.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/visual_testing/xkcd_visual_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/wordle_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/xpath_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/examples/youtube_search_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/behave_gui.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/case_plans.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/chinese.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/commander.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/demo_mode.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/desired_capabilities.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/features_list.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/handling_iframes.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/happy_customers.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/hidden_files_info.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/how_it_works.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/html_inspector.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/install.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/install_python_pip_git.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/js_package_manager.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/locale_codes.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/mobile_testing.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/mysql_installation.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/shadow_dom.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/syntax_formats.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/thank_you.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/translations.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/useful_grep_commands.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/using_safari_driver.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/verify_webdriver.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/virtualenv_instructions.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/help_docs/webdriver_installation.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/install.sh +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/azure/azure_pipelines/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/azure/jenkins/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/behave/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/behave/behave.ini +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/behave/features/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/behave/features/behave.ini +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/behave/features/calculator.feature +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/behave/features/environment.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/behave/features/fail_page.feature +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/behave/features/realworld.feature +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/behave/features/steps/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/behave/features/steps/calculator.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/behave/features/steps/fail_page.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/behave/features/steps/real_world.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/behave/features/steps/swag_labs.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/behave/features/swag_labs.feature +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/brython/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/brython/index.html +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/brython/index.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/brython/library.html +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/docker/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/docker/docker-entrypoint.sh +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/docker/run_docker_test_in_chrome.sh +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/github/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/github/workflows/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/github/workflows/extras.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/google_cloud/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/katalon/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/linux/Linuxfile.sh +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/linux/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/linux/Xvfb_launcher.sh +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/linux/jenkins_permissions.sh +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/linux/tomcat_permissions.sh +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/node_js/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/node_js/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/node_js/index.html +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/node_js/my_first_test.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/node_js/npm-shrinkwrap.json +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/node_js/package.json +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/node_js/server.js +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/node_js/test_demo_site.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/selenium_grid/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/integrations/selenium_ide/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs.yml +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/ReadMe.txt +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/docs_instructions.txt +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/dash_pie.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/dash_pie_2.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/dash_pie_3.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/favicon.ico +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/grad_logo.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/green_icon.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/green_logo.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/green_logo2.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/green_logo3.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/logo3.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/logo3a.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/logo3b.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/logo3c.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/logo4.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/logo5.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/logo6.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/logo7.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/sb_icon.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/sb_logo_10.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/sb_logo_7.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/side_by_side.png +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/social/share_facebook.svg +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/social/share_github.svg +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/social/share_gitter.svg +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/social/share_instagram.svg +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/img/social/share_twitter.svg +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/index.txt +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/mkdocs_build/prepare.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/pytest.ini +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/sbase/ReadMe.txt +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/sbase/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/sbase/__main__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/sbase/steps.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/common/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/drivers/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/extensions/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/masterqa/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/resources/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/resources/favicon.ico +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/selenium_grid/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/selenium_ide/ReadMe.md +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/setup.cfg +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/virtualenv_install.sh +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/win_install.bat +0 -0
- {seleniumbase-4.26.2 → seleniumbase-4.26.4}/win_virtualenv.bat +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.26.
|
3
|
+
Version: 4.26.4
|
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
|
@@ -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
|
@@ -844,6 +845,7 @@ pytest test_coffee_cart.py --trace
|
|
844
845
|
--block-images # (Block images from loading during tests.)
|
845
846
|
--do-not-track # (Indicate to websites that you don't want to be tracked.)
|
846
847
|
--verify-delay=SECONDS # (The delay before MasterQA verification checks.)
|
848
|
+
--ee | --esc-end # (Lets the user end the current test via the ESC key.)
|
847
849
|
--recorder # (Enables the Recorder for turning browser actions into code.)
|
848
850
|
--rec-behave # (Same as Recorder Mode, but also generates behave-gherkin.)
|
849
851
|
--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.)
|
@@ -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.)
|
@@ -386,6 +386,8 @@ self.highlight_if_visible(selector, by="css selector", loops=4, scroll=True)
|
|
386
386
|
|
387
387
|
self.highlight(selector, by="css selector", loops=4, scroll=True, timeout=None)
|
388
388
|
|
389
|
+
self.highlight_elements(selector, by="css selector", loops=4, scroll=True, limit=0)
|
390
|
+
|
389
391
|
self.press_up_arrow(selector="html", times=1, by="css selector")
|
390
392
|
|
391
393
|
self.press_down_arrow(selector="html", times=1, by="css selector")
|
@@ -1044,6 +1046,8 @@ driver.uc_open_with_tab(url) # (New tab with default reconnect_time)
|
|
1044
1046
|
|
1045
1047
|
driver.uc_open_with_reconnect(url, reconnect_time=None) # (New tab)
|
1046
1048
|
|
1049
|
+
driver.uc_open_with_disconnect(url) # Open in new tab + disconnect()
|
1050
|
+
|
1047
1051
|
driver.reconnect(timeout) # disconnect() + sleep(timeout) + connect()
|
1048
1052
|
|
1049
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.10
|
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
19
|
lxml==5.2.1
|
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.22
|
24
24
|
mkdocs-exclude-search==0.6.6
|
25
25
|
mkdocs-simple-hooks==0.1.5
|
26
26
|
mkdocs-material-extensions==1.3.1
|
@@ -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.26.
|
2
|
+
__version__ = "4.26.4"
|
@@ -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
|
@@ -3754,6 +3778,11 @@ def get_local_driver(
|
|
3754
3778
|
driver, *args, **kwargs
|
3755
3779
|
)
|
3756
3780
|
)
|
3781
|
+
driver.uc_open_with_disconnect = (
|
3782
|
+
lambda *args, **kwargs: uc_open_with_disconnect(
|
3783
|
+
driver, *args, **kwargs
|
3784
|
+
)
|
3785
|
+
)
|
3757
3786
|
driver.uc_click = lambda *args, **kwargs: uc_click(
|
3758
3787
|
driver, *args, **kwargs
|
3759
3788
|
)
|
@@ -60,6 +60,7 @@ from selenium.common.exceptions import (
|
|
60
60
|
from selenium.webdriver.common.by import By
|
61
61
|
from selenium.webdriver.common.keys import Keys
|
62
62
|
from selenium.webdriver.remote.remote_connection import LOGGER
|
63
|
+
from selenium.webdriver.remote.webelement import WebElement
|
63
64
|
from seleniumbase import config as sb_config
|
64
65
|
from seleniumbase.__version__ import __version__
|
65
66
|
from seleniumbase.common import decorators
|
@@ -113,6 +114,7 @@ class BaseCase(unittest.TestCase):
|
|
113
114
|
]
|
114
115
|
self.version_tuple = tuple(self.version_list)
|
115
116
|
self.version_info = self.version_tuple
|
117
|
+
self.time = time.time
|
116
118
|
self.__page_sources = []
|
117
119
|
self.__extra_actions = []
|
118
120
|
self.__js_start_time = 0
|
@@ -380,6 +382,7 @@ class BaseCase(unittest.TestCase):
|
|
380
382
|
self, selector, by="css selector", timeout=None, delay=0, scroll=True
|
381
383
|
):
|
382
384
|
self.__check_scope()
|
385
|
+
self.__skip_if_esc()
|
383
386
|
if not timeout:
|
384
387
|
timeout = settings.SMALL_TIMEOUT
|
385
388
|
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
|
@@ -670,6 +673,7 @@ class BaseCase(unittest.TestCase):
|
|
670
673
|
self.__demo_mode_pause_if_active(tiny=True)
|
671
674
|
elif self.slow_mode:
|
672
675
|
self.__slow_mode_pause_if_active()
|
676
|
+
self.__set_esc_skip()
|
673
677
|
|
674
678
|
def slow_click(self, selector, by="css selector", timeout=None):
|
675
679
|
"""Similar to click(), but pauses for a brief moment before clicking.
|
@@ -1585,6 +1589,7 @@ class BaseCase(unittest.TestCase):
|
|
1585
1589
|
def click_link_text(self, link_text, timeout=None):
|
1586
1590
|
"""This method clicks link text on a page."""
|
1587
1591
|
self.__check_scope()
|
1592
|
+
self.__skip_if_esc()
|
1588
1593
|
if not timeout:
|
1589
1594
|
timeout = settings.SMALL_TIMEOUT
|
1590
1595
|
if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
|
@@ -4141,6 +4146,10 @@ class BaseCase(unittest.TestCase):
|
|
4141
4146
|
self.uc_open_with_tab = new_driver.uc_open_with_tab
|
4142
4147
|
if hasattr(new_driver, "uc_open_with_reconnect"):
|
4143
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
|
+
)
|
4144
4153
|
if hasattr(new_driver, "reconnect"):
|
4145
4154
|
self.reconnect = new_driver.reconnect
|
4146
4155
|
if hasattr(new_driver, "disconnect"):
|
@@ -4403,11 +4412,35 @@ class BaseCase(unittest.TestCase):
|
|
4403
4412
|
for cookie_dict in cookies:
|
4404
4413
|
self.driver.add_cookie(cookie_dict)
|
4405
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
|
+
|
4406
4438
|
def wait_for_ready_state_complete(self, timeout=None):
|
4407
4439
|
"""Waits for the "readyState" of the page to be "complete".
|
4408
4440
|
Returns True when the method completes."""
|
4409
4441
|
self.__check_scope()
|
4410
4442
|
self._check_browser()
|
4443
|
+
self.__skip_if_esc()
|
4411
4444
|
if not timeout:
|
4412
4445
|
timeout = settings.EXTREME_TIMEOUT
|
4413
4446
|
if self.timeout_multiplier and timeout == settings.EXTREME_TIMEOUT:
|
@@ -4426,6 +4459,7 @@ class BaseCase(unittest.TestCase):
|
|
4426
4459
|
time.sleep(0.01)
|
4427
4460
|
if self.undetectable:
|
4428
4461
|
time.sleep(0.035)
|
4462
|
+
self.__set_esc_skip()
|
4429
4463
|
return True
|
4430
4464
|
|
4431
4465
|
def wait_for_angularjs(self, timeout=None, **kwargs):
|
@@ -5645,6 +5679,40 @@ class BaseCase(unittest.TestCase):
|
|
5645
5679
|
if self.is_element_visible(selector, by=by):
|
5646
5680
|
self.__highlight(selector, by=by, loops=loops, scroll=scroll)
|
5647
5681
|
|
5682
|
+
def __highlight_element(self, element, loops=None, scroll=True):
|
5683
|
+
self.__check_scope()
|
5684
|
+
if not loops:
|
5685
|
+
loops = settings.HIGHLIGHTS
|
5686
|
+
if scroll and self.browser != "safari":
|
5687
|
+
try:
|
5688
|
+
self.__slow_scroll_to_element(element)
|
5689
|
+
except Exception:
|
5690
|
+
pass
|
5691
|
+
if self.highlights:
|
5692
|
+
loops = self.highlights
|
5693
|
+
if self.browser == "ie":
|
5694
|
+
loops = 1 # Override previous setting because IE is slow
|
5695
|
+
loops = int(loops)
|
5696
|
+
if self.headless or self.headless2 or self.xvfb:
|
5697
|
+
# Headless modes have less need for highlighting elements.
|
5698
|
+
# However, highlight() may be used as a sleep alternative.
|
5699
|
+
loops = int(math.ceil(loops * 0.5))
|
5700
|
+
o_bs = "" # original_box_shadow
|
5701
|
+
try:
|
5702
|
+
style = element.get_attribute("style")
|
5703
|
+
except Exception:
|
5704
|
+
self.wait_for_ready_state_complete()
|
5705
|
+
time.sleep(0.12)
|
5706
|
+
style = element.get_attribute("style")
|
5707
|
+
if style:
|
5708
|
+
if "box-shadow: " in style:
|
5709
|
+
box_start = style.find("box-shadow: ")
|
5710
|
+
box_end = style.find(";", box_start) + 1
|
5711
|
+
original_box_shadow = style[box_start:box_end]
|
5712
|
+
o_bs = original_box_shadow
|
5713
|
+
self.__highlight_element_with_js(element, loops, o_bs)
|
5714
|
+
time.sleep(0.065)
|
5715
|
+
|
5648
5716
|
def __highlight(
|
5649
5717
|
self, selector, by="css selector", loops=None, scroll=True
|
5650
5718
|
):
|
@@ -5733,13 +5801,17 @@ class BaseCase(unittest.TestCase):
|
|
5733
5801
|
):
|
5734
5802
|
"""This method uses fancy JavaScript to highlight an element.
|
5735
5803
|
@Params
|
5736
|
-
selector - the selector of the element to find
|
5804
|
+
selector - the selector of the element to find (Accepts WebElement)
|
5737
5805
|
by - the type of selector to search by (Default: CSS)
|
5738
5806
|
loops - # of times to repeat the highlight animation
|
5739
5807
|
(Default: 4. Each loop lasts for about 0.2s)
|
5740
5808
|
scroll - the option to scroll to the element first (Default: True)
|
5741
5809
|
timeout - the time to wait for the element to appear """
|
5742
5810
|
self.__check_scope()
|
5811
|
+
self.__skip_if_esc()
|
5812
|
+
if isinstance(selector, WebElement):
|
5813
|
+
self.__highlight_element(selector, loops=loops, scroll=scroll)
|
5814
|
+
return
|
5743
5815
|
if not timeout:
|
5744
5816
|
timeout = settings.SMALL_TIMEOUT
|
5745
5817
|
self.wait_for_element_visible(selector, by=by, timeout=timeout)
|
@@ -5751,6 +5823,31 @@ class BaseCase(unittest.TestCase):
|
|
5751
5823
|
action = ["hi_li", selector, origin, time_stamp]
|
5752
5824
|
self.__extra_actions.append(action)
|
5753
5825
|
|
5826
|
+
def highlight_elements(
|
5827
|
+
self,
|
5828
|
+
selector,
|
5829
|
+
by="css selector",
|
5830
|
+
loops=None,
|
5831
|
+
scroll=True,
|
5832
|
+
limit=0,
|
5833
|
+
):
|
5834
|
+
if not limit:
|
5835
|
+
limit = 0 # 0 means no limit
|
5836
|
+
limit = int(limit)
|
5837
|
+
count = 0
|
5838
|
+
elements = self.find_elements(selector, by=by)
|
5839
|
+
for element in elements:
|
5840
|
+
try:
|
5841
|
+
if element.is_displayed():
|
5842
|
+
self.__highlight_element(
|
5843
|
+
element, loops=loops, scroll=scroll
|
5844
|
+
)
|
5845
|
+
count += 1
|
5846
|
+
except Exception:
|
5847
|
+
pass
|
5848
|
+
if limit > 0 and count >= limit:
|
5849
|
+
break
|
5850
|
+
|
5754
5851
|
def press_up_arrow(self, selector="html", times=1, by="css selector"):
|
5755
5852
|
"""Simulates pressing the UP Arrow on the keyboard.
|
5756
5853
|
By default, "html" will be used as the CSS Selector target.
|
@@ -6697,10 +6794,7 @@ class BaseCase(unittest.TestCase):
|
|
6697
6794
|
constants.PipInstall.FINDLOCK
|
6698
6795
|
)
|
6699
6796
|
with pip_find_lock:
|
6700
|
-
if (
|
6701
|
-
sys.version_info >= (3, 7)
|
6702
|
-
and sys.version_info < (3, 9)
|
6703
|
-
):
|
6797
|
+
if sys.version_info < (3, 9):
|
6704
6798
|
# Fix bug in newer cryptography for Python 3.7 and 3.8:
|
6705
6799
|
# "pyo3_runtime.PanicException: Python API call failed"
|
6706
6800
|
try:
|
@@ -8646,6 +8740,7 @@ class BaseCase(unittest.TestCase):
|
|
8646
8740
|
):
|
8647
8741
|
"""Same as self.wait_for_element()"""
|
8648
8742
|
self.__check_scope()
|
8743
|
+
self.__skip_if_esc()
|
8649
8744
|
if not timeout:
|
8650
8745
|
timeout = settings.LARGE_TIMEOUT
|
8651
8746
|
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
|
@@ -13415,6 +13510,7 @@ class BaseCase(unittest.TestCase):
|
|
13415
13510
|
self.slow_scroll_to(selector, by=by)
|
13416
13511
|
|
13417
13512
|
def __demo_mode_highlight_if_active(self, selector, by):
|
13513
|
+
self.__skip_if_esc()
|
13418
13514
|
if self.demo_mode:
|
13419
13515
|
# Includes self.slow_scroll_to(selector, by=by) by default
|
13420
13516
|
self.__highlight(selector, by=by)
|
@@ -14316,6 +14412,7 @@ class BaseCase(unittest.TestCase):
|
|
14316
14412
|
self.firefox_arg = sb_config.firefox_arg
|
14317
14413
|
self.firefox_pref = sb_config.firefox_pref
|
14318
14414
|
self.verify_delay = sb_config.verify_delay
|
14415
|
+
self.esc_end = sb_config.esc_end
|
14319
14416
|
self.recorder_mode = sb_config.recorder_mode
|
14320
14417
|
self.recorder_ext = sb_config.recorder_mode
|
14321
14418
|
self.rec_print = sb_config.rec_print
|
@@ -15635,6 +15732,31 @@ class BaseCase(unittest.TestCase):
|
|
15635
15732
|
else:
|
15636
15733
|
return None
|
15637
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
|
+
|
15638
15760
|
def _addSkip(self, result, test_case, reason):
|
15639
15761
|
"""This method should NOT be called directly from tests."""
|
15640
15762
|
addSkip = getattr(result, 'addSkip', None)
|
@@ -15765,6 +15887,11 @@ class BaseCase(unittest.TestCase):
|
|
15765
15887
|
)
|
15766
15888
|
raise Exception(message)
|
15767
15889
|
# *** Start tearDown() officially ***
|
15890
|
+
if self.undetectable:
|
15891
|
+
try:
|
15892
|
+
self.driver.window_handles
|
15893
|
+
except urllib3.exceptions.MaxRetryError:
|
15894
|
+
self.driver.connect()
|
15768
15895
|
self.__slow_mode_pause_if_active()
|
15769
15896
|
has_exception = self.__has_exception()
|
15770
15897
|
sb_config._has_exception = has_exception
|
@@ -81,6 +81,7 @@ def pytest_addoption(parser):
|
|
81
81
|
--block-images (Block images from loading during tests.)
|
82
82
|
--do-not-track (Indicate to websites that you don't want to be tracked.)
|
83
83
|
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
|
84
|
+
--ee / --esc-end (Lets the user end the current test via the ESC key.)
|
84
85
|
--recorder (Enables the Recorder for turning browser actions into code.)
|
85
86
|
--rec-behave (Same as Recorder Mode, but also generates behave-gherkin.)
|
86
87
|
--rec-sleep (If the Recorder is enabled, also records self.sleep calls.)
|
@@ -895,6 +896,16 @@ def pytest_addoption(parser):
|
|
895
896
|
help="""Setting this overrides the default wait time
|
896
897
|
before each MasterQA verification pop-up.""",
|
897
898
|
)
|
899
|
+
parser.addoption(
|
900
|
+
"--esc-end",
|
901
|
+
"--esc_end",
|
902
|
+
"--ee",
|
903
|
+
action="store_true",
|
904
|
+
dest="esc_end",
|
905
|
+
default=False,
|
906
|
+
help="""End the current test early via the ESC key.
|
907
|
+
The test will be marked as skipped.""",
|
908
|
+
)
|
898
909
|
parser.addoption(
|
899
910
|
"--recorder",
|
900
911
|
"--record",
|
@@ -1549,6 +1560,7 @@ def pytest_configure(config):
|
|
1549
1560
|
sb_config.block_images = config.getoption("block_images")
|
1550
1561
|
sb_config.do_not_track = config.getoption("do_not_track")
|
1551
1562
|
sb_config.verify_delay = config.getoption("verify_delay")
|
1563
|
+
sb_config.esc_end = config.getoption("esc_end")
|
1552
1564
|
sb_config.recorder_mode = config.getoption("recorder_mode")
|
1553
1565
|
sb_config.recorder_ext = config.getoption("recorder_mode") # Again
|
1554
1566
|
sb_config.rec_behave = config.getoption("rec_behave")
|
@@ -60,6 +60,7 @@ class SeleniumBrowser(Plugin):
|
|
60
60
|
--block-images (Block images from loading during tests.)
|
61
61
|
--do-not-track (Indicate to websites that you don't want to be tracked.)
|
62
62
|
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
|
63
|
+
--ee / --esc-end (Lets the user end the current test via the ESC key.)
|
63
64
|
--recorder (Enables the Recorder for turning browser actions into code.)
|
64
65
|
--rec-behave (Same as Recorder Mode, but also generates behave-gherkin.)
|
65
66
|
--rec-sleep (If the Recorder is enabled, also records self.sleep calls.)
|
@@ -613,6 +614,16 @@ class SeleniumBrowser(Plugin):
|
|
613
614
|
help="""Setting this overrides the default wait time
|
614
615
|
before each MasterQA verification pop-up.""",
|
615
616
|
)
|
617
|
+
parser.addoption(
|
618
|
+
"--esc-end",
|
619
|
+
"--esc_end",
|
620
|
+
"--ee",
|
621
|
+
action="store_true",
|
622
|
+
dest="esc_end",
|
623
|
+
default=False,
|
624
|
+
help="""End the current test early via the ESC key.
|
625
|
+
The test will be marked as skipped.""",
|
626
|
+
)
|
616
627
|
parser.addoption(
|
617
628
|
"--recorder",
|
618
629
|
"--record",
|
@@ -1126,6 +1137,7 @@ class SeleniumBrowser(Plugin):
|
|
1126
1137
|
test.test.block_images = self.options.block_images
|
1127
1138
|
test.test.do_not_track = self.options.do_not_track
|
1128
1139
|
test.test.verify_delay = self.options.verify_delay # MasterQA
|
1140
|
+
test.test.esc_end = self.options.esc_end
|
1129
1141
|
test.test.recorder_mode = self.options.recorder_mode
|
1130
1142
|
test.test.recorder_ext = self.options.recorder_mode # Again
|
1131
1143
|
test.test.rec_behave = self.options.rec_behave
|
@@ -14,7 +14,7 @@ class WebElement(selenium.webdriver.remote.webelement.WebElement):
|
|
14
14
|
):
|
15
15
|
if driver and selector and by:
|
16
16
|
delayed_click = False
|
17
|
-
if tag_name in ["span", "button", "div", "a"]:
|
17
|
+
if tag_name in ["span", "button", "div", "a", "b", "input"]:
|
18
18
|
delayed_click = True
|
19
19
|
if delayed_click and ":contains" not in selector:
|
20
20
|
selector = js_utils.convert_to_css_selector(selector, by)
|