osn-selenium 1.1.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/_decorators.py +57 -0
- osn_selenium/_trio_threads_helpers.py +157 -0
- osn_selenium/_typehints.py +1 -1
- 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/dev_tools/_decorators.py +1 -42
- osn_selenium/dev_tools/_functions.py +2 -4
- osn_selenium/dev_tools/domains/__init__.py +1 -1
- osn_selenium/dev_tools/domains/fetch.py +5 -7
- osn_selenium/dev_tools/domains_default/fetch.py +1 -1
- osn_selenium/dev_tools/logger/main.py +9 -9
- osn_selenium/dev_tools/logger/target.py +7 -7
- osn_selenium/dev_tools/manager/base.py +10 -19
- osn_selenium/dev_tools/manager/lifecycle.py +83 -74
- osn_selenium/dev_tools/manager/logging.py +1 -1
- osn_selenium/dev_tools/manager/targets.py +13 -5
- osn_selenium/dev_tools/settings.py +4 -4
- osn_selenium/dev_tools/target/base.py +18 -11
- 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 -43
- osn_selenium/dev_tools/target/logging.py +1 -1
- 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 +2 -2
- 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 +0 -5
- 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 +0 -5
- osn_selenium/flags/base.py +6 -4
- osn_selenium/flags/blink.py +2 -2
- osn_selenium/flags/chrome.py +6 -6
- osn_selenium/flags/edge.py +6 -6
- osn_selenium/instances/convert.py +44 -3
- osn_selenium/instances/protocols.py +47 -1
- osn_selenium/instances/sync/browsing_context.py +2 -2
- osn_selenium/instances/sync/script.py +7 -2
- 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/browsing_context.py +2 -2
- osn_selenium/instances/trio_threads/fedcm.py +1 -1
- osn_selenium/instances/trio_threads/network.py +1 -1
- osn_selenium/instances/trio_threads/script.py +7 -2
- 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 +2 -1
- 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/trio_threads_mixin.py +22 -68
- osn_selenium/webdrivers/_args_helpers.py +118 -5
- osn_selenium/webdrivers/_typehints.py +9 -3
- osn_selenium/webdrivers/protocols.py +81 -1
- osn_selenium/webdrivers/sync/blink/base.py +10 -0
- osn_selenium/webdrivers/sync/blink/lifecycle.py +26 -8
- osn_selenium/webdrivers/sync/chrome/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/chrome/settings.py +6 -1
- osn_selenium/webdrivers/sync/core/base.py +3 -11
- 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/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/edge/settings.py +6 -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 +7 -1
- osn_selenium/webdrivers/trio_threads/blink/base.py +14 -0
- osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +26 -8
- 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 +0 -10
- 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 +4 -16
- osn_selenium/webdrivers/trio_threads/core/capture.py +3 -2
- osn_selenium/webdrivers/trio_threads/core/file.py +3 -2
- osn_selenium/webdrivers/trio_threads/core/lifecycle.py +44 -10
- osn_selenium/webdrivers/trio_threads/core/script.py +3 -2
- 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 +4 -4
- 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/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/yandex/settings.py +1 -1
- osn_selenium/webdrivers/unified/blink/base.py +5 -1
- osn_selenium/webdrivers/unified/blink/lifecycle.py +4 -2
- osn_selenium/webdrivers/unified/chrome/base.py +5 -1
- osn_selenium/webdrivers/unified/core/auth.py +4 -2
- osn_selenium/webdrivers/unified/core/base.py +16 -10
- 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 +5 -1
- osn_selenium/webdrivers/unified/yandex/base.py +5 -1
- {osn_selenium-1.1.0.dist-info → osn_selenium-1.2.0.dist-info}/METADATA +3 -2
- osn_selenium-1.2.0.dist-info/RECORD +480 -0
- 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/base_mixin.py +0 -122
- 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.1.0.dist-info/RECORD +0 -615
- /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.1.0.dist-info → osn_selenium-1.2.0.dist-info}/WHEEL +0 -0
- {osn_selenium-1.1.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.
|
|
@@ -158,7 +256,22 @@ def get_wrap_args_function(driver: ANY_WEBDRIVER_PROTOCOL_TYPEHINT) -> Callable[
|
|
|
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]:
|
|
@@ -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
|
...
|
|
@@ -7,7 +7,11 @@ from typing import (
|
|
|
7
7
|
)
|
|
8
8
|
from osn_selenium.flags.blink import BlinkFlagsManager
|
|
9
9
|
from osn_selenium.flags.models.blink import BlinkFlags
|
|
10
|
+
from osn_selenium.executors.sync.cdp import CDPExecutor
|
|
10
11
|
from osn_selenium.webdrivers.sync.core.base import CoreBaseMixin
|
|
12
|
+
from osn_selenium.webdrivers._bridges import (
|
|
13
|
+
get_cdp_executor_bridge
|
|
14
|
+
)
|
|
11
15
|
from osn_selenium._typehints import (
|
|
12
16
|
ARCHITECTURES_TYPEHINT,
|
|
13
17
|
PATH_TYPEHINT
|
|
@@ -119,11 +123,17 @@ class BlinkBaseMixin(UnifiedBlinkBaseMixin, CoreBaseMixin, AbstractBlinkBaseMixi
|
|
|
119
123
|
cdp_versioned_packages_paths=cdp_versioned_packages_paths,
|
|
120
124
|
ignore_cdp_version_package_missing=ignore_cdp_version_package_missing,
|
|
121
125
|
)
|
|
126
|
+
|
|
127
|
+
self._cdp_executor = CDPExecutor(execute_function=get_cdp_executor_bridge(self))
|
|
122
128
|
|
|
123
129
|
@property
|
|
124
130
|
def browser_exe(self) -> Optional[pathlib.Path]:
|
|
125
131
|
return self._browser_exe_impl
|
|
126
132
|
|
|
133
|
+
@property
|
|
134
|
+
def cdp(self) -> CDPExecutor:
|
|
135
|
+
return self._cdp_executor
|
|
136
|
+
|
|
127
137
|
@property
|
|
128
138
|
def debugging_ip(self) -> Optional[str]:
|
|
129
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()
|
|
@@ -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
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from osn_selenium.models import WindowRect
|
|
2
|
-
from osn_selenium.executors.sync.cdp import CDPExecutor
|
|
3
2
|
from osn_selenium.flags.base import BrowserFlagsManager
|
|
4
3
|
from osn_selenium.flags.models.base import BrowserFlags
|
|
5
4
|
from selenium.webdriver.common.bidi.session import Session
|
|
@@ -14,6 +13,9 @@ from typing import (
|
|
|
14
13
|
from selenium.webdriver.remote.errorhandler import ErrorHandler
|
|
15
14
|
from selenium.webdriver.remote.locator_converter import LocatorConverter
|
|
16
15
|
from selenium.webdriver.remote.remote_connection import RemoteConnection
|
|
16
|
+
from osn_selenium.webdrivers._bridges import (
|
|
17
|
+
get_js_executor_bridge
|
|
18
|
+
)
|
|
17
19
|
from osn_selenium.webdrivers.unified.core.base import UnifiedCoreBaseMixin
|
|
18
20
|
from osn_selenium._typehints import (
|
|
19
21
|
ARCHITECTURES_TYPEHINT,
|
|
@@ -25,10 +27,6 @@ from osn_selenium.abstract.webdriver.core.base import (
|
|
|
25
27
|
from selenium.webdriver.remote.webdriver import (
|
|
26
28
|
WebDriver as legacyWebDriver
|
|
27
29
|
)
|
|
28
|
-
from osn_selenium.webdrivers._bridges import (
|
|
29
|
-
get_cdp_executor_bridge,
|
|
30
|
-
get_js_executor_bridge
|
|
31
|
-
)
|
|
32
30
|
|
|
33
31
|
|
|
34
32
|
__all__ = ["CoreBaseMixin"]
|
|
@@ -88,8 +86,6 @@ class CoreBaseMixin(UnifiedCoreBaseMixin, AbstractCoreBaseMixin):
|
|
|
88
86
|
ignore_cdp_version_package_missing=ignore_cdp_version_package_missing,
|
|
89
87
|
)
|
|
90
88
|
|
|
91
|
-
self._cdp_executor = CDPExecutor(execute_function=get_cdp_executor_bridge(self))
|
|
92
|
-
|
|
93
89
|
self._js_executor = JSExecutor(execute_function=get_js_executor_bridge(self))
|
|
94
90
|
|
|
95
91
|
@property
|
|
@@ -108,10 +104,6 @@ class CoreBaseMixin(UnifiedCoreBaseMixin, AbstractCoreBaseMixin):
|
|
|
108
104
|
def caps(self, value: Dict[str, Any]) -> None:
|
|
109
105
|
self._caps_set_impl(value)
|
|
110
106
|
|
|
111
|
-
@property
|
|
112
|
-
def cdp(self) -> CDPExecutor:
|
|
113
|
-
return self._cdp_executor
|
|
114
|
-
|
|
115
107
|
@property
|
|
116
108
|
def command_executor(self) -> RemoteConnection:
|
|
117
109
|
return self._command_executor_get_impl()
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
from typing import
|
|
1
|
+
from typing import Optional
|
|
2
|
+
from selenium.webdriver.common.print_page_options import PrintOptions
|
|
2
3
|
from osn_selenium.webdrivers.unified.core.capture import (
|
|
3
4
|
UnifiedCoreCaptureMixin
|
|
4
5
|
)
|
|
@@ -30,7 +31,7 @@ class CoreCaptureMixin(UnifiedCoreCaptureMixin, AbstractCoreCaptureMixin):
|
|
|
30
31
|
def page_source(self) -> str:
|
|
31
32
|
return self._page_source_impl()
|
|
32
33
|
|
|
33
|
-
def print_page(self, print_options: Optional[
|
|
34
|
+
def print_page(self, print_options: Optional[PrintOptions] = None) -> str:
|
|
34
35
|
return self._print_page_impl(print_options=print_options)
|
|
35
36
|
|
|
36
37
|
def save_screenshot(self, filename: str) -> bool:
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from contextlib import contextmanager
|
|
2
2
|
from typing import Any, Generator, List
|
|
3
|
+
from selenium.webdriver.remote.file_detector import FileDetector
|
|
3
4
|
from osn_selenium.webdrivers.unified.core.file import UnifiedCoreFileMixin
|
|
4
5
|
from osn_selenium.abstract.webdriver.core.file import (
|
|
5
6
|
AbstractCoreFileMixin
|
|
@@ -24,11 +25,11 @@ class CoreFileMixin(UnifiedCoreFileMixin, AbstractCoreFileMixin):
|
|
|
24
25
|
self._download_file_impl(file_name=file_name, target_directory=target_directory)
|
|
25
26
|
|
|
26
27
|
@property
|
|
27
|
-
def file_detector(self) ->
|
|
28
|
+
def file_detector(self) -> FileDetector:
|
|
28
29
|
return self._file_detector_get_impl()
|
|
29
30
|
|
|
30
31
|
@file_detector.setter
|
|
31
|
-
def file_detector(self, value:
|
|
32
|
+
def file_detector(self, value: FileDetector) -> None:
|
|
32
33
|
self._file_detector_set_impl(value)
|
|
33
34
|
|
|
34
35
|
@contextmanager
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
from types import TracebackType
|
|
1
2
|
from osn_selenium.models import WindowRect
|
|
3
|
+
from osn_selenium.flags.models.base import BrowserFlags
|
|
2
4
|
from typing import (
|
|
3
5
|
Any,
|
|
4
6
|
Dict,
|
|
5
7
|
Optional,
|
|
8
|
+
Type,
|
|
6
9
|
Union
|
|
7
10
|
)
|
|
8
|
-
from osn_selenium.flags.models.base import BrowserFlags
|
|
9
11
|
from selenium.webdriver.remote.remote_connection import RemoteConnection
|
|
10
12
|
from osn_selenium.webdrivers.unified.core.lifecycle import (
|
|
11
13
|
UnifiedCoreLifecycleMixin
|
|
@@ -26,8 +28,47 @@ class CoreLifecycleMixin(UnifiedCoreLifecycleMixin, AbstractCoreLifecycleMixin):
|
|
|
26
28
|
underlying browser instance, ensuring clean session management.
|
|
27
29
|
"""
|
|
28
30
|
|
|
29
|
-
def
|
|
30
|
-
|
|
31
|
+
def start_webdriver(
|
|
32
|
+
self,
|
|
33
|
+
flags: Optional[BrowserFlags] = None,
|
|
34
|
+
window_rect: Optional[WindowRect] = None,
|
|
35
|
+
) -> None:
|
|
36
|
+
self._start_webdriver_impl(flags=flags, window_rect=window_rect)
|
|
37
|
+
|
|
38
|
+
def __enter__(
|
|
39
|
+
self,
|
|
40
|
+
flags: Optional[BrowserFlags] = None,
|
|
41
|
+
window_rect: Optional[WindowRect] = None,
|
|
42
|
+
) -> None:
|
|
43
|
+
self.start_webdriver(flags=flags, window_rect=window_rect)
|
|
44
|
+
|
|
45
|
+
def stop_webdriver(self) -> None:
|
|
46
|
+
self._stop_webdriver_impl()
|
|
47
|
+
|
|
48
|
+
def __exit__(
|
|
49
|
+
self,
|
|
50
|
+
exc_type: Optional[Type[BaseException]],
|
|
51
|
+
exc_val: Optional[BaseException],
|
|
52
|
+
exc_tb: Optional[TracebackType],
|
|
53
|
+
) -> bool:
|
|
54
|
+
"""
|
|
55
|
+
Synchronously exits the WebDriver context.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
exc_type (Optional[Type[BaseException]]): The exception type, if any.
|
|
59
|
+
exc_val (Optional[BaseException]): The exception value, if any.
|
|
60
|
+
exc_tb (Optional[TracebackType]): The exception traceback, if any.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
bool: True if an exception was suppressed, False otherwise.
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
self.stop_webdriver()
|
|
67
|
+
|
|
68
|
+
if exc_type is not None and exc_val is not None and exc_tb is not None:
|
|
69
|
+
return True
|
|
70
|
+
|
|
71
|
+
return False
|
|
31
72
|
|
|
32
73
|
def quit(self) -> None:
|
|
33
74
|
self._quit_impl()
|
|
@@ -48,12 +89,5 @@ class CoreLifecycleMixin(UnifiedCoreLifecycleMixin, AbstractCoreLifecycleMixin):
|
|
|
48
89
|
def start_session(self, capabilities: Dict[str, Any]) -> None:
|
|
49
90
|
self._start_session_impl(capabilities=capabilities)
|
|
50
91
|
|
|
51
|
-
def start_webdriver(
|
|
52
|
-
self,
|
|
53
|
-
flags: Optional[BrowserFlags] = None,
|
|
54
|
-
window_rect: Optional[WindowRect] = None,
|
|
55
|
-
) -> None:
|
|
56
|
-
self._start_webdriver_impl(flags=flags, window_rect=window_rect)
|
|
57
|
-
|
|
58
92
|
def stop_client(self) -> None:
|
|
59
93
|
self._stop_client_impl()
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from typing import Any, List, Optional
|
|
2
2
|
from osn_selenium.instances.sync.script import Script
|
|
3
|
+
from selenium.webdriver.remote.script_key import ScriptKey
|
|
3
4
|
from osn_selenium.instances.convert import (
|
|
4
5
|
get_sync_instance_wrapper
|
|
5
6
|
)
|
|
@@ -41,7 +42,7 @@ class CoreScriptMixin(UnifiedCoreScriptMixin, AbstractCoreScriptMixin):
|
|
|
41
42
|
def get_pinned_scripts(self) -> List[str]:
|
|
42
43
|
return self._get_pinned_scripts_impl()
|
|
43
44
|
|
|
44
|
-
def pin_script(self, script: str, script_key: Optional[Any] = None) ->
|
|
45
|
+
def pin_script(self, script: str, script_key: Optional[Any] = None) -> ScriptKey:
|
|
45
46
|
return self._pin_script_impl(script=script, script_key=script_key)
|
|
46
47
|
|
|
47
48
|
def script(self) -> Script:
|
|
@@ -49,5 +50,5 @@ class CoreScriptMixin(UnifiedCoreScriptMixin, AbstractCoreScriptMixin):
|
|
|
49
50
|
|
|
50
51
|
return get_sync_instance_wrapper(wrapper_class=Script, legacy_object=legacy)
|
|
51
52
|
|
|
52
|
-
def unpin(self, script_key:
|
|
53
|
+
def unpin(self, script_key: ScriptKey) -> None:
|
|
53
54
|
self._unpin_impl(script_key=script_key)
|
|
@@ -47,6 +47,9 @@ class CoreWindowMixin(UnifiedCoreWindowMixin, AbstractCoreWindowMixin):
|
|
|
47
47
|
def fullscreen_window(self) -> None:
|
|
48
48
|
self._fullscreen_window_impl()
|
|
49
49
|
|
|
50
|
+
def get_orientation(self) -> Literal["LANDSCAPE", "PORTRAIT"]:
|
|
51
|
+
return self._orientation_get_impl()
|
|
52
|
+
|
|
50
53
|
def get_window_handle(self, window: Optional[Union[str, int]] = None) -> str:
|
|
51
54
|
return self._get_window_handle_impl(window=window)
|
|
52
55
|
|
|
@@ -68,9 +71,6 @@ class CoreWindowMixin(UnifiedCoreWindowMixin, AbstractCoreWindowMixin):
|
|
|
68
71
|
def minimize_window(self) -> None:
|
|
69
72
|
self._minimize_window_impl()
|
|
70
73
|
|
|
71
|
-
def orientation(self) -> Literal["LANDSCAPE", "PORTRAIT"]:
|
|
72
|
-
return self._orientation_get_impl()
|
|
73
|
-
|
|
74
74
|
def set_orientation(self, value: Literal["LANDSCAPE", "PORTRAIT"]) -> None:
|
|
75
75
|
self._orientation_set_impl(value=value)
|
|
76
76
|
|