seleniumbase 4.33.6__tar.gz → 4.33.7__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {seleniumbase-4.33.6/seleniumbase.egg-info → seleniumbase-4.33.7}/PKG-INFO +1 -1
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_pixelscan.py +1 -1
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/browser_launcher.py +47 -27
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/log_helper.py +10 -4
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/proxy_helper.py +35 -30
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/sb_cdp.py +74 -22
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/fixtures/base_case.py +32 -32
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/fixtures/js_utils.py +2 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/fixtures/shared_utils.py +11 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/plugins/pytest_plugin.py +19 -2
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/undetected/cdp_driver/element.py +4 -2
- {seleniumbase-4.33.6 → seleniumbase-4.33.7/seleniumbase.egg-info}/PKG-INFO +1 -1
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/.gitignore +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/LICENSE +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/MANIFEST.in +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/README.md +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/basic_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/behave_bdd/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/behave_bdd/features/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/behave_bdd/features/environment.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/behave_bdd/features/steps/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/behave_bdd/features/steps/calculator.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/behave_bdd/features/steps/fail_page.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/behave_bdd/features/steps/imported.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/behave_bdd/features/steps/swag_labs.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/boilerplates/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/boilerplates/base_test_case.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/boilerplates/boilerplate_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/boilerplates/classic_obj_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/boilerplates/page_objects.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/boilerplates/samples/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/boilerplates/samples/file_parsing/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/boilerplates/samples/file_parsing/parse_files.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/boilerplates/samples/google_objects.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/boilerplates/samples/google_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/boilerplates/samples/sb_swag_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/boilerplates/samples/swag_labs_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/boilerplates/samples/test_page_objects.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/boilerplates/sb_fixture_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/capabilities/mac_cap_file.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/capabilities/sample_cap_file_BS.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/capabilities/sample_cap_file_SL.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/capabilities/selenoid_cap_file.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/capabilities/win10_cap_file.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/chart_maker/chart_presentation.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/chart_maker/my_chart.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/chart_maker/pie_charts.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/chart_maker/test_area_chart.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/chart_maker/test_display_chart.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/chart_maker/test_line_chart.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/chart_maker/test_multi_series.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/chart_maker/test_save_chart.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/coffee_cart_tests.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/custom_settings.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/desktop_apps/recorder.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/dialog_boxes/dialog_box_tour.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/edge_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/github_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/gui_test_runner.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/hack_the_planet.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/handle_alert_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/iframe_tests.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/locale_code_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/master_qa/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/master_qa/basic_masterqa_test_0.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/master_qa/masterqa_test_1.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/migration/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/migration/protractor/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/migration/protractor/example_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/migration/protractor/input_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/migration/protractor/mat_paginator_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/migration/raw_selenium/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/migration/raw_selenium/flaky_messy_raw.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/migration/raw_selenium/long_messy_raw.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/migration/raw_selenium/messy_raw.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/migration/raw_selenium/refined_raw.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/migration/raw_selenium/simple_sbase.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/my_first_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/nth_child_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/offline_examples/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/offline_examples/load_html_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/offline_examples/test_demo_page.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/offline_examples/test_extended_driver.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/offline_examples/test_handle_alerts.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/offline_examples/test_request_fixture.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/offline_examples/test_user_agent.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/old_wordle_script.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/parameterized_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/performance_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/presenter/core_presentation.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/presenter/edge_presentation.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/presenter/fundamentals.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/presenter/multi_uc.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/presenter/my_presentation.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/presenter/py_virtual_envs.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/presenter/uc_presentation.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/presenter/uc_presentation_3.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/proxy_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/rate_limiting_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_ahrefs.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_antibot_login.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_bing_captcha.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_block.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_brotector_captcha.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_call.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_cdp_logging.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_cf.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_cookies.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_detection.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_driver_context.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_driver_manager.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_file_call.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_form_turnstile.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_games.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_gui_click.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_hobbit.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_login_context.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_login_driver.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_login_sb.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_main_call.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_mobile.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_multi_drivers.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_nopecha.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_order_tickets.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_parameter_script.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_performance_logs.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_pyautogui.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_recaptcha.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_robot.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_sb.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_test_scripts.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_turnstile.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/raw_uc_mode.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/sb_fixture_tests.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/shadow_root_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/swag_labs_user_tests.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_3d_apis.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_apple_site.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_assert_elements.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_calculator.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_canvas.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_cdp_ad_blocking.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_checkboxes.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_chinese_pdf.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_chromedriver.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_coffee_cart.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_console_logging.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_contains_selector.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_cycle_elements.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_decryption.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_deferred_asserts.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_demo_site.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_detect_404s.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_docs_site.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_double_click.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_download_files.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_download_images.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_drag_and_drop.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_error_page.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_event_firing.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_fail.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_geolocation.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_get_coffee.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_get_locale_code.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_get_pdf_text.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_get_user_agent.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_hack_search.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_highlight_elements.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_image_saving.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_inspect_html.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_login.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_markers.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_mfa_login.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_multiple_drivers.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_null.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_override_driver.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_override_sb_fixture.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_parse_soup.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_pdf_asserts.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_pytest_parametrize.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_repeat_tests.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_request_sb_fixture.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_save_screenshots.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_sb_fixture.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_scrape_bing.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_select_options.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_shadow_dom.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_show_file_choosers.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_simple_login.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_skype_site.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_suite.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_swag_labs.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_tinymce.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_todomvc.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_url_asserts.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_usefixtures.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_verify_chromedriver.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_window_switching.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_xfail.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/test_xkcd.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/time_limit_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/tour_examples/bootstrap_google_tour.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/tour_examples/bootstrap_xkcd_tour.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/tour_examples/driverjs_maps_tour.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/tour_examples/google_tour.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/tour_examples/hopscotch_google_tour.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/tour_examples/introjs_google_tour.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/tour_examples/maps_introjs_tour.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/tour_examples/octocat_tour.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/tour_examples/recordings/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/tour_examples/recordings/shepherd_google_tour_rec.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/tour_examples/shepherd_google_tour.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/tour_examples/xkcd_tour.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/translations/chinese_test_1.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/translations/dutch_test_1.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/translations/english_test_1.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/translations/french_test_1.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/translations/italian_test_1.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/translations/japanese_test_1.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/translations/korean_test_1.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/translations/portuguese_test_1.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/translations/russian_test_1.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/translations/spanish_test_1.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/uc_cdp_events.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/unit_tests/verify_framework.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/upgrade_chromedriver.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/upload_file_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/user_agent_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/verify_undetected.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/visual_testing/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/visual_testing/layout_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/visual_testing/python_home_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/visual_testing/test_layout_fail.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/visual_testing/xkcd_visual_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/wordle_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/xpath_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/examples/youtube_search_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/install.sh +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/integrations/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/integrations/behave/features/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/integrations/behave/features/environment.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/integrations/behave/features/steps/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/integrations/behave/features/steps/calculator.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/integrations/behave/features/steps/fail_page.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/integrations/behave/features/steps/real_world.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/integrations/behave/features/steps/swag_labs.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/integrations/brython/index.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/integrations/node_js/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/integrations/node_js/my_first_test.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/integrations/node_js/test_demo_site.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/mkdocs_build/prepare.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/pyproject.toml +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/pytest.ini +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/requirements.txt +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/sbase/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/sbase/__main__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/sbase/steps.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase.egg-info/requires.txt +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/setup.cfg +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/setup.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/site/prepare.py +0 -0
- {seleniumbase-4.33.6 → seleniumbase-4.33.7}/virtualenv_install.sh +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
from seleniumbase import SB
|
2
2
|
|
3
3
|
with SB(uc=True, incognito=True, test=True) as sb:
|
4
|
-
sb.driver.uc_open_with_reconnect("https://pixelscan.net/",
|
4
|
+
sb.driver.uc_open_with_reconnect("https://pixelscan.net/", 7)
|
5
5
|
sb.remove_elements("div.banner") # Remove the banner
|
6
6
|
sb.remove_elements("jdiv") # Remove chat widgets
|
7
7
|
no_automation_detected = "No automation framework detected"
|
@@ -1,2 +1,2 @@
|
|
1
1
|
# seleniumbase package
|
2
|
-
__version__ = "4.33.
|
2
|
+
__version__ = "4.33.7"
|
@@ -1413,7 +1413,7 @@ def _uc_gui_handle_captcha_(driver, frame="iframe", ctype=None):
|
|
1413
1413
|
ctype = "cf_t"
|
1414
1414
|
else:
|
1415
1415
|
return
|
1416
|
-
if not driver.is_connected():
|
1416
|
+
if not driver.is_connected() and not __is_cdp_swap_needed(driver):
|
1417
1417
|
driver.connect()
|
1418
1418
|
time.sleep(2)
|
1419
1419
|
install_pyautogui_if_missing(driver)
|
@@ -1425,7 +1425,10 @@ def _uc_gui_handle_captcha_(driver, frame="iframe", ctype=None):
|
|
1425
1425
|
)
|
1426
1426
|
with gui_lock: # Prevent issues with multiple processes
|
1427
1427
|
needs_switch = False
|
1428
|
-
|
1428
|
+
if not __is_cdp_swap_needed(driver):
|
1429
|
+
is_in_frame = js_utils.is_in_frame(driver)
|
1430
|
+
else:
|
1431
|
+
is_in_frame = False
|
1429
1432
|
selector = "#challenge-stage"
|
1430
1433
|
if ctype == "g_rc":
|
1431
1434
|
selector = "#recaptcha-token"
|
@@ -1433,7 +1436,7 @@ def _uc_gui_handle_captcha_(driver, frame="iframe", ctype=None):
|
|
1433
1436
|
driver.switch_to.parent_frame()
|
1434
1437
|
needs_switch = True
|
1435
1438
|
is_in_frame = js_utils.is_in_frame(driver)
|
1436
|
-
if not is_in_frame:
|
1439
|
+
if not is_in_frame and not __is_cdp_swap_needed(driver):
|
1437
1440
|
# Make sure the window is on top
|
1438
1441
|
page_actions.switch_to_window(
|
1439
1442
|
driver, driver.current_window_handle, 2, uc_lock=False
|
@@ -1500,17 +1503,18 @@ def _uc_gui_handle_captcha_(driver, frame="iframe", ctype=None):
|
|
1500
1503
|
and frame == "iframe"
|
1501
1504
|
):
|
1502
1505
|
frame = 'iframe[title="reCAPTCHA"]'
|
1503
|
-
if not
|
1504
|
-
|
1505
|
-
|
1506
|
-
|
1507
|
-
|
1508
|
-
|
1509
|
-
|
1510
|
-
if
|
1511
|
-
driver.
|
1512
|
-
|
1513
|
-
|
1506
|
+
if not __is_cdp_swap_needed(driver):
|
1507
|
+
if not is_in_frame or needs_switch:
|
1508
|
+
# Currently not in frame (or nested frame outside CF one)
|
1509
|
+
try:
|
1510
|
+
if visible_iframe or ctype == "g_rc":
|
1511
|
+
driver.switch_to_frame(frame)
|
1512
|
+
except Exception:
|
1513
|
+
if visible_iframe or ctype == "g_rc":
|
1514
|
+
if driver.is_element_present("iframe"):
|
1515
|
+
driver.switch_to_frame("iframe")
|
1516
|
+
else:
|
1517
|
+
return
|
1514
1518
|
try:
|
1515
1519
|
selector = "div.cf-turnstile"
|
1516
1520
|
if ctype == "g_rc":
|
@@ -1526,11 +1530,11 @@ def _uc_gui_handle_captcha_(driver, frame="iframe", ctype=None):
|
|
1526
1530
|
tab_count += 1
|
1527
1531
|
time.sleep(0.027)
|
1528
1532
|
active_element_css = js_utils.get_active_element_css(driver)
|
1529
|
-
print(active_element_css)
|
1530
1533
|
if (
|
1531
1534
|
active_element_css.startswith(selector)
|
1532
1535
|
or active_element_css.endswith(" > div" * 2)
|
1533
1536
|
or (special_form and active_element_css.endswith(" div"))
|
1537
|
+
or (ctype == "g_rc" and "frame[name" in active_element_css)
|
1534
1538
|
):
|
1535
1539
|
found_checkbox = True
|
1536
1540
|
sb_config._saved_cf_tab_count = tab_count
|
@@ -1550,6 +1554,7 @@ def _uc_gui_handle_captcha_(driver, frame="iframe", ctype=None):
|
|
1550
1554
|
)
|
1551
1555
|
and hasattr(sb_config, "_saved_cf_tab_count")
|
1552
1556
|
and sb_config._saved_cf_tab_count
|
1557
|
+
and not __is_cdp_swap_needed(driver)
|
1553
1558
|
):
|
1554
1559
|
driver.uc_open_with_disconnect(driver.current_url, 3.8)
|
1555
1560
|
with suppress(Exception):
|
@@ -1764,17 +1769,27 @@ def _add_chrome_proxy_extension(
|
|
1764
1769
|
):
|
1765
1770
|
# Single-threaded
|
1766
1771
|
if zip_it:
|
1767
|
-
|
1768
|
-
|
1769
|
-
|
1770
|
-
|
1771
|
-
|
1772
|
+
proxy_zip_lock = fasteners.InterProcessLock(PROXY_ZIP_LOCK)
|
1773
|
+
with proxy_zip_lock:
|
1774
|
+
proxy_helper.create_proxy_ext(
|
1775
|
+
proxy_string, proxy_user, proxy_pass, bypass_list
|
1776
|
+
)
|
1777
|
+
proxy_zip = proxy_helper.PROXY_ZIP_PATH
|
1778
|
+
chrome_options.add_extension(proxy_zip)
|
1772
1779
|
else:
|
1773
|
-
|
1774
|
-
|
1775
|
-
|
1776
|
-
|
1777
|
-
|
1780
|
+
proxy_dir_lock = fasteners.InterProcessLock(PROXY_DIR_LOCK)
|
1781
|
+
with proxy_dir_lock:
|
1782
|
+
proxy_helper.create_proxy_ext(
|
1783
|
+
proxy_string,
|
1784
|
+
proxy_user,
|
1785
|
+
proxy_pass,
|
1786
|
+
bypass_list,
|
1787
|
+
zip_it=False,
|
1788
|
+
)
|
1789
|
+
proxy_dir_path = proxy_helper.PROXY_DIR_PATH
|
1790
|
+
chrome_options = add_chrome_ext_dir(
|
1791
|
+
chrome_options, proxy_dir_path
|
1792
|
+
)
|
1778
1793
|
else:
|
1779
1794
|
# Multi-threaded
|
1780
1795
|
if zip_it:
|
@@ -1803,7 +1818,7 @@ def _add_chrome_proxy_extension(
|
|
1803
1818
|
proxy_user,
|
1804
1819
|
proxy_pass,
|
1805
1820
|
bypass_list,
|
1806
|
-
False,
|
1821
|
+
zip_it=False,
|
1807
1822
|
)
|
1808
1823
|
chrome_options = add_chrome_ext_dir(
|
1809
1824
|
chrome_options, proxy_helper.PROXY_DIR_PATH
|
@@ -4845,7 +4860,12 @@ def get_local_driver(
|
|
4845
4860
|
)
|
4846
4861
|
uc_activated = True
|
4847
4862
|
except URLError as e:
|
4848
|
-
if
|
4863
|
+
if (
|
4864
|
+
IS_MAC
|
4865
|
+
and hasattr(e, "args")
|
4866
|
+
and isinstance(e.args, (list, tuple))
|
4867
|
+
and cert in e.args[0]
|
4868
|
+
):
|
4849
4869
|
mac_certificate_error = True
|
4850
4870
|
else:
|
4851
4871
|
raise
|
@@ -7,6 +7,7 @@ from contextlib import suppress
|
|
7
7
|
from seleniumbase import config as sb_config
|
8
8
|
from seleniumbase.config import settings
|
9
9
|
from seleniumbase.fixtures import constants
|
10
|
+
from seleniumbase.fixtures import shared_utils
|
10
11
|
|
11
12
|
python3_11_or_newer = False
|
12
13
|
if sys.version_info >= (3, 11):
|
@@ -33,6 +34,8 @@ def log_screenshot(test_logpath, driver, screenshot=None, get=False):
|
|
33
34
|
if screenshot != screenshot_warning:
|
34
35
|
with open(screenshot_path, "wb") as file:
|
35
36
|
file.write(screenshot)
|
37
|
+
with suppress(Exception):
|
38
|
+
shared_utils.make_writable(screenshot_path)
|
36
39
|
else:
|
37
40
|
print("WARNING: %s" % screenshot_warning)
|
38
41
|
if get:
|
@@ -282,13 +285,14 @@ def log_test_failure_data(test, test_logpath, driver, browser, url=None):
|
|
282
285
|
sb_config._report_time = the_time
|
283
286
|
sb_config._report_traceback = traceback_message
|
284
287
|
sb_config._report_exception = exc_message
|
285
|
-
|
286
|
-
|
288
|
+
if not os.path.exists(test_logpath):
|
289
|
+
with suppress(Exception):
|
287
290
|
os.makedirs(test_logpath)
|
288
291
|
with suppress(Exception):
|
289
292
|
log_file = codecs.open(basic_file_path, "w+", encoding="utf-8")
|
290
293
|
log_file.writelines("\r\n".join(data_to_save))
|
291
294
|
log_file.close()
|
295
|
+
shared_utils.make_writable(basic_file_path)
|
292
296
|
|
293
297
|
|
294
298
|
def log_skipped_test_data(test, test_logpath, driver, browser, reason):
|
@@ -343,6 +347,7 @@ def log_skipped_test_data(test, test_logpath, driver, browser, reason):
|
|
343
347
|
log_file = codecs.open(file_path, "w+", encoding="utf-8")
|
344
348
|
log_file.writelines("\r\n".join(data_to_save))
|
345
349
|
log_file.close()
|
350
|
+
shared_utils.make_writable(file_path)
|
346
351
|
|
347
352
|
|
348
353
|
def log_page_source(test_logpath, driver, source=None):
|
@@ -365,14 +370,15 @@ def log_page_source(test_logpath, driver, source=None):
|
|
365
370
|
"unresponsive, or closed prematurely!</h4>"
|
366
371
|
)
|
367
372
|
)
|
368
|
-
|
369
|
-
|
373
|
+
if not os.path.exists(test_logpath):
|
374
|
+
with suppress(Exception):
|
370
375
|
os.makedirs(test_logpath)
|
371
376
|
html_file_path = os.path.join(test_logpath, html_file_name)
|
372
377
|
with suppress(Exception):
|
373
378
|
html_file = codecs.open(html_file_path, "w+", encoding="utf-8")
|
374
379
|
html_file.write(page_source)
|
375
380
|
html_file.close()
|
381
|
+
shared_utils.make_writable(html_file_path)
|
376
382
|
|
377
383
|
|
378
384
|
def get_test_id(test):
|
@@ -2,10 +2,12 @@ import os
|
|
2
2
|
import re
|
3
3
|
import warnings
|
4
4
|
import zipfile
|
5
|
+
from contextlib import suppress
|
5
6
|
from seleniumbase.config import proxy_list
|
6
7
|
from seleniumbase.config import settings
|
7
8
|
from seleniumbase.fixtures import constants
|
8
9
|
from seleniumbase.fixtures import page_utils
|
10
|
+
from seleniumbase.fixtures import shared_utils
|
9
11
|
|
10
12
|
DOWNLOADS_DIR = constants.Files.DOWNLOADS_FOLDER
|
11
13
|
PROXY_ZIP_PATH = os.path.join(DOWNLOADS_DIR, "proxy.zip")
|
@@ -109,31 +111,35 @@ def create_proxy_ext(
|
|
109
111
|
""""minimum_chrome_version":"22.0.0"\n"""
|
110
112
|
"""}"""
|
111
113
|
)
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
proxy_ext_dir
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
114
|
+
abs_path = os.path.abspath(".")
|
115
|
+
downloads_path = os.path.join(abs_path, DOWNLOADS_DIR)
|
116
|
+
if not os.path.exists(downloads_path):
|
117
|
+
os.mkdir(downloads_path)
|
118
|
+
if zip_it:
|
119
|
+
zf = zipfile.ZipFile(PROXY_ZIP_PATH, mode="w")
|
120
|
+
zf.writestr("background.js", background_js)
|
121
|
+
zf.writestr("manifest.json", manifest_json)
|
122
|
+
zf.close()
|
123
|
+
with suppress(Exception):
|
124
|
+
shared_utils.make_writable(PROXY_ZIP_PATH)
|
125
|
+
else:
|
126
|
+
proxy_ext_dir = PROXY_DIR_PATH
|
127
|
+
if not os.path.exists(proxy_ext_dir):
|
128
|
+
os.mkdir(proxy_ext_dir)
|
129
|
+
with suppress(Exception):
|
130
|
+
shared_utils.make_writable(proxy_ext_dir)
|
131
|
+
manifest_file = os.path.join(proxy_ext_dir, "manifest.json")
|
132
|
+
with open(manifest_file, mode="w") as f:
|
133
|
+
f.write(manifest_json)
|
134
|
+
with suppress(Exception):
|
135
|
+
shared_utils.make_writable(manifest_json)
|
136
|
+
proxy_host = proxy_string.split(":")[0]
|
137
|
+
proxy_port = proxy_string.split(":")[1]
|
138
|
+
background_file = os.path.join(proxy_ext_dir, "background.js")
|
139
|
+
with open(background_file, mode="w") as f:
|
140
|
+
f.write(background_js)
|
141
|
+
with suppress(Exception):
|
142
|
+
shared_utils.make_writable(background_js)
|
137
143
|
|
138
144
|
|
139
145
|
def remove_proxy_zip_if_present():
|
@@ -141,13 +147,12 @@ def remove_proxy_zip_if_present():
|
|
141
147
|
Used in the implementation of https://stackoverflow.com/a/35293284
|
142
148
|
for https://stackoverflow.com/questions/12848327/
|
143
149
|
"""
|
144
|
-
|
145
|
-
|
150
|
+
if os.path.exists(PROXY_ZIP_PATH):
|
151
|
+
with suppress(Exception):
|
146
152
|
os.remove(PROXY_ZIP_PATH)
|
147
|
-
|
153
|
+
if os.path.exists(PROXY_ZIP_LOCK):
|
154
|
+
with suppress(Exception):
|
148
155
|
os.remove(PROXY_ZIP_LOCK)
|
149
|
-
except Exception:
|
150
|
-
pass
|
151
156
|
|
152
157
|
|
153
158
|
def validate_proxy_string(proxy_string):
|
@@ -268,6 +268,7 @@ class CDPMethods():
|
|
268
268
|
if number < 0:
|
269
269
|
number = 0
|
270
270
|
element = elements[number]
|
271
|
+
element.scroll_into_view()
|
271
272
|
element.click()
|
272
273
|
|
273
274
|
def click_nth_visible_element(self, selector, number):
|
@@ -284,6 +285,7 @@ class CDPMethods():
|
|
284
285
|
if number < 0:
|
285
286
|
number = 0
|
286
287
|
element = elements[number]
|
288
|
+
element.scroll_into_view()
|
287
289
|
element.click()
|
288
290
|
|
289
291
|
def click_link(self, link_text):
|
@@ -311,6 +313,13 @@ class CDPMethods():
|
|
311
313
|
return result
|
312
314
|
|
313
315
|
def __flash(self, element, *args, **kwargs):
|
316
|
+
element.scroll_into_view()
|
317
|
+
if len(args) < 3 and "x_offset" not in kwargs:
|
318
|
+
x_offset = self.__get_x_scroll_offset()
|
319
|
+
kwargs["x_offset"] = x_offset
|
320
|
+
if len(args) < 3 and "y_offset" not in kwargs:
|
321
|
+
y_offset = self.__get_y_scroll_offset()
|
322
|
+
kwargs["y_offset"] = y_offset
|
314
323
|
return (
|
315
324
|
self.loop.run_until_complete(
|
316
325
|
element.flash_async(*args, **kwargs)
|
@@ -382,9 +391,9 @@ class CDPMethods():
|
|
382
391
|
)
|
383
392
|
|
384
393
|
def __scroll_into_view(self, element):
|
385
|
-
|
386
|
-
|
387
|
-
|
394
|
+
self.loop.run_until_complete(element.scroll_into_view_async())
|
395
|
+
self.__add_light_pause()
|
396
|
+
return None
|
388
397
|
|
389
398
|
def __select_option(self, element):
|
390
399
|
return (
|
@@ -431,6 +440,18 @@ class CDPMethods():
|
|
431
440
|
self.loop.run_until_complete(element.get_js_attributes_async())
|
432
441
|
)
|
433
442
|
|
443
|
+
def __get_x_scroll_offset(self):
|
444
|
+
x_scroll_offset = self.loop.run_until_complete(
|
445
|
+
self.page.evaluate("window.pageXOffset")
|
446
|
+
)
|
447
|
+
return x_scroll_offset or 0
|
448
|
+
|
449
|
+
def __get_y_scroll_offset(self):
|
450
|
+
y_scroll_offset = self.loop.run_until_complete(
|
451
|
+
self.page.evaluate("window.pageYOffset")
|
452
|
+
)
|
453
|
+
return y_scroll_offset or 0
|
454
|
+
|
434
455
|
def tile_windows(self, windows=None, max_columns=0):
|
435
456
|
"""Tile windows and return the grid of tiled windows."""
|
436
457
|
driver = self.driver
|
@@ -504,7 +525,7 @@ class CDPMethods():
|
|
504
525
|
def click(self, selector, timeout=settings.SMALL_TIMEOUT):
|
505
526
|
self.__slow_mode_pause_if_set()
|
506
527
|
element = self.find_element(selector, timeout=timeout)
|
507
|
-
|
528
|
+
element.scroll_into_view()
|
508
529
|
element.click()
|
509
530
|
self.__slow_mode_pause_if_set()
|
510
531
|
self.loop.run_until_complete(self.page.wait())
|
@@ -518,7 +539,9 @@ class CDPMethods():
|
|
518
539
|
|
519
540
|
def click_if_visible(self, selector):
|
520
541
|
if self.is_element_visible(selector):
|
521
|
-
self.find_element(selector)
|
542
|
+
element = self.find_element(selector)
|
543
|
+
element.scroll_into_view()
|
544
|
+
element.click()
|
522
545
|
self.__slow_mode_pause_if_set()
|
523
546
|
self.loop.run_until_complete(self.page.wait())
|
524
547
|
|
@@ -545,9 +568,10 @@ class CDPMethods():
|
|
545
568
|
except Exception:
|
546
569
|
continue
|
547
570
|
if (width != 0 or height != 0):
|
571
|
+
element.scroll_into_view()
|
548
572
|
element.click()
|
549
573
|
click_count += 1
|
550
|
-
time.sleep(0.
|
574
|
+
time.sleep(0.042)
|
551
575
|
self.__slow_mode_pause_if_set()
|
552
576
|
self.loop.run_until_complete(self.page.wait())
|
553
577
|
except Exception:
|
@@ -557,7 +581,7 @@ class CDPMethods():
|
|
557
581
|
"""(Attempt simulating a mouse click)"""
|
558
582
|
self.__slow_mode_pause_if_set()
|
559
583
|
element = self.find_element(selector, timeout=timeout)
|
560
|
-
|
584
|
+
element.scroll_into_view()
|
561
585
|
element.mouse_click()
|
562
586
|
self.__slow_mode_pause_if_set()
|
563
587
|
self.loop.run_until_complete(self.page.wait())
|
@@ -579,6 +603,7 @@ class CDPMethods():
|
|
579
603
|
|
580
604
|
def select_option_by_text(self, dropdown_selector, option):
|
581
605
|
element = self.find_element(dropdown_selector)
|
606
|
+
element.scroll_into_view()
|
582
607
|
options = element.query_selector_all("option")
|
583
608
|
for found_option in options:
|
584
609
|
if found_option.text.strip() == option.strip():
|
@@ -599,7 +624,10 @@ class CDPMethods():
|
|
599
624
|
"""Paint a quickly-vanishing dot over an element."""
|
600
625
|
selector = self.__convert_to_css_if_xpath(selector)
|
601
626
|
element = self.find_element(selector)
|
602
|
-
element.
|
627
|
+
element.scroll_into_view()
|
628
|
+
x_offset = self.__get_x_scroll_offset()
|
629
|
+
y_offset = self.__get_y_scroll_offset()
|
630
|
+
element.flash(duration, color, x_offset, y_offset)
|
603
631
|
if pause and isinstance(pause, (int, float)):
|
604
632
|
time.sleep(pause)
|
605
633
|
|
@@ -607,17 +635,22 @@ class CDPMethods():
|
|
607
635
|
"""Highlight an element with multi-colors."""
|
608
636
|
selector = self.__convert_to_css_if_xpath(selector)
|
609
637
|
element = self.find_element(selector)
|
610
|
-
element.
|
638
|
+
element.scroll_into_view()
|
639
|
+
x_offset = self.__get_x_scroll_offset()
|
640
|
+
y_offset = self.__get_y_scroll_offset()
|
641
|
+
element.flash(0.46, "44CC88", x_offset, y_offset)
|
611
642
|
time.sleep(0.15)
|
612
|
-
element.flash(0.42, "8844CC")
|
643
|
+
element.flash(0.42, "8844CC", x_offset, y_offset)
|
613
644
|
time.sleep(0.15)
|
614
|
-
element.flash(0.38, "CC8844")
|
645
|
+
element.flash(0.38, "CC8844", x_offset, y_offset)
|
615
646
|
time.sleep(0.15)
|
616
|
-
element.flash(0.30, "44CC88")
|
647
|
+
element.flash(0.30, "44CC88", x_offset, y_offset)
|
617
648
|
time.sleep(0.30)
|
618
649
|
|
619
650
|
def focus(self, selector):
|
620
|
-
self.find_element(selector)
|
651
|
+
element = self.find_element(selector)
|
652
|
+
element.scroll_into_view()
|
653
|
+
element.focus()
|
621
654
|
|
622
655
|
def highlight_overlay(self, selector):
|
623
656
|
self.find_element(selector).highlight_overlay()
|
@@ -646,7 +679,7 @@ class CDPMethods():
|
|
646
679
|
def send_keys(self, selector, text, timeout=settings.SMALL_TIMEOUT):
|
647
680
|
self.__slow_mode_pause_if_set()
|
648
681
|
element = self.select(selector, timeout=timeout)
|
649
|
-
|
682
|
+
element.scroll_into_view()
|
650
683
|
if text.endswith("\n") or text.endswith("\r"):
|
651
684
|
text = text[:-1] + "\r\n"
|
652
685
|
element.send_keys(text)
|
@@ -657,7 +690,7 @@ class CDPMethods():
|
|
657
690
|
"""Similar to send_keys(), but presses keys at human speed."""
|
658
691
|
self.__slow_mode_pause_if_set()
|
659
692
|
element = self.select(selector, timeout=timeout)
|
660
|
-
|
693
|
+
element.scroll_into_view()
|
661
694
|
submit = False
|
662
695
|
if text.endswith("\n") or text.endswith("\r"):
|
663
696
|
submit = True
|
@@ -675,7 +708,7 @@ class CDPMethods():
|
|
675
708
|
"""Similar to send_keys(), but clears the text field first."""
|
676
709
|
self.__slow_mode_pause_if_set()
|
677
710
|
element = self.select(selector, timeout=timeout)
|
678
|
-
|
711
|
+
element.scroll_into_view()
|
679
712
|
with suppress(Exception):
|
680
713
|
element.clear_input()
|
681
714
|
if text.endswith("\n") or text.endswith("\r"):
|
@@ -688,8 +721,8 @@ class CDPMethods():
|
|
688
721
|
"""Similar to send_keys(), but clears the text field first."""
|
689
722
|
self.__slow_mode_pause_if_set()
|
690
723
|
selector = self.__convert_to_css_if_xpath(selector)
|
691
|
-
self.select(selector, timeout=timeout)
|
692
|
-
|
724
|
+
element = self.select(selector, timeout=timeout)
|
725
|
+
element.scroll_into_view()
|
693
726
|
press_enter = False
|
694
727
|
if text.endswith("\n"):
|
695
728
|
text = text[:-1]
|
@@ -1655,17 +1688,24 @@ class CDPMethods():
|
|
1655
1688
|
raise Exception(error % (expected, actual))
|
1656
1689
|
|
1657
1690
|
def assert_text(
|
1658
|
-
self, text, selector="
|
1691
|
+
self, text, selector="body", timeout=settings.SMALL_TIMEOUT
|
1659
1692
|
):
|
1693
|
+
start_ms = time.time() * 1000.0
|
1694
|
+
stop_ms = start_ms + (timeout * 1000.0)
|
1660
1695
|
text = text.strip()
|
1661
1696
|
element = None
|
1662
1697
|
try:
|
1663
1698
|
element = self.find_element(selector, timeout=timeout)
|
1664
1699
|
except Exception:
|
1665
1700
|
raise Exception("Element {%s} not found!" % selector)
|
1666
|
-
for i in range(
|
1701
|
+
for i in range(int(timeout * 10)):
|
1702
|
+
with suppress(Exception):
|
1703
|
+
element = self.find_element(selector, timeout=0.1)
|
1667
1704
|
if text in element.text_all:
|
1668
1705
|
return True
|
1706
|
+
now_ms = time.time() * 1000.0
|
1707
|
+
if now_ms >= stop_ms:
|
1708
|
+
break
|
1669
1709
|
time.sleep(0.1)
|
1670
1710
|
raise Exception(
|
1671
1711
|
"Text {%s} not found in {%s}! Actual text: {%s}"
|
@@ -1673,20 +1713,27 @@ class CDPMethods():
|
|
1673
1713
|
)
|
1674
1714
|
|
1675
1715
|
def assert_exact_text(
|
1676
|
-
self, text, selector="
|
1716
|
+
self, text, selector="body", timeout=settings.SMALL_TIMEOUT
|
1677
1717
|
):
|
1718
|
+
start_ms = time.time() * 1000.0
|
1719
|
+
stop_ms = start_ms + (timeout * 1000.0)
|
1678
1720
|
text = text.strip()
|
1679
1721
|
element = None
|
1680
1722
|
try:
|
1681
1723
|
element = self.select(selector, timeout=timeout)
|
1682
1724
|
except Exception:
|
1683
1725
|
raise Exception("Element {%s} not found!" % selector)
|
1684
|
-
for i in range(
|
1726
|
+
for i in range(int(timeout * 10)):
|
1727
|
+
with suppress(Exception):
|
1728
|
+
element = self.select(selector, timeout=0.1)
|
1685
1729
|
if (
|
1686
1730
|
self.is_element_visible(selector)
|
1687
1731
|
and text.strip() == element.text_all.strip()
|
1688
1732
|
):
|
1689
1733
|
return True
|
1734
|
+
now_ms = time.time() * 1000.0
|
1735
|
+
if now_ms >= stop_ms:
|
1736
|
+
break
|
1690
1737
|
time.sleep(0.1)
|
1691
1738
|
raise Exception(
|
1692
1739
|
"Expected Text {%s}, is not equal to {%s} in {%s}!"
|
@@ -1727,26 +1774,31 @@ class CDPMethods():
|
|
1727
1774
|
with suppress(Exception):
|
1728
1775
|
self.loop.run_until_complete(self.page.evaluate(js_code))
|
1729
1776
|
self.loop.run_until_complete(self.page.wait())
|
1777
|
+
self.__add_light_pause()
|
1730
1778
|
|
1731
1779
|
def scroll_to_top(self):
|
1732
1780
|
js_code = "window.scrollTo(0, 0);"
|
1733
1781
|
with suppress(Exception):
|
1734
1782
|
self.loop.run_until_complete(self.page.evaluate(js_code))
|
1735
1783
|
self.loop.run_until_complete(self.page.wait())
|
1784
|
+
self.__add_light_pause()
|
1736
1785
|
|
1737
1786
|
def scroll_to_bottom(self):
|
1738
1787
|
js_code = "window.scrollTo(0, 10000);"
|
1739
1788
|
with suppress(Exception):
|
1740
1789
|
self.loop.run_until_complete(self.page.evaluate(js_code))
|
1741
1790
|
self.loop.run_until_complete(self.page.wait())
|
1791
|
+
self.__add_light_pause()
|
1742
1792
|
|
1743
1793
|
def scroll_up(self, amount=25):
|
1744
1794
|
self.loop.run_until_complete(self.page.scroll_up(amount))
|
1745
1795
|
self.loop.run_until_complete(self.page.wait())
|
1796
|
+
self.__add_light_pause()
|
1746
1797
|
|
1747
1798
|
def scroll_down(self, amount=25):
|
1748
1799
|
self.loop.run_until_complete(self.page.scroll_down(amount))
|
1749
1800
|
self.loop.run_until_complete(self.page.wait())
|
1801
|
+
self.__add_light_pause()
|
1750
1802
|
|
1751
1803
|
def save_screenshot(self, name, folder=None, selector=None):
|
1752
1804
|
filename = name
|