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
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import math
|
|
2
|
+
import trio
|
|
3
|
+
from osn_selenium.models import WindowRect
|
|
4
|
+
from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
|
|
5
|
+
from osn_selenium.flags.base import BrowserFlagsManager
|
|
6
|
+
from osn_selenium.flags.models.base import BrowserFlags
|
|
7
|
+
from selenium.webdriver.common.bidi.session import Session
|
|
8
|
+
from selenium.webdriver.remote.errorhandler import ErrorHandler
|
|
9
|
+
from osn_selenium.executors.trio_bidi.javascript import JSExecutor
|
|
10
|
+
from selenium.webdriver.remote.locator_converter import LocatorConverter
|
|
11
|
+
from osn_selenium.webdrivers._bridges import (
|
|
12
|
+
get_js_executor_bridge
|
|
13
|
+
)
|
|
14
|
+
from osn_selenium.webdrivers.unified.core.base import UnifiedCoreBaseMixin
|
|
15
|
+
from typing import (
|
|
16
|
+
Any,
|
|
17
|
+
Dict,
|
|
18
|
+
Mapping,
|
|
19
|
+
Optional,
|
|
20
|
+
Type,
|
|
21
|
+
Union,
|
|
22
|
+
cast
|
|
23
|
+
)
|
|
24
|
+
from osn_selenium._typehints import (
|
|
25
|
+
ARCHITECTURES_TYPEHINT,
|
|
26
|
+
PATH_TYPEHINT
|
|
27
|
+
)
|
|
28
|
+
from osn_selenium.abstract.webdriver.core.base import (
|
|
29
|
+
AbstractCoreBaseMixin
|
|
30
|
+
)
|
|
31
|
+
from selenium.webdriver.remote.webdriver import (
|
|
32
|
+
WebDriver as legacyWebDriver
|
|
33
|
+
)
|
|
34
|
+
from osn_selenium.trio_bidi.remote_connection import (
|
|
35
|
+
BiDiBridgeRemoteConnection
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
__all__ = ["CoreBaseMixin"]
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class CoreBaseMixin(UnifiedCoreBaseMixin, TrioBiDiMixin, AbstractCoreBaseMixin):
|
|
43
|
+
"""
|
|
44
|
+
This class serves as the foundation for browser-specific implementations, managing
|
|
45
|
+
the WebDriver executable path, configuration flags, timeouts, and the active
|
|
46
|
+
driver instance.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
def __init__(
|
|
50
|
+
self,
|
|
51
|
+
webdriver_path: str,
|
|
52
|
+
flags_manager_type: Type[BrowserFlagsManager] = BrowserFlagsManager,
|
|
53
|
+
flags: Optional[BrowserFlags] = None,
|
|
54
|
+
implicitly_wait: int = 5,
|
|
55
|
+
page_load_timeout: int = 5,
|
|
56
|
+
script_timeout: int = 5,
|
|
57
|
+
window_rect: Optional[WindowRect] = None,
|
|
58
|
+
capacity_limiter: Optional[trio.CapacityLimiter] = None,
|
|
59
|
+
cdp_versioned_packages_paths: Optional[Mapping[int, PATH_TYPEHINT]] = None,
|
|
60
|
+
ignore_cdp_version_package_missing: bool = True,
|
|
61
|
+
trio_token: Optional[trio.lowlevel.TrioToken] = None,
|
|
62
|
+
bidi_buffer_size: Union[int, float] = math.inf,
|
|
63
|
+
) -> None:
|
|
64
|
+
"""
|
|
65
|
+
Initializes the base mixin for Trio-based WebDrivers.
|
|
66
|
+
|
|
67
|
+
Sets up the core synchronization primitives, default timeouts,
|
|
68
|
+
and the browser flag manager.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
webdriver_path (str): The file path to the WebDriver executable.
|
|
72
|
+
flags_manager_type (Type[BrowserFlagsManager]): The class type used to manage
|
|
73
|
+
browser-specific configuration flags. Defaults to BrowserFlagsManager.
|
|
74
|
+
flags (Optional[BrowserFlags]): Initial set of browser flags or options
|
|
75
|
+
to apply upon startup. Defaults to None.
|
|
76
|
+
implicitly_wait (int): The amount of time (in seconds) that the driver should
|
|
77
|
+
wait when searching for elements. Defaults to 5.
|
|
78
|
+
page_load_timeout (int): The amount of time (in seconds) to wait for a page
|
|
79
|
+
load to complete. Defaults to 5.
|
|
80
|
+
script_timeout (int): The amount of time (in seconds) to wait for an
|
|
81
|
+
asynchronous script to finish execution. Defaults to 5.
|
|
82
|
+
window_rect (Optional[WindowRect]): The initial size and position of the
|
|
83
|
+
browser window. Defaults to None.
|
|
84
|
+
capacity_limiter (Optional[trio.CapacityLimiter]): A Trio capacity limiter used to
|
|
85
|
+
throttle concurrent thread-based operations. Defaults to None.
|
|
86
|
+
cdp_versioned_packages_paths (Optional[Mapping[int, PATH_TYPEHINT]]): Custom local paths for specific CDP versions packages.
|
|
87
|
+
ignore_cdp_version_package_missing (bool): Whether to ignore missing CDP package errors.
|
|
88
|
+
trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
|
|
89
|
+
bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
UnifiedCoreBaseMixin.__init__(
|
|
93
|
+
self,
|
|
94
|
+
webdriver_path=webdriver_path,
|
|
95
|
+
architecture="trio_bidi",
|
|
96
|
+
flags_manager_type=flags_manager_type,
|
|
97
|
+
flags=flags,
|
|
98
|
+
implicitly_wait=implicitly_wait,
|
|
99
|
+
page_load_timeout=page_load_timeout,
|
|
100
|
+
script_timeout=script_timeout,
|
|
101
|
+
window_rect=window_rect,
|
|
102
|
+
cdp_versioned_packages_paths=cdp_versioned_packages_paths,
|
|
103
|
+
ignore_cdp_version_package_missing=ignore_cdp_version_package_missing,
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
TrioBiDiMixin.__init__(
|
|
107
|
+
self,
|
|
108
|
+
lock=trio.Lock(),
|
|
109
|
+
limiter=capacity_limiter
|
|
110
|
+
if capacity_limiter is not None
|
|
111
|
+
else trio.CapacityLimiter(100),
|
|
112
|
+
token=trio_token,
|
|
113
|
+
buffer_size=bidi_buffer_size,
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
self._js_executor = JSExecutor(
|
|
117
|
+
execute_function=get_js_executor_bridge(self),
|
|
118
|
+
lock=self._lock,
|
|
119
|
+
limiter=self._capacity_limiter,
|
|
120
|
+
trio_token=trio_token,
|
|
121
|
+
bidi_buffer_size=bidi_buffer_size,
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
@property
|
|
125
|
+
def architecture(self) -> ARCHITECTURES_TYPEHINT:
|
|
126
|
+
return self._architecture_impl
|
|
127
|
+
|
|
128
|
+
@property
|
|
129
|
+
def capabilities(self) -> Dict[str, Any]:
|
|
130
|
+
return self._capabilities_impl()
|
|
131
|
+
|
|
132
|
+
@property
|
|
133
|
+
def caps(self) -> Dict[str, Any]:
|
|
134
|
+
return self._caps_get_impl()
|
|
135
|
+
|
|
136
|
+
@caps.setter
|
|
137
|
+
def caps(self, value: Dict[str, Any]) -> None:
|
|
138
|
+
self._caps_set_impl(value=value)
|
|
139
|
+
|
|
140
|
+
@property
|
|
141
|
+
def command_executor(self) -> BiDiBridgeRemoteConnection:
|
|
142
|
+
return cast(BiDiBridgeRemoteConnection, self._command_executor_get_impl())
|
|
143
|
+
|
|
144
|
+
@command_executor.setter
|
|
145
|
+
def command_executor(self, value: BiDiBridgeRemoteConnection) -> None:
|
|
146
|
+
self._command_executor_set_impl(value=value)
|
|
147
|
+
|
|
148
|
+
@property
|
|
149
|
+
def driver(self) -> Optional[legacyWebDriver]:
|
|
150
|
+
return self._driver_impl
|
|
151
|
+
|
|
152
|
+
@property
|
|
153
|
+
def error_handler(self) -> ErrorHandler:
|
|
154
|
+
return self._error_handler_get_impl()
|
|
155
|
+
|
|
156
|
+
@error_handler.setter
|
|
157
|
+
def error_handler(self, value: ErrorHandler) -> None:
|
|
158
|
+
self._error_handler_set_impl(value=value)
|
|
159
|
+
|
|
160
|
+
async def execute(self, driver_command: str, params: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
|
|
161
|
+
return await self.sync_to_trio(sync_function=self._execute_impl)(driver_command=driver_command, params=params)
|
|
162
|
+
|
|
163
|
+
@property
|
|
164
|
+
def is_active(self) -> bool:
|
|
165
|
+
return self._is_active_impl
|
|
166
|
+
|
|
167
|
+
@property
|
|
168
|
+
def javascript(self) -> JSExecutor:
|
|
169
|
+
return self._js_executor
|
|
170
|
+
|
|
171
|
+
@property
|
|
172
|
+
def locator_converter(self) -> LocatorConverter:
|
|
173
|
+
return self._locator_converter_get_impl()
|
|
174
|
+
|
|
175
|
+
@locator_converter.setter
|
|
176
|
+
def locator_converter(self, value: LocatorConverter) -> None:
|
|
177
|
+
self._locator_converter_set_impl(value=value)
|
|
178
|
+
|
|
179
|
+
@property
|
|
180
|
+
def name(self) -> str:
|
|
181
|
+
return self._name_impl()
|
|
182
|
+
|
|
183
|
+
@property
|
|
184
|
+
def pinned_scripts(self) -> Dict[str, Any]:
|
|
185
|
+
return self._pinned_scripts_get_impl()
|
|
186
|
+
|
|
187
|
+
@pinned_scripts.setter
|
|
188
|
+
def pinned_scripts(self, value: Dict[str, Any]) -> None:
|
|
189
|
+
self._pinned_scripts_set_impl(value=value)
|
|
190
|
+
|
|
191
|
+
async def session(self) -> Session:
|
|
192
|
+
return await self.sync_to_trio(sync_function=self._session_impl)()
|
|
193
|
+
|
|
194
|
+
@property
|
|
195
|
+
def session_id(self) -> Optional[str]:
|
|
196
|
+
return self._session_id_get_impl()
|
|
197
|
+
|
|
198
|
+
@session_id.setter
|
|
199
|
+
def session_id(self, value: Optional[str]) -> None:
|
|
200
|
+
self._session_id_set_impl(value=value)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
|
|
3
|
+
from selenium.webdriver.common.print_page_options import PrintOptions
|
|
4
|
+
from osn_selenium.webdrivers.unified.core.capture import (
|
|
5
|
+
UnifiedCoreCaptureMixin
|
|
6
|
+
)
|
|
7
|
+
from osn_selenium.abstract.webdriver.core.capture import (
|
|
8
|
+
AbstractCoreCaptureMixin
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
__all__ = ["CoreCaptureMixin"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class CoreCaptureMixin(UnifiedCoreCaptureMixin, TrioBiDiMixin, AbstractCoreCaptureMixin):
|
|
16
|
+
"""
|
|
17
|
+
Mixin enabling screen capture and page source retrieval for Core WebDrivers.
|
|
18
|
+
|
|
19
|
+
Offers methods to take screenshots (file, base64, png), print pages,
|
|
20
|
+
and extract the current DOM source.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
async def get_screenshot_as_base64(self) -> str:
|
|
24
|
+
return await self.sync_to_trio(sync_function=self._get_screenshot_as_base64_impl)()
|
|
25
|
+
|
|
26
|
+
async def get_screenshot_as_file(self, filename: str) -> bool:
|
|
27
|
+
return await self.sync_to_trio(sync_function=self._get_screenshot_as_file_impl)(filename=filename)
|
|
28
|
+
|
|
29
|
+
async def get_screenshot_as_png(self) -> bytes:
|
|
30
|
+
return await self.sync_to_trio(sync_function=self._get_screenshot_as_png_impl)()
|
|
31
|
+
|
|
32
|
+
async def page_source(self) -> str:
|
|
33
|
+
return await self.sync_to_trio(sync_function=self._page_source_impl)()
|
|
34
|
+
|
|
35
|
+
async def print_page(self, print_options: Optional[PrintOptions] = None) -> str:
|
|
36
|
+
return await self.sync_to_trio(sync_function=self._print_page_impl)(print_options=print_options)
|
|
37
|
+
|
|
38
|
+
async def save_screenshot(self, filename: str) -> bool:
|
|
39
|
+
return await self.sync_to_trio(sync_function=self._save_screenshot_impl)(filename=filename)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from typing_extensions import deprecated
|
|
2
|
+
from contextlib import asynccontextmanager
|
|
3
|
+
from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
|
|
4
|
+
from typing import (
|
|
5
|
+
Any,
|
|
6
|
+
AsyncGenerator,
|
|
7
|
+
Dict,
|
|
8
|
+
Tuple
|
|
9
|
+
)
|
|
10
|
+
from selenium.webdriver.remote.bidi_connection import BidiConnection
|
|
11
|
+
from selenium.webdriver.remote.websocket_connection import WebSocketConnection
|
|
12
|
+
from osn_selenium.webdrivers.unified.core.devtools import (
|
|
13
|
+
UnifiedCoreDevToolsMixin
|
|
14
|
+
)
|
|
15
|
+
from osn_selenium.abstract.webdriver.core.devtools import (
|
|
16
|
+
AbstractCoreDevToolsMixin
|
|
17
|
+
)
|
|
18
|
+
from osn_selenium.exceptions.experimental import (
|
|
19
|
+
NotImplementedExperimentalFeatureError
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
__all__ = ["CoreDevToolsMixin"]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class CoreDevToolsMixin(UnifiedCoreDevToolsMixin, TrioBiDiMixin, AbstractCoreDevToolsMixin):
|
|
27
|
+
"""
|
|
28
|
+
Mixin for Chrome DevTools Protocol (CDP) and BiDi interactions in Core WebDrivers.
|
|
29
|
+
|
|
30
|
+
Facilitates low-level browser control via CDP commands, network interception,
|
|
31
|
+
and bidirectional communication sessions.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
@asynccontextmanager
|
|
35
|
+
async def bidi_connection(self) -> AsyncGenerator[BidiConnection, Any]:
|
|
36
|
+
async with self._bidi_connection_impl() as bidi:
|
|
37
|
+
yield bidi
|
|
38
|
+
|
|
39
|
+
async def execute_cdp_cmd(self, cmd: str, cmd_args: Dict[str, Any]) -> Any:
|
|
40
|
+
return await self.sync_to_trio(sync_function=self._execute_cdp_cmd_impl)(cmd=cmd, cmd_args=cmd_args)
|
|
41
|
+
|
|
42
|
+
@deprecated(
|
|
43
|
+
"This method is currently not supported. It will raise 'NotImplementedExperimentalFeatureError' on call."
|
|
44
|
+
)
|
|
45
|
+
async def network(self):
|
|
46
|
+
raise NotImplementedExperimentalFeatureError(name="CoreDevToolsMixin.network")
|
|
47
|
+
|
|
48
|
+
async def start_devtools(self) -> Tuple[Any, WebSocketConnection]:
|
|
49
|
+
return await self.sync_to_trio(sync_function=self._start_devtools_impl)()
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
from typing import List, Optional
|
|
2
|
+
from selenium.webdriver.common.by import By
|
|
3
|
+
from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
|
|
4
|
+
from osn_selenium.instances.trio_bidi.web_element import WebElement
|
|
5
|
+
from osn_selenium.instances.convert import (
|
|
6
|
+
get_trio_bidi_instance_wrapper
|
|
7
|
+
)
|
|
8
|
+
from osn_selenium.webdrivers.unified.core.element import (
|
|
9
|
+
UnifiedCoreElementMixin
|
|
10
|
+
)
|
|
11
|
+
from osn_selenium.abstract.webdriver.core.element import (
|
|
12
|
+
AbstractCoreElementMixin
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
__all__ = ["CoreElementMixin"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class CoreElementMixin(UnifiedCoreElementMixin, TrioBiDiMixin, AbstractCoreElementMixin):
|
|
20
|
+
"""
|
|
21
|
+
Mixin for DOM element retrieval in Core WebDrivers.
|
|
22
|
+
|
|
23
|
+
Provides standard methods to locate single or multiple elements within
|
|
24
|
+
the current page context.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
async def create_web_element(self, element_id: str) -> WebElement:
|
|
28
|
+
legacy = await self.sync_to_trio(sync_function=self._create_web_element_impl)(element_id=element_id)
|
|
29
|
+
|
|
30
|
+
return get_trio_bidi_instance_wrapper(
|
|
31
|
+
wrapper_class=WebElement,
|
|
32
|
+
legacy_object=legacy,
|
|
33
|
+
lock=self._lock,
|
|
34
|
+
limiter=self._capacity_limiter,
|
|
35
|
+
trio_token=self._trio_token,
|
|
36
|
+
bidi_buffer_size=self._trio_bidi_buffer_size,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
async def find_element(self, by: str = By.ID, value: Optional[str] = None) -> WebElement:
|
|
40
|
+
legacy = await self.sync_to_trio(sync_function=self._find_element_impl)(by=by, value=value)
|
|
41
|
+
|
|
42
|
+
return get_trio_bidi_instance_wrapper(
|
|
43
|
+
wrapper_class=WebElement,
|
|
44
|
+
legacy_object=legacy,
|
|
45
|
+
lock=self._lock,
|
|
46
|
+
limiter=self._capacity_limiter,
|
|
47
|
+
trio_token=self._trio_token,
|
|
48
|
+
bidi_buffer_size=self._trio_bidi_buffer_size,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
async def find_elements(self, by: str = By.ID, value: Optional[str] = None) -> List[WebElement]:
|
|
52
|
+
legacy_elements = await self.sync_to_trio(sync_function=self._find_elements_impl)(by=by, value=value)
|
|
53
|
+
|
|
54
|
+
return [
|
|
55
|
+
get_trio_bidi_instance_wrapper(
|
|
56
|
+
wrapper_class=WebElement,
|
|
57
|
+
legacy_object=element,
|
|
58
|
+
lock=self._lock,
|
|
59
|
+
limiter=self._capacity_limiter,
|
|
60
|
+
trio_token=self._trio_token,
|
|
61
|
+
bidi_buffer_size=self._trio_bidi_buffer_size,
|
|
62
|
+
)
|
|
63
|
+
for element in legacy_elements
|
|
64
|
+
]
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
from types import TracebackType
|
|
2
|
+
from osn_selenium.models import WindowRect
|
|
3
|
+
from typing import (
|
|
4
|
+
Any,
|
|
5
|
+
Dict,
|
|
6
|
+
Optional,
|
|
7
|
+
Type
|
|
8
|
+
)
|
|
9
|
+
from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
|
|
10
|
+
from osn_selenium.flags.models.base import BrowserFlags
|
|
11
|
+
from osn_selenium.trio_bidi.connection_pool import BiDiConnectionPool
|
|
12
|
+
from osn_selenium.trio_bidi.remote_connection import (
|
|
13
|
+
BiDiBridgeRemoteConnection
|
|
14
|
+
)
|
|
15
|
+
from osn_selenium.webdrivers.unified.core.lifecycle import (
|
|
16
|
+
UnifiedCoreLifecycleMixin
|
|
17
|
+
)
|
|
18
|
+
from osn_selenium.abstract.webdriver.core.lifecycle import (
|
|
19
|
+
AbstractCoreLifecycleMixin
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
__all__ = ["CoreLifecycleMixin"]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class CoreLifecycleMixin(UnifiedCoreLifecycleMixin, TrioBiDiMixin, AbstractCoreLifecycleMixin):
|
|
27
|
+
"""
|
|
28
|
+
Mixin for managing the lifecycle of the Core WebDriver.
|
|
29
|
+
|
|
30
|
+
Handles the creation, startup, shutdown, and restarting processes of the
|
|
31
|
+
underlying browser instance, ensuring clean session management.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
async def _start_bidi_bridge(self) -> None:
|
|
35
|
+
"""
|
|
36
|
+
Internal method to initialize and start the BiDi bridge.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def _init_context() -> None:
|
|
40
|
+
driver = self._driver_impl
|
|
41
|
+
driver.switch_to.window(driver.current_window_handle)
|
|
42
|
+
|
|
43
|
+
self._bidi_bridge_connection_pool = BiDiConnectionPool(
|
|
44
|
+
websocket_url=self._caps_get_impl()["webSocketUrl"],
|
|
45
|
+
buffer_size=self._trio_bidi_buffer_size
|
|
46
|
+
)
|
|
47
|
+
send_channel = await self._bidi_bridge_connection_pool.start()
|
|
48
|
+
|
|
49
|
+
legacy_remote_connection = self._command_executor_get_impl()
|
|
50
|
+
self._bidi_bridge_remote_connection = BiDiBridgeRemoteConnection(
|
|
51
|
+
send_channel=send_channel,
|
|
52
|
+
trio_token=self._trio_token,
|
|
53
|
+
legacy_remote_connection=legacy_remote_connection
|
|
54
|
+
)
|
|
55
|
+
self._command_executor_set_impl(value=self._bidi_bridge_remote_connection)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
await self.sync_to_trio(sync_function=_init_context)()
|
|
60
|
+
|
|
61
|
+
async def start_webdriver(
|
|
62
|
+
self,
|
|
63
|
+
flags: Optional[BrowserFlags] = None,
|
|
64
|
+
window_rect: Optional[WindowRect] = None,
|
|
65
|
+
) -> None:
|
|
66
|
+
await self.sync_to_trio(sync_function=self._start_webdriver_impl)(flags=flags, window_rect=window_rect)
|
|
67
|
+
await self._start_bidi_bridge()
|
|
68
|
+
|
|
69
|
+
async def __aenter__(
|
|
70
|
+
self,
|
|
71
|
+
flags: Optional[BrowserFlags] = None,
|
|
72
|
+
window_rect: Optional[WindowRect] = None,
|
|
73
|
+
) -> None:
|
|
74
|
+
await self.start_webdriver(flags=flags, window_rect=window_rect)
|
|
75
|
+
|
|
76
|
+
async def _stop_bidi_bridge(self) -> None:
|
|
77
|
+
"""
|
|
78
|
+
Internal method to stop the BiDi connection pool.
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
await self._bidi_bridge_connection_pool.stop()
|
|
82
|
+
|
|
83
|
+
async def stop_webdriver(self) -> None:
|
|
84
|
+
await self.sync_to_trio(sync_function=self._stop_webdriver_impl)()
|
|
85
|
+
await self._stop_bidi_bridge()
|
|
86
|
+
|
|
87
|
+
async def __aexit__(
|
|
88
|
+
self,
|
|
89
|
+
exc_type: Optional[Type[BaseException]],
|
|
90
|
+
exc_val: Optional[BaseException],
|
|
91
|
+
exc_tb: Optional[TracebackType],
|
|
92
|
+
) -> bool:
|
|
93
|
+
"""
|
|
94
|
+
Asynchronously exits the WebDriver context.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
exc_type (Optional[Type[BaseException]]): The exception type, if any.
|
|
98
|
+
exc_val (Optional[BaseException]): The exception value, if any.
|
|
99
|
+
exc_tb (Optional[TracebackType]): The exception traceback, if any.
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
bool: True if an exception was suppressed, False otherwise.
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
await self.stop_webdriver()
|
|
106
|
+
|
|
107
|
+
if exc_type is not None and exc_val is not None and exc_tb is not None:
|
|
108
|
+
return True
|
|
109
|
+
|
|
110
|
+
return False
|
|
111
|
+
|
|
112
|
+
async def quit(self) -> None:
|
|
113
|
+
await self.sync_to_trio(sync_function=self._quit_impl)()
|
|
114
|
+
|
|
115
|
+
async def remote_connect_driver(self, command_executor: BiDiBridgeRemoteConnection) -> None:
|
|
116
|
+
await self.sync_to_trio(sync_function=self._remote_connect_driver_impl)(command_executor=command_executor)
|
|
117
|
+
|
|
118
|
+
async def restart_webdriver(
|
|
119
|
+
self,
|
|
120
|
+
flags: Optional[BrowserFlags] = None,
|
|
121
|
+
window_rect: Optional[WindowRect] = None,
|
|
122
|
+
) -> None:
|
|
123
|
+
await self.sync_to_trio(sync_function=self._restart_webdriver_impl)(flags=flags, window_rect=window_rect)
|
|
124
|
+
|
|
125
|
+
await self._stop_bidi_bridge()
|
|
126
|
+
await self._start_bidi_bridge()
|
|
127
|
+
|
|
128
|
+
async def start_client(self) -> None:
|
|
129
|
+
await self.sync_to_trio(sync_function=self._start_client_impl)()
|
|
130
|
+
|
|
131
|
+
async def start_session(self, capabilities: Dict[str, Any]) -> None:
|
|
132
|
+
await self.sync_to_trio(sync_function=self._start_session_impl)(capabilities=capabilities)
|
|
133
|
+
|
|
134
|
+
async def stop_client(self) -> None:
|
|
135
|
+
await self.sync_to_trio(sync_function=self._stop_client_impl)()
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
|
|
2
|
+
from osn_selenium.webdrivers.unified.core.navigation import (
|
|
3
|
+
UnifiedCoreNavigationMixin
|
|
4
|
+
)
|
|
5
|
+
from osn_selenium.abstract.webdriver.core.navigation import (
|
|
6
|
+
AbstractCoreNavigationMixin
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
__all__ = ["CoreNavigationMixin"]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class CoreNavigationMixin(UnifiedCoreNavigationMixin, TrioBiDiMixin, AbstractCoreNavigationMixin):
|
|
14
|
+
"""
|
|
15
|
+
Mixin controlling browser navigation for Core WebDrivers.
|
|
16
|
+
|
|
17
|
+
Includes standard navigation commands such as visiting URLs, history
|
|
18
|
+
traversal (back/forward), and page refreshing.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
async def back(self) -> None:
|
|
22
|
+
await self.sync_to_trio(sync_function=self._back_impl)()
|
|
23
|
+
|
|
24
|
+
async def current_url(self) -> str:
|
|
25
|
+
return await self.sync_to_trio(sync_function=self._current_url_impl)()
|
|
26
|
+
|
|
27
|
+
async def forward(self) -> None:
|
|
28
|
+
await self.sync_to_trio(sync_function=self._forward_impl)()
|
|
29
|
+
|
|
30
|
+
async def get(self, url: str) -> None:
|
|
31
|
+
await self.sync_to_trio(sync_function=self._get_impl)(url=url)
|
|
32
|
+
|
|
33
|
+
async def refresh(self) -> None:
|
|
34
|
+
await self.sync_to_trio(sync_function=self._refresh_impl)()
|
|
35
|
+
|
|
36
|
+
async def title(self) -> str:
|
|
37
|
+
return await self.sync_to_trio(sync_function=self._title_impl)()
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
from typing import Any, List, Optional
|
|
2
|
+
from typing_extensions import deprecated
|
|
3
|
+
from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
|
|
4
|
+
from selenium.webdriver.remote.script_key import ScriptKey
|
|
5
|
+
from osn_selenium.webdrivers.unified.core.script import (
|
|
6
|
+
UnifiedCoreScriptMixin
|
|
7
|
+
)
|
|
8
|
+
from osn_selenium.abstract.webdriver.core.script import (
|
|
9
|
+
AbstractCoreScriptMixin
|
|
10
|
+
)
|
|
11
|
+
from osn_selenium.webdrivers._args_helpers import (
|
|
12
|
+
unwrap_args,
|
|
13
|
+
wrap_trio_thread_args
|
|
14
|
+
)
|
|
15
|
+
from osn_selenium.exceptions.experimental import (
|
|
16
|
+
NotImplementedExperimentalFeatureError
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
__all__ = ["CoreScriptMixin"]
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class CoreScriptMixin(UnifiedCoreScriptMixin, TrioBiDiMixin, AbstractCoreScriptMixin):
|
|
24
|
+
"""
|
|
25
|
+
Mixin for JavaScript execution and management in Core WebDrivers.
|
|
26
|
+
|
|
27
|
+
Allows execution of synchronous and asynchronous JavaScript, as well as
|
|
28
|
+
pinning scripts for repeated use.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
async def execute_async_script(self, script: str, *args: Any) -> Any:
|
|
32
|
+
unwrapped = unwrap_args(args=args)
|
|
33
|
+
result = await self.sync_to_trio(sync_function=self._execute_async_script_impl)(script, *unwrapped)
|
|
34
|
+
|
|
35
|
+
return wrap_trio_thread_args(args=result, lock=self._lock, limiter=self._capacity_limiter)
|
|
36
|
+
|
|
37
|
+
async def execute_script(self, script: str, *args: Any) -> Any:
|
|
38
|
+
unwrapped = unwrap_args(args=args)
|
|
39
|
+
result = await self.sync_to_trio(sync_function=self._execute_script_impl)(script, *unwrapped)
|
|
40
|
+
|
|
41
|
+
return wrap_trio_thread_args(args=result, lock=self._lock, limiter=self._capacity_limiter)
|
|
42
|
+
|
|
43
|
+
async def get_pinned_scripts(self) -> List[str]:
|
|
44
|
+
return await self.sync_to_trio(sync_function=self._get_pinned_scripts_impl)()
|
|
45
|
+
|
|
46
|
+
async def pin_script(self, script: str, script_key: Optional[Any] = None) -> ScriptKey:
|
|
47
|
+
return await self.sync_to_trio(sync_function=self._pin_script_impl)(script=script, script_key=script_key)
|
|
48
|
+
|
|
49
|
+
@deprecated(
|
|
50
|
+
"This method is currently not supported. It will raise 'NotImplementedExperimentalFeatureError' on call."
|
|
51
|
+
)
|
|
52
|
+
async def script(self):
|
|
53
|
+
raise NotImplementedExperimentalFeatureError(name="CoreScriptMixin.script")
|
|
54
|
+
|
|
55
|
+
async def unpin(self, script_key: ScriptKey) -> None:
|
|
56
|
+
await self.sync_to_trio(sync_function=self._unpin_impl)(script_key=script_key)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
from osn_selenium.models import WindowRect
|
|
3
|
+
from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
|
|
4
|
+
from osn_selenium.flags.models.base import BrowserFlags
|
|
5
|
+
from osn_selenium.webdrivers.unified.core.settings import (
|
|
6
|
+
UnifiedCoreSettingsMixin
|
|
7
|
+
)
|
|
8
|
+
from osn_selenium.abstract.webdriver.core.settings import (
|
|
9
|
+
AbstractCoreSettingsMixin
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
__all__ = ["CoreSettingsMixin"]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class CoreSettingsMixin(UnifiedCoreSettingsMixin, TrioBiDiMixin, AbstractCoreSettingsMixin):
|
|
17
|
+
"""
|
|
18
|
+
Mixin for configuring and updating settings of the Core WebDriver.
|
|
19
|
+
|
|
20
|
+
Provides methods to modify browser flags, window rectangles, and other
|
|
21
|
+
configuration parameters either before startup or during a reset.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
async def reset_settings(
|
|
25
|
+
self,
|
|
26
|
+
flags: Optional[BrowserFlags] = None,
|
|
27
|
+
window_rect: Optional[WindowRect] = None,
|
|
28
|
+
) -> None:
|
|
29
|
+
await self.sync_to_trio(sync_function=self._reset_settings_impl)(flags=flags, window_rect=window_rect)
|
|
30
|
+
|
|
31
|
+
async def update_settings(
|
|
32
|
+
self,
|
|
33
|
+
flags: Optional[BrowserFlags] = None,
|
|
34
|
+
window_rect: Optional[WindowRect] = None,
|
|
35
|
+
) -> None:
|
|
36
|
+
await self.sync_to_trio(sync_function=self._update_settings_impl)(flags=flags, window_rect=window_rect)
|