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,285 @@
|
|
|
1
|
+
__all__ = ["CAPTURE", "NAVIGATION", "WEB_ELEMENT", "WINDOW"]
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class WINDOW:
|
|
5
|
+
"""
|
|
6
|
+
JavaScript snippets for window-related operations.
|
|
7
|
+
|
|
8
|
+
Attributes:
|
|
9
|
+
SET_ORIENTATION (str): Snippet to lock screen orientation.
|
|
10
|
+
GET_ORIENTATION (str): Snippet to retrieve the current screen orientation type.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
SET_ORIENTATION = "screen.orientation.lock('{orientation}')"
|
|
14
|
+
GET_ORIENTATION = "screen.orientation.type"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class WEB_ELEMENT:
|
|
18
|
+
"""
|
|
19
|
+
JavaScript snippets for web element interactions with internal guards for W3C compatibility.
|
|
20
|
+
|
|
21
|
+
Attributes:
|
|
22
|
+
SEND_KEYS_TO (str): Snippet to focus and append text with input validation.
|
|
23
|
+
IS_SELECTED (str): Snippet to check if an element is selectable and selected.
|
|
24
|
+
IS_ENABLED (str): Snippet to check enablement state.
|
|
25
|
+
GET_TEXT (str): Snippet to retrieve inner text.
|
|
26
|
+
GET_TAG (str): Snippet to retrieve tag name.
|
|
27
|
+
GET_SHADOW_ROOT (str): Snippet to retrieve shadow root with existence check.
|
|
28
|
+
GET_RECT (str): Snippet to retrieve dimensions.
|
|
29
|
+
GET_PROPERTY (str): Snippet to retrieve element property.
|
|
30
|
+
GET_CSS (str): Snippet to retrieve CSS value.
|
|
31
|
+
GET_ATTRIBUTE (str): Snippet to retrieve attribute.
|
|
32
|
+
GET_ARIA_ROLE (str): Snippet to retrieve ARIA role.
|
|
33
|
+
GET_ARIA_LABEL (str): Snippet to retrieve accessible label.
|
|
34
|
+
CLICK (str): Snippet to perform click with interactability guards.
|
|
35
|
+
CLEAR (str): Snippet to clear value with state guards.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
_GUARDS = """
|
|
39
|
+
const guards = {
|
|
40
|
+
stale: (el) => {
|
|
41
|
+
if (!el.isConnected) throw new Error('stale element reference');
|
|
42
|
+
},
|
|
43
|
+
interactable: (el) => {
|
|
44
|
+
const rects = el.getClientRects();
|
|
45
|
+
const style = window.getComputedStyle(el);
|
|
46
|
+
|
|
47
|
+
if (rects.length === 0 || style.visibility === 'hidden' || style.display === 'none') {
|
|
48
|
+
throw new Error('element not interactable');
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
state: (el) => {
|
|
52
|
+
if (el.disabled || el.readOnly) throw new Error('invalid element state');
|
|
53
|
+
},
|
|
54
|
+
selectable: (el) => {
|
|
55
|
+
const tag = el.tagName.toLowerCase();
|
|
56
|
+
const type = (el.getAttribute('type') || '').toLowerCase();
|
|
57
|
+
const canSelect = tag === 'option' || type === 'checkbox' || type === 'radio';
|
|
58
|
+
|
|
59
|
+
if (!canSelect) throw new Error('element not selectable');
|
|
60
|
+
},
|
|
61
|
+
intercepted: (el) => {
|
|
62
|
+
const rect = el.getBoundingClientRect();
|
|
63
|
+
const x = rect.left + rect.width / 2;
|
|
64
|
+
const y = rect.top + rect.height / 2;
|
|
65
|
+
const topEl = document.elementFromPoint(x, y);
|
|
66
|
+
|
|
67
|
+
if (topEl && topEl !== el && !el.contains(topEl)) {
|
|
68
|
+
throw new Error('element click intercepted: Element is obscured by ' + topEl.tagName);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
CLICK = f"""
|
|
75
|
+
function(el){{
|
|
76
|
+
{_GUARDS}
|
|
77
|
+
guards.stale(el);
|
|
78
|
+
guards.interactable(el);
|
|
79
|
+
guards.state(el);
|
|
80
|
+
guards.intercepted(el);
|
|
81
|
+
|
|
82
|
+
el.click();
|
|
83
|
+
}}
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
CLEAR = f"""
|
|
87
|
+
function(el){{
|
|
88
|
+
{_GUARDS}
|
|
89
|
+
guards.stale(el);
|
|
90
|
+
guards.interactable(el);
|
|
91
|
+
guards.state(el);
|
|
92
|
+
|
|
93
|
+
el.value = '';
|
|
94
|
+
|
|
95
|
+
el.dispatchEvent(new InputEvent('input', {{bubbles: true}}));
|
|
96
|
+
el.dispatchEvent(new Event('change', {{bubbles: true}}));
|
|
97
|
+
}}
|
|
98
|
+
"""
|
|
99
|
+
|
|
100
|
+
GET_ARIA_ROLE = f"""
|
|
101
|
+
function(el){{
|
|
102
|
+
{_GUARDS}
|
|
103
|
+
guards.stale(el);
|
|
104
|
+
|
|
105
|
+
try {{
|
|
106
|
+
return el.getAttribute && el.getAttribute('role');
|
|
107
|
+
}} catch(e) {{
|
|
108
|
+
return '';
|
|
109
|
+
}}
|
|
110
|
+
}}
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
GET_ARIA_LABEL = f"""
|
|
114
|
+
function(el){{
|
|
115
|
+
{_GUARDS}
|
|
116
|
+
guards.stale(el);
|
|
117
|
+
|
|
118
|
+
try {{
|
|
119
|
+
var v = null;
|
|
120
|
+
|
|
121
|
+
if (el.getAttribute) v = el.getAttribute('aria-label');
|
|
122
|
+
if (!v) v = el.getAttribute && el.getAttribute('alt');
|
|
123
|
+
|
|
124
|
+
if (!v) {{
|
|
125
|
+
var txt = (el.textContent || '').trim();
|
|
126
|
+
if (txt) v = txt;
|
|
127
|
+
}}
|
|
128
|
+
|
|
129
|
+
return v || '';
|
|
130
|
+
}} catch(e) {{
|
|
131
|
+
return '';
|
|
132
|
+
}}
|
|
133
|
+
}}
|
|
134
|
+
"""
|
|
135
|
+
|
|
136
|
+
GET_TEXT = f"""
|
|
137
|
+
function(el){{
|
|
138
|
+
{_GUARDS}
|
|
139
|
+
guards.stale(el);
|
|
140
|
+
|
|
141
|
+
return el.innerText || '';
|
|
142
|
+
}}
|
|
143
|
+
"""
|
|
144
|
+
|
|
145
|
+
GET_TAG = f"""
|
|
146
|
+
function(el){{
|
|
147
|
+
{_GUARDS}
|
|
148
|
+
guards.stale(el);
|
|
149
|
+
|
|
150
|
+
return (el.tagName || '').toLowerCase();
|
|
151
|
+
}}
|
|
152
|
+
"""
|
|
153
|
+
|
|
154
|
+
GET_RECT = f"""
|
|
155
|
+
function(el){{
|
|
156
|
+
{_GUARDS}
|
|
157
|
+
guards.stale(el);
|
|
158
|
+
|
|
159
|
+
var r = el.getBoundingClientRect();
|
|
160
|
+
|
|
161
|
+
return {{
|
|
162
|
+
x: Number(r.x || r.left || 0),
|
|
163
|
+
y: Number(r.y || r.top || 0),
|
|
164
|
+
width: Number(r.width || 0),
|
|
165
|
+
height: Number(r.height || 0)
|
|
166
|
+
}};
|
|
167
|
+
}}
|
|
168
|
+
"""
|
|
169
|
+
|
|
170
|
+
GET_SHADOW_ROOT = f"""
|
|
171
|
+
function(el){{
|
|
172
|
+
{_GUARDS}
|
|
173
|
+
guards.stale(el);
|
|
174
|
+
|
|
175
|
+
const sr = el.shadowRoot;
|
|
176
|
+
|
|
177
|
+
if (!sr) throw new Error('no such shadow root');
|
|
178
|
+
|
|
179
|
+
return sr;
|
|
180
|
+
}}
|
|
181
|
+
"""
|
|
182
|
+
|
|
183
|
+
IS_SELECTED = f"""
|
|
184
|
+
function(el){{
|
|
185
|
+
{_GUARDS}
|
|
186
|
+
guards.stale(el);
|
|
187
|
+
guards.selectable(el);
|
|
188
|
+
|
|
189
|
+
return Boolean(el.selected || el.checked);
|
|
190
|
+
}}
|
|
191
|
+
"""
|
|
192
|
+
|
|
193
|
+
IS_ENABLED = f"""
|
|
194
|
+
function(el){{
|
|
195
|
+
{_GUARDS}
|
|
196
|
+
guards.stale(el);
|
|
197
|
+
|
|
198
|
+
return !el.disabled;
|
|
199
|
+
}}
|
|
200
|
+
"""
|
|
201
|
+
|
|
202
|
+
GET_PROPERTY = f"""
|
|
203
|
+
function(el, prop){{
|
|
204
|
+
{_GUARDS}
|
|
205
|
+
guards.stale(el);
|
|
206
|
+
|
|
207
|
+
try {{
|
|
208
|
+
return el[prop];
|
|
209
|
+
}} catch(e) {{
|
|
210
|
+
return null;
|
|
211
|
+
}}
|
|
212
|
+
}}
|
|
213
|
+
"""
|
|
214
|
+
|
|
215
|
+
GET_ATTRIBUTE = f"""
|
|
216
|
+
function(el, attr){{
|
|
217
|
+
{_GUARDS}
|
|
218
|
+
guards.stale(el);
|
|
219
|
+
|
|
220
|
+
try {{
|
|
221
|
+
return el.getAttribute(attr);
|
|
222
|
+
}} catch(e) {{
|
|
223
|
+
return null;
|
|
224
|
+
}}
|
|
225
|
+
}}
|
|
226
|
+
"""
|
|
227
|
+
|
|
228
|
+
GET_CSS = f"""
|
|
229
|
+
function(el, prop){{
|
|
230
|
+
{_GUARDS}
|
|
231
|
+
guards.stale(el);
|
|
232
|
+
|
|
233
|
+
try {{
|
|
234
|
+
return window.getComputedStyle(el).getPropertyValue(prop);
|
|
235
|
+
}} catch(e) {{
|
|
236
|
+
return null;
|
|
237
|
+
}}
|
|
238
|
+
}}
|
|
239
|
+
"""
|
|
240
|
+
|
|
241
|
+
SEND_KEYS_TO = f"""
|
|
242
|
+
function(el, text){{
|
|
243
|
+
{_GUARDS}
|
|
244
|
+
guards.stale(el);
|
|
245
|
+
guards.interactable(el);
|
|
246
|
+
guards.state(el);
|
|
247
|
+
|
|
248
|
+
try {{
|
|
249
|
+
el.focus();
|
|
250
|
+
el.value = (el.value || '') + String(text || '');
|
|
251
|
+
|
|
252
|
+
try {{
|
|
253
|
+
el.dispatchEvent(new InputEvent('input', {{bubbles: true}}));
|
|
254
|
+
}} catch(e) {{
|
|
255
|
+
el.dispatchEvent(new Event('input', {{bubbles: true}}));
|
|
256
|
+
}}
|
|
257
|
+
|
|
258
|
+
try {{
|
|
259
|
+
el.dispatchEvent(new Event('change', {{bubbles: true}}));
|
|
260
|
+
}} catch(e) {{ }}
|
|
261
|
+
}} catch (e) {{ }}
|
|
262
|
+
}}
|
|
263
|
+
"""
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
class NAVIGATION:
|
|
267
|
+
"""
|
|
268
|
+
JavaScript snippets for navigation and page information.
|
|
269
|
+
|
|
270
|
+
Attributes:
|
|
271
|
+
GET_TITLE (str): Snippet to retrieve the document title.
|
|
272
|
+
"""
|
|
273
|
+
|
|
274
|
+
GET_TITLE = "document.title"
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
class CAPTURE:
|
|
278
|
+
"""
|
|
279
|
+
JavaScript snippets for capturing page state.
|
|
280
|
+
|
|
281
|
+
Attributes:
|
|
282
|
+
GET_PAGE_SOURCE (str): Snippet to retrieve the full outer HTML of the document.
|
|
283
|
+
"""
|
|
284
|
+
|
|
285
|
+
GET_PAGE_SOURCE = "document.documentElement.outerHTML"
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
from osn_selenium.exceptions.bidi_bridge import (
|
|
3
|
+
CommandNotMappedToBiDiError
|
|
4
|
+
)
|
|
5
|
+
from osn_selenium.trio_bidi.mapping.request_functions._cdp import (
|
|
6
|
+
MAPPED_REQUEST_CDP_COMMANDS
|
|
7
|
+
)
|
|
8
|
+
from osn_selenium.trio_bidi.mapping.request_functions._file import (
|
|
9
|
+
MAPPED_REQUEST_FILE_COMMANDS
|
|
10
|
+
)
|
|
11
|
+
from osn_selenium.trio_bidi.mapping.request_functions._alert import (
|
|
12
|
+
MAPPED_REQUEST_ALERT_COMMANDS
|
|
13
|
+
)
|
|
14
|
+
from osn_selenium.trio_bidi.mapping.request_functions._script import (
|
|
15
|
+
MAPPED_REQUEST_SCRIPT_COMMANDS
|
|
16
|
+
)
|
|
17
|
+
from osn_selenium.trio_bidi.mapping.request_functions._window import (
|
|
18
|
+
MAPPED_REQUEST_WINDOW_COMMANDS
|
|
19
|
+
)
|
|
20
|
+
from osn_selenium.trio_bidi.mapping.request_functions._capture import (
|
|
21
|
+
MAPPED_REQUEST_CAPTURE_COMMANDS
|
|
22
|
+
)
|
|
23
|
+
from osn_selenium.trio_bidi.mapping.request_functions._element import (
|
|
24
|
+
MAPPED_REQUEST_ELEMENT_COMMANDS
|
|
25
|
+
)
|
|
26
|
+
from osn_selenium.trio_bidi.mapping.request_functions._switch_to import (
|
|
27
|
+
MAPPED_REQUEST_SWITCH_TO_COMMANDS
|
|
28
|
+
)
|
|
29
|
+
from osn_selenium.trio_bidi.mapping.request_functions._navigation import (
|
|
30
|
+
MAPPED_REQUEST_NAVIGATION_COMMANDS
|
|
31
|
+
)
|
|
32
|
+
from osn_selenium.trio_bidi.mapping.request_functions._web_element import (
|
|
33
|
+
MAPPED_REQUEST_WEB_ELEMENT_COMMANDS
|
|
34
|
+
)
|
|
35
|
+
from osn_selenium.trio_bidi.mapping.request_functions._shadow_root import (
|
|
36
|
+
MAPPED_REQUEST_SHADOW_ROOT_COMMANDS
|
|
37
|
+
)
|
|
38
|
+
from osn_selenium.trio_bidi._typehints import (
|
|
39
|
+
CURRENT_BROWSING_CONTEXT_TYPEHINT,
|
|
40
|
+
MAP_REQUEST_FUNCTION_TYPEHINT,
|
|
41
|
+
REQUEST_PARAMS_TYPEHINT
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
__all__ = ["map_request"]
|
|
46
|
+
|
|
47
|
+
_MAPPED_REQUEST_COMMANDS: Dict[str, MAP_REQUEST_FUNCTION_TYPEHINT] = {
|
|
48
|
+
**MAPPED_REQUEST_ALERT_COMMANDS,
|
|
49
|
+
**MAPPED_REQUEST_CAPTURE_COMMANDS,
|
|
50
|
+
**MAPPED_REQUEST_CDP_COMMANDS,
|
|
51
|
+
**MAPPED_REQUEST_ELEMENT_COMMANDS,
|
|
52
|
+
**MAPPED_REQUEST_FILE_COMMANDS,
|
|
53
|
+
**MAPPED_REQUEST_NAVIGATION_COMMANDS,
|
|
54
|
+
**MAPPED_REQUEST_SCRIPT_COMMANDS,
|
|
55
|
+
**MAPPED_REQUEST_SHADOW_ROOT_COMMANDS,
|
|
56
|
+
**MAPPED_REQUEST_SWITCH_TO_COMMANDS,
|
|
57
|
+
**MAPPED_REQUEST_WEB_ELEMENT_COMMANDS,
|
|
58
|
+
**MAPPED_REQUEST_WINDOW_COMMANDS,
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def map_request(
|
|
63
|
+
command: str,
|
|
64
|
+
params: REQUEST_PARAMS_TYPEHINT,
|
|
65
|
+
context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT
|
|
66
|
+
) -> Dict[str, Any]:
|
|
67
|
+
"""
|
|
68
|
+
Maps a W3C WebDriver command to its corresponding BiDi protocol request.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
command (str): The W3C command name.
|
|
72
|
+
params (REQUEST_PARAMS_TYPEHINT): The parameters associated with the command.
|
|
73
|
+
context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID for the command.
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
Dict[str, Any]: The mapped BiDi request dictionary.
|
|
77
|
+
|
|
78
|
+
Raises:
|
|
79
|
+
CommandNotMappedToBiDiError: If the command does not have a defined mapping.
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
function = _MAPPED_REQUEST_COMMANDS.get(command, None)
|
|
83
|
+
|
|
84
|
+
if function is not None:
|
|
85
|
+
return function(params, context_id)
|
|
86
|
+
|
|
87
|
+
raise CommandNotMappedToBiDiError(command=command)
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
from typing import Any, Dict
|
|
2
|
+
from selenium.webdriver.remote.command import Command
|
|
3
|
+
from osn_selenium.trio_bidi._internal_mappings import (
|
|
4
|
+
GET_INTERNAL_ALERT_TEXT
|
|
5
|
+
)
|
|
6
|
+
from osn_selenium.trio_bidi._typehints import (
|
|
7
|
+
CURRENT_BROWSING_CONTEXT_TYPEHINT,
|
|
8
|
+
MAP_REQUEST_FUNCTION_TYPEHINT,
|
|
9
|
+
REQUEST_PARAMS_TYPEHINT
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
__all__ = ["MAPPED_REQUEST_ALERT_COMMANDS"]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _map_set_alert_value_request(
|
|
17
|
+
params: REQUEST_PARAMS_TYPEHINT,
|
|
18
|
+
context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT
|
|
19
|
+
) -> Dict[str, Any]:
|
|
20
|
+
"""
|
|
21
|
+
Maps the 'set alert value' command to BiDi 'handleUserPrompt'.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
params (REQUEST_PARAMS_TYPEHINT): Request parameters containing 'text'.
|
|
25
|
+
context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID.
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
Dict[str, Any]: The BiDi request.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
"method": "browsingContext.handleUserPrompt",
|
|
33
|
+
"params": {"context": context_id, "accept": True, "userText": params.get("text")}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _map_get_alert_text_request(
|
|
38
|
+
params: REQUEST_PARAMS_TYPEHINT,
|
|
39
|
+
context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT
|
|
40
|
+
) -> Dict[str, Any]:
|
|
41
|
+
"""
|
|
42
|
+
Maps the 'get alert text' command to an internal bridge command.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
params (REQUEST_PARAMS_TYPEHINT): Request parameters.
|
|
46
|
+
context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID.
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
Dict[str, Any]: The internal BiDi request.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
return {"method": GET_INTERNAL_ALERT_TEXT, "params": {}}
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _map_dismiss_alert_request(
|
|
56
|
+
params: REQUEST_PARAMS_TYPEHINT,
|
|
57
|
+
context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT
|
|
58
|
+
) -> Dict[str, Any]:
|
|
59
|
+
"""
|
|
60
|
+
Maps the 'dismiss alert' command to BiDi 'handleUserPrompt' with accept=False.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
params (REQUEST_PARAMS_TYPEHINT): Request parameters.
|
|
64
|
+
context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID.
|
|
65
|
+
|
|
66
|
+
Returns:
|
|
67
|
+
Dict[str, Any]: The BiDi request.
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
"method": "browsingContext.handleUserPrompt",
|
|
72
|
+
"params": {"context": context_id, "accept": False}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _map_accept_alert_request(
|
|
77
|
+
params: REQUEST_PARAMS_TYPEHINT,
|
|
78
|
+
context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT
|
|
79
|
+
) -> Dict[str, Any]:
|
|
80
|
+
"""
|
|
81
|
+
Maps the 'accept alert' command to BiDi 'handleUserPrompt' with accept=True.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
params (REQUEST_PARAMS_TYPEHINT): Request parameters.
|
|
85
|
+
context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
Dict[str, Any]: The BiDi request.
|
|
89
|
+
"""
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
"method": "browsingContext.handleUserPrompt",
|
|
93
|
+
"params": {"context": context_id, "accept": True}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
MAPPED_REQUEST_ALERT_COMMANDS: Dict[str, MAP_REQUEST_FUNCTION_TYPEHINT] = {
|
|
98
|
+
Command.W3C_GET_ALERT_TEXT: _map_get_alert_text_request,
|
|
99
|
+
Command.W3C_ACCEPT_ALERT: _map_accept_alert_request,
|
|
100
|
+
Command.W3C_DISMISS_ALERT: _map_dismiss_alert_request,
|
|
101
|
+
Command.W3C_SET_ALERT_VALUE: _map_set_alert_value_request,
|
|
102
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
from typing import (
|
|
2
|
+
Any,
|
|
3
|
+
Dict,
|
|
4
|
+
List,
|
|
5
|
+
Optional
|
|
6
|
+
)
|
|
7
|
+
from osn_selenium.instances.protocols import AnyInstanceWrapper
|
|
8
|
+
from osn_selenium.trio_bidi.mapping._constants import BY_MAPPING_DICT
|
|
9
|
+
from osn_selenium.trio_bidi.mapping._utils import (
|
|
10
|
+
ELEMENT_KEY,
|
|
11
|
+
SHADOW_ROOT_KEY
|
|
12
|
+
)
|
|
13
|
+
from selenium.webdriver.remote.webelement import (
|
|
14
|
+
WebElement as SeleniumWebElement
|
|
15
|
+
)
|
|
16
|
+
from osn_selenium.trio_bidi._typehints import (
|
|
17
|
+
CURRENT_BROWSING_CONTEXT_TYPEHINT,
|
|
18
|
+
REQUEST_PARAMS_TYPEHINT
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
__all__ = [
|
|
23
|
+
"build_bidi_element",
|
|
24
|
+
"build_locate_nodes_request",
|
|
25
|
+
"build_script_call_request",
|
|
26
|
+
"build_script_evaluate_request",
|
|
27
|
+
"convert_w3c_to_bidi_js",
|
|
28
|
+
"get_shadow_root_argument",
|
|
29
|
+
"get_web_element_argument"
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def build_bidi_element(id_: str) -> Dict[str, Any]:
|
|
34
|
+
"""
|
|
35
|
+
Creates a BiDi element reference.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
id_ (str): The shared ID of the element.
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
Dict[str, Any]: The BiDi sharedId reference.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
return {"sharedId": id_}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def get_web_element_argument(params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
|
|
48
|
+
"""
|
|
49
|
+
Extracts the element ID from W3C parameters and creates a BiDi reference.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
params (REQUEST_PARAMS_TYPEHINT): W3C parameters containing 'id'.
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
Dict[str, Any]: The BiDi element reference.
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
return build_bidi_element(id_=params["id"])
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def get_shadow_root_argument(params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
|
|
62
|
+
"""
|
|
63
|
+
Extracts the shadow ID from W3C parameters and creates a BiDi reference.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
params (REQUEST_PARAMS_TYPEHINT): W3C parameters containing 'shadowId'.
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
Dict[str, Any]: The BiDi element reference.
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
return build_bidi_element(id_=params["shadowId"])
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def convert_w3c_to_bidi_js(w3c_value: Any) -> Dict[str, Any]:
|
|
76
|
+
"""
|
|
77
|
+
Converts a W3C-style JavaScript argument into a BiDi LocalValue.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
w3c_value (Any): The value to convert.
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
Dict[str, Any]: The BiDi LocalValue representation.
|
|
84
|
+
|
|
85
|
+
EXAMPLES
|
|
86
|
+
________
|
|
87
|
+
>>> convert_w3c_to_bidi_js("hello")
|
|
88
|
+
... {'type': 'string', 'value': 'hello'}
|
|
89
|
+
>>> convert_w3c_to_bidi_js(True)
|
|
90
|
+
... {'type': 'boolean', 'value': True}
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
if isinstance(w3c_value, AnyInstanceWrapper):
|
|
94
|
+
w3c_value = w3c_value.legacy
|
|
95
|
+
|
|
96
|
+
if isinstance(w3c_value, SeleniumWebElement):
|
|
97
|
+
return {"sharedId": w3c_value.id}
|
|
98
|
+
|
|
99
|
+
if isinstance(w3c_value, dict):
|
|
100
|
+
if ELEMENT_KEY in w3c_value:
|
|
101
|
+
return {"sharedId": w3c_value[ELEMENT_KEY]}
|
|
102
|
+
|
|
103
|
+
if SHADOW_ROOT_KEY in w3c_value:
|
|
104
|
+
return {"sharedId": w3c_value[SHADOW_ROOT_KEY]}
|
|
105
|
+
|
|
106
|
+
if w3c_value is None:
|
|
107
|
+
return {"type": "null"}
|
|
108
|
+
|
|
109
|
+
if isinstance(w3c_value, bool):
|
|
110
|
+
return {"type": "boolean", "value": w3c_value}
|
|
111
|
+
|
|
112
|
+
if isinstance(w3c_value, (int, float)):
|
|
113
|
+
return {"type": "number", "value": w3c_value}
|
|
114
|
+
|
|
115
|
+
if isinstance(w3c_value, str):
|
|
116
|
+
return {"type": "string", "value": w3c_value}
|
|
117
|
+
|
|
118
|
+
if isinstance(w3c_value, (list, tuple, set)):
|
|
119
|
+
return {
|
|
120
|
+
"type": "array",
|
|
121
|
+
"value": [convert_w3c_to_bidi_js(w3c_value=item) for item in w3c_value]
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if isinstance(w3c_value, dict):
|
|
125
|
+
return {
|
|
126
|
+
"type": "object",
|
|
127
|
+
"value": [
|
|
128
|
+
[
|
|
129
|
+
convert_w3c_to_bidi_js(w3c_value=key),
|
|
130
|
+
convert_w3c_to_bidi_js(w3c_value=value)
|
|
131
|
+
]
|
|
132
|
+
for key, value in w3c_value.items()
|
|
133
|
+
]
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return {"type": "undefined"}
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def build_script_evaluate_request(context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT, expression: str) -> Dict[str, Any]:
|
|
140
|
+
"""
|
|
141
|
+
Builds a BiDi 'script.evaluate' request.
|
|
142
|
+
|
|
143
|
+
Args:
|
|
144
|
+
context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID.
|
|
145
|
+
expression (str): The JS expression to evaluate.
|
|
146
|
+
|
|
147
|
+
Returns:
|
|
148
|
+
Dict[str, Any]: The BiDi request.
|
|
149
|
+
"""
|
|
150
|
+
|
|
151
|
+
return {
|
|
152
|
+
"method": "script.evaluate",
|
|
153
|
+
"params": {
|
|
154
|
+
"expression": expression,
|
|
155
|
+
"target": {"context": context_id},
|
|
156
|
+
"awaitPromise": True,
|
|
157
|
+
"resultOwnership": "none",
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def build_script_call_request(
|
|
163
|
+
context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT,
|
|
164
|
+
function: str,
|
|
165
|
+
args: Optional[List[Any]],
|
|
166
|
+
ownership: str
|
|
167
|
+
) -> Dict[str, Any]:
|
|
168
|
+
"""
|
|
169
|
+
Builds a BiDi 'script.callFunction' request.
|
|
170
|
+
|
|
171
|
+
Args:
|
|
172
|
+
context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID.
|
|
173
|
+
function (str): The function declaration.
|
|
174
|
+
args (Optional[List[Any]]): List of BiDi LocalValue arguments.
|
|
175
|
+
ownership (str): Result ownership type ('none', 'root').
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
Dict[str, Any]: The BiDi request.
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
return {
|
|
182
|
+
"method": "script.callFunction",
|
|
183
|
+
"params": {
|
|
184
|
+
"functionDeclaration": function,
|
|
185
|
+
"arguments": args or [],
|
|
186
|
+
"target": {"context": context_id},
|
|
187
|
+
"awaitPromise": True,
|
|
188
|
+
"resultOwnership": ownership,
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def build_locate_nodes_request(
|
|
194
|
+
context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT,
|
|
195
|
+
params: REQUEST_PARAMS_TYPEHINT,
|
|
196
|
+
max_nodes: Optional[int] = None,
|
|
197
|
+
start_nodes: Optional[List[Dict[str, Any]]] = None,
|
|
198
|
+
) -> Dict[str, Any]:
|
|
199
|
+
"""
|
|
200
|
+
Builds a BiDi 'browsingContext.locateNodes' request.
|
|
201
|
+
|
|
202
|
+
Args:
|
|
203
|
+
context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID.
|
|
204
|
+
params (REQUEST_PARAMS_TYPEHINT): W3C search parameters ('using', 'value').
|
|
205
|
+
max_nodes (Optional[int]): Maximum number of nodes to return.
|
|
206
|
+
start_nodes (Optional[List[Dict[str, Any]]]): BiDi element references to start search from.
|
|
207
|
+
|
|
208
|
+
Returns:
|
|
209
|
+
Dict[str, Any]: The BiDi request.
|
|
210
|
+
"""
|
|
211
|
+
|
|
212
|
+
strategy = BY_MAPPING_DICT.get(params["using"], params["using"])
|
|
213
|
+
|
|
214
|
+
bidi_params: Dict[str, Any] = {
|
|
215
|
+
"context": context_id,
|
|
216
|
+
"locator": {"type": strategy, "value": params["value"]}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if max_nodes:
|
|
220
|
+
bidi_params["maxNodeCount"] = max_nodes
|
|
221
|
+
|
|
222
|
+
if start_nodes:
|
|
223
|
+
bidi_params["startNodes"] = start_nodes
|
|
224
|
+
|
|
225
|
+
return {"method": "browsingContext.locateNodes", "params": bidi_params}
|