osn-selenium 1.0.0__py3-none-any.whl → 1.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- osn_selenium/_base_models.py +41 -0
- osn_selenium/_cdp_import.py +253 -0
- osn_selenium/_decorators.py +57 -0
- osn_selenium/_trio_threads_helpers.py +157 -0
- osn_selenium/_typehints.py +1 -1
- osn_selenium/abstract/executors/cdp.py +63 -0
- osn_selenium/abstract/webdriver/blink/base.py +14 -0
- osn_selenium/abstract/webdriver/blink/lifecycle.py +8 -8
- osn_selenium/abstract/webdriver/core/base.py +0 -14
- osn_selenium/abstract/webdriver/core/capture.py +4 -3
- osn_selenium/abstract/webdriver/core/lifecycle.py +8 -8
- osn_selenium/abstract/webdriver/core/script.py +5 -4
- osn_selenium/abstract/webdriver/core/window.py +11 -11
- osn_selenium/browsers_handler/models.py +1 -1
- osn_selenium/dev_tools/_decorators.py +19 -51
- osn_selenium/dev_tools/_functions.py +2 -4
- osn_selenium/dev_tools/_typehints.py +5 -2
- osn_selenium/dev_tools/_wrappers.py +0 -3
- osn_selenium/dev_tools/domains/__init__.py +2 -2
- osn_selenium/dev_tools/domains/abstract.py +1 -1
- osn_selenium/dev_tools/domains/fetch.py +6 -8
- osn_selenium/dev_tools/domains_default/fetch.py +2 -2
- osn_selenium/dev_tools/filters.py +1 -1
- osn_selenium/dev_tools/logger/main.py +9 -21
- osn_selenium/dev_tools/logger/models.py +1 -1
- osn_selenium/dev_tools/logger/target.py +49 -29
- osn_selenium/dev_tools/manager/base.py +10 -42
- osn_selenium/dev_tools/manager/lifecycle.py +84 -75
- osn_selenium/dev_tools/manager/logging.py +1 -1
- osn_selenium/dev_tools/manager/targets.py +13 -5
- osn_selenium/dev_tools/models.py +1 -1
- osn_selenium/dev_tools/settings.py +9 -5
- osn_selenium/dev_tools/target/base.py +30 -34
- osn_selenium/dev_tools/target/discovery.py +1 -1
- osn_selenium/dev_tools/target/events.py +2 -2
- osn_selenium/dev_tools/target/fingerprint.py +1 -1
- osn_selenium/dev_tools/target/lifecycle.py +103 -38
- osn_selenium/dev_tools/target/logging.py +11 -3
- osn_selenium/exceptions/__init__.py +0 -1
- osn_selenium/exceptions/base.py +28 -1
- osn_selenium/exceptions/bidi_bridge.py +59 -0
- osn_selenium/exceptions/configuration.py +1 -8
- osn_selenium/exceptions/dependencies.py +60 -0
- osn_selenium/exceptions/devtools.py +9 -39
- osn_selenium/exceptions/experimental.py +26 -0
- osn_selenium/exceptions/flags.py +0 -2
- osn_selenium/exceptions/instance.py +1 -9
- osn_selenium/exceptions/javascript.py +0 -2
- osn_selenium/exceptions/logic.py +0 -2
- osn_selenium/exceptions/path.py +1 -9
- osn_selenium/exceptions/platform.py +0 -2
- osn_selenium/exceptions/protocol.py +0 -3
- osn_selenium/exceptions/webdriver.py +1 -7
- osn_selenium/exceptions/window.py +1 -8
- osn_selenium/executors/sync/cdp.py +95 -0
- osn_selenium/executors/trio_bidi/cdp.py +101 -0
- osn_selenium/executors/trio_bidi/javascript.py +101 -0
- osn_selenium/executors/trio_threads/cdp.py +99 -0
- osn_selenium/executors/trio_threads/javascript.py +1 -1
- osn_selenium/executors/unified/javascript.py +0 -4
- osn_selenium/flags/base.py +7 -13
- osn_selenium/flags/blink.py +2 -8
- osn_selenium/flags/chrome.py +6 -6
- osn_selenium/flags/edge.py +6 -6
- osn_selenium/flags/models/base.py +4 -4
- osn_selenium/flags/models/blink.py +1 -1
- osn_selenium/flags/models/values.py +1 -1
- osn_selenium/instances/convert.py +44 -3
- osn_selenium/instances/protocols.py +47 -1
- osn_selenium/instances/sync/action_chains/__init__.py +6 -0
- osn_selenium/instances/sync/browsing_context.py +2 -2
- osn_selenium/instances/sync/script.py +7 -2
- osn_selenium/instances/sync/shadow_root.py +30 -8
- osn_selenium/instances/sync/web_element.py +1 -1
- osn_selenium/instances/trio_bidi/__init__.py +1 -0
- osn_selenium/instances/trio_bidi/shadow_root.py +180 -0
- osn_selenium/instances/trio_bidi/switch_to.py +143 -0
- osn_selenium/instances/trio_bidi/web_driver_wait.py +124 -0
- osn_selenium/instances/trio_bidi/web_element.py +239 -0
- osn_selenium/instances/trio_threads/action_chains/__init__.py +6 -0
- osn_selenium/instances/trio_threads/action_chains/base.py +1 -1
- osn_selenium/instances/trio_threads/alert.py +1 -1
- osn_selenium/instances/trio_threads/browser.py +1 -1
- osn_selenium/instances/trio_threads/browsing_context.py +3 -3
- osn_selenium/instances/trio_threads/dialog.py +1 -1
- osn_selenium/instances/trio_threads/fedcm.py +1 -1
- osn_selenium/instances/trio_threads/mobile.py +1 -1
- osn_selenium/instances/trio_threads/network.py +1 -1
- osn_selenium/instances/trio_threads/permissions.py +1 -1
- osn_selenium/instances/trio_threads/script.py +8 -3
- osn_selenium/instances/trio_threads/shadow_root.py +46 -15
- osn_selenium/instances/trio_threads/storage.py +1 -1
- osn_selenium/instances/trio_threads/switch_to.py +1 -1
- osn_selenium/instances/trio_threads/web_driver_wait.py +1 -1
- osn_selenium/instances/trio_threads/web_element.py +1 -1
- osn_selenium/instances/trio_threads/web_extension.py +1 -1
- osn_selenium/instances/unified/browsing_context.py +2 -2
- osn_selenium/instances/unified/script.py +2 -2
- osn_selenium/instances/unified/web_element.py +3 -5
- osn_selenium/javascript/fingerprint/__init__.py +3 -2
- osn_selenium/javascript/fingerprint/registry/models.py +1 -1
- osn_selenium/javascript/fingerprint/spoof/core_rules.py +1 -1
- osn_selenium/javascript/fingerprint/spoof/noise.py +1 -1
- osn_selenium/javascript/models.py +1 -1
- osn_selenium/models.py +2 -47
- osn_selenium/trio_bidi/__init__.py +1 -0
- osn_selenium/trio_bidi/_context_vars.py +12 -0
- osn_selenium/trio_bidi/_error_mappings.py +123 -0
- osn_selenium/trio_bidi/_error_redirects.py +194 -0
- osn_selenium/trio_bidi/_file_functions.py +28 -0
- osn_selenium/trio_bidi/_internal_mappings.py +10 -0
- osn_selenium/trio_bidi/_models.py +199 -0
- osn_selenium/trio_bidi/_typehints.py +20 -0
- osn_selenium/trio_bidi/connection_pool.py +587 -0
- osn_selenium/trio_bidi/mapping/__init__.py +1 -0
- osn_selenium/trio_bidi/mapping/_constants.py +14 -0
- osn_selenium/trio_bidi/mapping/_js_snippets.py +285 -0
- osn_selenium/trio_bidi/mapping/_utils.py +4 -0
- osn_selenium/trio_bidi/mapping/request_functions/__init__.py +87 -0
- osn_selenium/trio_bidi/mapping/request_functions/_alert.py +102 -0
- osn_selenium/trio_bidi/mapping/request_functions/_args_helpers.py +225 -0
- osn_selenium/trio_bidi/mapping/request_functions/_capture.py +71 -0
- osn_selenium/trio_bidi/mapping/request_functions/_cdp.py +40 -0
- osn_selenium/trio_bidi/mapping/request_functions/_element.py +55 -0
- osn_selenium/trio_bidi/mapping/request_functions/_file.py +32 -0
- osn_selenium/trio_bidi/mapping/request_functions/_navigation.py +147 -0
- osn_selenium/trio_bidi/mapping/request_functions/_script.py +85 -0
- osn_selenium/trio_bidi/mapping/request_functions/_shadow_root.py +65 -0
- osn_selenium/trio_bidi/mapping/request_functions/_switch_to.py +59 -0
- osn_selenium/trio_bidi/mapping/request_functions/_web_element.py +448 -0
- osn_selenium/trio_bidi/mapping/request_functions/_window.py +125 -0
- osn_selenium/trio_bidi/mapping/response_functions/__init__.py +86 -0
- osn_selenium/trio_bidi/mapping/response_functions/_alert.py +81 -0
- osn_selenium/trio_bidi/mapping/response_functions/_args_helpers.py +183 -0
- osn_selenium/trio_bidi/mapping/response_functions/_args_validators.py +153 -0
- osn_selenium/trio_bidi/mapping/response_functions/_capture.py +71 -0
- osn_selenium/trio_bidi/mapping/response_functions/_cdp.py +26 -0
- osn_selenium/trio_bidi/mapping/response_functions/_element.py +58 -0
- osn_selenium/trio_bidi/mapping/response_functions/_file.py +30 -0
- osn_selenium/trio_bidi/mapping/response_functions/_navigation.py +120 -0
- osn_selenium/trio_bidi/mapping/response_functions/_script.py +57 -0
- osn_selenium/trio_bidi/mapping/response_functions/_shadow_root.py +58 -0
- osn_selenium/trio_bidi/mapping/response_functions/_switch_to.py +57 -0
- osn_selenium/trio_bidi/mapping/response_functions/_web_element.py +368 -0
- osn_selenium/trio_bidi/mapping/response_functions/_window.py +119 -0
- osn_selenium/trio_bidi/mixin.py +186 -0
- osn_selenium/trio_bidi/remote_connection.py +164 -0
- osn_selenium/{base_mixin.py → trio_threads_mixin.py} +31 -40
- osn_selenium/webdrivers/_args_helpers.py +120 -7
- osn_selenium/webdrivers/_bridges.py +2 -2
- osn_selenium/webdrivers/_executable_tables/models.py +1 -1
- osn_selenium/webdrivers/_typehints.py +9 -3
- osn_selenium/webdrivers/protocols.py +81 -1
- osn_selenium/webdrivers/sync/blink/__init__.py +11 -1
- osn_selenium/webdrivers/sync/blink/base.py +23 -1
- osn_selenium/webdrivers/sync/blink/lifecycle.py +26 -8
- osn_selenium/webdrivers/sync/chrome/__init__.py +36 -1
- osn_selenium/webdrivers/sync/chrome/base.py +13 -1
- osn_selenium/webdrivers/sync/chrome/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/chrome/settings.py +6 -1
- osn_selenium/webdrivers/sync/core/__init__.py +10 -1
- osn_selenium/webdrivers/sync/core/base.py +18 -18
- osn_selenium/webdrivers/sync/core/capture.py +3 -2
- osn_selenium/webdrivers/sync/core/file.py +3 -2
- osn_selenium/webdrivers/sync/core/lifecycle.py +44 -10
- osn_selenium/webdrivers/sync/core/script.py +3 -2
- osn_selenium/webdrivers/sync/core/window.py +3 -3
- osn_selenium/webdrivers/sync/edge/__init__.py +36 -1
- osn_selenium/webdrivers/sync/edge/base.py +13 -1
- osn_selenium/webdrivers/sync/edge/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/edge/settings.py +6 -1
- osn_selenium/webdrivers/sync/yandex/__init__.py +36 -1
- osn_selenium/webdrivers/sync/yandex/base.py +13 -1
- osn_selenium/webdrivers/sync/yandex/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/yandex/settings.py +6 -1
- osn_selenium/webdrivers/trio_bidi/__init__.py +1 -0
- osn_selenium/webdrivers/trio_bidi/blink/__init__.py +132 -0
- osn_selenium/webdrivers/trio_bidi/blink/base.py +167 -0
- osn_selenium/webdrivers/trio_bidi/blink/lifecycle.py +89 -0
- osn_selenium/webdrivers/trio_bidi/blink/settings.py +63 -0
- osn_selenium/webdrivers/trio_bidi/chrome/__init__.py +114 -0
- osn_selenium/webdrivers/trio_bidi/chrome/base.py +127 -0
- osn_selenium/webdrivers/trio_bidi/chrome/lifecycle.py +85 -0
- osn_selenium/webdrivers/trio_bidi/chrome/settings.py +63 -0
- osn_selenium/webdrivers/trio_bidi/core/__init__.py +95 -0
- osn_selenium/webdrivers/trio_bidi/core/actions.py +70 -0
- osn_selenium/webdrivers/trio_bidi/core/base.py +200 -0
- osn_selenium/webdrivers/trio_bidi/core/capture.py +39 -0
- osn_selenium/webdrivers/trio_bidi/core/devtools.py +49 -0
- osn_selenium/webdrivers/trio_bidi/core/element.py +64 -0
- osn_selenium/webdrivers/trio_bidi/core/lifecycle.py +135 -0
- osn_selenium/webdrivers/trio_bidi/core/navigation.py +37 -0
- osn_selenium/webdrivers/trio_bidi/core/script.py +56 -0
- osn_selenium/webdrivers/trio_bidi/core/settings.py +36 -0
- osn_selenium/webdrivers/trio_bidi/core/window.py +134 -0
- osn_selenium/webdrivers/trio_bidi/edge/__init__.py +114 -0
- osn_selenium/webdrivers/trio_bidi/edge/base.py +123 -0
- osn_selenium/webdrivers/trio_bidi/edge/lifecycle.py +85 -0
- osn_selenium/webdrivers/trio_bidi/edge/settings.py +63 -0
- osn_selenium/webdrivers/trio_bidi/yandex/__init__.py +114 -0
- osn_selenium/webdrivers/trio_bidi/yandex/base.py +120 -0
- osn_selenium/webdrivers/trio_bidi/yandex/lifecycle.py +85 -0
- osn_selenium/webdrivers/trio_bidi/yandex/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/blink/__init__.py +18 -2
- osn_selenium/webdrivers/trio_threads/blink/base.py +25 -1
- osn_selenium/webdrivers/trio_threads/blink/casting.py +1 -1
- osn_selenium/webdrivers/trio_threads/blink/features.py +1 -1
- osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +26 -8
- osn_selenium/webdrivers/trio_threads/blink/logging.py +1 -1
- osn_selenium/webdrivers/trio_threads/blink/network.py +1 -1
- osn_selenium/webdrivers/trio_threads/chrome/__init__.py +34 -1
- osn_selenium/webdrivers/trio_threads/chrome/base.py +14 -2
- osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/chrome/settings.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/__init__.py +10 -14
- osn_selenium/webdrivers/trio_threads/core/actions.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/auth.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/base.py +18 -22
- osn_selenium/webdrivers/trio_threads/core/capture.py +4 -3
- osn_selenium/webdrivers/trio_threads/core/comonents.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/devtools.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/element.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/file.py +5 -4
- osn_selenium/webdrivers/trio_threads/core/lifecycle.py +45 -11
- osn_selenium/webdrivers/trio_threads/core/navigation.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/script.py +4 -3
- osn_selenium/webdrivers/trio_threads/core/settings.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/storage.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/timeouts.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/window.py +6 -6
- osn_selenium/webdrivers/trio_threads/edge/__init__.py +34 -1
- osn_selenium/webdrivers/trio_threads/edge/base.py +14 -2
- osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/edge/settings.py +1 -1
- osn_selenium/webdrivers/trio_threads/yandex/__init__.py +34 -1
- osn_selenium/webdrivers/trio_threads/yandex/base.py +14 -2
- osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/yandex/settings.py +1 -1
- osn_selenium/webdrivers/unified/blink/base.py +9 -1
- osn_selenium/webdrivers/unified/blink/lifecycle.py +4 -2
- osn_selenium/webdrivers/unified/chrome/base.py +9 -1
- osn_selenium/webdrivers/unified/core/auth.py +4 -2
- osn_selenium/webdrivers/unified/core/base.py +19 -6
- osn_selenium/webdrivers/unified/core/capture.py +3 -2
- osn_selenium/webdrivers/unified/core/components.py +12 -7
- osn_selenium/webdrivers/unified/core/devtools.py +2 -1
- osn_selenium/webdrivers/unified/core/file.py +3 -2
- osn_selenium/webdrivers/unified/core/lifecycle.py +5 -3
- osn_selenium/webdrivers/unified/core/script.py +5 -3
- osn_selenium/webdrivers/unified/core/storage.py +2 -1
- osn_selenium/webdrivers/unified/core/window.py +9 -8
- osn_selenium/webdrivers/unified/edge/base.py +9 -1
- osn_selenium/webdrivers/unified/yandex/base.py +9 -1
- {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/METADATA +24 -10
- osn_selenium-1.2.0.dist-info/RECORD +480 -0
- {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/WHEEL +1 -1
- osn_selenium/abstract/executors/cdp/__init__.py +0 -435
- osn_selenium/abstract/executors/cdp/accessibility.py +0 -62
- osn_selenium/abstract/executors/cdp/animation.py +0 -47
- osn_selenium/abstract/executors/cdp/audits.py +0 -39
- osn_selenium/abstract/executors/cdp/autofill.py +0 -34
- osn_selenium/abstract/executors/cdp/background_service.py +0 -22
- osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +0 -95
- osn_selenium/abstract/executors/cdp/browser.py +0 -122
- osn_selenium/abstract/executors/cdp/cache_storage.py +0 -49
- osn_selenium/abstract/executors/cdp/cast.py +0 -31
- osn_selenium/abstract/executors/cdp/console.py +0 -18
- osn_selenium/abstract/executors/cdp/css.py +0 -197
- osn_selenium/abstract/executors/cdp/debugger.py +0 -198
- osn_selenium/abstract/executors/cdp/device_access.py +0 -22
- osn_selenium/abstract/executors/cdp/device_orientation.py +0 -14
- osn_selenium/abstract/executors/cdp/dom.py +0 -305
- osn_selenium/abstract/executors/cdp/dom_debugger.py +0 -57
- osn_selenium/abstract/executors/cdp/dom_snapshot.py +0 -42
- osn_selenium/abstract/executors/cdp/dom_storage.py +0 -31
- osn_selenium/abstract/executors/cdp/emulation.py +0 -259
- osn_selenium/abstract/executors/cdp/event_breakpoints.py +0 -18
- osn_selenium/abstract/executors/cdp/extensions.py +0 -31
- osn_selenium/abstract/executors/cdp/fed_cm.py +0 -35
- osn_selenium/abstract/executors/cdp/fetch.py +0 -76
- osn_selenium/abstract/executors/cdp/file_system.py +0 -11
- osn_selenium/abstract/executors/cdp/headless_experimental.py +0 -30
- osn_selenium/abstract/executors/cdp/heap_profiler.py +0 -73
- osn_selenium/abstract/executors/cdp/indexed_db.py +0 -99
- osn_selenium/abstract/executors/cdp/input.py +0 -158
- osn_selenium/abstract/executors/cdp/inspector.py +0 -14
- osn_selenium/abstract/executors/cdp/io.py +0 -24
- osn_selenium/abstract/executors/cdp/layer_tree.py +0 -61
- osn_selenium/abstract/executors/cdp/log.py +0 -27
- osn_selenium/abstract/executors/cdp/media.py +0 -14
- osn_selenium/abstract/executors/cdp/memory.py +0 -61
- osn_selenium/abstract/executors/cdp/network.py +0 -252
- osn_selenium/abstract/executors/cdp/overlay.py +0 -166
- osn_selenium/abstract/executors/cdp/page.py +0 -347
- osn_selenium/abstract/executors/cdp/performance.py +0 -28
- osn_selenium/abstract/executors/cdp/performance_timeline.py +0 -11
- osn_selenium/abstract/executors/cdp/preload.py +0 -14
- osn_selenium/abstract/executors/cdp/profiler.py +0 -54
- osn_selenium/abstract/executors/cdp/pwa.py +0 -46
- osn_selenium/abstract/executors/cdp/runtime.py +0 -176
- osn_selenium/abstract/executors/cdp/schema.py +0 -11
- osn_selenium/abstract/executors/cdp/security.py +0 -26
- osn_selenium/abstract/executors/cdp/service_worker.py +0 -54
- osn_selenium/abstract/executors/cdp/storage.py +0 -175
- osn_selenium/abstract/executors/cdp/system_info.py +0 -24
- osn_selenium/abstract/executors/cdp/target.py +0 -125
- osn_selenium/abstract/executors/cdp/tethering.py +0 -14
- osn_selenium/abstract/executors/cdp/tracing.py +0 -48
- osn_selenium/abstract/executors/cdp/web_audio.py +0 -19
- osn_selenium/abstract/executors/cdp/web_authn.py +0 -76
- osn_selenium/executors/sync/cdp/__init__.py +0 -550
- osn_selenium/executors/sync/cdp/accessibility.py +0 -74
- osn_selenium/executors/sync/cdp/animation.py +0 -50
- osn_selenium/executors/sync/cdp/audits.py +0 -48
- osn_selenium/executors/sync/cdp/autofill.py +0 -39
- osn_selenium/executors/sync/cdp/background_service.py +0 -30
- osn_selenium/executors/sync/cdp/bluetooth_emulation.py +0 -101
- osn_selenium/executors/sync/cdp/browser.py +0 -131
- osn_selenium/executors/sync/cdp/cache_storage.py +0 -66
- osn_selenium/executors/sync/cdp/cast.py +0 -38
- osn_selenium/executors/sync/cdp/console.py +0 -24
- osn_selenium/executors/sync/cdp/css.py +0 -187
- osn_selenium/executors/sync/cdp/debugger.py +0 -206
- osn_selenium/executors/sync/cdp/device_access.py +0 -27
- osn_selenium/executors/sync/cdp/device_orientation.py +0 -24
- osn_selenium/executors/sync/cdp/dom.py +0 -310
- osn_selenium/executors/sync/cdp/dom_debugger.py +0 -56
- osn_selenium/executors/sync/cdp/dom_snapshot.py +0 -58
- osn_selenium/executors/sync/cdp/dom_storage.py +0 -38
- osn_selenium/executors/sync/cdp/emulation.py +0 -270
- osn_selenium/executors/sync/cdp/event_breakpoints.py +0 -27
- osn_selenium/executors/sync/cdp/extensions.py +0 -39
- osn_selenium/executors/sync/cdp/fed_cm.py +0 -45
- osn_selenium/executors/sync/cdp/fetch.py +0 -96
- osn_selenium/executors/sync/cdp/file_system.py +0 -18
- osn_selenium/executors/sync/cdp/headless_experimental.py +0 -44
- osn_selenium/executors/sync/cdp/heap_profiler.py +0 -89
- osn_selenium/executors/sync/cdp/indexed_db.py +0 -142
- osn_selenium/executors/sync/cdp/input.py +0 -233
- osn_selenium/executors/sync/cdp/inspector.py +0 -21
- osn_selenium/executors/sync/cdp/io.py +0 -33
- osn_selenium/executors/sync/cdp/layer_tree.py +0 -71
- osn_selenium/executors/sync/cdp/log.py +0 -35
- osn_selenium/executors/sync/cdp/media.py +0 -21
- osn_selenium/executors/sync/cdp/memory.py +0 -62
- osn_selenium/executors/sync/cdp/network.py +0 -287
- osn_selenium/executors/sync/cdp/overlay.py +0 -174
- osn_selenium/executors/sync/cdp/page.py +0 -365
- osn_selenium/executors/sync/cdp/performance.py +0 -33
- osn_selenium/executors/sync/cdp/performance_timeline.py +0 -26
- osn_selenium/executors/sync/cdp/preload.py +0 -21
- osn_selenium/executors/sync/cdp/profiler.py +0 -58
- osn_selenium/executors/sync/cdp/pwa.py +0 -55
- osn_selenium/executors/sync/cdp/runtime.py +0 -221
- osn_selenium/executors/sync/cdp/schema.py +0 -23
- osn_selenium/executors/sync/cdp/security.py +0 -30
- osn_selenium/executors/sync/cdp/service_worker.py +0 -56
- osn_selenium/executors/sync/cdp/storage.py +0 -151
- osn_selenium/executors/sync/cdp/system_info.py +0 -30
- osn_selenium/executors/sync/cdp/target.py +0 -147
- osn_selenium/executors/sync/cdp/tethering.py +0 -21
- osn_selenium/executors/sync/cdp/tracing.py +0 -62
- osn_selenium/executors/sync/cdp/web_audio.py +0 -24
- osn_selenium/executors/sync/cdp/web_authn.py +0 -82
- osn_selenium/executors/trio_threads/cdp/__init__.py +0 -771
- osn_selenium/executors/trio_threads/cdp/accessibility.py +0 -87
- osn_selenium/executors/trio_threads/cdp/animation.py +0 -63
- osn_selenium/executors/trio_threads/cdp/audits.py +0 -57
- osn_selenium/executors/trio_threads/cdp/autofill.py +0 -52
- osn_selenium/executors/trio_threads/cdp/background_service.py +0 -40
- osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +0 -111
- osn_selenium/executors/trio_threads/cdp/browser.py +0 -140
- osn_selenium/executors/trio_threads/cdp/cache_storage.py +0 -79
- osn_selenium/executors/trio_threads/cdp/cast.py +0 -47
- osn_selenium/executors/trio_threads/cdp/console.py +0 -33
- osn_selenium/executors/trio_threads/cdp/css.py +0 -196
- osn_selenium/executors/trio_threads/cdp/debugger.py +0 -219
- osn_selenium/executors/trio_threads/cdp/device_access.py +0 -40
- osn_selenium/executors/trio_threads/cdp/device_orientation.py +0 -34
- osn_selenium/executors/trio_threads/cdp/dom.py +0 -319
- osn_selenium/executors/trio_threads/cdp/dom_debugger.py +0 -69
- osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +0 -71
- osn_selenium/executors/trio_threads/cdp/dom_storage.py +0 -51
- osn_selenium/executors/trio_threads/cdp/emulation.py +0 -283
- osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +0 -37
- osn_selenium/executors/trio_threads/cdp/extensions.py +0 -52
- osn_selenium/executors/trio_threads/cdp/fed_cm.py +0 -54
- osn_selenium/executors/trio_threads/cdp/fetch.py +0 -105
- osn_selenium/executors/trio_threads/cdp/file_system.py +0 -31
- osn_selenium/executors/trio_threads/cdp/headless_experimental.py +0 -54
- osn_selenium/executors/trio_threads/cdp/heap_profiler.py +0 -102
- osn_selenium/executors/trio_threads/cdp/indexed_db.py +0 -155
- osn_selenium/executors/trio_threads/cdp/input.py +0 -242
- osn_selenium/executors/trio_threads/cdp/inspector.py +0 -34
- osn_selenium/executors/trio_threads/cdp/io.py +0 -42
- osn_selenium/executors/trio_threads/cdp/layer_tree.py +0 -84
- osn_selenium/executors/trio_threads/cdp/log.py +0 -44
- osn_selenium/executors/trio_threads/cdp/media.py +0 -30
- osn_selenium/executors/trio_threads/cdp/memory.py +0 -71
- osn_selenium/executors/trio_threads/cdp/network.py +0 -296
- osn_selenium/executors/trio_threads/cdp/overlay.py +0 -183
- osn_selenium/executors/trio_threads/cdp/page.py +0 -374
- osn_selenium/executors/trio_threads/cdp/performance.py +0 -46
- osn_selenium/executors/trio_threads/cdp/performance_timeline.py +0 -36
- osn_selenium/executors/trio_threads/cdp/preload.py +0 -30
- osn_selenium/executors/trio_threads/cdp/profiler.py +0 -71
- osn_selenium/executors/trio_threads/cdp/pwa.py +0 -64
- osn_selenium/executors/trio_threads/cdp/runtime.py +0 -230
- osn_selenium/executors/trio_threads/cdp/schema.py +0 -32
- osn_selenium/executors/trio_threads/cdp/security.py +0 -43
- osn_selenium/executors/trio_threads/cdp/service_worker.py +0 -69
- osn_selenium/executors/trio_threads/cdp/storage.py +0 -162
- osn_selenium/executors/trio_threads/cdp/system_info.py +0 -43
- osn_selenium/executors/trio_threads/cdp/target.py +0 -156
- osn_selenium/executors/trio_threads/cdp/tethering.py +0 -34
- osn_selenium/executors/trio_threads/cdp/tracing.py +0 -71
- osn_selenium/executors/trio_threads/cdp/web_audio.py +0 -37
- osn_selenium/executors/trio_threads/cdp/web_authn.py +0 -95
- osn_selenium/executors/unified/cdp/accessibility.py +0 -81
- osn_selenium/executors/unified/cdp/animation.py +0 -50
- osn_selenium/executors/unified/cdp/audits.py +0 -45
- osn_selenium/executors/unified/cdp/autofill.py +0 -41
- osn_selenium/executors/unified/cdp/background_service.py +0 -24
- osn_selenium/executors/unified/cdp/bluetooth_emulation.py +0 -132
- osn_selenium/executors/unified/cdp/browser.py +0 -143
- osn_selenium/executors/unified/cdp/cache_storage.py +0 -69
- osn_selenium/executors/unified/cdp/cast.py +0 -32
- osn_selenium/executors/unified/cdp/console.py +0 -18
- osn_selenium/executors/unified/cdp/css.py +0 -237
- osn_selenium/executors/unified/cdp/debugger.py +0 -243
- osn_selenium/executors/unified/cdp/device_access.py +0 -21
- osn_selenium/executors/unified/cdp/device_orientation.py +0 -18
- osn_selenium/executors/unified/cdp/dom.py +0 -380
- osn_selenium/executors/unified/cdp/dom_debugger.py +0 -65
- osn_selenium/executors/unified/cdp/dom_snapshot.py +0 -58
- osn_selenium/executors/unified/cdp/dom_storage.py +0 -38
- osn_selenium/executors/unified/cdp/emulation.py +0 -312
- osn_selenium/executors/unified/cdp/event_breakpoints.py +0 -24
- osn_selenium/executors/unified/cdp/extensions.py +0 -45
- osn_selenium/executors/unified/cdp/fed_cm.py +0 -51
- osn_selenium/executors/unified/cdp/fetch.py +0 -111
- osn_selenium/executors/unified/cdp/file_system.py +0 -15
- osn_selenium/executors/unified/cdp/headless_experimental.py +0 -38
- osn_selenium/executors/unified/cdp/heap_profiler.py +0 -101
- osn_selenium/executors/unified/cdp/indexed_db.py +0 -157
- osn_selenium/executors/unified/cdp/input.py +0 -254
- osn_selenium/executors/unified/cdp/inspector.py +0 -15
- osn_selenium/executors/unified/cdp/io.py +0 -29
- osn_selenium/executors/unified/cdp/layer_tree.py +0 -71
- osn_selenium/executors/unified/cdp/log.py +0 -29
- osn_selenium/executors/unified/cdp/media.py +0 -15
- osn_selenium/executors/unified/cdp/memory.py +0 -59
- osn_selenium/executors/unified/cdp/network.py +0 -323
- osn_selenium/executors/unified/cdp/overlay.py +0 -209
- osn_selenium/executors/unified/cdp/page.py +0 -410
- osn_selenium/executors/unified/cdp/performance.py +0 -27
- osn_selenium/executors/unified/cdp/performance_timeline.py +0 -17
- osn_selenium/executors/unified/cdp/preload.py +0 -15
- osn_selenium/executors/unified/cdp/profiler.py +0 -55
- osn_selenium/executors/unified/cdp/pwa.py +0 -55
- osn_selenium/executors/unified/cdp/runtime.py +0 -245
- osn_selenium/executors/unified/cdp/schema.py +0 -17
- osn_selenium/executors/unified/cdp/security.py +0 -27
- osn_selenium/executors/unified/cdp/service_worker.py +0 -62
- osn_selenium/executors/unified/cdp/storage.py +0 -178
- osn_selenium/executors/unified/cdp/system_info.py +0 -24
- osn_selenium/executors/unified/cdp/target.py +0 -165
- osn_selenium/executors/unified/cdp/tethering.py +0 -15
- osn_selenium/executors/unified/cdp/tracing.py +0 -62
- osn_selenium/executors/unified/cdp/web_audio.py +0 -18
- osn_selenium/executors/unified/cdp/web_authn.py +0 -103
- osn_selenium-1.0.0.dist-info/RECORD +0 -608
- /osn_selenium/{dev_tools/_exception_helpers.py → _exception_helpers.py} +0 -0
- /osn_selenium/executors/{unified/cdp → trio_bidi}/__init__.py +0 -0
- {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
from selenium.webdriver.remote.command import Command
|
|
3
|
+
from osn_selenium.trio_bidi._typehints import (
|
|
4
|
+
MAP_RESPONSE_FUNCTION_TYPEHINT,
|
|
5
|
+
REQUEST_PARAMS_TYPEHINT
|
|
6
|
+
)
|
|
7
|
+
from osn_selenium.trio_bidi.mapping.response_functions._args_helpers import (
|
|
8
|
+
map_js_primitive_response,
|
|
9
|
+
map_void_response
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
__all__ = ["MAPPED_RESPONSE_ALERT_COMMANDS"]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _map_w3c_set_alert_value_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
|
|
17
|
+
"""
|
|
18
|
+
Maps BiDi response for setting alert value to W3C void response.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
bidi_result (Dict[str, Any]): BiDi response result.
|
|
22
|
+
request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
Dict[str, Any]: W3C void response.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
return map_void_response(bidi_result=bidi_result, request_params=request_params)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _map_w3c_get_alert_text_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
|
|
32
|
+
"""
|
|
33
|
+
Maps BiDi response for alert text to W3C primitive response.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
bidi_result (Dict[str, Any]): BiDi response result.
|
|
37
|
+
request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
Dict[str, Any]: W3C response with the alert text.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
return map_js_primitive_response(bidi_result=bidi_result, request_params=request_params)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _map_w3c_dismiss_alert_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
|
|
47
|
+
"""
|
|
48
|
+
Maps BiDi response for dismissing alert to W3C void response.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
bidi_result (Dict[str, Any]): BiDi response result.
|
|
52
|
+
request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
Dict[str, Any]: W3C void response.
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
return map_void_response(bidi_result=bidi_result, request_params=request_params)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _map_w3c_accept_alert_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
|
|
62
|
+
"""
|
|
63
|
+
Maps BiDi response for accepting alert to W3C void response.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
bidi_result (Dict[str, Any]): BiDi response result.
|
|
67
|
+
request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
Dict[str, Any]: W3C void response.
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
return map_void_response(bidi_result=bidi_result, request_params=request_params)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
MAPPED_RESPONSE_ALERT_COMMANDS: Dict[str, MAP_RESPONSE_FUNCTION_TYPEHINT] = {
|
|
77
|
+
Command.W3C_GET_ALERT_TEXT: _map_w3c_get_alert_text_response,
|
|
78
|
+
Command.W3C_ACCEPT_ALERT: _map_w3c_accept_alert_response,
|
|
79
|
+
Command.W3C_DISMISS_ALERT: _map_w3c_dismiss_alert_response,
|
|
80
|
+
Command.W3C_SET_ALERT_VALUE: _map_w3c_set_alert_value_response,
|
|
81
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
from osn_selenium.trio_bidi._internal_mappings import (
|
|
3
|
+
OSN_SWITCH_CONTEXT_KEY
|
|
4
|
+
)
|
|
5
|
+
from osn_selenium.trio_bidi._typehints import (
|
|
6
|
+
CURRENT_BROWSING_CONTEXT_TYPEHINT
|
|
7
|
+
)
|
|
8
|
+
from osn_selenium.trio_bidi.mapping._utils import (
|
|
9
|
+
ELEMENT_KEY,
|
|
10
|
+
SHADOW_ROOT_KEY
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
__all__ = [
|
|
15
|
+
"build_w3c_element",
|
|
16
|
+
"build_w3c_shadow_root",
|
|
17
|
+
"convert_bidi_to_w3c_js",
|
|
18
|
+
"inject_osn_switch_context_to_response",
|
|
19
|
+
"map_js_primitive_response",
|
|
20
|
+
"map_js_response",
|
|
21
|
+
"map_rect_response",
|
|
22
|
+
"map_void_response"
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def map_void_response(bidi_result: Dict[str, Any], request_params: Any) -> Dict[str, Any]:
|
|
27
|
+
"""
|
|
28
|
+
Returns a standard W3C void response (value: null).
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
bidi_result (Dict[str, Any]): BiDi result dictionary.
|
|
32
|
+
request_params (Any): Original request parameters.
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
Dict[str, Any]: W3C response with null value.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
return {"value": None}
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def map_rect_response(bidi_result: Dict[str, Any], request_params: Any) -> Dict[str, Any]:
|
|
42
|
+
"""
|
|
43
|
+
Maps BiDi geometric result to W3C rect format.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
bidi_result (Dict[str, Any]): BiDi result containing geometry data.
|
|
47
|
+
request_params (Any): Original request parameters.
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
Dict[str, Any]: W3C response with x, y, width, height.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
"value": {
|
|
55
|
+
"x": bidi_result.get("x", 0),
|
|
56
|
+
"y": bidi_result.get("y", 0),
|
|
57
|
+
"width": bidi_result.get("width", 0),
|
|
58
|
+
"height": bidi_result.get("height", 0)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def convert_bidi_to_w3c_js(bidi_value: Dict[str, Any]) -> Any:
|
|
64
|
+
"""
|
|
65
|
+
Recursively converts a BiDi RemoteValue/LocalValue into a Python representation compatible with W3C.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
bidi_value (Dict[str, Any]): The BiDi value dictionary to convert.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
Any: The converted value (dict, list, primitive, or element reference).
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
if not isinstance(bidi_value, dict):
|
|
75
|
+
return bidi_value
|
|
76
|
+
|
|
77
|
+
rv_type = bidi_value.get("type")
|
|
78
|
+
|
|
79
|
+
if rv_type in ("string", "number", "boolean"):
|
|
80
|
+
return bidi_value.get("value")
|
|
81
|
+
|
|
82
|
+
if rv_type == "null":
|
|
83
|
+
return None
|
|
84
|
+
|
|
85
|
+
if rv_type == "window":
|
|
86
|
+
return bidi_value.get("value", {}).get("context")
|
|
87
|
+
|
|
88
|
+
if rv_type == "node":
|
|
89
|
+
shared_id = bidi_value.get("sharedId") or bidi_value.get("value", {}).get("sharedId")
|
|
90
|
+
return {ELEMENT_KEY: shared_id}
|
|
91
|
+
|
|
92
|
+
if rv_type == "array":
|
|
93
|
+
return [convert_bidi_to_w3c_js(item) for item in bidi_value.get("value", [])]
|
|
94
|
+
|
|
95
|
+
if rv_type == "object":
|
|
96
|
+
result = {}
|
|
97
|
+
|
|
98
|
+
for pair in bidi_value.get("value", []):
|
|
99
|
+
k = convert_bidi_to_w3c_js(pair[0])
|
|
100
|
+
v = convert_bidi_to_w3c_js(pair[1])
|
|
101
|
+
|
|
102
|
+
result[k] = v
|
|
103
|
+
|
|
104
|
+
return result
|
|
105
|
+
|
|
106
|
+
return None
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def map_js_response(bidi_result: Dict[str, Any], request_params: Any) -> Dict[str, Any]:
|
|
110
|
+
"""
|
|
111
|
+
Maps any BiDi RemoteValue to a W3C compatible Python object.
|
|
112
|
+
|
|
113
|
+
Args:
|
|
114
|
+
bidi_result (Dict[str, Any]): BiDi result containing 'result'.
|
|
115
|
+
request_params (Any): Original request parameters.
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
Dict[str, Any]: W3C response with converted value.
|
|
119
|
+
"""
|
|
120
|
+
|
|
121
|
+
remote_value = bidi_result.get("result", {})
|
|
122
|
+
|
|
123
|
+
return {"value": convert_bidi_to_w3c_js(bidi_value=remote_value)}
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def map_js_primitive_response(bidi_result: Dict[str, Any], request_params: Any) -> Dict[str, Any]:
|
|
127
|
+
"""
|
|
128
|
+
Maps a BiDi script result containing a simple value to W3C format.
|
|
129
|
+
|
|
130
|
+
Args:
|
|
131
|
+
bidi_result (Dict[str, Any]): BiDi result containing 'result.value'.
|
|
132
|
+
request_params (Any): Original request parameters.
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
Dict[str, Any]: W3C response with the primitive value.
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
return {"value": bidi_result.get("result", {}).get("value")}
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def inject_osn_switch_context_to_response(response: Dict[str, Any], context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT) -> Dict[str, Any]:
|
|
142
|
+
"""
|
|
143
|
+
Injects a special key into the response to notify the driver of a context switch.
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
response (Dict[str, Any]): The W3C response dictionary.
|
|
147
|
+
context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The target browsing context ID.
|
|
148
|
+
|
|
149
|
+
Returns:
|
|
150
|
+
Dict[str, Any]: Modified response dictionary.
|
|
151
|
+
"""
|
|
152
|
+
|
|
153
|
+
response[OSN_SWITCH_CONTEXT_KEY] = context_id
|
|
154
|
+
|
|
155
|
+
return response
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def build_w3c_shadow_root(id_: str) -> Dict[str, Any]:
|
|
159
|
+
"""
|
|
160
|
+
Wraps a shared ID into a W3C shadow root reference.
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
id_ (str): The shadow root shared ID.
|
|
164
|
+
|
|
165
|
+
Returns:
|
|
166
|
+
Dict[str, Any]: W3C shadow root dictionary.
|
|
167
|
+
"""
|
|
168
|
+
|
|
169
|
+
return {SHADOW_ROOT_KEY: id_}
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def build_w3c_element(id_: str) -> Dict[str, Any]:
|
|
173
|
+
"""
|
|
174
|
+
Wraps a shared ID into a W3C element reference.
|
|
175
|
+
|
|
176
|
+
Args:
|
|
177
|
+
id_ (str): The element shared ID.
|
|
178
|
+
|
|
179
|
+
Returns:
|
|
180
|
+
Dict[str, Any]: W3C element dictionary.
|
|
181
|
+
"""
|
|
182
|
+
|
|
183
|
+
return {ELEMENT_KEY: id_}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
from typing import (
|
|
2
|
+
Any,
|
|
3
|
+
Dict,
|
|
4
|
+
Optional,
|
|
5
|
+
Tuple
|
|
6
|
+
)
|
|
7
|
+
from selenium.webdriver.remote.errorhandler import ErrorCode
|
|
8
|
+
from osn_selenium.trio_bidi._typehints import (
|
|
9
|
+
REQUEST_PARAMS_TYPEHINT
|
|
10
|
+
)
|
|
11
|
+
from osn_selenium.trio_bidi._error_mappings import (
|
|
12
|
+
create_w3c_error_response
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"validate_element_exceptions",
|
|
18
|
+
"validate_javascript_error",
|
|
19
|
+
"validate_no_such_element"
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def validate_no_such_element(nodes: Any, request_params: REQUEST_PARAMS_TYPEHINT) -> Optional[Dict[str, Any]]:
|
|
24
|
+
"""
|
|
25
|
+
Checks if nodes list is empty and returns a NO_SUCH_ELEMENT error if so.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
nodes (Any): The collection of nodes found.
|
|
29
|
+
request_params (Optional[Dict[str, Any]]): Original request parameters for message details.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
Optional[Dict[str, Any]]: W3C error response if empty, else None.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
if not nodes:
|
|
36
|
+
using = request_params.get("using", "unknown")
|
|
37
|
+
value = request_params.get("value", "unknown")
|
|
38
|
+
|
|
39
|
+
message = f"no such element: Unable to locate element: {{\"method\":\"{using}\",\"selector\":\"{value}\"}}"
|
|
40
|
+
status_code, error_string = ErrorCode.NO_SUCH_ELEMENT
|
|
41
|
+
|
|
42
|
+
return create_w3c_error_response(status_code=status_code, error_string=error_string, message=message)
|
|
43
|
+
|
|
44
|
+
return None
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _get_js_exception_details(bidi_result: Dict[str, Any]) -> Tuple[Optional[str], str]:
|
|
48
|
+
"""
|
|
49
|
+
Extracts text and stacktrace from a BiDi exception result.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
bidi_result (Dict[str, Any]): The BiDi response object.
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
Tuple[Optional[str], str]: Lowercased error message and formatted stacktrace string.
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
if bidi_result.get("type") != "exception":
|
|
59
|
+
return None, ""
|
|
60
|
+
|
|
61
|
+
details = bidi_result.get("exceptionDetails", {})
|
|
62
|
+
text = details.get("text", "")
|
|
63
|
+
|
|
64
|
+
stack_frames = details.get("stackTrace", {}).get("callFrames", [])
|
|
65
|
+
stack_lines = []
|
|
66
|
+
|
|
67
|
+
for frame in stack_frames:
|
|
68
|
+
func = frame.get("functionName") or "anonymous"
|
|
69
|
+
url = frame.get("url") or "unknown"
|
|
70
|
+
line = frame.get("lineNumber", 0)
|
|
71
|
+
col = frame.get("columnNumber", 0)
|
|
72
|
+
|
|
73
|
+
stack_lines.append(f" at {func} ({url}:{line}:{col})")
|
|
74
|
+
|
|
75
|
+
return text.lower(), "\n".join(stack_lines)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def validate_javascript_error(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Optional[Dict[str, Any]]:
|
|
79
|
+
"""
|
|
80
|
+
Checks for script exceptions in BiDi result and converts them to JAVASCRIPT_ERROR.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
bidi_result (Dict[str, Any]): Result from script evaluation.
|
|
84
|
+
request_params (Optional[Dict[str, Any]]): Original request parameters.
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
Optional[Dict[str, Any]]: W3C error response if exception occurred, else None.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
error_text, stack = _get_js_exception_details(bidi_result=bidi_result)
|
|
91
|
+
|
|
92
|
+
if error_text:
|
|
93
|
+
status_code, error_string = ErrorCode.JAVASCRIPT_ERROR
|
|
94
|
+
message = f"javascript error: {error_text}"
|
|
95
|
+
|
|
96
|
+
return create_w3c_error_response(
|
|
97
|
+
status_code=status_code,
|
|
98
|
+
error_string=error_string,
|
|
99
|
+
message=message,
|
|
100
|
+
stacktrace=stack
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
return None
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def validate_element_exceptions(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Optional[Dict[str, Any]]:
|
|
107
|
+
"""
|
|
108
|
+
Validates script execution results for element-specific exceptions (stale, not interactable, etc.).
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
bidi_result (Dict[str, Any]): Result from script evaluation.
|
|
112
|
+
request_params (Optional[Dict[str, Any]]): Original request parameters.
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
Optional[Dict[str, Any]]: W3C error response if an element-related error occurred, else None.
|
|
116
|
+
"""
|
|
117
|
+
|
|
118
|
+
error_text, stack = _get_js_exception_details(bidi_result=bidi_result)
|
|
119
|
+
|
|
120
|
+
if not error_text:
|
|
121
|
+
return None
|
|
122
|
+
|
|
123
|
+
mapping = {
|
|
124
|
+
"stale element reference": ErrorCode.STALE_ELEMENT_REFERENCE,
|
|
125
|
+
"no such shadow root": ErrorCode.NO_SUCH_SHADOW_ROOT,
|
|
126
|
+
"element not interactable": ErrorCode.ELEMENT_NOT_INTERACTABLE,
|
|
127
|
+
"invalid element state": ErrorCode.INVALID_ELEMENT_STATE,
|
|
128
|
+
"element not selectable": ErrorCode.ELEMENT_IS_NOT_SELECTABLE,
|
|
129
|
+
"element click intercepted": ErrorCode.ELEMENT_CLICK_INTERCEPTED,
|
|
130
|
+
"invalid element coordinates": ErrorCode.INVALID_ELEMENT_COORDINATES,
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
for key, code_info in mapping.items():
|
|
134
|
+
if key in error_text:
|
|
135
|
+
raw_msg = bidi_result["result"]["exceptionDetails"]["text"]
|
|
136
|
+
|
|
137
|
+
if key == "stale element reference":
|
|
138
|
+
message = "stale element reference: element is not attached to the page document"
|
|
139
|
+
else:
|
|
140
|
+
message = raw_msg
|
|
141
|
+
|
|
142
|
+
return create_w3c_error_response(
|
|
143
|
+
status_code=code_info[0]
|
|
144
|
+
if isinstance(code_info, list)
|
|
145
|
+
else 13,
|
|
146
|
+
error_string=code_info[1]
|
|
147
|
+
if isinstance(code_info, list)
|
|
148
|
+
else code_info[0],
|
|
149
|
+
message=message,
|
|
150
|
+
stacktrace=stack,
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
return validate_javascript_error(bidi_result, request_params)
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
from selenium.webdriver.remote.command import Command
|
|
3
|
+
from osn_selenium.trio_bidi.mapping.response_functions._args_helpers import (
|
|
4
|
+
map_js_primitive_response
|
|
5
|
+
)
|
|
6
|
+
from osn_selenium.trio_bidi._typehints import (
|
|
7
|
+
MAP_RESPONSE_FUNCTION_TYPEHINT,
|
|
8
|
+
REQUEST_PARAMS_TYPEHINT
|
|
9
|
+
)
|
|
10
|
+
from osn_selenium.trio_bidi.mapping.response_functions._args_validators import (
|
|
11
|
+
validate_javascript_error
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
__all__ = ["MAPPED_RESPONSE_CAPTURE_COMMANDS"]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _map_screenshot_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
|
|
19
|
+
"""
|
|
20
|
+
Extracts base64 screenshot data from BiDi result.
|
|
21
|
+
|
|
22
|
+
Args:
|
|
23
|
+
bidi_result (Dict[str, Any]): BiDi response containing 'data'.
|
|
24
|
+
request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
|
|
25
|
+
|
|
26
|
+
Returns:
|
|
27
|
+
Dict[str, Any]: W3C response with base64 data.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
return {"value": bidi_result.get("data")}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _map_print_page_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
|
|
34
|
+
"""
|
|
35
|
+
Extracts base64 PDF data from BiDi print result.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
bidi_result (Dict[str, Any]): BiDi response containing 'data'.
|
|
39
|
+
request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
Dict[str, Any]: W3C response with base64 data.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
return {"value": bidi_result.get("data")}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def _map_get_page_source_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
|
|
49
|
+
"""
|
|
50
|
+
Maps BiDi script evaluation result to page source string.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
bidi_result (Dict[str, Any]): BiDi response with JS evaluation result.
|
|
54
|
+
request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
Dict[str, Any]: W3C response with HTML string.
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
javascript_error_validation = validate_javascript_error(bidi_result=bidi_result, request_params=request_params)
|
|
61
|
+
if javascript_error_validation is not None:
|
|
62
|
+
return javascript_error_validation
|
|
63
|
+
|
|
64
|
+
return map_js_primitive_response(bidi_result, request_params)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
MAPPED_RESPONSE_CAPTURE_COMMANDS: Dict[str, MAP_RESPONSE_FUNCTION_TYPEHINT] = {
|
|
68
|
+
Command.SCREENSHOT: _map_screenshot_response,
|
|
69
|
+
Command.GET_PAGE_SOURCE: _map_get_page_source_response,
|
|
70
|
+
Command.PRINT_PAGE: _map_print_page_response,
|
|
71
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
from osn_selenium.trio_bidi._typehints import (
|
|
3
|
+
MAP_RESPONSE_FUNCTION_TYPEHINT,
|
|
4
|
+
REQUEST_PARAMS_TYPEHINT
|
|
5
|
+
)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
__all__ = ["MAPPED_RESPONSE_CDP_COMMANDS"]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _execute_cdp_command(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
|
|
12
|
+
"""
|
|
13
|
+
Maps the result of a CDP command back to the W3C response format.
|
|
14
|
+
|
|
15
|
+
Args:
|
|
16
|
+
bidi_result (Dict[str, Any]): The result received from BiDi.
|
|
17
|
+
request_params (Optional[Dict[str, Any]]): The original request parameters.
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
Dict[str, Any]: The W3C-compatible result wrapper.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
return {"value": bidi_result.get("result")}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
MAPPED_RESPONSE_CDP_COMMANDS: Dict[str, MAP_RESPONSE_FUNCTION_TYPEHINT] = {"executeCdpCommand": _execute_cdp_command}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
from selenium.webdriver.remote.command import Command
|
|
3
|
+
from osn_selenium.trio_bidi.mapping.response_functions._args_helpers import build_w3c_element
|
|
4
|
+
from osn_selenium.trio_bidi._typehints import (
|
|
5
|
+
MAP_RESPONSE_FUNCTION_TYPEHINT,
|
|
6
|
+
REQUEST_PARAMS_TYPEHINT
|
|
7
|
+
)
|
|
8
|
+
from osn_selenium.trio_bidi.mapping.response_functions._args_validators import (
|
|
9
|
+
validate_no_such_element
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
__all__ = ["MAPPED_RESPONSE_ELEMENT_COMMANDS"]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _map_find_elements_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
|
|
17
|
+
"""
|
|
18
|
+
Converts BiDi nodes into a list of W3C element references.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
bidi_result (Dict[str, Any]): BiDi result containing 'nodes'.
|
|
22
|
+
request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
Dict[str, Any]: W3C response containing a list of element dicts.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
nodes = bidi_result.get("nodes", [])
|
|
29
|
+
value = [build_w3c_element(node["sharedId"]) for node in nodes]
|
|
30
|
+
|
|
31
|
+
return {"value": value}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _map_find_element_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
|
|
35
|
+
"""
|
|
36
|
+
Converts BiDi first node into a single W3C element reference, validating existence.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
bidi_result (Dict[str, Any]): BiDi result containing 'nodes'.
|
|
40
|
+
request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
Dict[str, Any]: W3C response containing an element dict or error.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
nodes = bidi_result.get("nodes", [])
|
|
47
|
+
|
|
48
|
+
no_such_element_validation = validate_no_such_element(nodes=nodes, request_params=request_params)
|
|
49
|
+
if no_such_element_validation is not None:
|
|
50
|
+
return no_such_element_validation
|
|
51
|
+
|
|
52
|
+
return {"value": build_w3c_element(nodes[0]["sharedId"])}
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
MAPPED_RESPONSE_ELEMENT_COMMANDS: Dict[str, MAP_RESPONSE_FUNCTION_TYPEHINT] = {
|
|
56
|
+
Command.FIND_ELEMENT: _map_find_element_response,
|
|
57
|
+
Command.FIND_ELEMENTS: _map_find_elements_response
|
|
58
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
from selenium.webdriver.remote.command import Command
|
|
3
|
+
from osn_selenium.trio_bidi.mapping.response_functions._args_helpers import (
|
|
4
|
+
map_js_primitive_response
|
|
5
|
+
)
|
|
6
|
+
from osn_selenium.trio_bidi._typehints import (
|
|
7
|
+
MAP_RESPONSE_FUNCTION_TYPEHINT,
|
|
8
|
+
REQUEST_PARAMS_TYPEHINT
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
__all__ = ["MAPPED_RESPONSE_FILE_COMMANDS"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _map_upload_file_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
|
|
16
|
+
"""
|
|
17
|
+
Maps BiDi file upload result to W3C response format.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
bidi_result (Dict[str, Any]): BiDi internal response.
|
|
21
|
+
request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
Dict[str, Any]: W3C response with the file path.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
return map_js_primitive_response(bidi_result=bidi_result, request_params=request_params)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
MAPPED_RESPONSE_FILE_COMMANDS: Dict[str, MAP_RESPONSE_FUNCTION_TYPEHINT] = {Command.UPLOAD_FILE: _map_upload_file_response}
|