seleniumbase 4.33.3__tar.gz → 4.33.5__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/.gitignore +1 -0
- {seleniumbase-4.33.3/seleniumbase.egg-info → seleniumbase-4.33.5}/PKG-INFO +3 -4
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/pyproject.toml +1 -1
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/pytest.ini +1 -1
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/requirements.txt +2 -3
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/sb_mkdir.py +2 -1
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/browser_launcher.py +78 -53
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/fixtures/base_case.py +88 -69
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/plugins/pytest_plugin.py +131 -8
- {seleniumbase-4.33.3 → seleniumbase-4.33.5/seleniumbase.egg-info}/PKG-INFO +3 -4
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase.egg-info/requires.txt +2 -3
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/setup.py +2 -3
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/LICENSE +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/MANIFEST.in +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/README.md +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/basic_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/behave_bdd/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/behave_bdd/features/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/behave_bdd/features/environment.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/behave_bdd/features/steps/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/behave_bdd/features/steps/calculator.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/behave_bdd/features/steps/fail_page.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/behave_bdd/features/steps/imported.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/behave_bdd/features/steps/swag_labs.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/boilerplates/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/boilerplates/base_test_case.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/boilerplates/boilerplate_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/boilerplates/classic_obj_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/boilerplates/page_objects.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/boilerplates/samples/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/boilerplates/samples/file_parsing/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/boilerplates/samples/file_parsing/parse_files.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/boilerplates/samples/google_objects.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/boilerplates/samples/google_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/boilerplates/samples/sb_swag_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/boilerplates/samples/swag_labs_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/boilerplates/samples/test_page_objects.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/boilerplates/sb_fixture_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/capabilities/mac_cap_file.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/capabilities/sample_cap_file_BS.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/capabilities/sample_cap_file_SL.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/capabilities/selenoid_cap_file.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/capabilities/win10_cap_file.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/chart_maker/chart_presentation.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/chart_maker/my_chart.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/chart_maker/pie_charts.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/chart_maker/test_area_chart.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/chart_maker/test_display_chart.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/chart_maker/test_line_chart.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/chart_maker/test_multi_series.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/chart_maker/test_save_chart.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/coffee_cart_tests.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/custom_settings.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/desktop_apps/recorder.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/dialog_boxes/dialog_box_tour.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/edge_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/github_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/gui_test_runner.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/hack_the_planet.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/handle_alert_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/iframe_tests.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/locale_code_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/master_qa/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/master_qa/basic_masterqa_test_0.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/master_qa/masterqa_test_1.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/migration/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/migration/protractor/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/migration/protractor/example_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/migration/protractor/input_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/migration/protractor/mat_paginator_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/migration/raw_selenium/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/migration/raw_selenium/flaky_messy_raw.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/migration/raw_selenium/long_messy_raw.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/migration/raw_selenium/messy_raw.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/migration/raw_selenium/refined_raw.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/migration/raw_selenium/simple_sbase.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/my_first_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/nth_child_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/offline_examples/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/offline_examples/load_html_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/offline_examples/test_demo_page.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/offline_examples/test_extended_driver.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/offline_examples/test_handle_alerts.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/offline_examples/test_request_fixture.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/offline_examples/test_user_agent.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/old_wordle_script.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/parameterized_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/performance_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/presenter/core_presentation.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/presenter/edge_presentation.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/presenter/fundamentals.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/presenter/multi_uc.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/presenter/my_presentation.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/presenter/py_virtual_envs.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/presenter/uc_presentation.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/presenter/uc_presentation_3.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/proxy_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/rate_limiting_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_ahrefs.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_antibot_login.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_bing_captcha.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_block.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_brotector_captcha.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_call.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_cdp_logging.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_cf.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_cookies.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_detection.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_driver_context.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_driver_manager.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_file_call.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_form_turnstile.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_games.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_gui_click.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_hobbit.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_login_context.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_login_driver.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_login_sb.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_main_call.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_mobile.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_multi_drivers.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_nopecha.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_order_tickets.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_parameter_script.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_performance_logs.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_pixelscan.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_pyautogui.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_recaptcha.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_robot.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_sb.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_test_scripts.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_turnstile.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/raw_uc_mode.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/sb_fixture_tests.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/shadow_root_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/swag_labs_user_tests.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_3d_apis.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_apple_site.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_assert_elements.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_calculator.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_canvas.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_cdp_ad_blocking.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_checkboxes.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_chinese_pdf.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_chromedriver.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_coffee_cart.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_console_logging.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_contains_selector.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_cycle_elements.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_decryption.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_deferred_asserts.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_demo_site.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_detect_404s.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_docs_site.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_double_click.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_download_files.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_download_images.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_drag_and_drop.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_error_page.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_event_firing.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_fail.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_geolocation.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_get_coffee.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_get_locale_code.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_get_pdf_text.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_get_user_agent.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_hack_search.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_highlight_elements.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_image_saving.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_inspect_html.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_login.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_markers.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_mfa_login.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_multiple_drivers.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_null.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_override_driver.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_override_sb_fixture.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_parse_soup.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_pdf_asserts.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_pytest_parametrize.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_repeat_tests.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_request_sb_fixture.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_save_screenshots.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_sb_fixture.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_scrape_bing.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_select_options.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_shadow_dom.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_show_file_choosers.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_simple_login.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_skype_site.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_suite.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_swag_labs.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_tinymce.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_todomvc.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_url_asserts.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_usefixtures.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_verify_chromedriver.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_window_switching.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_xfail.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/test_xkcd.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/time_limit_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/tour_examples/bootstrap_google_tour.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/tour_examples/bootstrap_xkcd_tour.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/tour_examples/driverjs_maps_tour.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/tour_examples/google_tour.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/tour_examples/hopscotch_google_tour.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/tour_examples/introjs_google_tour.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/tour_examples/maps_introjs_tour.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/tour_examples/octocat_tour.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/tour_examples/recordings/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/tour_examples/recordings/shepherd_google_tour_rec.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/tour_examples/shepherd_google_tour.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/tour_examples/xkcd_tour.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/translations/chinese_test_1.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/translations/dutch_test_1.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/translations/english_test_1.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/translations/french_test_1.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/translations/italian_test_1.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/translations/japanese_test_1.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/translations/korean_test_1.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/translations/portuguese_test_1.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/translations/russian_test_1.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/translations/spanish_test_1.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/uc_cdp_events.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/unit_tests/verify_framework.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/upgrade_chromedriver.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/upload_file_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/user_agent_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/verify_undetected.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/visual_testing/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/visual_testing/layout_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/visual_testing/python_home_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/visual_testing/test_layout_fail.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/visual_testing/xkcd_visual_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/wordle_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/xpath_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/examples/youtube_search_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/install.sh +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/integrations/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/integrations/behave/features/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/integrations/behave/features/environment.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/integrations/behave/features/steps/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/integrations/behave/features/steps/calculator.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/integrations/behave/features/steps/fail_page.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/integrations/behave/features/steps/real_world.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/integrations/behave/features/steps/swag_labs.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/integrations/brython/index.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/integrations/node_js/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/integrations/node_js/my_first_test.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/integrations/node_js/test_demo_site.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/mkdocs_build/prepare.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/sbase/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/sbase/__main__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/sbase/steps.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/sb_cdp.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/setup.cfg +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/site/prepare.py +0 -0
- {seleniumbase-4.33.3 → seleniumbase-4.33.5}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.33.
|
3
|
+
Version: 4.33.5
|
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
|
@@ -76,7 +76,7 @@ Requires-Dist: pynose>=1.5.3
|
|
76
76
|
Requires-Dist: platformdirs>=4.3.6
|
77
77
|
Requires-Dist: typing-extensions>=4.12.2
|
78
78
|
Requires-Dist: sbvirtualdisplay>=1.3.0
|
79
|
-
Requires-Dist: six>=1.
|
79
|
+
Requires-Dist: six>=1.17.0
|
80
80
|
Requires-Dist: parse>=1.20.2
|
81
81
|
Requires-Dist: parse-type>=0.6.4
|
82
82
|
Requires-Dist: colorama>=0.4.6
|
@@ -104,9 +104,8 @@ Requires-Dist: sortedcontainers==2.4.0
|
|
104
104
|
Requires-Dist: execnet==2.1.1
|
105
105
|
Requires-Dist: iniconfig==2.0.0
|
106
106
|
Requires-Dist: pluggy==1.5.0
|
107
|
-
Requires-Dist: py==1.11.0
|
108
107
|
Requires-Dist: pytest==8.3.4
|
109
|
-
Requires-Dist: pytest-html==
|
108
|
+
Requires-Dist: pytest-html==4.0.2
|
110
109
|
Requires-Dist: pytest-metadata==3.1.1
|
111
110
|
Requires-Dist: pytest-ordering==0.6
|
112
111
|
Requires-Dist: pytest-rerunfailures==14.0; python_version < "3.9"
|
@@ -56,7 +56,7 @@ packages = [
|
|
56
56
|
]
|
57
57
|
|
58
58
|
[tool.pytest.ini_options]
|
59
|
-
addopts = ["--capture=
|
59
|
+
addopts = ["--capture=tee-sys", "-p no:cacheprovider"]
|
60
60
|
norecursedirs = [".*", "build", "dist", "recordings", "temp", "assets"]
|
61
61
|
filterwarnings = [
|
62
62
|
"ignore::pytest.PytestWarning",
|
@@ -15,7 +15,7 @@ pynose>=1.5.3
|
|
15
15
|
platformdirs>=4.3.6
|
16
16
|
typing-extensions>=4.12.2
|
17
17
|
sbvirtualdisplay>=1.3.0
|
18
|
-
six>=1.
|
18
|
+
six>=1.17.0
|
19
19
|
parse>=1.20.2
|
20
20
|
parse-type>=0.6.4
|
21
21
|
colorama>=0.4.6
|
@@ -43,9 +43,8 @@ sortedcontainers==2.4.0
|
|
43
43
|
execnet==2.1.1
|
44
44
|
iniconfig==2.0.0
|
45
45
|
pluggy==1.5.0
|
46
|
-
py==1.11.0
|
47
46
|
pytest==8.3.4
|
48
|
-
pytest-html==
|
47
|
+
pytest-html==4.0.2
|
49
48
|
pytest-metadata==3.1.1
|
50
49
|
pytest-ordering==0.6
|
51
50
|
pytest-rerunfailures==14.0;python_version<"3.9"
|
@@ -1,2 +1,2 @@
|
|
1
1
|
# seleniumbase package
|
2
|
-
__version__ = "4.33.
|
2
|
+
__version__ = "4.33.5"
|
@@ -120,7 +120,7 @@ def main():
|
|
120
120
|
|
121
121
|
data = []
|
122
122
|
data.append("[pytest]")
|
123
|
-
data.append("addopts = --capture=
|
123
|
+
data.append("addopts = --capture=tee-sys -p no:cacheprovider")
|
124
124
|
data.append("norecursedirs = .* build dist recordings temp assets")
|
125
125
|
data.append("filterwarnings =")
|
126
126
|
data.append(" ignore::pytest.PytestWarning")
|
@@ -259,6 +259,7 @@ def main():
|
|
259
259
|
data.append("report_archives")
|
260
260
|
data.append("archived_reports")
|
261
261
|
data.append("html_report.html")
|
262
|
+
data.append("last_report.html")
|
262
263
|
data.append("report.html")
|
263
264
|
data.append("report.xml")
|
264
265
|
data.append("dashboard.html")
|
@@ -97,6 +97,13 @@ def log_d(message):
|
|
97
97
|
print(message)
|
98
98
|
|
99
99
|
|
100
|
+
def make_writable(file_path):
|
101
|
+
# Set permissions to: "If you can read it, you can write it."
|
102
|
+
mode = os.stat(file_path).st_mode
|
103
|
+
mode |= (mode & 0o444) >> 1 # copy R bits to W
|
104
|
+
os.chmod(file_path, mode)
|
105
|
+
|
106
|
+
|
100
107
|
def make_executable(file_path):
|
101
108
|
# Set permissions to: "If you can read it, you can execute it."
|
102
109
|
mode = os.stat(file_path).st_mode
|
@@ -810,66 +817,84 @@ def verify_pyautogui_has_a_headed_browser(driver):
|
|
810
817
|
)
|
811
818
|
|
812
819
|
|
820
|
+
def __install_pyautogui_if_missing():
|
821
|
+
try:
|
822
|
+
import pyautogui
|
823
|
+
with suppress(Exception):
|
824
|
+
use_pyautogui_ver = constants.PyAutoGUI.VER
|
825
|
+
if pyautogui.__version__ != use_pyautogui_ver:
|
826
|
+
del pyautogui
|
827
|
+
shared_utils.pip_install(
|
828
|
+
"pyautogui", version=use_pyautogui_ver
|
829
|
+
)
|
830
|
+
import pyautogui
|
831
|
+
except Exception:
|
832
|
+
print("\nPyAutoGUI required! Installing now...")
|
833
|
+
shared_utils.pip_install(
|
834
|
+
"pyautogui", version=constants.PyAutoGUI.VER
|
835
|
+
)
|
836
|
+
try:
|
837
|
+
import pyautogui
|
838
|
+
except Exception:
|
839
|
+
if (
|
840
|
+
IS_LINUX
|
841
|
+
and hasattr(sb_config, "xvfb")
|
842
|
+
and hasattr(sb_config, "headed")
|
843
|
+
and hasattr(sb_config, "headless")
|
844
|
+
and hasattr(sb_config, "headless2")
|
845
|
+
and (not sb_config.headed or sb_config.xvfb)
|
846
|
+
and not (sb_config.headless or sb_config.headless2)
|
847
|
+
):
|
848
|
+
from sbvirtualdisplay import Display
|
849
|
+
xvfb_width = 1366
|
850
|
+
xvfb_height = 768
|
851
|
+
if (
|
852
|
+
hasattr(sb_config, "_xvfb_width")
|
853
|
+
and sb_config._xvfb_width
|
854
|
+
and isinstance(sb_config._xvfb_width, int)
|
855
|
+
and hasattr(sb_config, "_xvfb_height")
|
856
|
+
and sb_config._xvfb_height
|
857
|
+
and isinstance(sb_config._xvfb_height, int)
|
858
|
+
):
|
859
|
+
xvfb_width = sb_config._xvfb_width
|
860
|
+
xvfb_height = sb_config._xvfb_height
|
861
|
+
if xvfb_width < 1024:
|
862
|
+
xvfb_width = 1024
|
863
|
+
sb_config._xvfb_width = xvfb_width
|
864
|
+
if xvfb_height < 768:
|
865
|
+
xvfb_height = 768
|
866
|
+
sb_config._xvfb_height = xvfb_height
|
867
|
+
with suppress(Exception):
|
868
|
+
xvfb_display = Display(
|
869
|
+
visible=True,
|
870
|
+
size=(xvfb_width, xvfb_height),
|
871
|
+
backend="xvfb",
|
872
|
+
use_xauth=True,
|
873
|
+
)
|
874
|
+
xvfb_display.start()
|
875
|
+
|
876
|
+
|
813
877
|
def install_pyautogui_if_missing(driver):
|
814
878
|
verify_pyautogui_has_a_headed_browser(driver)
|
815
879
|
pip_find_lock = fasteners.InterProcessLock(
|
816
880
|
constants.PipInstall.FINDLOCK
|
817
881
|
)
|
818
|
-
|
882
|
+
try:
|
883
|
+
with pip_find_lock:
|
884
|
+
pass
|
885
|
+
except Exception:
|
886
|
+
# Need write permissions
|
887
|
+
with suppress(Exception):
|
888
|
+
make_writable(constants.PipInstall.FINDLOCK)
|
819
889
|
try:
|
820
|
-
|
821
|
-
|
822
|
-
use_pyautogui_ver = constants.PyAutoGUI.VER
|
823
|
-
if pyautogui.__version__ != use_pyautogui_ver:
|
824
|
-
del pyautogui
|
825
|
-
shared_utils.pip_install(
|
826
|
-
"pyautogui", version=use_pyautogui_ver
|
827
|
-
)
|
828
|
-
import pyautogui
|
890
|
+
with pip_find_lock:
|
891
|
+
pass
|
829
892
|
except Exception:
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
import pyautogui
|
836
|
-
except Exception:
|
837
|
-
if (
|
838
|
-
IS_LINUX
|
839
|
-
and hasattr(sb_config, "xvfb")
|
840
|
-
and hasattr(sb_config, "headed")
|
841
|
-
and hasattr(sb_config, "headless")
|
842
|
-
and hasattr(sb_config, "headless2")
|
843
|
-
and (not sb_config.headed or sb_config.xvfb)
|
844
|
-
and not (sb_config.headless or sb_config.headless2)
|
845
|
-
):
|
846
|
-
from sbvirtualdisplay import Display
|
847
|
-
xvfb_width = 1366
|
848
|
-
xvfb_height = 768
|
849
|
-
if (
|
850
|
-
hasattr(sb_config, "_xvfb_width")
|
851
|
-
and sb_config._xvfb_width
|
852
|
-
and isinstance(sb_config._xvfb_width, int)
|
853
|
-
and hasattr(sb_config, "_xvfb_height")
|
854
|
-
and sb_config._xvfb_height
|
855
|
-
and isinstance(sb_config._xvfb_height, int)
|
856
|
-
):
|
857
|
-
xvfb_width = sb_config._xvfb_width
|
858
|
-
xvfb_height = sb_config._xvfb_height
|
859
|
-
if xvfb_width < 1024:
|
860
|
-
xvfb_width = 1024
|
861
|
-
sb_config._xvfb_width = xvfb_width
|
862
|
-
if xvfb_height < 768:
|
863
|
-
xvfb_height = 768
|
864
|
-
sb_config._xvfb_height = xvfb_height
|
865
|
-
with suppress(Exception):
|
866
|
-
xvfb_display = Display(
|
867
|
-
visible=True,
|
868
|
-
size=(xvfb_width, xvfb_height),
|
869
|
-
backend="xvfb",
|
870
|
-
use_xauth=True,
|
871
|
-
)
|
872
|
-
xvfb_display.start()
|
893
|
+
# Since missing permissions, skip the locks
|
894
|
+
__install_pyautogui_if_missing()
|
895
|
+
return
|
896
|
+
with pip_find_lock: # Prevent issues with multiple processes
|
897
|
+
__install_pyautogui_if_missing()
|
873
898
|
|
874
899
|
|
875
900
|
def get_configured_pyautogui(pyautogui_copy):
|
@@ -13974,84 +13974,103 @@ class BaseCase(unittest.TestCase):
|
|
13974
13974
|
self.headless_active = True
|
13975
13975
|
sb_config.headless_active = True
|
13976
13976
|
|
13977
|
+
def __activate_virtual_display(self):
|
13978
|
+
if self.undetectable and not (self.headless or self.headless2):
|
13979
|
+
from sbvirtualdisplay import Display
|
13980
|
+
import Xlib.display
|
13981
|
+
try:
|
13982
|
+
if not self._xvfb_width:
|
13983
|
+
self._xvfb_width = 1366
|
13984
|
+
if not self._xvfb_height:
|
13985
|
+
self._xvfb_height = 768
|
13986
|
+
self._xvfb_display = Display(
|
13987
|
+
visible=True,
|
13988
|
+
size=(self._xvfb_width, self._xvfb_height),
|
13989
|
+
backend="xvfb",
|
13990
|
+
use_xauth=True,
|
13991
|
+
)
|
13992
|
+
self._xvfb_display.start()
|
13993
|
+
if "DISPLAY" not in os.environ.keys():
|
13994
|
+
print(
|
13995
|
+
"\nX11 display failed! Will use regular xvfb!"
|
13996
|
+
)
|
13997
|
+
self.__activate_standard_virtual_display()
|
13998
|
+
except Exception as e:
|
13999
|
+
if hasattr(e, "msg"):
|
14000
|
+
print("\n" + str(e.msg))
|
14001
|
+
else:
|
14002
|
+
print(e)
|
14003
|
+
print("\nX11 display failed! Will use regular xvfb!")
|
14004
|
+
self.__activate_standard_virtual_display()
|
14005
|
+
return
|
14006
|
+
pyautogui_is_installed = False
|
14007
|
+
try:
|
14008
|
+
import pyautogui
|
14009
|
+
with suppress(Exception):
|
14010
|
+
use_pyautogui_ver = constants.PyAutoGUI.VER
|
14011
|
+
if pyautogui.__version__ != use_pyautogui_ver:
|
14012
|
+
del pyautogui # To get newer ver
|
14013
|
+
shared_utils.pip_install(
|
14014
|
+
"pyautogui", version=use_pyautogui_ver
|
14015
|
+
)
|
14016
|
+
import pyautogui
|
14017
|
+
pyautogui_is_installed = True
|
14018
|
+
except Exception:
|
14019
|
+
message = (
|
14020
|
+
"PyAutoGUI is required for UC Mode on Linux! "
|
14021
|
+
"Installing now..."
|
14022
|
+
)
|
14023
|
+
print("\n" + message)
|
14024
|
+
shared_utils.pip_install(
|
14025
|
+
"pyautogui", version=constants.PyAutoGUI.VER
|
14026
|
+
)
|
14027
|
+
import pyautogui
|
14028
|
+
pyautogui_is_installed = True
|
14029
|
+
if (
|
14030
|
+
pyautogui_is_installed
|
14031
|
+
and hasattr(pyautogui, "_pyautogui_x11")
|
14032
|
+
):
|
14033
|
+
try:
|
14034
|
+
pyautogui._pyautogui_x11._display = (
|
14035
|
+
Xlib.display.Display(os.environ['DISPLAY'])
|
14036
|
+
)
|
14037
|
+
sb_config._pyautogui_x11_display = (
|
14038
|
+
pyautogui._pyautogui_x11._display
|
14039
|
+
)
|
14040
|
+
except Exception as e:
|
14041
|
+
if hasattr(e, "msg"):
|
14042
|
+
print("\n" + str(e.msg))
|
14043
|
+
else:
|
14044
|
+
print(e)
|
14045
|
+
else:
|
14046
|
+
self.__activate_standard_virtual_display()
|
14047
|
+
|
13977
14048
|
def __activate_virtual_display_as_needed(self):
|
13978
14049
|
"""This is only needed on Linux.
|
13979
14050
|
The "--xvfb" arg is still useful, as it prevents headless mode,
|
13980
14051
|
which is the default mode on Linux unless using another arg."""
|
13981
14052
|
if "linux" in sys.platform and (not self.headed or self.xvfb):
|
13982
|
-
from sbvirtualdisplay import Display
|
13983
14053
|
pip_find_lock = fasteners.InterProcessLock(
|
13984
14054
|
constants.PipInstall.FINDLOCK
|
13985
14055
|
)
|
14056
|
+
try:
|
14057
|
+
with pip_find_lock:
|
14058
|
+
pass
|
14059
|
+
except Exception:
|
14060
|
+
# Need write permissions
|
14061
|
+
with suppress(Exception):
|
14062
|
+
mode = os.stat(constants.PipInstall.FINDLOCK).st_mode
|
14063
|
+
mode |= (mode & 0o444) >> 1 # copy R bits to W
|
14064
|
+
os.chmod(constants.PipInstall.FINDLOCK, mode)
|
14065
|
+
try:
|
14066
|
+
with pip_find_lock:
|
14067
|
+
pass
|
14068
|
+
except Exception:
|
14069
|
+
# Since missing permissions, skip the locks
|
14070
|
+
self.__activate_virtual_display()
|
14071
|
+
return
|
13986
14072
|
with pip_find_lock: # Prevent issues with multiple processes
|
13987
|
-
|
13988
|
-
import Xlib.display
|
13989
|
-
try:
|
13990
|
-
if not self._xvfb_width:
|
13991
|
-
self._xvfb_width = 1366
|
13992
|
-
if not self._xvfb_height:
|
13993
|
-
self._xvfb_height = 768
|
13994
|
-
self._xvfb_display = Display(
|
13995
|
-
visible=True,
|
13996
|
-
size=(self._xvfb_width, self._xvfb_height),
|
13997
|
-
backend="xvfb",
|
13998
|
-
use_xauth=True,
|
13999
|
-
)
|
14000
|
-
self._xvfb_display.start()
|
14001
|
-
if "DISPLAY" not in os.environ.keys():
|
14002
|
-
print(
|
14003
|
-
"\nX11 display failed! Will use regular xvfb!"
|
14004
|
-
)
|
14005
|
-
self.__activate_standard_virtual_display()
|
14006
|
-
except Exception as e:
|
14007
|
-
if hasattr(e, "msg"):
|
14008
|
-
print("\n" + str(e.msg))
|
14009
|
-
else:
|
14010
|
-
print(e)
|
14011
|
-
print("\nX11 display failed! Will use regular xvfb!")
|
14012
|
-
self.__activate_standard_virtual_display()
|
14013
|
-
return
|
14014
|
-
pyautogui_is_installed = False
|
14015
|
-
try:
|
14016
|
-
import pyautogui
|
14017
|
-
with suppress(Exception):
|
14018
|
-
use_pyautogui_ver = constants.PyAutoGUI.VER
|
14019
|
-
if pyautogui.__version__ != use_pyautogui_ver:
|
14020
|
-
del pyautogui # To get newer ver
|
14021
|
-
shared_utils.pip_install(
|
14022
|
-
"pyautogui", version=use_pyautogui_ver
|
14023
|
-
)
|
14024
|
-
import pyautogui
|
14025
|
-
pyautogui_is_installed = True
|
14026
|
-
except Exception:
|
14027
|
-
message = (
|
14028
|
-
"PyAutoGUI is required for UC Mode on Linux! "
|
14029
|
-
"Installing now..."
|
14030
|
-
)
|
14031
|
-
print("\n" + message)
|
14032
|
-
shared_utils.pip_install(
|
14033
|
-
"pyautogui", version=constants.PyAutoGUI.VER
|
14034
|
-
)
|
14035
|
-
import pyautogui
|
14036
|
-
pyautogui_is_installed = True
|
14037
|
-
if (
|
14038
|
-
pyautogui_is_installed
|
14039
|
-
and hasattr(pyautogui, "_pyautogui_x11")
|
14040
|
-
):
|
14041
|
-
try:
|
14042
|
-
pyautogui._pyautogui_x11._display = (
|
14043
|
-
Xlib.display.Display(os.environ['DISPLAY'])
|
14044
|
-
)
|
14045
|
-
sb_config._pyautogui_x11_display = (
|
14046
|
-
pyautogui._pyautogui_x11._display
|
14047
|
-
)
|
14048
|
-
except Exception as e:
|
14049
|
-
if hasattr(e, "msg"):
|
14050
|
-
print("\n" + str(e.msg))
|
14051
|
-
else:
|
14052
|
-
print(e)
|
14053
|
-
else:
|
14054
|
-
self.__activate_standard_virtual_display()
|
14073
|
+
self.__activate_virtual_display()
|
14055
14074
|
|
14056
14075
|
def __ad_block_as_needed(self):
|
14057
14076
|
"""This is an internal method for handling ad-blocking.
|
@@ -17,6 +17,7 @@ if sys.version_info >= (3, 11):
|
|
17
17
|
python3_11_or_newer = True
|
18
18
|
py311_patch2 = constants.PatchPy311.PATCH
|
19
19
|
sys_argv = sys.argv
|
20
|
+
full_time = None
|
20
21
|
pytest_plugins = ["pytester"] # Adds the "testdir" fixture
|
21
22
|
|
22
23
|
|
@@ -1708,6 +1709,7 @@ def pytest_configure(config):
|
|
1708
1709
|
sb_config._saved_dashboard_pie = None # Copy of pie chart for html report
|
1709
1710
|
sb_config._dash_final_summary = None # Dash status to add to html report
|
1710
1711
|
sb_config._html_report_name = None # The name of the pytest html report
|
1712
|
+
sb_config._html_report_copy = None # The copy of the pytest html report
|
1711
1713
|
|
1712
1714
|
arg_join = " ".join(sys_argv)
|
1713
1715
|
if (
|
@@ -1741,6 +1743,7 @@ def pytest_configure(config):
|
|
1741
1743
|
if sb_config.dashboard:
|
1742
1744
|
if sb_config._html_report_name == "dashboard.html":
|
1743
1745
|
sb_config._dash_is_html_report = True
|
1746
|
+
sb_config._html_report_copy = "last_report.html"
|
1744
1747
|
|
1745
1748
|
# Recorder Mode does not support multi-threaded / multi-process runs.
|
1746
1749
|
if sb_config.recorder_mode and sb_config._multithreaded:
|
@@ -2038,6 +2041,7 @@ def pytest_runtest_teardown(item):
|
|
2038
2041
|
if (
|
2039
2042
|
"-s" in sys_argv
|
2040
2043
|
or "--capture=no" in sys_argv
|
2044
|
+
or "--capture=tee-sys" in sys_argv
|
2041
2045
|
or (
|
2042
2046
|
hasattr(sb_config.pytest_config, "invocation_params")
|
2043
2047
|
and (
|
@@ -2045,6 +2049,9 @@ def pytest_runtest_teardown(item):
|
|
2045
2049
|
or "--capture=no" in (
|
2046
2050
|
sb_config.pytest_config.invocation_params.args
|
2047
2051
|
)
|
2052
|
+
or "--capture=tee-sys" in (
|
2053
|
+
sb_config.pytest_config.invocation_params.args
|
2054
|
+
)
|
2048
2055
|
)
|
2049
2056
|
)
|
2050
2057
|
):
|
@@ -2053,6 +2060,10 @@ def pytest_runtest_teardown(item):
|
|
2053
2060
|
sys.stdout.write("\n=> Fail Page: %s\n" % sb_config._fail_page)
|
2054
2061
|
|
2055
2062
|
|
2063
|
+
def pytest_html_duration_format(duration):
|
2064
|
+
return "%.2f" % duration
|
2065
|
+
|
2066
|
+
|
2056
2067
|
def pytest_sessionfinish(session):
|
2057
2068
|
pass
|
2058
2069
|
|
@@ -2103,9 +2114,11 @@ def pytest_terminal_summary(terminalreporter):
|
|
2103
2114
|
)
|
2104
2115
|
|
2105
2116
|
|
2106
|
-
def _perform_pytest_unconfigure_():
|
2117
|
+
def _perform_pytest_unconfigure_(config):
|
2107
2118
|
from seleniumbase.core import proxy_helper
|
2108
2119
|
|
2120
|
+
reporter = config.pluginmanager.get_plugin("terminalreporter")
|
2121
|
+
duration = time.time() - reporter._sessionstarttime
|
2109
2122
|
if (
|
2110
2123
|
(hasattr(sb_config, "multi_proxy") and not sb_config.multi_proxy)
|
2111
2124
|
or not hasattr(sb_config, "multi_proxy")
|
@@ -2133,6 +2146,69 @@ def _perform_pytest_unconfigure_():
|
|
2133
2146
|
log_helper.clear_empty_logs()
|
2134
2147
|
# Dashboard post-processing: Disable time-based refresh and stamp complete
|
2135
2148
|
if not hasattr(sb_config, "dashboard") or not sb_config.dashboard:
|
2149
|
+
html_report_path = None
|
2150
|
+
the_html_r = None
|
2151
|
+
abs_path = os.path.abspath(".")
|
2152
|
+
if sb_config._html_report_name:
|
2153
|
+
html_report_path = os.path.join(
|
2154
|
+
abs_path, sb_config._html_report_name
|
2155
|
+
)
|
2156
|
+
if sb_config._html_report_copy:
|
2157
|
+
html_report_path_copy = os.path.join(
|
2158
|
+
abs_path, sb_config._html_report_copy
|
2159
|
+
)
|
2160
|
+
if (
|
2161
|
+
sb_config._using_html_report
|
2162
|
+
and html_report_path
|
2163
|
+
and os.path.exists(html_report_path)
|
2164
|
+
):
|
2165
|
+
with open(html_report_path, "r", encoding="utf-8") as f:
|
2166
|
+
the_html_r = f.read()
|
2167
|
+
assets_chunk = "if (assets.length === 1) {"
|
2168
|
+
remove_media = "container.classList.remove('media-container')"
|
2169
|
+
rm_n_left = '<div class="media-container__nav--left"><</div>'
|
2170
|
+
rm_n_right = '<div class="media-container__nav--right">></div>'
|
2171
|
+
the_html_r = the_html_r.replace(
|
2172
|
+
assets_chunk,
|
2173
|
+
"%s %s" % (assets_chunk, remove_media),
|
2174
|
+
)
|
2175
|
+
the_html_r = the_html_r.replace(rm_n_left, "")
|
2176
|
+
the_html_r = the_html_r.replace(rm_n_right, "")
|
2177
|
+
the_html_r = the_html_r.replace("<ul>$", "$")
|
2178
|
+
the_html_r = the_html_r.replace("}<ul>", "}")
|
2179
|
+
the_html_r = the_html_r.replace(
|
2180
|
+
"<li>${val}</li>", "${val}, "
|
2181
|
+
)
|
2182
|
+
the_html_r = the_html_r.replace(
|
2183
|
+
"<div>${value}</div>", "<span>${value}</span"
|
2184
|
+
)
|
2185
|
+
ph_link = '<a href="https://pypi.python.org/pypi/pytest-html">'
|
2186
|
+
sb_link = (
|
2187
|
+
'<a href="https://github.com/seleniumbase/SeleniumBase">'
|
2188
|
+
'SeleniumBase</a>'
|
2189
|
+
)
|
2190
|
+
the_html_r = the_html_r.replace(
|
2191
|
+
ph_link, "%s and %s" % (sb_link, ph_link)
|
2192
|
+
)
|
2193
|
+
the_html_r = the_html_r.replace(
|
2194
|
+
"mediaName.innerText", "//mediaName.innerText"
|
2195
|
+
)
|
2196
|
+
the_html_r = the_html_r.replace(
|
2197
|
+
"counter.innerText", "//counter.innerText"
|
2198
|
+
)
|
2199
|
+
run_count = '<p class="run-count">'
|
2200
|
+
run_c_loc = the_html_r.find(run_count)
|
2201
|
+
rc_loc = the_html_r.find(" took ", run_c_loc)
|
2202
|
+
end_rc_loc = the_html_r.find(".</p>", rc_loc)
|
2203
|
+
run_time = "%.2f" % duration
|
2204
|
+
new_time = " ran in %s seconds" % run_time
|
2205
|
+
the_html_r = (
|
2206
|
+
the_html_r[:rc_loc] + new_time + the_html_r[end_rc_loc:]
|
2207
|
+
)
|
2208
|
+
with open(html_report_path, "w", encoding="utf-8") as f:
|
2209
|
+
f.write(the_html_r) # Finalize the HTML report
|
2210
|
+
with open(html_report_path_copy, "w", encoding="utf-8") as f:
|
2211
|
+
f.write(the_html_r) # Finalize the HTML report
|
2136
2212
|
# Done with "pytest_unconfigure" unless using the Dashboard
|
2137
2213
|
return
|
2138
2214
|
stamp = ""
|
@@ -2220,6 +2296,10 @@ def _perform_pytest_unconfigure_():
|
|
2220
2296
|
html_report_path = os.path.join(
|
2221
2297
|
abs_path, sb_config._html_report_name
|
2222
2298
|
)
|
2299
|
+
if sb_config._html_report_copy:
|
2300
|
+
html_report_path_copy = os.path.join(
|
2301
|
+
abs_path, sb_config._html_report_copy
|
2302
|
+
)
|
2223
2303
|
if (
|
2224
2304
|
sb_config._using_html_report
|
2225
2305
|
and html_report_path
|
@@ -2237,7 +2317,7 @@ def _perform_pytest_unconfigure_():
|
|
2237
2317
|
elif "\\" in h_r_name and h_r_name.endswith(".html"):
|
2238
2318
|
h_r_name = h_r_name.split("\\")[-1]
|
2239
2319
|
the_html_r = the_html_r.replace(
|
2240
|
-
|
2320
|
+
'<h1 id="title">%s</h1>' % h_r_name,
|
2241
2321
|
sb_config._saved_dashboard_pie,
|
2242
2322
|
)
|
2243
2323
|
the_html_r = the_html_r.replace(
|
@@ -2247,8 +2327,51 @@ def _perform_pytest_unconfigure_():
|
|
2247
2327
|
)
|
2248
2328
|
if sb_config._dash_final_summary:
|
2249
2329
|
the_html_r += sb_config._dash_final_summary
|
2330
|
+
assets_chunk = "if (assets.length === 1) {"
|
2331
|
+
remove_media = "container.classList.remove('media-container')"
|
2332
|
+
rm_n_left = '<div class="media-container__nav--left"><</div>'
|
2333
|
+
rm_n_right = '<div class="media-container__nav--right">></div>'
|
2334
|
+
the_html_r = the_html_r.replace(
|
2335
|
+
assets_chunk,
|
2336
|
+
"%s %s" % (assets_chunk, remove_media),
|
2337
|
+
)
|
2338
|
+
the_html_r = the_html_r.replace(rm_n_left, "")
|
2339
|
+
the_html_r = the_html_r.replace(rm_n_right, "")
|
2340
|
+
the_html_r = the_html_r.replace("<ul>$", "$")
|
2341
|
+
the_html_r = the_html_r.replace("}<ul>", "}")
|
2342
|
+
the_html_r = the_html_r.replace(
|
2343
|
+
"<li>${val}</li>", "${val}, "
|
2344
|
+
)
|
2345
|
+
the_html_r = the_html_r.replace(
|
2346
|
+
"<div>${value}</div>", "<span>${value}</span"
|
2347
|
+
)
|
2348
|
+
ph_link = '<a href="https://pypi.python.org/pypi/pytest-html">'
|
2349
|
+
sb_link = (
|
2350
|
+
'<a href="https://github.com/seleniumbase/SeleniumBase">'
|
2351
|
+
'SeleniumBase</a>'
|
2352
|
+
)
|
2353
|
+
the_html_r = the_html_r.replace(
|
2354
|
+
ph_link, "%s and %s" % (sb_link, ph_link)
|
2355
|
+
)
|
2356
|
+
the_html_r = the_html_r.replace(
|
2357
|
+
"mediaName.innerText", "//mediaName.innerText"
|
2358
|
+
)
|
2359
|
+
the_html_r = the_html_r.replace(
|
2360
|
+
"counter.innerText", "//counter.innerText"
|
2361
|
+
)
|
2362
|
+
run_count = '<p class="run-count">'
|
2363
|
+
run_c_loc = the_html_r.find(run_count)
|
2364
|
+
rc_loc = the_html_r.find(" took ", run_c_loc)
|
2365
|
+
end_rc_loc = the_html_r.find(".</p>", rc_loc)
|
2366
|
+
run_time = "%.2f" % duration
|
2367
|
+
new_time = " ran in %s seconds" % run_time
|
2368
|
+
the_html_r = (
|
2369
|
+
the_html_r[:rc_loc] + new_time + the_html_r[end_rc_loc:]
|
2370
|
+
)
|
2250
2371
|
with open(html_report_path, "w", encoding="utf-8") as f:
|
2251
2372
|
f.write(the_html_r) # Finalize the HTML report
|
2373
|
+
with open(html_report_path_copy, "w", encoding="utf-8") as f:
|
2374
|
+
f.write(the_html_r) # Finalize the HTML report
|
2252
2375
|
except KeyboardInterrupt:
|
2253
2376
|
pass
|
2254
2377
|
except Exception:
|
@@ -2281,19 +2404,19 @@ def pytest_unconfigure(config):
|
|
2281
2404
|
with open(dashboard_path, "w", encoding="utf-8") as f:
|
2282
2405
|
f.write(sb_config._dash_html)
|
2283
2406
|
# Dashboard Multithreaded
|
2284
|
-
_perform_pytest_unconfigure_()
|
2407
|
+
_perform_pytest_unconfigure_(config)
|
2285
2408
|
return
|
2286
2409
|
else:
|
2287
2410
|
# Dash Lock is missing
|
2288
|
-
_perform_pytest_unconfigure_()
|
2411
|
+
_perform_pytest_unconfigure_(config)
|
2289
2412
|
return
|
2290
2413
|
with dash_lock:
|
2291
2414
|
# Multi-threaded tests
|
2292
|
-
_perform_pytest_unconfigure_()
|
2415
|
+
_perform_pytest_unconfigure_(config)
|
2293
2416
|
return
|
2294
2417
|
else:
|
2295
2418
|
# Single-threaded tests
|
2296
|
-
_perform_pytest_unconfigure_()
|
2419
|
+
_perform_pytest_unconfigure_(config)
|
2297
2420
|
return
|
2298
2421
|
|
2299
2422
|
|
@@ -2442,7 +2565,7 @@ def pytest_runtest_makereport(item, call):
|
|
2442
2565
|
return
|
2443
2566
|
extra = getattr(report, "extra", [])
|
2444
2567
|
if len(extra_report) > 1 and extra_report[1]["content"]:
|
2445
|
-
report.
|
2568
|
+
report.extras = extra + extra_report
|
2446
2569
|
if sb_config._dash_is_html_report:
|
2447
2570
|
# If the Dashboard URL is the same as the HTML Report URL,
|
2448
2571
|
# have the html report refresh back to a dashboard on update.
|
@@ -2450,4 +2573,4 @@ def pytest_runtest_makereport(item, call):
|
|
2450
2573
|
'<script type="text/javascript" src="%s">'
|
2451
2574
|
"</script>" % constants.Dashboard.LIVE_JS
|
2452
2575
|
)
|
2453
|
-
report.
|
2576
|
+
report.extras.append(pytest_html.extras.html(refresh_updates))
|