osn-selenium 1.0.0__py3-none-any.whl → 1.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- osn_selenium/_base_models.py +41 -0
- osn_selenium/_cdp_import.py +253 -0
- osn_selenium/_decorators.py +57 -0
- osn_selenium/_trio_threads_helpers.py +157 -0
- osn_selenium/_typehints.py +1 -1
- osn_selenium/abstract/executors/cdp.py +63 -0
- osn_selenium/abstract/webdriver/blink/base.py +14 -0
- osn_selenium/abstract/webdriver/blink/lifecycle.py +8 -8
- osn_selenium/abstract/webdriver/core/base.py +0 -14
- osn_selenium/abstract/webdriver/core/capture.py +4 -3
- osn_selenium/abstract/webdriver/core/lifecycle.py +8 -8
- osn_selenium/abstract/webdriver/core/script.py +5 -4
- osn_selenium/abstract/webdriver/core/window.py +11 -11
- osn_selenium/browsers_handler/models.py +1 -1
- osn_selenium/dev_tools/_decorators.py +19 -51
- osn_selenium/dev_tools/_functions.py +2 -4
- osn_selenium/dev_tools/_typehints.py +5 -2
- osn_selenium/dev_tools/_wrappers.py +0 -3
- osn_selenium/dev_tools/domains/__init__.py +2 -2
- osn_selenium/dev_tools/domains/abstract.py +1 -1
- osn_selenium/dev_tools/domains/fetch.py +6 -8
- osn_selenium/dev_tools/domains_default/fetch.py +2 -2
- osn_selenium/dev_tools/filters.py +1 -1
- osn_selenium/dev_tools/logger/main.py +9 -21
- osn_selenium/dev_tools/logger/models.py +1 -1
- osn_selenium/dev_tools/logger/target.py +49 -29
- osn_selenium/dev_tools/manager/base.py +10 -42
- osn_selenium/dev_tools/manager/lifecycle.py +84 -75
- osn_selenium/dev_tools/manager/logging.py +1 -1
- osn_selenium/dev_tools/manager/targets.py +13 -5
- osn_selenium/dev_tools/models.py +1 -1
- osn_selenium/dev_tools/settings.py +9 -5
- osn_selenium/dev_tools/target/base.py +30 -34
- osn_selenium/dev_tools/target/discovery.py +1 -1
- osn_selenium/dev_tools/target/events.py +2 -2
- osn_selenium/dev_tools/target/fingerprint.py +1 -1
- osn_selenium/dev_tools/target/lifecycle.py +103 -38
- osn_selenium/dev_tools/target/logging.py +11 -3
- osn_selenium/exceptions/__init__.py +0 -1
- osn_selenium/exceptions/base.py +28 -1
- osn_selenium/exceptions/bidi_bridge.py +59 -0
- osn_selenium/exceptions/configuration.py +1 -8
- osn_selenium/exceptions/dependencies.py +60 -0
- osn_selenium/exceptions/devtools.py +9 -39
- osn_selenium/exceptions/experimental.py +26 -0
- osn_selenium/exceptions/flags.py +0 -2
- osn_selenium/exceptions/instance.py +1 -9
- osn_selenium/exceptions/javascript.py +0 -2
- osn_selenium/exceptions/logic.py +0 -2
- osn_selenium/exceptions/path.py +1 -9
- osn_selenium/exceptions/platform.py +0 -2
- osn_selenium/exceptions/protocol.py +0 -3
- osn_selenium/exceptions/webdriver.py +1 -7
- osn_selenium/exceptions/window.py +1 -8
- osn_selenium/executors/sync/cdp.py +95 -0
- osn_selenium/executors/trio_bidi/cdp.py +101 -0
- osn_selenium/executors/trio_bidi/javascript.py +101 -0
- osn_selenium/executors/trio_threads/cdp.py +99 -0
- osn_selenium/executors/trio_threads/javascript.py +1 -1
- osn_selenium/executors/unified/javascript.py +0 -4
- osn_selenium/flags/base.py +7 -13
- osn_selenium/flags/blink.py +2 -8
- osn_selenium/flags/chrome.py +6 -6
- osn_selenium/flags/edge.py +6 -6
- osn_selenium/flags/models/base.py +4 -4
- osn_selenium/flags/models/blink.py +1 -1
- osn_selenium/flags/models/values.py +1 -1
- osn_selenium/instances/convert.py +44 -3
- osn_selenium/instances/protocols.py +47 -1
- osn_selenium/instances/sync/action_chains/__init__.py +6 -0
- osn_selenium/instances/sync/browsing_context.py +2 -2
- osn_selenium/instances/sync/script.py +7 -2
- osn_selenium/instances/sync/shadow_root.py +30 -8
- osn_selenium/instances/sync/web_element.py +1 -1
- osn_selenium/instances/trio_bidi/__init__.py +1 -0
- osn_selenium/instances/trio_bidi/shadow_root.py +180 -0
- osn_selenium/instances/trio_bidi/switch_to.py +143 -0
- osn_selenium/instances/trio_bidi/web_driver_wait.py +124 -0
- osn_selenium/instances/trio_bidi/web_element.py +239 -0
- osn_selenium/instances/trio_threads/action_chains/__init__.py +6 -0
- osn_selenium/instances/trio_threads/action_chains/base.py +1 -1
- osn_selenium/instances/trio_threads/alert.py +1 -1
- osn_selenium/instances/trio_threads/browser.py +1 -1
- osn_selenium/instances/trio_threads/browsing_context.py +3 -3
- osn_selenium/instances/trio_threads/dialog.py +1 -1
- osn_selenium/instances/trio_threads/fedcm.py +1 -1
- osn_selenium/instances/trio_threads/mobile.py +1 -1
- osn_selenium/instances/trio_threads/network.py +1 -1
- osn_selenium/instances/trio_threads/permissions.py +1 -1
- osn_selenium/instances/trio_threads/script.py +8 -3
- osn_selenium/instances/trio_threads/shadow_root.py +46 -15
- osn_selenium/instances/trio_threads/storage.py +1 -1
- osn_selenium/instances/trio_threads/switch_to.py +1 -1
- osn_selenium/instances/trio_threads/web_driver_wait.py +1 -1
- osn_selenium/instances/trio_threads/web_element.py +1 -1
- osn_selenium/instances/trio_threads/web_extension.py +1 -1
- osn_selenium/instances/unified/browsing_context.py +2 -2
- osn_selenium/instances/unified/script.py +2 -2
- osn_selenium/instances/unified/web_element.py +3 -5
- osn_selenium/javascript/fingerprint/__init__.py +3 -2
- osn_selenium/javascript/fingerprint/registry/models.py +1 -1
- osn_selenium/javascript/fingerprint/spoof/core_rules.py +1 -1
- osn_selenium/javascript/fingerprint/spoof/noise.py +1 -1
- osn_selenium/javascript/models.py +1 -1
- osn_selenium/models.py +2 -47
- osn_selenium/trio_bidi/__init__.py +1 -0
- osn_selenium/trio_bidi/_context_vars.py +12 -0
- osn_selenium/trio_bidi/_error_mappings.py +123 -0
- osn_selenium/trio_bidi/_error_redirects.py +194 -0
- osn_selenium/trio_bidi/_file_functions.py +28 -0
- osn_selenium/trio_bidi/_internal_mappings.py +10 -0
- osn_selenium/trio_bidi/_models.py +199 -0
- osn_selenium/trio_bidi/_typehints.py +20 -0
- osn_selenium/trio_bidi/connection_pool.py +587 -0
- osn_selenium/trio_bidi/mapping/__init__.py +1 -0
- osn_selenium/trio_bidi/mapping/_constants.py +14 -0
- osn_selenium/trio_bidi/mapping/_js_snippets.py +285 -0
- osn_selenium/trio_bidi/mapping/_utils.py +4 -0
- osn_selenium/trio_bidi/mapping/request_functions/__init__.py +87 -0
- osn_selenium/trio_bidi/mapping/request_functions/_alert.py +102 -0
- osn_selenium/trio_bidi/mapping/request_functions/_args_helpers.py +225 -0
- osn_selenium/trio_bidi/mapping/request_functions/_capture.py +71 -0
- osn_selenium/trio_bidi/mapping/request_functions/_cdp.py +40 -0
- osn_selenium/trio_bidi/mapping/request_functions/_element.py +55 -0
- osn_selenium/trio_bidi/mapping/request_functions/_file.py +32 -0
- osn_selenium/trio_bidi/mapping/request_functions/_navigation.py +147 -0
- osn_selenium/trio_bidi/mapping/request_functions/_script.py +85 -0
- osn_selenium/trio_bidi/mapping/request_functions/_shadow_root.py +65 -0
- osn_selenium/trio_bidi/mapping/request_functions/_switch_to.py +59 -0
- osn_selenium/trio_bidi/mapping/request_functions/_web_element.py +448 -0
- osn_selenium/trio_bidi/mapping/request_functions/_window.py +125 -0
- osn_selenium/trio_bidi/mapping/response_functions/__init__.py +86 -0
- osn_selenium/trio_bidi/mapping/response_functions/_alert.py +81 -0
- osn_selenium/trio_bidi/mapping/response_functions/_args_helpers.py +183 -0
- osn_selenium/trio_bidi/mapping/response_functions/_args_validators.py +153 -0
- osn_selenium/trio_bidi/mapping/response_functions/_capture.py +71 -0
- osn_selenium/trio_bidi/mapping/response_functions/_cdp.py +26 -0
- osn_selenium/trio_bidi/mapping/response_functions/_element.py +58 -0
- osn_selenium/trio_bidi/mapping/response_functions/_file.py +30 -0
- osn_selenium/trio_bidi/mapping/response_functions/_navigation.py +120 -0
- osn_selenium/trio_bidi/mapping/response_functions/_script.py +57 -0
- osn_selenium/trio_bidi/mapping/response_functions/_shadow_root.py +58 -0
- osn_selenium/trio_bidi/mapping/response_functions/_switch_to.py +57 -0
- osn_selenium/trio_bidi/mapping/response_functions/_web_element.py +368 -0
- osn_selenium/trio_bidi/mapping/response_functions/_window.py +119 -0
- osn_selenium/trio_bidi/mixin.py +186 -0
- osn_selenium/trio_bidi/remote_connection.py +164 -0
- osn_selenium/{base_mixin.py → trio_threads_mixin.py} +31 -40
- osn_selenium/webdrivers/_args_helpers.py +120 -7
- osn_selenium/webdrivers/_bridges.py +2 -2
- osn_selenium/webdrivers/_executable_tables/models.py +1 -1
- osn_selenium/webdrivers/_typehints.py +9 -3
- osn_selenium/webdrivers/protocols.py +81 -1
- osn_selenium/webdrivers/sync/blink/__init__.py +11 -1
- osn_selenium/webdrivers/sync/blink/base.py +23 -1
- osn_selenium/webdrivers/sync/blink/lifecycle.py +26 -8
- osn_selenium/webdrivers/sync/chrome/__init__.py +36 -1
- osn_selenium/webdrivers/sync/chrome/base.py +13 -1
- osn_selenium/webdrivers/sync/chrome/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/chrome/settings.py +6 -1
- osn_selenium/webdrivers/sync/core/__init__.py +10 -1
- osn_selenium/webdrivers/sync/core/base.py +18 -18
- osn_selenium/webdrivers/sync/core/capture.py +3 -2
- osn_selenium/webdrivers/sync/core/file.py +3 -2
- osn_selenium/webdrivers/sync/core/lifecycle.py +44 -10
- osn_selenium/webdrivers/sync/core/script.py +3 -2
- osn_selenium/webdrivers/sync/core/window.py +3 -3
- osn_selenium/webdrivers/sync/edge/__init__.py +36 -1
- osn_selenium/webdrivers/sync/edge/base.py +13 -1
- osn_selenium/webdrivers/sync/edge/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/edge/settings.py +6 -1
- osn_selenium/webdrivers/sync/yandex/__init__.py +36 -1
- osn_selenium/webdrivers/sync/yandex/base.py +13 -1
- osn_selenium/webdrivers/sync/yandex/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/yandex/settings.py +6 -1
- osn_selenium/webdrivers/trio_bidi/__init__.py +1 -0
- osn_selenium/webdrivers/trio_bidi/blink/__init__.py +132 -0
- osn_selenium/webdrivers/trio_bidi/blink/base.py +167 -0
- osn_selenium/webdrivers/trio_bidi/blink/lifecycle.py +89 -0
- osn_selenium/webdrivers/trio_bidi/blink/settings.py +63 -0
- osn_selenium/webdrivers/trio_bidi/chrome/__init__.py +114 -0
- osn_selenium/webdrivers/trio_bidi/chrome/base.py +127 -0
- osn_selenium/webdrivers/trio_bidi/chrome/lifecycle.py +85 -0
- osn_selenium/webdrivers/trio_bidi/chrome/settings.py +63 -0
- osn_selenium/webdrivers/trio_bidi/core/__init__.py +95 -0
- osn_selenium/webdrivers/trio_bidi/core/actions.py +70 -0
- osn_selenium/webdrivers/trio_bidi/core/base.py +200 -0
- osn_selenium/webdrivers/trio_bidi/core/capture.py +39 -0
- osn_selenium/webdrivers/trio_bidi/core/devtools.py +49 -0
- osn_selenium/webdrivers/trio_bidi/core/element.py +64 -0
- osn_selenium/webdrivers/trio_bidi/core/lifecycle.py +135 -0
- osn_selenium/webdrivers/trio_bidi/core/navigation.py +37 -0
- osn_selenium/webdrivers/trio_bidi/core/script.py +56 -0
- osn_selenium/webdrivers/trio_bidi/core/settings.py +36 -0
- osn_selenium/webdrivers/trio_bidi/core/window.py +134 -0
- osn_selenium/webdrivers/trio_bidi/edge/__init__.py +114 -0
- osn_selenium/webdrivers/trio_bidi/edge/base.py +123 -0
- osn_selenium/webdrivers/trio_bidi/edge/lifecycle.py +85 -0
- osn_selenium/webdrivers/trio_bidi/edge/settings.py +63 -0
- osn_selenium/webdrivers/trio_bidi/yandex/__init__.py +114 -0
- osn_selenium/webdrivers/trio_bidi/yandex/base.py +120 -0
- osn_selenium/webdrivers/trio_bidi/yandex/lifecycle.py +85 -0
- osn_selenium/webdrivers/trio_bidi/yandex/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/blink/__init__.py +18 -2
- osn_selenium/webdrivers/trio_threads/blink/base.py +25 -1
- osn_selenium/webdrivers/trio_threads/blink/casting.py +1 -1
- osn_selenium/webdrivers/trio_threads/blink/features.py +1 -1
- osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +26 -8
- osn_selenium/webdrivers/trio_threads/blink/logging.py +1 -1
- osn_selenium/webdrivers/trio_threads/blink/network.py +1 -1
- osn_selenium/webdrivers/trio_threads/chrome/__init__.py +34 -1
- osn_selenium/webdrivers/trio_threads/chrome/base.py +14 -2
- osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/chrome/settings.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/__init__.py +10 -14
- osn_selenium/webdrivers/trio_threads/core/actions.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/auth.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/base.py +18 -22
- osn_selenium/webdrivers/trio_threads/core/capture.py +4 -3
- osn_selenium/webdrivers/trio_threads/core/comonents.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/devtools.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/element.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/file.py +5 -4
- osn_selenium/webdrivers/trio_threads/core/lifecycle.py +45 -11
- osn_selenium/webdrivers/trio_threads/core/navigation.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/script.py +4 -3
- osn_selenium/webdrivers/trio_threads/core/settings.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/storage.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/timeouts.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/window.py +6 -6
- osn_selenium/webdrivers/trio_threads/edge/__init__.py +34 -1
- osn_selenium/webdrivers/trio_threads/edge/base.py +14 -2
- osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/edge/settings.py +1 -1
- osn_selenium/webdrivers/trio_threads/yandex/__init__.py +34 -1
- osn_selenium/webdrivers/trio_threads/yandex/base.py +14 -2
- osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/yandex/settings.py +1 -1
- osn_selenium/webdrivers/unified/blink/base.py +9 -1
- osn_selenium/webdrivers/unified/blink/lifecycle.py +4 -2
- osn_selenium/webdrivers/unified/chrome/base.py +9 -1
- osn_selenium/webdrivers/unified/core/auth.py +4 -2
- osn_selenium/webdrivers/unified/core/base.py +19 -6
- osn_selenium/webdrivers/unified/core/capture.py +3 -2
- osn_selenium/webdrivers/unified/core/components.py +12 -7
- osn_selenium/webdrivers/unified/core/devtools.py +2 -1
- osn_selenium/webdrivers/unified/core/file.py +3 -2
- osn_selenium/webdrivers/unified/core/lifecycle.py +5 -3
- osn_selenium/webdrivers/unified/core/script.py +5 -3
- osn_selenium/webdrivers/unified/core/storage.py +2 -1
- osn_selenium/webdrivers/unified/core/window.py +9 -8
- osn_selenium/webdrivers/unified/edge/base.py +9 -1
- osn_selenium/webdrivers/unified/yandex/base.py +9 -1
- {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/METADATA +24 -10
- osn_selenium-1.2.0.dist-info/RECORD +480 -0
- {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/WHEEL +1 -1
- osn_selenium/abstract/executors/cdp/__init__.py +0 -435
- osn_selenium/abstract/executors/cdp/accessibility.py +0 -62
- osn_selenium/abstract/executors/cdp/animation.py +0 -47
- osn_selenium/abstract/executors/cdp/audits.py +0 -39
- osn_selenium/abstract/executors/cdp/autofill.py +0 -34
- osn_selenium/abstract/executors/cdp/background_service.py +0 -22
- osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +0 -95
- osn_selenium/abstract/executors/cdp/browser.py +0 -122
- osn_selenium/abstract/executors/cdp/cache_storage.py +0 -49
- osn_selenium/abstract/executors/cdp/cast.py +0 -31
- osn_selenium/abstract/executors/cdp/console.py +0 -18
- osn_selenium/abstract/executors/cdp/css.py +0 -197
- osn_selenium/abstract/executors/cdp/debugger.py +0 -198
- osn_selenium/abstract/executors/cdp/device_access.py +0 -22
- osn_selenium/abstract/executors/cdp/device_orientation.py +0 -14
- osn_selenium/abstract/executors/cdp/dom.py +0 -305
- osn_selenium/abstract/executors/cdp/dom_debugger.py +0 -57
- osn_selenium/abstract/executors/cdp/dom_snapshot.py +0 -42
- osn_selenium/abstract/executors/cdp/dom_storage.py +0 -31
- osn_selenium/abstract/executors/cdp/emulation.py +0 -259
- osn_selenium/abstract/executors/cdp/event_breakpoints.py +0 -18
- osn_selenium/abstract/executors/cdp/extensions.py +0 -31
- osn_selenium/abstract/executors/cdp/fed_cm.py +0 -35
- osn_selenium/abstract/executors/cdp/fetch.py +0 -76
- osn_selenium/abstract/executors/cdp/file_system.py +0 -11
- osn_selenium/abstract/executors/cdp/headless_experimental.py +0 -30
- osn_selenium/abstract/executors/cdp/heap_profiler.py +0 -73
- osn_selenium/abstract/executors/cdp/indexed_db.py +0 -99
- osn_selenium/abstract/executors/cdp/input.py +0 -158
- osn_selenium/abstract/executors/cdp/inspector.py +0 -14
- osn_selenium/abstract/executors/cdp/io.py +0 -24
- osn_selenium/abstract/executors/cdp/layer_tree.py +0 -61
- osn_selenium/abstract/executors/cdp/log.py +0 -27
- osn_selenium/abstract/executors/cdp/media.py +0 -14
- osn_selenium/abstract/executors/cdp/memory.py +0 -61
- osn_selenium/abstract/executors/cdp/network.py +0 -252
- osn_selenium/abstract/executors/cdp/overlay.py +0 -166
- osn_selenium/abstract/executors/cdp/page.py +0 -347
- osn_selenium/abstract/executors/cdp/performance.py +0 -28
- osn_selenium/abstract/executors/cdp/performance_timeline.py +0 -11
- osn_selenium/abstract/executors/cdp/preload.py +0 -14
- osn_selenium/abstract/executors/cdp/profiler.py +0 -54
- osn_selenium/abstract/executors/cdp/pwa.py +0 -46
- osn_selenium/abstract/executors/cdp/runtime.py +0 -176
- osn_selenium/abstract/executors/cdp/schema.py +0 -11
- osn_selenium/abstract/executors/cdp/security.py +0 -26
- osn_selenium/abstract/executors/cdp/service_worker.py +0 -54
- osn_selenium/abstract/executors/cdp/storage.py +0 -175
- osn_selenium/abstract/executors/cdp/system_info.py +0 -24
- osn_selenium/abstract/executors/cdp/target.py +0 -125
- osn_selenium/abstract/executors/cdp/tethering.py +0 -14
- osn_selenium/abstract/executors/cdp/tracing.py +0 -48
- osn_selenium/abstract/executors/cdp/web_audio.py +0 -19
- osn_selenium/abstract/executors/cdp/web_authn.py +0 -76
- osn_selenium/executors/sync/cdp/__init__.py +0 -550
- osn_selenium/executors/sync/cdp/accessibility.py +0 -74
- osn_selenium/executors/sync/cdp/animation.py +0 -50
- osn_selenium/executors/sync/cdp/audits.py +0 -48
- osn_selenium/executors/sync/cdp/autofill.py +0 -39
- osn_selenium/executors/sync/cdp/background_service.py +0 -30
- osn_selenium/executors/sync/cdp/bluetooth_emulation.py +0 -101
- osn_selenium/executors/sync/cdp/browser.py +0 -131
- osn_selenium/executors/sync/cdp/cache_storage.py +0 -66
- osn_selenium/executors/sync/cdp/cast.py +0 -38
- osn_selenium/executors/sync/cdp/console.py +0 -24
- osn_selenium/executors/sync/cdp/css.py +0 -187
- osn_selenium/executors/sync/cdp/debugger.py +0 -206
- osn_selenium/executors/sync/cdp/device_access.py +0 -27
- osn_selenium/executors/sync/cdp/device_orientation.py +0 -24
- osn_selenium/executors/sync/cdp/dom.py +0 -310
- osn_selenium/executors/sync/cdp/dom_debugger.py +0 -56
- osn_selenium/executors/sync/cdp/dom_snapshot.py +0 -58
- osn_selenium/executors/sync/cdp/dom_storage.py +0 -38
- osn_selenium/executors/sync/cdp/emulation.py +0 -270
- osn_selenium/executors/sync/cdp/event_breakpoints.py +0 -27
- osn_selenium/executors/sync/cdp/extensions.py +0 -39
- osn_selenium/executors/sync/cdp/fed_cm.py +0 -45
- osn_selenium/executors/sync/cdp/fetch.py +0 -96
- osn_selenium/executors/sync/cdp/file_system.py +0 -18
- osn_selenium/executors/sync/cdp/headless_experimental.py +0 -44
- osn_selenium/executors/sync/cdp/heap_profiler.py +0 -89
- osn_selenium/executors/sync/cdp/indexed_db.py +0 -142
- osn_selenium/executors/sync/cdp/input.py +0 -233
- osn_selenium/executors/sync/cdp/inspector.py +0 -21
- osn_selenium/executors/sync/cdp/io.py +0 -33
- osn_selenium/executors/sync/cdp/layer_tree.py +0 -71
- osn_selenium/executors/sync/cdp/log.py +0 -35
- osn_selenium/executors/sync/cdp/media.py +0 -21
- osn_selenium/executors/sync/cdp/memory.py +0 -62
- osn_selenium/executors/sync/cdp/network.py +0 -287
- osn_selenium/executors/sync/cdp/overlay.py +0 -174
- osn_selenium/executors/sync/cdp/page.py +0 -365
- osn_selenium/executors/sync/cdp/performance.py +0 -33
- osn_selenium/executors/sync/cdp/performance_timeline.py +0 -26
- osn_selenium/executors/sync/cdp/preload.py +0 -21
- osn_selenium/executors/sync/cdp/profiler.py +0 -58
- osn_selenium/executors/sync/cdp/pwa.py +0 -55
- osn_selenium/executors/sync/cdp/runtime.py +0 -221
- osn_selenium/executors/sync/cdp/schema.py +0 -23
- osn_selenium/executors/sync/cdp/security.py +0 -30
- osn_selenium/executors/sync/cdp/service_worker.py +0 -56
- osn_selenium/executors/sync/cdp/storage.py +0 -151
- osn_selenium/executors/sync/cdp/system_info.py +0 -30
- osn_selenium/executors/sync/cdp/target.py +0 -147
- osn_selenium/executors/sync/cdp/tethering.py +0 -21
- osn_selenium/executors/sync/cdp/tracing.py +0 -62
- osn_selenium/executors/sync/cdp/web_audio.py +0 -24
- osn_selenium/executors/sync/cdp/web_authn.py +0 -82
- osn_selenium/executors/trio_threads/cdp/__init__.py +0 -771
- osn_selenium/executors/trio_threads/cdp/accessibility.py +0 -87
- osn_selenium/executors/trio_threads/cdp/animation.py +0 -63
- osn_selenium/executors/trio_threads/cdp/audits.py +0 -57
- osn_selenium/executors/trio_threads/cdp/autofill.py +0 -52
- osn_selenium/executors/trio_threads/cdp/background_service.py +0 -40
- osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +0 -111
- osn_selenium/executors/trio_threads/cdp/browser.py +0 -140
- osn_selenium/executors/trio_threads/cdp/cache_storage.py +0 -79
- osn_selenium/executors/trio_threads/cdp/cast.py +0 -47
- osn_selenium/executors/trio_threads/cdp/console.py +0 -33
- osn_selenium/executors/trio_threads/cdp/css.py +0 -196
- osn_selenium/executors/trio_threads/cdp/debugger.py +0 -219
- osn_selenium/executors/trio_threads/cdp/device_access.py +0 -40
- osn_selenium/executors/trio_threads/cdp/device_orientation.py +0 -34
- osn_selenium/executors/trio_threads/cdp/dom.py +0 -319
- osn_selenium/executors/trio_threads/cdp/dom_debugger.py +0 -69
- osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +0 -71
- osn_selenium/executors/trio_threads/cdp/dom_storage.py +0 -51
- osn_selenium/executors/trio_threads/cdp/emulation.py +0 -283
- osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +0 -37
- osn_selenium/executors/trio_threads/cdp/extensions.py +0 -52
- osn_selenium/executors/trio_threads/cdp/fed_cm.py +0 -54
- osn_selenium/executors/trio_threads/cdp/fetch.py +0 -105
- osn_selenium/executors/trio_threads/cdp/file_system.py +0 -31
- osn_selenium/executors/trio_threads/cdp/headless_experimental.py +0 -54
- osn_selenium/executors/trio_threads/cdp/heap_profiler.py +0 -102
- osn_selenium/executors/trio_threads/cdp/indexed_db.py +0 -155
- osn_selenium/executors/trio_threads/cdp/input.py +0 -242
- osn_selenium/executors/trio_threads/cdp/inspector.py +0 -34
- osn_selenium/executors/trio_threads/cdp/io.py +0 -42
- osn_selenium/executors/trio_threads/cdp/layer_tree.py +0 -84
- osn_selenium/executors/trio_threads/cdp/log.py +0 -44
- osn_selenium/executors/trio_threads/cdp/media.py +0 -30
- osn_selenium/executors/trio_threads/cdp/memory.py +0 -71
- osn_selenium/executors/trio_threads/cdp/network.py +0 -296
- osn_selenium/executors/trio_threads/cdp/overlay.py +0 -183
- osn_selenium/executors/trio_threads/cdp/page.py +0 -374
- osn_selenium/executors/trio_threads/cdp/performance.py +0 -46
- osn_selenium/executors/trio_threads/cdp/performance_timeline.py +0 -36
- osn_selenium/executors/trio_threads/cdp/preload.py +0 -30
- osn_selenium/executors/trio_threads/cdp/profiler.py +0 -71
- osn_selenium/executors/trio_threads/cdp/pwa.py +0 -64
- osn_selenium/executors/trio_threads/cdp/runtime.py +0 -230
- osn_selenium/executors/trio_threads/cdp/schema.py +0 -32
- osn_selenium/executors/trio_threads/cdp/security.py +0 -43
- osn_selenium/executors/trio_threads/cdp/service_worker.py +0 -69
- osn_selenium/executors/trio_threads/cdp/storage.py +0 -162
- osn_selenium/executors/trio_threads/cdp/system_info.py +0 -43
- osn_selenium/executors/trio_threads/cdp/target.py +0 -156
- osn_selenium/executors/trio_threads/cdp/tethering.py +0 -34
- osn_selenium/executors/trio_threads/cdp/tracing.py +0 -71
- osn_selenium/executors/trio_threads/cdp/web_audio.py +0 -37
- osn_selenium/executors/trio_threads/cdp/web_authn.py +0 -95
- osn_selenium/executors/unified/cdp/accessibility.py +0 -81
- osn_selenium/executors/unified/cdp/animation.py +0 -50
- osn_selenium/executors/unified/cdp/audits.py +0 -45
- osn_selenium/executors/unified/cdp/autofill.py +0 -41
- osn_selenium/executors/unified/cdp/background_service.py +0 -24
- osn_selenium/executors/unified/cdp/bluetooth_emulation.py +0 -132
- osn_selenium/executors/unified/cdp/browser.py +0 -143
- osn_selenium/executors/unified/cdp/cache_storage.py +0 -69
- osn_selenium/executors/unified/cdp/cast.py +0 -32
- osn_selenium/executors/unified/cdp/console.py +0 -18
- osn_selenium/executors/unified/cdp/css.py +0 -237
- osn_selenium/executors/unified/cdp/debugger.py +0 -243
- osn_selenium/executors/unified/cdp/device_access.py +0 -21
- osn_selenium/executors/unified/cdp/device_orientation.py +0 -18
- osn_selenium/executors/unified/cdp/dom.py +0 -380
- osn_selenium/executors/unified/cdp/dom_debugger.py +0 -65
- osn_selenium/executors/unified/cdp/dom_snapshot.py +0 -58
- osn_selenium/executors/unified/cdp/dom_storage.py +0 -38
- osn_selenium/executors/unified/cdp/emulation.py +0 -312
- osn_selenium/executors/unified/cdp/event_breakpoints.py +0 -24
- osn_selenium/executors/unified/cdp/extensions.py +0 -45
- osn_selenium/executors/unified/cdp/fed_cm.py +0 -51
- osn_selenium/executors/unified/cdp/fetch.py +0 -111
- osn_selenium/executors/unified/cdp/file_system.py +0 -15
- osn_selenium/executors/unified/cdp/headless_experimental.py +0 -38
- osn_selenium/executors/unified/cdp/heap_profiler.py +0 -101
- osn_selenium/executors/unified/cdp/indexed_db.py +0 -157
- osn_selenium/executors/unified/cdp/input.py +0 -254
- osn_selenium/executors/unified/cdp/inspector.py +0 -15
- osn_selenium/executors/unified/cdp/io.py +0 -29
- osn_selenium/executors/unified/cdp/layer_tree.py +0 -71
- osn_selenium/executors/unified/cdp/log.py +0 -29
- osn_selenium/executors/unified/cdp/media.py +0 -15
- osn_selenium/executors/unified/cdp/memory.py +0 -59
- osn_selenium/executors/unified/cdp/network.py +0 -323
- osn_selenium/executors/unified/cdp/overlay.py +0 -209
- osn_selenium/executors/unified/cdp/page.py +0 -410
- osn_selenium/executors/unified/cdp/performance.py +0 -27
- osn_selenium/executors/unified/cdp/performance_timeline.py +0 -17
- osn_selenium/executors/unified/cdp/preload.py +0 -15
- osn_selenium/executors/unified/cdp/profiler.py +0 -55
- osn_selenium/executors/unified/cdp/pwa.py +0 -55
- osn_selenium/executors/unified/cdp/runtime.py +0 -245
- osn_selenium/executors/unified/cdp/schema.py +0 -17
- osn_selenium/executors/unified/cdp/security.py +0 -27
- osn_selenium/executors/unified/cdp/service_worker.py +0 -62
- osn_selenium/executors/unified/cdp/storage.py +0 -178
- osn_selenium/executors/unified/cdp/system_info.py +0 -24
- osn_selenium/executors/unified/cdp/target.py +0 -165
- osn_selenium/executors/unified/cdp/tethering.py +0 -15
- osn_selenium/executors/unified/cdp/tracing.py +0 -62
- osn_selenium/executors/unified/cdp/web_audio.py +0 -18
- osn_selenium/executors/unified/cdp/web_authn.py +0 -103
- osn_selenium-1.0.0.dist-info/RECORD +0 -608
- /osn_selenium/{dev_tools/_exception_helpers.py → _exception_helpers.py} +0 -0
- /osn_selenium/executors/{unified/cdp → trio_bidi}/__init__.py +0 -0
- {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
import math
|
|
1
2
|
import trio
|
|
2
|
-
from typing import Any, Callable, Dict
|
|
3
3
|
from osn_selenium.instances.protocols import AnyInstanceWrapper
|
|
4
|
+
from typing import (
|
|
5
|
+
Any,
|
|
6
|
+
Callable,
|
|
7
|
+
Dict,
|
|
8
|
+
Optional,
|
|
9
|
+
Union
|
|
10
|
+
)
|
|
4
11
|
from osn_selenium.exceptions.protocol import (
|
|
5
12
|
ProtocolComplianceError
|
|
6
13
|
)
|
|
@@ -13,15 +20,20 @@ from osn_selenium.instances.sync.web_element import (
|
|
|
13
20
|
from selenium.webdriver.remote.webelement import (
|
|
14
21
|
WebElement as SeleniumWebElement
|
|
15
22
|
)
|
|
16
|
-
from osn_selenium.
|
|
17
|
-
|
|
18
|
-
TrioThreadWebDriver
|
|
23
|
+
from osn_selenium.instances.trio_bidi.web_element import (
|
|
24
|
+
WebElement as TrioBiDiWebElement
|
|
19
25
|
)
|
|
20
26
|
from osn_selenium.instances.trio_threads.web_element import (
|
|
21
27
|
WebElement as TrioThreadWebElement
|
|
22
28
|
)
|
|
29
|
+
from osn_selenium.webdrivers.protocols import (
|
|
30
|
+
SyncWebDriver,
|
|
31
|
+
TrioBiDiWebDriver,
|
|
32
|
+
TrioThreadWebDriver
|
|
33
|
+
)
|
|
23
34
|
from osn_selenium.instances.convert import (
|
|
24
35
|
get_sync_instance_wrapper,
|
|
36
|
+
get_trio_bidi_instance_wrapper,
|
|
25
37
|
get_trio_thread_instance_wrapper
|
|
26
38
|
)
|
|
27
39
|
|
|
@@ -31,6 +43,7 @@ __all__ = [
|
|
|
31
43
|
"get_wrap_args_function",
|
|
32
44
|
"unwrap_args",
|
|
33
45
|
"wrap_sync_args",
|
|
46
|
+
"wrap_trio_bidi_args",
|
|
34
47
|
"wrap_trio_thread_args"
|
|
35
48
|
]
|
|
36
49
|
|
|
@@ -64,6 +77,91 @@ def unwrap_args(args: Any) -> Any:
|
|
|
64
77
|
return args
|
|
65
78
|
|
|
66
79
|
|
|
80
|
+
def wrap_trio_bidi_args(
|
|
81
|
+
args: Any,
|
|
82
|
+
lock: trio.Lock,
|
|
83
|
+
limiter: trio.CapacityLimiter,
|
|
84
|
+
trio_token: Optional[trio.lowlevel.TrioToken] = None,
|
|
85
|
+
bidi_buffer_size: Union[int, float] = math.inf,
|
|
86
|
+
) -> Any:
|
|
87
|
+
"""
|
|
88
|
+
Recursively wraps Selenium WebElements into TrioBiDiWebElement instances.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
args (Any): Data structure containing potential Selenium WebElements.
|
|
92
|
+
lock (trio.Lock): Trio lock for synchronization.
|
|
93
|
+
limiter (trio.CapacityLimiter): Trio capacity limiter.
|
|
94
|
+
trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
|
|
95
|
+
bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
Any: Data structure with wrapped elements.
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
if isinstance(args, list):
|
|
102
|
+
return [
|
|
103
|
+
wrap_trio_bidi_args(
|
|
104
|
+
arg,
|
|
105
|
+
lock=lock,
|
|
106
|
+
limiter=limiter,
|
|
107
|
+
trio_token=trio_token,
|
|
108
|
+
bidi_buffer_size=bidi_buffer_size,
|
|
109
|
+
) for arg in args
|
|
110
|
+
]
|
|
111
|
+
|
|
112
|
+
if isinstance(args, set):
|
|
113
|
+
return {
|
|
114
|
+
wrap_trio_bidi_args(
|
|
115
|
+
arg,
|
|
116
|
+
lock=lock,
|
|
117
|
+
limiter=limiter,
|
|
118
|
+
trio_token=trio_token,
|
|
119
|
+
bidi_buffer_size=bidi_buffer_size,
|
|
120
|
+
) for arg in args
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if isinstance(args, tuple):
|
|
124
|
+
return (
|
|
125
|
+
wrap_trio_bidi_args(
|
|
126
|
+
arg,
|
|
127
|
+
lock=lock,
|
|
128
|
+
limiter=limiter,
|
|
129
|
+
trio_token=trio_token,
|
|
130
|
+
bidi_buffer_size=bidi_buffer_size,
|
|
131
|
+
) for arg in args
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
if isinstance(args, dict):
|
|
135
|
+
return {
|
|
136
|
+
wrap_trio_bidi_args(
|
|
137
|
+
key,
|
|
138
|
+
lock=lock,
|
|
139
|
+
limiter=limiter,
|
|
140
|
+
trio_token=trio_token,
|
|
141
|
+
bidi_buffer_size=bidi_buffer_size,
|
|
142
|
+
): wrap_trio_bidi_args(
|
|
143
|
+
value,
|
|
144
|
+
lock=lock,
|
|
145
|
+
limiter=limiter,
|
|
146
|
+
trio_token=trio_token,
|
|
147
|
+
bidi_buffer_size=bidi_buffer_size,
|
|
148
|
+
)
|
|
149
|
+
for key, value in args.items()
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if isinstance(args, SeleniumWebElement):
|
|
153
|
+
return get_trio_bidi_instance_wrapper(
|
|
154
|
+
wrapper_class=TrioBiDiWebElement,
|
|
155
|
+
legacy_object=args,
|
|
156
|
+
lock=lock,
|
|
157
|
+
limiter=limiter,
|
|
158
|
+
trio_token=trio_token,
|
|
159
|
+
bidi_buffer_size=bidi_buffer_size,
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
return args
|
|
163
|
+
|
|
164
|
+
|
|
67
165
|
def wrap_trio_thread_args(args: Any, lock: trio.Lock, limiter: trio.CapacityLimiter) -> Any:
|
|
68
166
|
"""
|
|
69
167
|
Recursively wraps Selenium WebElements into TrioThreadWebElement instances.
|
|
@@ -146,19 +244,34 @@ def get_wrap_args_function(driver: ANY_WEBDRIVER_PROTOCOL_TYPEHINT) -> Callable[
|
|
|
146
244
|
ExpectedTypeError: If the driver instance type is not supported.
|
|
147
245
|
"""
|
|
148
246
|
|
|
149
|
-
if isinstance(driver, SyncWebDriver) and driver.
|
|
247
|
+
if isinstance(driver, SyncWebDriver) and driver.architecture == "sync":
|
|
150
248
|
def wrapper(args: Any) -> Any:
|
|
151
249
|
return wrap_sync_args(args)
|
|
152
250
|
|
|
153
251
|
return wrapper
|
|
154
252
|
|
|
155
|
-
if isinstance(driver, TrioThreadWebDriver) and driver.
|
|
253
|
+
if isinstance(driver, TrioThreadWebDriver) and driver.architecture == "trio_threads":
|
|
156
254
|
def wrapper(args: Any) -> Any:
|
|
157
255
|
return wrap_trio_thread_args(args, lock=driver.lock, limiter=driver.capacity_limiter)
|
|
158
256
|
|
|
159
257
|
return wrapper
|
|
160
258
|
|
|
161
|
-
|
|
259
|
+
if isinstance(driver, TrioBiDiWebDriver) and driver.architecture == "trio_bidi":
|
|
260
|
+
def wrapper(args: Any) -> Any:
|
|
261
|
+
return wrap_trio_bidi_args(
|
|
262
|
+
args,
|
|
263
|
+
lock=driver.lock,
|
|
264
|
+
limiter=driver.capacity_limiter,
|
|
265
|
+
trio_token=driver.trio_token,
|
|
266
|
+
bidi_buffer_size=driver.trio_bidi_buffer_size,
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
return wrapper
|
|
270
|
+
|
|
271
|
+
raise ProtocolComplianceError(
|
|
272
|
+
instance=driver,
|
|
273
|
+
expected_protocols=(SyncWebDriver, TrioThreadWebDriver, TrioBiDiWebDriver)
|
|
274
|
+
)
|
|
162
275
|
|
|
163
276
|
|
|
164
277
|
def build_cdp_kwargs(**kwargs: Any) -> Dict[str, Any]:
|
|
@@ -25,7 +25,7 @@ def get_js_executor_bridge(driver: ANY_WEBDRIVER_PROTOCOL_TYPEHINT) -> Callable[
|
|
|
25
25
|
def wrapper(script: str, *args: Any) -> Any:
|
|
26
26
|
args = unwrap_args(args)
|
|
27
27
|
|
|
28
|
-
result = driver.
|
|
28
|
+
result = driver.driver.execute_script(script, *args)
|
|
29
29
|
|
|
30
30
|
return wrapper_function(result)
|
|
31
31
|
|
|
@@ -48,7 +48,7 @@ def get_cdp_executor_bridge(driver: ANY_WEBDRIVER_PROTOCOL_TYPEHINT) -> Callable
|
|
|
48
48
|
def wrapper(cmd: str, cmd_args: Dict[str, Any]) -> Any:
|
|
49
49
|
cmd_args = unwrap_args(cmd_args)
|
|
50
50
|
|
|
51
|
-
result = driver.
|
|
51
|
+
result = driver.driver.execute_cdp_cmd(cmd, cmd_args)
|
|
52
52
|
|
|
53
53
|
return wrapper_function(result)
|
|
54
54
|
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
from typing import Union
|
|
1
|
+
from typing import TYPE_CHECKING, Union
|
|
2
2
|
from osn_selenium.webdrivers.protocols import (
|
|
3
3
|
SyncWebDriver,
|
|
4
|
+
TrioBiDiWebDriver,
|
|
4
5
|
TrioThreadWebDriver
|
|
5
6
|
)
|
|
6
7
|
|
|
7
8
|
|
|
8
|
-
__all__ = ["ANY_WEBDRIVER_PROTOCOL_TYPEHINT"]
|
|
9
|
+
__all__ = ["ANY_TRIO_WEBDRIVER_TYPEHINT", "ANY_WEBDRIVER_PROTOCOL_TYPEHINT"]
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from osn_selenium.webdrivers.trio_threads.core import CoreWebDriver as TrioThreadsWebDriver
|
|
13
|
+
from osn_selenium.webdrivers.trio_bidi.core import CoreWebDriver as TrioBidiWebDriver
|
|
14
|
+
|
|
15
|
+
ANY_WEBDRIVER_PROTOCOL_TYPEHINT = Union[SyncWebDriver, TrioThreadWebDriver, TrioBiDiWebDriver]
|
|
16
|
+
ANY_TRIO_WEBDRIVER_TYPEHINT = Union["TrioThreadsWebDriver", "TrioBidiWebDriver"]
|
|
@@ -2,6 +2,7 @@ import trio
|
|
|
2
2
|
from typing import (
|
|
3
3
|
Optional,
|
|
4
4
|
Protocol,
|
|
5
|
+
Union,
|
|
5
6
|
runtime_checkable
|
|
6
7
|
)
|
|
7
8
|
from selenium.webdriver.remote.webdriver import (
|
|
@@ -9,7 +10,7 @@ from selenium.webdriver.remote.webdriver import (
|
|
|
9
10
|
)
|
|
10
11
|
|
|
11
12
|
|
|
12
|
-
__all__ = ["SyncWebDriver", "TrioThreadWebDriver"]
|
|
13
|
+
__all__ = ["SyncWebDriver", "TrioBiDiWebDriver", "TrioThreadWebDriver"]
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
@runtime_checkable
|
|
@@ -20,18 +21,89 @@ class TrioThreadWebDriver(Protocol):
|
|
|
20
21
|
|
|
21
22
|
@property
|
|
22
23
|
def architecture(self) -> str:
|
|
24
|
+
"""
|
|
25
|
+
Returns the driver architecture.
|
|
26
|
+
"""
|
|
27
|
+
|
|
23
28
|
...
|
|
24
29
|
|
|
25
30
|
@property
|
|
26
31
|
def capacity_limiter(self) -> trio.CapacityLimiter:
|
|
32
|
+
"""
|
|
33
|
+
Returns the Trio capacity limiter.
|
|
34
|
+
"""
|
|
35
|
+
|
|
27
36
|
...
|
|
28
37
|
|
|
29
38
|
@property
|
|
30
39
|
def driver(self) -> Optional[legacyWebDriver]:
|
|
40
|
+
"""
|
|
41
|
+
Returns the underlying legacy driver.
|
|
42
|
+
"""
|
|
43
|
+
|
|
31
44
|
...
|
|
32
45
|
|
|
33
46
|
@property
|
|
34
47
|
def lock(self) -> trio.Lock:
|
|
48
|
+
"""
|
|
49
|
+
Returns the Trio lock.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
...
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@runtime_checkable
|
|
56
|
+
class TrioBiDiWebDriver(Protocol):
|
|
57
|
+
"""
|
|
58
|
+
Protocol for a WebDriver that supports BiDi and Trio thread pool operations.
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
@property
|
|
62
|
+
def architecture(self) -> str:
|
|
63
|
+
"""
|
|
64
|
+
Returns the driver architecture.
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
...
|
|
68
|
+
|
|
69
|
+
@property
|
|
70
|
+
def capacity_limiter(self) -> trio.CapacityLimiter:
|
|
71
|
+
"""
|
|
72
|
+
Returns the Trio capacity limiter.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
...
|
|
76
|
+
|
|
77
|
+
@property
|
|
78
|
+
def driver(self) -> Optional[legacyWebDriver]:
|
|
79
|
+
"""
|
|
80
|
+
Returns the underlying legacy driver.
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
...
|
|
84
|
+
|
|
85
|
+
@property
|
|
86
|
+
def lock(self) -> trio.Lock:
|
|
87
|
+
"""
|
|
88
|
+
Returns the Trio lock.
|
|
89
|
+
"""
|
|
90
|
+
|
|
91
|
+
...
|
|
92
|
+
|
|
93
|
+
@property
|
|
94
|
+
def trio_bidi_buffer_size(self) -> Union[int, float]:
|
|
95
|
+
"""
|
|
96
|
+
Returns the BiDi task buffer size.
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
...
|
|
100
|
+
|
|
101
|
+
@property
|
|
102
|
+
def trio_token(self) -> trio.lowlevel.TrioToken:
|
|
103
|
+
"""
|
|
104
|
+
Returns the Trio event loop token.
|
|
105
|
+
"""
|
|
106
|
+
|
|
35
107
|
...
|
|
36
108
|
|
|
37
109
|
|
|
@@ -43,8 +115,16 @@ class SyncWebDriver(Protocol):
|
|
|
43
115
|
|
|
44
116
|
@property
|
|
45
117
|
def architecture(self) -> str:
|
|
118
|
+
"""
|
|
119
|
+
Returns the driver architecture.
|
|
120
|
+
"""
|
|
121
|
+
|
|
46
122
|
...
|
|
47
123
|
|
|
48
124
|
@property
|
|
49
125
|
def driver(self) -> Optional[legacyWebDriver]:
|
|
126
|
+
"""
|
|
127
|
+
Returns the underlying legacy driver.
|
|
128
|
+
"""
|
|
129
|
+
|
|
50
130
|
...
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
from typing import Optional, Type
|
|
2
1
|
from osn_selenium.models import WindowRect
|
|
2
|
+
from typing import (
|
|
3
|
+
Mapping,
|
|
4
|
+
Optional,
|
|
5
|
+
Type
|
|
6
|
+
)
|
|
3
7
|
from osn_selenium._typehints import PATH_TYPEHINT
|
|
4
8
|
from osn_selenium.flags.blink import BlinkFlagsManager
|
|
5
9
|
from osn_selenium.flags.models.blink import BlinkFlags
|
|
@@ -50,6 +54,8 @@ class BlinkWebDriver(
|
|
|
50
54
|
page_load_timeout: int = 5,
|
|
51
55
|
script_timeout: int = 5,
|
|
52
56
|
window_rect: Optional[WindowRect] = None,
|
|
57
|
+
cdp_versioned_packages_paths: Optional[Mapping[int, PATH_TYPEHINT]] = None,
|
|
58
|
+
ignore_cdp_version_package_missing: bool = True,
|
|
53
59
|
):
|
|
54
60
|
"""
|
|
55
61
|
Initializes the BlinkWebDriver instance.
|
|
@@ -95,6 +101,8 @@ class BlinkWebDriver(
|
|
|
95
101
|
page_load_timeout=page_load_timeout,
|
|
96
102
|
script_timeout=script_timeout,
|
|
97
103
|
window_rect=window_rect,
|
|
104
|
+
cdp_versioned_packages_paths=cdp_versioned_packages_paths,
|
|
105
|
+
ignore_cdp_version_package_missing=ignore_cdp_version_package_missing,
|
|
98
106
|
)
|
|
99
107
|
|
|
100
108
|
BlinkBaseMixin.__init__(
|
|
@@ -111,4 +119,6 @@ class BlinkWebDriver(
|
|
|
111
119
|
page_load_timeout=page_load_timeout,
|
|
112
120
|
script_timeout=script_timeout,
|
|
113
121
|
window_rect=window_rect,
|
|
122
|
+
cdp_versioned_packages_paths=cdp_versioned_packages_paths,
|
|
123
|
+
ignore_cdp_version_package_missing=ignore_cdp_version_package_missing,
|
|
114
124
|
)
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import pathlib
|
|
2
|
-
from typing import Optional, Type
|
|
3
2
|
from osn_selenium.models import WindowRect
|
|
3
|
+
from typing import (
|
|
4
|
+
Mapping,
|
|
5
|
+
Optional,
|
|
6
|
+
Type
|
|
7
|
+
)
|
|
4
8
|
from osn_selenium.flags.blink import BlinkFlagsManager
|
|
5
9
|
from osn_selenium.flags.models.blink import BlinkFlags
|
|
10
|
+
from osn_selenium.executors.sync.cdp import CDPExecutor
|
|
6
11
|
from osn_selenium.webdrivers.sync.core.base import CoreBaseMixin
|
|
12
|
+
from osn_selenium.webdrivers._bridges import (
|
|
13
|
+
get_cdp_executor_bridge
|
|
14
|
+
)
|
|
7
15
|
from osn_selenium._typehints import (
|
|
8
16
|
ARCHITECTURES_TYPEHINT,
|
|
9
17
|
PATH_TYPEHINT
|
|
@@ -45,6 +53,8 @@ class BlinkBaseMixin(UnifiedBlinkBaseMixin, CoreBaseMixin, AbstractBlinkBaseMixi
|
|
|
45
53
|
page_load_timeout: int = 5,
|
|
46
54
|
script_timeout: int = 5,
|
|
47
55
|
window_rect: Optional[WindowRect] = None,
|
|
56
|
+
cdp_versioned_packages_paths: Optional[Mapping[int, PATH_TYPEHINT]] = None,
|
|
57
|
+
ignore_cdp_version_package_missing: bool = True,
|
|
48
58
|
):
|
|
49
59
|
"""
|
|
50
60
|
Initializes the BlinkWebDriver instance.
|
|
@@ -79,6 +89,8 @@ class BlinkBaseMixin(UnifiedBlinkBaseMixin, CoreBaseMixin, AbstractBlinkBaseMixi
|
|
|
79
89
|
script_timeout (int): The default asynchronous script timeout in seconds. Defaults to 5.
|
|
80
90
|
window_rect (Optional[WindowRect]): The initial window size and position. If None,
|
|
81
91
|
the browser's default window size will be used. Defaults to None.
|
|
92
|
+
cdp_versioned_packages_paths (Optional[Mapping[int, PATH_TYPEHINT]]): Custom local paths for specific CDP versions packages.
|
|
93
|
+
ignore_cdp_version_package_missing (bool): Whether to ignore missing CDP package errors.
|
|
82
94
|
"""
|
|
83
95
|
|
|
84
96
|
CoreBaseMixin.__init__(
|
|
@@ -90,6 +102,8 @@ class BlinkBaseMixin(UnifiedBlinkBaseMixin, CoreBaseMixin, AbstractBlinkBaseMixi
|
|
|
90
102
|
page_load_timeout=page_load_timeout,
|
|
91
103
|
script_timeout=script_timeout,
|
|
92
104
|
window_rect=window_rect,
|
|
105
|
+
cdp_versioned_packages_paths=cdp_versioned_packages_paths,
|
|
106
|
+
ignore_cdp_version_package_missing=ignore_cdp_version_package_missing,
|
|
93
107
|
)
|
|
94
108
|
|
|
95
109
|
UnifiedBlinkBaseMixin.__init__(
|
|
@@ -106,12 +120,20 @@ class BlinkBaseMixin(UnifiedBlinkBaseMixin, CoreBaseMixin, AbstractBlinkBaseMixi
|
|
|
106
120
|
page_load_timeout=page_load_timeout,
|
|
107
121
|
script_timeout=script_timeout,
|
|
108
122
|
window_rect=window_rect,
|
|
123
|
+
cdp_versioned_packages_paths=cdp_versioned_packages_paths,
|
|
124
|
+
ignore_cdp_version_package_missing=ignore_cdp_version_package_missing,
|
|
109
125
|
)
|
|
126
|
+
|
|
127
|
+
self._cdp_executor = CDPExecutor(execute_function=get_cdp_executor_bridge(self))
|
|
110
128
|
|
|
111
129
|
@property
|
|
112
130
|
def browser_exe(self) -> Optional[pathlib.Path]:
|
|
113
131
|
return self._browser_exe_impl
|
|
114
132
|
|
|
133
|
+
@property
|
|
134
|
+
def cdp(self) -> CDPExecutor:
|
|
135
|
+
return self._cdp_executor
|
|
136
|
+
|
|
115
137
|
@property
|
|
116
138
|
def debugging_ip(self) -> Optional[str]:
|
|
117
139
|
return self._debugging_ip_impl
|
|
@@ -26,10 +26,7 @@ class BlinkLifecycleMixin(
|
|
|
26
26
|
underlying browser instance, ensuring clean session management.
|
|
27
27
|
"""
|
|
28
28
|
|
|
29
|
-
def
|
|
30
|
-
self._close_webdriver_impl()
|
|
31
|
-
|
|
32
|
-
def restart_webdriver(
|
|
29
|
+
def start_webdriver(
|
|
33
30
|
self,
|
|
34
31
|
flags: Optional[BlinkFlags] = None,
|
|
35
32
|
browser_exe: Optional[PATH_TYPEHINT] = None,
|
|
@@ -38,16 +35,16 @@ class BlinkLifecycleMixin(
|
|
|
38
35
|
start_page_url: Optional[str] = None,
|
|
39
36
|
window_rect: Optional[WindowRect] = None,
|
|
40
37
|
) -> None:
|
|
41
|
-
self.
|
|
38
|
+
self._start_webdriver_impl(
|
|
42
39
|
flags=flags,
|
|
43
40
|
browser_exe=browser_exe,
|
|
44
41
|
browser_name_in_system=browser_name_in_system,
|
|
45
42
|
use_browser_exe=use_browser_exe,
|
|
46
43
|
start_page_url=start_page_url,
|
|
47
|
-
window_rect=window_rect
|
|
44
|
+
window_rect=window_rect,
|
|
48
45
|
)
|
|
49
46
|
|
|
50
|
-
def
|
|
47
|
+
def __enter__(
|
|
51
48
|
self,
|
|
52
49
|
flags: Optional[BlinkFlags] = None,
|
|
53
50
|
browser_exe: Optional[PATH_TYPEHINT] = None,
|
|
@@ -56,7 +53,7 @@ class BlinkLifecycleMixin(
|
|
|
56
53
|
start_page_url: Optional[str] = None,
|
|
57
54
|
window_rect: Optional[WindowRect] = None,
|
|
58
55
|
) -> None:
|
|
59
|
-
self.
|
|
56
|
+
self.start_webdriver(
|
|
60
57
|
flags=flags,
|
|
61
58
|
browser_exe=browser_exe,
|
|
62
59
|
browser_name_in_system=browser_name_in_system,
|
|
@@ -64,3 +61,24 @@ class BlinkLifecycleMixin(
|
|
|
64
61
|
start_page_url=start_page_url,
|
|
65
62
|
window_rect=window_rect,
|
|
66
63
|
)
|
|
64
|
+
|
|
65
|
+
def restart_webdriver(
|
|
66
|
+
self,
|
|
67
|
+
flags: Optional[BlinkFlags] = None,
|
|
68
|
+
browser_exe: Optional[PATH_TYPEHINT] = None,
|
|
69
|
+
browser_name_in_system: Optional[str] = None,
|
|
70
|
+
use_browser_exe: Optional[bool] = None,
|
|
71
|
+
start_page_url: Optional[str] = None,
|
|
72
|
+
window_rect: Optional[WindowRect] = None,
|
|
73
|
+
) -> None:
|
|
74
|
+
self._restart_webdriver_impl(
|
|
75
|
+
flags=flags,
|
|
76
|
+
browser_exe=browser_exe,
|
|
77
|
+
browser_name_in_system=browser_name_in_system,
|
|
78
|
+
use_browser_exe=use_browser_exe,
|
|
79
|
+
start_page_url=start_page_url,
|
|
80
|
+
window_rect=window_rect
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
def stop_webdriver(self) -> None:
|
|
84
|
+
self._stop_webdriver_impl()
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
from typing import Optional, Type
|
|
2
1
|
from osn_selenium.models import WindowRect
|
|
2
|
+
from typing import (
|
|
3
|
+
Mapping,
|
|
4
|
+
Optional,
|
|
5
|
+
Type
|
|
6
|
+
)
|
|
3
7
|
from osn_selenium._typehints import PATH_TYPEHINT
|
|
4
8
|
from osn_selenium.flags.chrome import ChromeFlagsManager
|
|
5
9
|
from osn_selenium.flags.models.chrome import ChromeFlags
|
|
@@ -35,7 +39,34 @@ class ChromeWebDriver(
|
|
|
35
39
|
page_load_timeout: int = 5,
|
|
36
40
|
script_timeout: int = 5,
|
|
37
41
|
window_rect: Optional[WindowRect] = None,
|
|
42
|
+
cdp_versioned_packages_paths: Optional[Mapping[int, PATH_TYPEHINT]] = None,
|
|
43
|
+
ignore_cdp_version_package_missing: bool = True,
|
|
38
44
|
):
|
|
45
|
+
"""
|
|
46
|
+
Initializes the synchronous Chrome WebDriver with specified configuration.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
webdriver_path (str): Path to the ChromeDriver executable.
|
|
50
|
+
flags_manager_type (Type[ChromeFlagsManager]): The class type used for managing Chrome flags.
|
|
51
|
+
Defaults to ChromeFlagsManager.
|
|
52
|
+
use_browser_exe (bool): Whether to use a specific browser executable path or auto-detect.
|
|
53
|
+
Defaults to True.
|
|
54
|
+
browser_name_in_system (str): The name of the browser in the system registry or path.
|
|
55
|
+
Defaults to "Google Chrome".
|
|
56
|
+
browser_exe (Optional[PATH_TYPEHINT]): Explicit path to the Chrome browser executable.
|
|
57
|
+
If None, it may be auto-detected based on other parameters.
|
|
58
|
+
flags (Optional[ChromeFlags]): Initial set of flags to configure the Chrome instance.
|
|
59
|
+
start_page_url (str): The URL to navigate to immediately upon startup.
|
|
60
|
+
Defaults to "about:blank".
|
|
61
|
+
implicitly_wait (int): Default implicit wait time in seconds. Defaults to 5.
|
|
62
|
+
page_load_timeout (int): Default page load timeout in seconds. Defaults to 5.
|
|
63
|
+
script_timeout (int): Default script execution timeout in seconds. Defaults to 5.
|
|
64
|
+
window_rect (Optional[WindowRect]): Initial window dimensions and position.
|
|
65
|
+
If None, browser defaults are used.
|
|
66
|
+
cdp_versioned_packages_paths (Optional[Mapping[int, PATH_TYPEHINT]]): Custom local paths for specific CDP versions packages.
|
|
67
|
+
ignore_cdp_version_package_missing (bool): Whether to ignore missing CDP package errors.
|
|
68
|
+
"""
|
|
69
|
+
|
|
39
70
|
BlinkWebDriver.__init__(
|
|
40
71
|
self,
|
|
41
72
|
browser_exe=browser_exe,
|
|
@@ -48,6 +79,8 @@ class ChromeWebDriver(
|
|
|
48
79
|
page_load_timeout=page_load_timeout,
|
|
49
80
|
script_timeout=script_timeout,
|
|
50
81
|
window_rect=window_rect,
|
|
82
|
+
cdp_versioned_packages_paths=cdp_versioned_packages_paths,
|
|
83
|
+
ignore_cdp_version_package_missing=ignore_cdp_version_package_missing,
|
|
51
84
|
)
|
|
52
85
|
|
|
53
86
|
ChromeBaseMixin.__init__(
|
|
@@ -64,4 +97,6 @@ class ChromeWebDriver(
|
|
|
64
97
|
page_load_timeout=page_load_timeout,
|
|
65
98
|
script_timeout=script_timeout,
|
|
66
99
|
window_rect=window_rect,
|
|
100
|
+
cdp_versioned_packages_paths=cdp_versioned_packages_paths,
|
|
101
|
+
ignore_cdp_version_package_missing=ignore_cdp_version_package_missing,
|
|
67
102
|
)
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
from typing import Optional, Type
|
|
2
1
|
from osn_selenium.models import WindowRect
|
|
2
|
+
from typing import (
|
|
3
|
+
Mapping,
|
|
4
|
+
Optional,
|
|
5
|
+
Type
|
|
6
|
+
)
|
|
3
7
|
from osn_selenium.flags.chrome import ChromeFlagsManager
|
|
4
8
|
from osn_selenium.flags.models.chrome import ChromeFlags
|
|
5
9
|
from selenium.webdriver import (
|
|
@@ -44,6 +48,8 @@ class ChromeBaseMixin(UnifiedChromeBaseMixin, BlinkBaseMixin, AbstractChromeBase
|
|
|
44
48
|
page_load_timeout: int = 5,
|
|
45
49
|
script_timeout: int = 5,
|
|
46
50
|
window_rect: Optional[WindowRect] = None,
|
|
51
|
+
cdp_versioned_packages_paths: Optional[Mapping[int, PATH_TYPEHINT]] = None,
|
|
52
|
+
ignore_cdp_version_package_missing: bool = True,
|
|
47
53
|
):
|
|
48
54
|
"""
|
|
49
55
|
Initializes the synchronous Chrome WebDriver mixin with specified configuration.
|
|
@@ -67,6 +73,8 @@ class ChromeBaseMixin(UnifiedChromeBaseMixin, BlinkBaseMixin, AbstractChromeBase
|
|
|
67
73
|
script_timeout (int): Default script execution timeout in seconds. Defaults to 5.
|
|
68
74
|
window_rect (Optional[WindowRect]): Initial window dimensions and position.
|
|
69
75
|
If None, browser defaults are used.
|
|
76
|
+
cdp_versioned_packages_paths (Optional[Mapping[int, PATH_TYPEHINT]]): Custom local paths for specific CDP versions packages.
|
|
77
|
+
ignore_cdp_version_package_missing (bool): Whether to ignore missing CDP package errors.
|
|
70
78
|
"""
|
|
71
79
|
|
|
72
80
|
BlinkBaseMixin.__init__(
|
|
@@ -83,6 +91,8 @@ class ChromeBaseMixin(UnifiedChromeBaseMixin, BlinkBaseMixin, AbstractChromeBase
|
|
|
83
91
|
page_load_timeout=page_load_timeout,
|
|
84
92
|
script_timeout=script_timeout,
|
|
85
93
|
window_rect=window_rect,
|
|
94
|
+
cdp_versioned_packages_paths=cdp_versioned_packages_paths,
|
|
95
|
+
ignore_cdp_version_package_missing=ignore_cdp_version_package_missing,
|
|
86
96
|
)
|
|
87
97
|
|
|
88
98
|
UnifiedChromeBaseMixin.__init__(
|
|
@@ -99,6 +109,8 @@ class ChromeBaseMixin(UnifiedChromeBaseMixin, BlinkBaseMixin, AbstractChromeBase
|
|
|
99
109
|
page_load_timeout=page_load_timeout,
|
|
100
110
|
script_timeout=script_timeout,
|
|
101
111
|
window_rect=window_rect,
|
|
112
|
+
cdp_versioned_packages_paths=cdp_versioned_packages_paths,
|
|
113
|
+
ignore_cdp_version_package_missing=ignore_cdp_version_package_missing,
|
|
102
114
|
)
|
|
103
115
|
|
|
104
116
|
@property
|
|
@@ -2,7 +2,7 @@ from typing import Optional
|
|
|
2
2
|
from osn_selenium.models import WindowRect
|
|
3
3
|
from osn_selenium._typehints import PATH_TYPEHINT
|
|
4
4
|
from osn_selenium.flags.models.chrome import ChromeFlags
|
|
5
|
-
from osn_selenium.webdrivers.sync.blink import BlinkLifecycleMixin
|
|
5
|
+
from osn_selenium.webdrivers.sync.blink.lifecycle import BlinkLifecycleMixin
|
|
6
6
|
from osn_selenium.webdrivers.unified.chrome.lifecycle import (
|
|
7
7
|
UnifiedChromeLifecycleMixin
|
|
8
8
|
)
|
|
@@ -26,7 +26,7 @@ class ChromeLifecycleMixin(
|
|
|
26
26
|
underlying browser instance, ensuring clean session management.
|
|
27
27
|
"""
|
|
28
28
|
|
|
29
|
-
def
|
|
29
|
+
def start_webdriver(
|
|
30
30
|
self,
|
|
31
31
|
flags: Optional[ChromeFlags] = None,
|
|
32
32
|
browser_exe: Optional[PATH_TYPEHINT] = None,
|
|
@@ -35,7 +35,7 @@ class ChromeLifecycleMixin(
|
|
|
35
35
|
start_page_url: Optional[str] = None,
|
|
36
36
|
window_rect: Optional[WindowRect] = None,
|
|
37
37
|
) -> None:
|
|
38
|
-
self.
|
|
38
|
+
self._start_webdriver_impl(
|
|
39
39
|
flags=flags,
|
|
40
40
|
browser_exe=browser_exe,
|
|
41
41
|
browser_name_in_system=browser_name_in_system,
|
|
@@ -44,7 +44,7 @@ class ChromeLifecycleMixin(
|
|
|
44
44
|
window_rect=window_rect,
|
|
45
45
|
)
|
|
46
46
|
|
|
47
|
-
def
|
|
47
|
+
def __enter__(
|
|
48
48
|
self,
|
|
49
49
|
flags: Optional[ChromeFlags] = None,
|
|
50
50
|
browser_exe: Optional[PATH_TYPEHINT] = None,
|
|
@@ -53,7 +53,25 @@ class ChromeLifecycleMixin(
|
|
|
53
53
|
start_page_url: Optional[str] = None,
|
|
54
54
|
window_rect: Optional[WindowRect] = None,
|
|
55
55
|
) -> None:
|
|
56
|
-
self.
|
|
56
|
+
self.start_webdriver(
|
|
57
|
+
flags=flags,
|
|
58
|
+
browser_exe=browser_exe,
|
|
59
|
+
browser_name_in_system=browser_name_in_system,
|
|
60
|
+
use_browser_exe=use_browser_exe,
|
|
61
|
+
start_page_url=start_page_url,
|
|
62
|
+
window_rect=window_rect,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
def restart_webdriver(
|
|
66
|
+
self,
|
|
67
|
+
flags: Optional[ChromeFlags] = None,
|
|
68
|
+
browser_exe: Optional[PATH_TYPEHINT] = None,
|
|
69
|
+
browser_name_in_system: Optional[str] = None,
|
|
70
|
+
use_browser_exe: Optional[bool] = None,
|
|
71
|
+
start_page_url: Optional[str] = None,
|
|
72
|
+
window_rect: Optional[WindowRect] = None,
|
|
73
|
+
) -> None:
|
|
74
|
+
self._restart_webdriver_impl(
|
|
57
75
|
flags=flags,
|
|
58
76
|
browser_exe=browser_exe,
|
|
59
77
|
browser_name_in_system=browser_name_in_system,
|
|
@@ -2,6 +2,7 @@ from typing import Optional
|
|
|
2
2
|
from osn_selenium.models import WindowRect
|
|
3
3
|
from osn_selenium._typehints import PATH_TYPEHINT
|
|
4
4
|
from osn_selenium.flags.models.chrome import ChromeFlags
|
|
5
|
+
from osn_selenium.webdrivers.sync.blink.settings import BlinkSettingsMixin
|
|
5
6
|
from osn_selenium.webdrivers.unified.chrome.settings import (
|
|
6
7
|
UnifiedChromeSettingsMixin
|
|
7
8
|
)
|
|
@@ -13,7 +14,11 @@ from osn_selenium.abstract.webdriver.chrome.settings import (
|
|
|
13
14
|
__all__ = ["ChromeSettingsMixin"]
|
|
14
15
|
|
|
15
16
|
|
|
16
|
-
class ChromeSettingsMixin(
|
|
17
|
+
class ChromeSettingsMixin(
|
|
18
|
+
UnifiedChromeSettingsMixin,
|
|
19
|
+
BlinkSettingsMixin,
|
|
20
|
+
AbstractChromeSettingsMixin
|
|
21
|
+
):
|
|
17
22
|
"""
|
|
18
23
|
Mixin for configuring and updating settings of the Chrome WebDriver.
|
|
19
24
|
|