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,123 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
from selenium.webdriver.remote.errorhandler import ErrorCode
|
|
3
|
+
from osn_selenium.exceptions.bidi_bridge import BiDiExecutionError
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
__all__ = [
|
|
7
|
+
"BIDI_TO_W3C_ERROR_MAP",
|
|
8
|
+
"create_w3c_error_response",
|
|
9
|
+
"map_bidi_error_to_w3c"
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
_UNMAPPABLE_ERROR = (-1, "unmappable error")
|
|
13
|
+
|
|
14
|
+
BIDI_TO_W3C_ERROR_MAP = {
|
|
15
|
+
"invalid argument": ErrorCode.INVALID_ARGUMENT,
|
|
16
|
+
"invalid selector": ErrorCode.INVALID_SELECTOR,
|
|
17
|
+
"invalid session id": ErrorCode.INVALID_SESSION_ID,
|
|
18
|
+
"move target out of bounds": ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS,
|
|
19
|
+
"no such alert": ErrorCode.NO_ALERT_OPEN,
|
|
20
|
+
"no such element": ErrorCode.NO_SUCH_ELEMENT,
|
|
21
|
+
"no such frame": ErrorCode.NO_SUCH_FRAME,
|
|
22
|
+
"no such window": ErrorCode.NO_SUCH_WINDOW,
|
|
23
|
+
"no such cookie": ErrorCode.NO_SUCH_COOKIE,
|
|
24
|
+
"stale element reference": ErrorCode.STALE_ELEMENT_REFERENCE,
|
|
25
|
+
"element not interactable": ErrorCode.ELEMENT_NOT_INTERACTABLE,
|
|
26
|
+
"element click intercepted": ErrorCode.ELEMENT_CLICK_INTERCEPTED,
|
|
27
|
+
"javascript error": ErrorCode.JAVASCRIPT_ERROR,
|
|
28
|
+
"timeout": ErrorCode.TIMEOUT,
|
|
29
|
+
"script timeout": ErrorCode.SCRIPT_TIMEOUT,
|
|
30
|
+
"session not created": ErrorCode.SESSION_NOT_CREATED,
|
|
31
|
+
"unable to capture screen": ErrorCode.UNABLE_TO_CAPTURE_SCREEN,
|
|
32
|
+
"unable to set cookie": ErrorCode.UNABLE_TO_SET_COOKIE,
|
|
33
|
+
"unexpected alert open": ErrorCode.UNEXPECTED_ALERT_OPEN,
|
|
34
|
+
"unknown command": ErrorCode.UNKNOWN_COMMAND,
|
|
35
|
+
"unknown error": ErrorCode.UNKNOWN_ERROR,
|
|
36
|
+
"unsupported operation": ErrorCode.METHOD_NOT_ALLOWED,
|
|
37
|
+
"detached shadow root": ErrorCode.DETACHED_SHADOW_ROOT,
|
|
38
|
+
"no such node": ErrorCode.NO_SUCH_ELEMENT,
|
|
39
|
+
"no such handle": ErrorCode.NO_SUCH_ELEMENT,
|
|
40
|
+
"no such client window": ErrorCode.NO_SUCH_WINDOW,
|
|
41
|
+
"invalid web extension": _UNMAPPABLE_ERROR,
|
|
42
|
+
"unable to set file input": _UNMAPPABLE_ERROR,
|
|
43
|
+
"no such script": _UNMAPPABLE_ERROR,
|
|
44
|
+
"no such history entry": _UNMAPPABLE_ERROR,
|
|
45
|
+
"no such network collector": _UNMAPPABLE_ERROR,
|
|
46
|
+
"no such intercept": _UNMAPPABLE_ERROR,
|
|
47
|
+
"no such network data": _UNMAPPABLE_ERROR,
|
|
48
|
+
"no such request": _UNMAPPABLE_ERROR,
|
|
49
|
+
"no such storage partition": _UNMAPPABLE_ERROR,
|
|
50
|
+
"no such user context": _UNMAPPABLE_ERROR,
|
|
51
|
+
"no such web extension": _UNMAPPABLE_ERROR,
|
|
52
|
+
"unable to close browser": _UNMAPPABLE_ERROR,
|
|
53
|
+
"underspecified storage partition": _UNMAPPABLE_ERROR,
|
|
54
|
+
"unavailable network data": _UNMAPPABLE_ERROR,
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def create_w3c_error_response(
|
|
59
|
+
status_code: int,
|
|
60
|
+
error_string: str,
|
|
61
|
+
message: str,
|
|
62
|
+
stacktrace: str = ""
|
|
63
|
+
) -> Dict[str, Any]:
|
|
64
|
+
"""
|
|
65
|
+
Creates a standardized W3C WebDriver error response dictionary.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
status_code (int): The numeric status code for the error.
|
|
69
|
+
error_string (str): The string identifier for the error.
|
|
70
|
+
message (str): The descriptive error message.
|
|
71
|
+
stacktrace (str): The stacktrace associated with the error.
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
Dict[str, Any]: Formatted W3C error response.
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
"status": status_code,
|
|
79
|
+
"value": {"error": error_string, "message": message, "stacktrace": stacktrace}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def map_bidi_error_to_w3c(bidi_error_data: Dict[str, Any]) -> Dict[str, Any]:
|
|
84
|
+
"""
|
|
85
|
+
Maps a BiDi protocol error to the corresponding W3C WebDriver error response.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
bidi_error_data (Dict[str, Any]): Dictionary containing error details from BiDi.
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
Dict[str, Any]: Formatted W3C error response.
|
|
92
|
+
|
|
93
|
+
Raises:
|
|
94
|
+
BiDiExecutionError: If error data is malformed or represents an unmappable BiDi error.
|
|
95
|
+
"""
|
|
96
|
+
|
|
97
|
+
bidi_error = bidi_error_data.get("error", "unknown error")
|
|
98
|
+
message = bidi_error_data.get("message", bidi_error)
|
|
99
|
+
stacktrace = bidi_error_data.get("stacktrace", "")
|
|
100
|
+
|
|
101
|
+
error_data = BIDI_TO_W3C_ERROR_MAP.get(bidi_error, ErrorCode.UNKNOWN_ERROR)
|
|
102
|
+
|
|
103
|
+
if len(error_data) == 2:
|
|
104
|
+
status_code, error_string = error_data
|
|
105
|
+
else:
|
|
106
|
+
status_code = 13
|
|
107
|
+
error_string = error_data[0]
|
|
108
|
+
|
|
109
|
+
try:
|
|
110
|
+
status_code = int(status_code)
|
|
111
|
+
error_string = str(error_string)
|
|
112
|
+
except (ValueError, TypeError):
|
|
113
|
+
raise BiDiExecutionError(error=bidi_error, message=f"Malformed error data: {message}")
|
|
114
|
+
|
|
115
|
+
if (status_code, error_string) == _UNMAPPABLE_ERROR:
|
|
116
|
+
raise BiDiExecutionError(error=error_string, message=message)
|
|
117
|
+
|
|
118
|
+
return create_w3c_error_response(
|
|
119
|
+
status_code=status_code,
|
|
120
|
+
error_string=error_string,
|
|
121
|
+
message=message,
|
|
122
|
+
stacktrace=stacktrace,
|
|
123
|
+
)
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
from selenium.webdriver.remote.command import Command
|
|
3
|
+
from selenium.webdriver.remote.errorhandler import ErrorCode
|
|
4
|
+
from osn_selenium.trio_bidi._error_mappings import (
|
|
5
|
+
create_w3c_error_response,
|
|
6
|
+
map_bidi_error_to_w3c
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
__all__ = ["redirect_error_response"]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class _Redirect_:
|
|
14
|
+
"""
|
|
15
|
+
Internal container for logic to redirect certain error types to others based on the command.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
class InvalidArgument_:
|
|
19
|
+
"""
|
|
20
|
+
Logic for InvalidArgument redirection.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
to_NoAlertPresent_Commands = [
|
|
24
|
+
Command.W3C_GET_ALERT_TEXT,
|
|
25
|
+
Command.W3C_ACCEPT_ALERT,
|
|
26
|
+
Command.W3C_DISMISS_ALERT,
|
|
27
|
+
Command.W3C_SET_ALERT_VALUE
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
@staticmethod
|
|
31
|
+
def to_NoAlertPresent(error_response: Dict[str, Any]) -> Dict[str, Any]:
|
|
32
|
+
"""
|
|
33
|
+
Redirects INVALID_ARGUMENT to NO_ALERT_OPEN if related to alerts/prompts.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
error_response (Dict[str, Any]): The initial W3C error response.
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
Dict[str, Any]: The redirected error response.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
value = error_response.get("value", {})
|
|
43
|
+
|
|
44
|
+
if value.get("error") == ErrorCode.INVALID_ARGUMENT[1]:
|
|
45
|
+
message = value.get("message", "").lower()
|
|
46
|
+
|
|
47
|
+
if "alert" in message or "prompt" in message or "no such alert" in message:
|
|
48
|
+
status_code, error_string = ErrorCode.NO_ALERT_OPEN
|
|
49
|
+
|
|
50
|
+
return create_w3c_error_response(
|
|
51
|
+
status_code=status_code,
|
|
52
|
+
error_string=error_string,
|
|
53
|
+
message="no such alert"
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
return error_response
|
|
57
|
+
|
|
58
|
+
class NoSuchElement_:
|
|
59
|
+
"""
|
|
60
|
+
Logic for NoSuchElement redirection.
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
to_DetachedShadowRoot_Commands = [
|
|
64
|
+
Command.FIND_ELEMENT_FROM_SHADOW_ROOT,
|
|
65
|
+
Command.FIND_ELEMENTS_FROM_SHADOW_ROOT,
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
to_StaleElementReference_Commands = [
|
|
69
|
+
Command.GET_ELEMENT_TAG_NAME,
|
|
70
|
+
Command.GET_ELEMENT_TEXT,
|
|
71
|
+
Command.CLICK_ELEMENT,
|
|
72
|
+
Command.CLEAR_ELEMENT,
|
|
73
|
+
Command.GET_ELEMENT_PROPERTY,
|
|
74
|
+
Command.GET_ELEMENT_ATTRIBUTE,
|
|
75
|
+
Command.IS_ELEMENT_SELECTED,
|
|
76
|
+
Command.IS_ELEMENT_ENABLED,
|
|
77
|
+
Command.SEND_KEYS_TO_ELEMENT,
|
|
78
|
+
Command.GET_SHADOW_ROOT,
|
|
79
|
+
Command.GET_ELEMENT_RECT,
|
|
80
|
+
Command.GET_ELEMENT_VALUE_OF_CSS_PROPERTY,
|
|
81
|
+
Command.GET_ELEMENT_ARIA_ROLE,
|
|
82
|
+
Command.GET_ELEMENT_ARIA_LABEL,
|
|
83
|
+
Command.ELEMENT_SCREENSHOT,
|
|
84
|
+
Command.FIND_CHILD_ELEMENT,
|
|
85
|
+
Command.FIND_CHILD_ELEMENTS,
|
|
86
|
+
]
|
|
87
|
+
|
|
88
|
+
@staticmethod
|
|
89
|
+
def to_DetachedShadowRoot(error_response: Dict[str, Any]) -> Dict[str, Any]:
|
|
90
|
+
"""
|
|
91
|
+
Redirects NO_SUCH_ELEMENT to DETACHED_SHADOW_ROOT.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
error_response (Dict[str, Any]): The initial W3C error response.
|
|
95
|
+
|
|
96
|
+
Returns:
|
|
97
|
+
Dict[str, Any]: The redirected error response.
|
|
98
|
+
"""
|
|
99
|
+
|
|
100
|
+
if error_response.get("status") == ErrorCode.NO_SUCH_ELEMENT[0]:
|
|
101
|
+
status_code, error_string = ErrorCode.DETACHED_SHADOW_ROOT
|
|
102
|
+
message = "detached shadow root: shadow root is no longer attached to the document"
|
|
103
|
+
|
|
104
|
+
return create_w3c_error_response(status_code=status_code, error_string=error_string, message=message)
|
|
105
|
+
|
|
106
|
+
return error_response
|
|
107
|
+
|
|
108
|
+
@staticmethod
|
|
109
|
+
def to_StaleElementReference(error_response: Dict[str, Any]) -> Dict[str, Any]:
|
|
110
|
+
"""
|
|
111
|
+
Redirects NO_SUCH_ELEMENT to STALE_ELEMENT_REFERENCE.
|
|
112
|
+
|
|
113
|
+
Args:
|
|
114
|
+
error_response (Dict[str, Any]): The initial W3C error response.
|
|
115
|
+
|
|
116
|
+
Returns:
|
|
117
|
+
Dict[str, Any]: The redirected error response.
|
|
118
|
+
"""
|
|
119
|
+
|
|
120
|
+
if error_response.get("status") == ErrorCode.NO_SUCH_ELEMENT[0]:
|
|
121
|
+
status_code, error_string = ErrorCode.STALE_ELEMENT_REFERENCE
|
|
122
|
+
message = "stale element reference: element is not attached to the page document"
|
|
123
|
+
|
|
124
|
+
return create_w3c_error_response(status_code=status_code, error_string=error_string, message=message)
|
|
125
|
+
|
|
126
|
+
return error_response
|
|
127
|
+
|
|
128
|
+
class NoSuchFrame_:
|
|
129
|
+
"""
|
|
130
|
+
Logic for NoSuchFrame redirection.
|
|
131
|
+
"""
|
|
132
|
+
|
|
133
|
+
to_NoSuchWindow_Commands = [
|
|
134
|
+
Command.SWITCH_TO_WINDOW,
|
|
135
|
+
Command.GET_CURRENT_URL,
|
|
136
|
+
Command.GET_TITLE,
|
|
137
|
+
Command.CLOSE,
|
|
138
|
+
Command.SCREENSHOT,
|
|
139
|
+
Command.PRINT_PAGE,
|
|
140
|
+
Command.GET_PAGE_SOURCE,
|
|
141
|
+
Command.SET_SCREEN_ORIENTATION,
|
|
142
|
+
Command.GET_SCREEN_ORIENTATION,
|
|
143
|
+
]
|
|
144
|
+
|
|
145
|
+
@staticmethod
|
|
146
|
+
def to_NoSuchWindow(error_response: Dict[str, Any]):
|
|
147
|
+
"""
|
|
148
|
+
Redirects NO_SUCH_FRAME to NO_SUCH_WINDOW.
|
|
149
|
+
|
|
150
|
+
Args:
|
|
151
|
+
error_response (Dict[str, Any]): The initial W3C error response.
|
|
152
|
+
|
|
153
|
+
Returns:
|
|
154
|
+
Dict[str, Any]: The redirected error response.
|
|
155
|
+
"""
|
|
156
|
+
|
|
157
|
+
value = error_response.get("value", {})
|
|
158
|
+
|
|
159
|
+
if value.get("error") == ErrorCode.NO_SUCH_FRAME[1]:
|
|
160
|
+
status_code, error_string = ErrorCode.NO_SUCH_WINDOW
|
|
161
|
+
message = "no such window"
|
|
162
|
+
|
|
163
|
+
return create_w3c_error_response(status_code=status_code, error_string=error_string, message=message)
|
|
164
|
+
|
|
165
|
+
return error_response
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def redirect_error_response(command: str, bidi_response: Dict[str, Any]) -> Dict[str, Any]:
|
|
169
|
+
"""
|
|
170
|
+
Main entry point for mapping BiDi errors to W3C and applying redirection logic.
|
|
171
|
+
|
|
172
|
+
Args:
|
|
173
|
+
command (str): The original W3C command.
|
|
174
|
+
bidi_response (Dict[str, Any]): The raw error data from BiDi.
|
|
175
|
+
|
|
176
|
+
Returns:
|
|
177
|
+
Dict[str, Any]: The finalized W3C error response.
|
|
178
|
+
"""
|
|
179
|
+
|
|
180
|
+
error_response = map_bidi_error_to_w3c(bidi_error_data=bidi_response)
|
|
181
|
+
|
|
182
|
+
if command in _Redirect_.NoSuchFrame_.to_NoSuchWindow_Commands:
|
|
183
|
+
return _Redirect_.NoSuchFrame_.to_NoSuchWindow(error_response=error_response)
|
|
184
|
+
|
|
185
|
+
if command in _Redirect_.InvalidArgument_.to_NoAlertPresent_Commands:
|
|
186
|
+
return _Redirect_.InvalidArgument_.to_NoAlertPresent(error_response=error_response)
|
|
187
|
+
|
|
188
|
+
if command in _Redirect_.NoSuchElement_.to_StaleElementReference_Commands:
|
|
189
|
+
return _Redirect_.NoSuchElement_.to_StaleElementReference(error_response=error_response)
|
|
190
|
+
|
|
191
|
+
if command in _Redirect_.NoSuchElement_.to_DetachedShadowRoot_Commands:
|
|
192
|
+
return _Redirect_.NoSuchElement_.to_DetachedShadowRoot(error_response=error_response)
|
|
193
|
+
|
|
194
|
+
return error_response
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import base64
|
|
3
|
+
import zipfile
|
|
4
|
+
import tempfile
|
|
5
|
+
from io import BytesIO
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
__all__ = ["unzip_file"]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def unzip_file(base64_zip: str) -> str:
|
|
12
|
+
"""
|
|
13
|
+
Decodes a base64 encoded zip file and extracts its first content to a temporary directory.
|
|
14
|
+
|
|
15
|
+
Args:
|
|
16
|
+
base64_zip (str): The base64 encoded string of the zip file.
|
|
17
|
+
|
|
18
|
+
Returns:
|
|
19
|
+
str: The path to the extracted file.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
zip_data = base64.b64decode(base64_zip)
|
|
23
|
+
|
|
24
|
+
with zipfile.ZipFile(BytesIO(zip_data)) as zipped_file:
|
|
25
|
+
temp_dir = tempfile.mkdtemp()
|
|
26
|
+
zipped_file.extractall(temp_dir)
|
|
27
|
+
|
|
28
|
+
return os.path.join(temp_dir, zipped_file.namelist()[0])
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
__all__ = [
|
|
2
|
+
"GET_INTERNAL_ALERT_TEXT",
|
|
3
|
+
"OSN_SWITCH_CONTEXT_KEY",
|
|
4
|
+
"UPLOAD_INTERNAL_FILE"
|
|
5
|
+
]
|
|
6
|
+
|
|
7
|
+
GET_INTERNAL_ALERT_TEXT = "BRIDGE.GET_INTERNAL_ALERT_TEXT"
|
|
8
|
+
UPLOAD_INTERNAL_FILE = "BRIDGE.UPLOAD_INTERNAL_FILE"
|
|
9
|
+
|
|
10
|
+
OSN_SWITCH_CONTEXT_KEY = "OSN_SWITCH_CONTEXT"
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
import threading
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
|
+
from typing import (
|
|
5
|
+
Any,
|
|
6
|
+
Dict,
|
|
7
|
+
Optional,
|
|
8
|
+
Self
|
|
9
|
+
)
|
|
10
|
+
from osn_selenium.trio_bidi._typehints import (
|
|
11
|
+
REQUEST_PARAMS_TYPEHINT
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
__all__ = ["BiDiTask", "BiDiTaskContainer", "W3CTask", "W3CTaskContainer"]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass(slots=True)
|
|
19
|
+
class W3CTask:
|
|
20
|
+
"""
|
|
21
|
+
Representation of a W3C WebDriver task.
|
|
22
|
+
|
|
23
|
+
Attributes:
|
|
24
|
+
command (str): The command name.
|
|
25
|
+
request_params (REQUEST_PARAMS_TYPEHINT): The command parameters.
|
|
26
|
+
context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
command: str
|
|
30
|
+
params: REQUEST_PARAMS_TYPEHINT
|
|
31
|
+
context_id: Optional[str]
|
|
32
|
+
|
|
33
|
+
@classmethod
|
|
34
|
+
def from_dict(cls, data: Dict[str, Any]) -> Self:
|
|
35
|
+
"""
|
|
36
|
+
Creates a W3CTask instance from a dictionary.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
data (Dict[str, Any]): The dictionary containing task data.
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
Self: A new W3CTask instance.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
return cls(
|
|
46
|
+
command=data["command"],
|
|
47
|
+
params=data["params"],
|
|
48
|
+
context_id=data["context_id"],
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
52
|
+
"""
|
|
53
|
+
Converts the task to a dictionary.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
Dict[str, Any]: The task as a dictionary.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
return {
|
|
60
|
+
"command": self.command,
|
|
61
|
+
"params": self.params,
|
|
62
|
+
"context_id": self.context_id,
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@dataclass(slots=True)
|
|
67
|
+
class W3CTaskContainer:
|
|
68
|
+
"""
|
|
69
|
+
Container for a W3C task including response and synchronization event.
|
|
70
|
+
|
|
71
|
+
Attributes:
|
|
72
|
+
task (W3CTask): The W3C task.
|
|
73
|
+
response (Dict[str, Any]): The response and error information.
|
|
74
|
+
pending_event (threading.Event): Event to wait for task completion.
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
task: W3CTask
|
|
78
|
+
response: Dict[str, Any] = field(default_factory=lambda: {"response": None, "error": None})
|
|
79
|
+
pending_event: threading.Event = field(default_factory=threading.Event)
|
|
80
|
+
|
|
81
|
+
@classmethod
|
|
82
|
+
def from_dict(cls, data: Dict[str, Any]) -> Self:
|
|
83
|
+
"""
|
|
84
|
+
Creates a W3CTaskContainer instance from a dictionary.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
data (Dict[str, Any]): The dictionary containing container data.
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
Self: A new W3CTaskContainer instance.
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
return cls(
|
|
94
|
+
task=W3CTask.from_dict(data["task"]),
|
|
95
|
+
response=data["response"],
|
|
96
|
+
pending_event=data["pending_event"],
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
100
|
+
"""
|
|
101
|
+
Converts the container to a dictionary.
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
Dict[str, Any]: The container as a dictionary.
|
|
105
|
+
"""
|
|
106
|
+
|
|
107
|
+
return {
|
|
108
|
+
"task": self.task.to_dict(),
|
|
109
|
+
"response": self.response,
|
|
110
|
+
"pending_event": self.pending_event,
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
@dataclass(slots=True)
|
|
115
|
+
class BiDiTask:
|
|
116
|
+
"""
|
|
117
|
+
Representation of a WebDriver BiDi task.
|
|
118
|
+
|
|
119
|
+
Attributes:
|
|
120
|
+
id (int): The task ID.
|
|
121
|
+
method (str): The BiDi method.
|
|
122
|
+
request_params (REQUEST_PARAMS_TYPEHINT): The BiDi parameters.
|
|
123
|
+
"""
|
|
124
|
+
|
|
125
|
+
id: int
|
|
126
|
+
method: str
|
|
127
|
+
params: REQUEST_PARAMS_TYPEHINT
|
|
128
|
+
|
|
129
|
+
@classmethod
|
|
130
|
+
def from_dict(cls, data: Dict[str, Any]) -> Self:
|
|
131
|
+
"""
|
|
132
|
+
Creates a BiDiTask instance from a dictionary.
|
|
133
|
+
|
|
134
|
+
Args:
|
|
135
|
+
data (Dict[str, Any]): The dictionary containing task data.
|
|
136
|
+
|
|
137
|
+
Returns:
|
|
138
|
+
Self: A new BiDiTask instance.
|
|
139
|
+
"""
|
|
140
|
+
|
|
141
|
+
return cls(id=data["id"], method=data["method"], params=data["params"])
|
|
142
|
+
|
|
143
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
144
|
+
"""
|
|
145
|
+
Converts the task to a dictionary.
|
|
146
|
+
|
|
147
|
+
Returns:
|
|
148
|
+
Dict[str, Any]: The task as a dictionary.
|
|
149
|
+
"""
|
|
150
|
+
|
|
151
|
+
return {"id": self.id, "method": self.method, "params": self.params}
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
@dataclass(slots=True)
|
|
155
|
+
class BiDiTaskContainer:
|
|
156
|
+
"""
|
|
157
|
+
Container for a BiDi task including response and synchronization event.
|
|
158
|
+
|
|
159
|
+
Attributes:
|
|
160
|
+
task (BiDiTask): The BiDi task.
|
|
161
|
+
response (Dict[str, Any]): The response data.
|
|
162
|
+
pending_event (trio.Event): Trio event to wait for task completion.
|
|
163
|
+
"""
|
|
164
|
+
|
|
165
|
+
task: BiDiTask
|
|
166
|
+
response: Dict[str, Any] = field(default_factory=dict)
|
|
167
|
+
pending_event: trio.Event = field(default_factory=trio.Event)
|
|
168
|
+
|
|
169
|
+
@classmethod
|
|
170
|
+
def from_dict(cls, data: Dict[str, Any]) -> Self:
|
|
171
|
+
"""
|
|
172
|
+
Creates a BiDiTaskContainer instance from a dictionary.
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
data (Dict[str, Any]): The dictionary containing container data.
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
Self: A new BiDiTaskContainer instance.
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
return cls(
|
|
182
|
+
task=BiDiTask.from_dict(data["task"]),
|
|
183
|
+
response=data["response"],
|
|
184
|
+
pending_event=data["pending_event"],
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
188
|
+
"""
|
|
189
|
+
Converts the container to a dictionary.
|
|
190
|
+
|
|
191
|
+
Returns:
|
|
192
|
+
Dict[str, Any]: The container as a dictionary.
|
|
193
|
+
"""
|
|
194
|
+
|
|
195
|
+
return {
|
|
196
|
+
"task": self.task.to_dict(),
|
|
197
|
+
"response": self.response,
|
|
198
|
+
"pending_event": self.pending_event,
|
|
199
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from typing import (
|
|
2
|
+
Any,
|
|
3
|
+
Callable,
|
|
4
|
+
Dict,
|
|
5
|
+
Optional
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
__all__ = [
|
|
10
|
+
"CURRENT_BROWSING_CONTEXT_TYPEHINT",
|
|
11
|
+
"MAP_REQUEST_FUNCTION_TYPEHINT",
|
|
12
|
+
"MAP_RESPONSE_FUNCTION_TYPEHINT",
|
|
13
|
+
"REQUEST_PARAMS_TYPEHINT"
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
CURRENT_BROWSING_CONTEXT_TYPEHINT = Optional[str]
|
|
17
|
+
REQUEST_PARAMS_TYPEHINT = Optional[Dict[str, Any]]
|
|
18
|
+
|
|
19
|
+
MAP_REQUEST_FUNCTION_TYPEHINT = Callable[[REQUEST_PARAMS_TYPEHINT, str], Dict[str, Any]]
|
|
20
|
+
MAP_RESPONSE_FUNCTION_TYPEHINT = Callable[[Dict[str, Any], REQUEST_PARAMS_TYPEHINT], Dict[str, Any]]
|