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,143 @@
|
|
|
1
|
+
import math
|
|
2
|
+
import trio
|
|
3
|
+
from typing_extensions import deprecated
|
|
4
|
+
from typing import (
|
|
5
|
+
Optional,
|
|
6
|
+
Self,
|
|
7
|
+
Union
|
|
8
|
+
)
|
|
9
|
+
from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
|
|
10
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
11
|
+
from osn_selenium.instances.trio_bidi.web_element import WebElement
|
|
12
|
+
from osn_selenium.instances.unified.switch_to import UnifiedSwitchTo
|
|
13
|
+
from osn_selenium.abstract.instances.switch_to import AbstractSwitchTo
|
|
14
|
+
from osn_selenium.exceptions.instance import (
|
|
15
|
+
CannotConvertTypeError
|
|
16
|
+
)
|
|
17
|
+
from selenium.webdriver.remote.switch_to import (
|
|
18
|
+
SwitchTo as legacySwitchTo
|
|
19
|
+
)
|
|
20
|
+
from osn_selenium.exceptions.experimental import (
|
|
21
|
+
NotImplementedExperimentalFeatureError
|
|
22
|
+
)
|
|
23
|
+
from osn_selenium.instances._typehints import (
|
|
24
|
+
SWITCH_TO_TYPEHINT,
|
|
25
|
+
WEB_ELEMENT_TYPEHINT
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
__all__ = ["SwitchTo"]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class SwitchTo(UnifiedSwitchTo, TrioBiDiMixin, AbstractSwitchTo):
|
|
33
|
+
"""
|
|
34
|
+
Wrapper for the legacy Selenium SwitchTo instance.
|
|
35
|
+
|
|
36
|
+
Provides mechanisms to change the driver's focus to different frames,
|
|
37
|
+
windows, or alerts.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def __init__(
|
|
41
|
+
self,
|
|
42
|
+
selenium_switch_to: legacySwitchTo,
|
|
43
|
+
lock: trio.Lock,
|
|
44
|
+
limiter: trio.CapacityLimiter,
|
|
45
|
+
trio_token: Optional[trio.lowlevel.TrioToken] = None,
|
|
46
|
+
bidi_buffer_size: Union[int, float] = math.inf,
|
|
47
|
+
) -> None:
|
|
48
|
+
"""
|
|
49
|
+
Initializes the SwitchTo wrapper.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
selenium_switch_to (legacySwitchTo): The legacy Selenium SwitchTo instance to wrap.
|
|
53
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
54
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
55
|
+
trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
|
|
56
|
+
bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
UnifiedSwitchTo.__init__(self, selenium_switch_to=selenium_switch_to)
|
|
60
|
+
|
|
61
|
+
TrioBiDiMixin.__init__(
|
|
62
|
+
self,
|
|
63
|
+
lock=lock,
|
|
64
|
+
limiter=limiter,
|
|
65
|
+
token=trio_token,
|
|
66
|
+
buffer_size=bidi_buffer_size
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
@deprecated(
|
|
70
|
+
"This method is currently not supported. It will raise 'NotImplementedExperimentalFeatureError' on call."
|
|
71
|
+
)
|
|
72
|
+
async def active_element(self) -> WebElement:
|
|
73
|
+
raise NotImplementedExperimentalFeatureError(name="SwitchTo.active_element")
|
|
74
|
+
|
|
75
|
+
@deprecated(
|
|
76
|
+
"This method is currently not supported. It will raise 'NotImplementedExperimentalFeatureError' on call."
|
|
77
|
+
)
|
|
78
|
+
async def alert(self):
|
|
79
|
+
raise NotImplementedExperimentalFeatureError(name="SwitchTo.alert")
|
|
80
|
+
|
|
81
|
+
@deprecated(
|
|
82
|
+
"This method is currently not supported. It will raise 'NotImplementedExperimentalFeatureError' on call."
|
|
83
|
+
)
|
|
84
|
+
async def default_content(self) -> None:
|
|
85
|
+
raise NotImplementedExperimentalFeatureError(name="SwitchTo.default_content")
|
|
86
|
+
|
|
87
|
+
@deprecated(
|
|
88
|
+
"This method is currently not supported. It will raise 'NotImplementedExperimentalFeatureError' on call."
|
|
89
|
+
)
|
|
90
|
+
async def frame(self, frame_reference: Union[str, int, WEB_ELEMENT_TYPEHINT]) -> None:
|
|
91
|
+
raise NotImplementedExperimentalFeatureError(name="SwitchTo.frame")
|
|
92
|
+
|
|
93
|
+
@classmethod
|
|
94
|
+
def from_legacy(
|
|
95
|
+
cls,
|
|
96
|
+
legacy_object: SWITCH_TO_TYPEHINT,
|
|
97
|
+
lock: trio.Lock,
|
|
98
|
+
limiter: trio.CapacityLimiter,
|
|
99
|
+
trio_token: Optional[trio.lowlevel.TrioToken] = None,
|
|
100
|
+
bidi_buffer_size: Union[int, float] = math.inf,
|
|
101
|
+
) -> Self:
|
|
102
|
+
"""
|
|
103
|
+
Creates an instance from a legacy Selenium SwitchTo object.
|
|
104
|
+
|
|
105
|
+
This factory method is used to wrap an existing Selenium SwitchTo
|
|
106
|
+
instance into the new interface.
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
legacy_object (SWITCH_TO_TYPEHINT): The legacy Selenium SwitchTo instance or its wrapper.
|
|
110
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
111
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
112
|
+
trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
|
|
113
|
+
bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
Self: A new instance of a class implementing SwitchTo.
|
|
117
|
+
"""
|
|
118
|
+
|
|
119
|
+
legacy_switch_to_obj = get_legacy_instance(instance=legacy_object)
|
|
120
|
+
|
|
121
|
+
if not isinstance(legacy_switch_to_obj, legacySwitchTo):
|
|
122
|
+
raise CannotConvertTypeError(from_=legacySwitchTo, to_=legacy_object)
|
|
123
|
+
|
|
124
|
+
return cls(
|
|
125
|
+
selenium_switch_to=legacy_switch_to_obj,
|
|
126
|
+
lock=lock,
|
|
127
|
+
limiter=limiter,
|
|
128
|
+
trio_token=trio_token,
|
|
129
|
+
bidi_buffer_size=bidi_buffer_size,
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
@property
|
|
133
|
+
def legacy(self) -> legacySwitchTo:
|
|
134
|
+
return self._legacy_impl
|
|
135
|
+
|
|
136
|
+
async def new_window(self, type_hint: Optional[str] = None) -> None:
|
|
137
|
+
await self.sync_to_trio(sync_function=self._new_window_impl)(type_hint=type_hint)
|
|
138
|
+
|
|
139
|
+
async def parent_frame(self) -> None:
|
|
140
|
+
raise NotImplementedExperimentalFeatureError(name="SwitchTo.parent_frame")
|
|
141
|
+
|
|
142
|
+
async def window(self, window_name: str) -> None:
|
|
143
|
+
await self.sync_to_trio(sync_function=self._window_impl)(window_name=window_name)
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import math
|
|
2
|
+
import trio
|
|
3
|
+
from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
|
|
4
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
5
|
+
from typing import (
|
|
6
|
+
Callable,
|
|
7
|
+
Optional,
|
|
8
|
+
Self,
|
|
9
|
+
TypeVar,
|
|
10
|
+
Union
|
|
11
|
+
)
|
|
12
|
+
from osn_selenium.exceptions.instance import (
|
|
13
|
+
CannotConvertTypeError
|
|
14
|
+
)
|
|
15
|
+
from osn_selenium.instances._typehints import (
|
|
16
|
+
WebDriverWaitInputType
|
|
17
|
+
)
|
|
18
|
+
from osn_selenium.instances.unified.web_driver_wait import UnifiedWebDriverWait
|
|
19
|
+
from selenium.webdriver.support.wait import (
|
|
20
|
+
WebDriverWait as legacyWebDriverWait
|
|
21
|
+
)
|
|
22
|
+
from osn_selenium.abstract.instances.web_driver_wait import (
|
|
23
|
+
AbstractWebDriverWait
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
__all__ = ["OUTPUT", "WebDriverWait"]
|
|
28
|
+
|
|
29
|
+
OUTPUT = TypeVar("OUTPUT")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class WebDriverWait(UnifiedWebDriverWait, TrioBiDiMixin, AbstractWebDriverWait):
|
|
33
|
+
"""
|
|
34
|
+
Wrapper for the legacy Selenium WebDriverWait instance.
|
|
35
|
+
|
|
36
|
+
Provides conditional waiting functionality, pausing execution until
|
|
37
|
+
specific conditions (expected conditions) are met or a timeout occurs.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def __init__(
|
|
41
|
+
self,
|
|
42
|
+
selenium_webdriver_wait: legacyWebDriverWait,
|
|
43
|
+
lock: trio.Lock,
|
|
44
|
+
limiter: trio.CapacityLimiter,
|
|
45
|
+
trio_token: Optional[trio.lowlevel.TrioToken] = None,
|
|
46
|
+
bidi_buffer_size: Union[int, float] = math.inf,
|
|
47
|
+
) -> None:
|
|
48
|
+
"""
|
|
49
|
+
Initializes the WebDriverWait wrapper.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
selenium_webdriver_wait (legacyWebDriverWait): The legacy Selenium WebDriverWait instance to wrap.
|
|
53
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
54
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
55
|
+
trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
|
|
56
|
+
bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
UnifiedWebDriverWait.__init__(self, selenium_webdriver_wait=selenium_webdriver_wait)
|
|
60
|
+
|
|
61
|
+
TrioBiDiMixin.__init__(
|
|
62
|
+
self,
|
|
63
|
+
lock=lock,
|
|
64
|
+
limiter=limiter,
|
|
65
|
+
token=trio_token,
|
|
66
|
+
buffer_size=bidi_buffer_size
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
@classmethod
|
|
70
|
+
def from_legacy(
|
|
71
|
+
cls,
|
|
72
|
+
legacy_object: legacyWebDriverWait,
|
|
73
|
+
lock: trio.Lock,
|
|
74
|
+
limiter: trio.CapacityLimiter,
|
|
75
|
+
trio_token: Optional[trio.lowlevel.TrioToken] = None,
|
|
76
|
+
bidi_buffer_size: Union[int, float] = math.inf,
|
|
77
|
+
) -> Self:
|
|
78
|
+
"""
|
|
79
|
+
Creates a WebDriverWait wrapper instance from a legacy Selenium object.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
legacy_object (legacyWebDriverWait): The legacy object to convert.
|
|
83
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
84
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
85
|
+
trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
|
|
86
|
+
bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
|
|
87
|
+
|
|
88
|
+
Returns:
|
|
89
|
+
Self: An instance of the WebDriverWait wrapper.
|
|
90
|
+
|
|
91
|
+
Raises:
|
|
92
|
+
CannotConvertTypeError: If the provided object cannot be converted to legacyWebDriverWait.
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
legacy_wait_obj = get_legacy_instance(instance=legacy_object)
|
|
96
|
+
|
|
97
|
+
if not isinstance(legacy_wait_obj, legacyWebDriverWait):
|
|
98
|
+
raise CannotConvertTypeError(from_=legacyWebDriverWait, to_=legacy_object)
|
|
99
|
+
|
|
100
|
+
return cls(
|
|
101
|
+
selenium_webdriver_wait=legacy_wait_obj,
|
|
102
|
+
lock=lock,
|
|
103
|
+
limiter=limiter,
|
|
104
|
+
trio_token=trio_token,
|
|
105
|
+
bidi_buffer_size=bidi_buffer_size,
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
@property
|
|
109
|
+
def legacy(self) -> legacyWebDriverWait:
|
|
110
|
+
return self._legacy_impl
|
|
111
|
+
|
|
112
|
+
async def until(
|
|
113
|
+
self,
|
|
114
|
+
method: Callable[[WebDriverWaitInputType], OUTPUT],
|
|
115
|
+
message: str = ""
|
|
116
|
+
) -> OUTPUT:
|
|
117
|
+
return await self.sync_to_trio(sync_function=self._until_impl)(method=method, message=message)
|
|
118
|
+
|
|
119
|
+
async def until_not(
|
|
120
|
+
self,
|
|
121
|
+
method: Callable[[WebDriverWaitInputType], OUTPUT],
|
|
122
|
+
message: str = ""
|
|
123
|
+
) -> OUTPUT:
|
|
124
|
+
return await self.sync_to_trio(sync_function=self._until_not_impl)(method=method, message=message)
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import math
|
|
2
|
+
import trio
|
|
3
|
+
from selenium.webdriver.common.by import By
|
|
4
|
+
from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
|
|
5
|
+
from osn_selenium.instances._typehints import WEB_ELEMENT_TYPEHINT
|
|
6
|
+
from osn_selenium.instances.trio_bidi.shadow_root import ShadowRoot
|
|
7
|
+
from osn_selenium.exceptions.instance import (
|
|
8
|
+
CannotConvertTypeError
|
|
9
|
+
)
|
|
10
|
+
from osn_selenium.instances.unified.web_element import UnifiedWebElement
|
|
11
|
+
from osn_selenium.abstract.instances.web_element import AbstractWebElement
|
|
12
|
+
from osn_selenium.instances.trio_bidi.web_driver_wait import WebDriverWait
|
|
13
|
+
from typing import (
|
|
14
|
+
Any,
|
|
15
|
+
Dict,
|
|
16
|
+
Iterable,
|
|
17
|
+
List,
|
|
18
|
+
Optional,
|
|
19
|
+
Self,
|
|
20
|
+
Union
|
|
21
|
+
)
|
|
22
|
+
from selenium.webdriver.remote.webelement import (
|
|
23
|
+
WebElement as legacyWebElement
|
|
24
|
+
)
|
|
25
|
+
from osn_selenium.instances.convert import (
|
|
26
|
+
get_legacy_instance,
|
|
27
|
+
get_trio_thread_instance_wrapper
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
__all__ = ["WebElement"]
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class WebElement(UnifiedWebElement, TrioBiDiMixin, AbstractWebElement):
|
|
35
|
+
"""
|
|
36
|
+
Represents an HTML element in the DOM, offering methods for interaction (click, type),
|
|
37
|
+
property retrieval, and finding child elements.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def __init__(
|
|
41
|
+
self,
|
|
42
|
+
selenium_web_element: legacyWebElement,
|
|
43
|
+
lock: trio.Lock,
|
|
44
|
+
limiter: trio.CapacityLimiter,
|
|
45
|
+
trio_token: Optional[trio.lowlevel.TrioToken] = None,
|
|
46
|
+
bidi_buffer_size: Union[int, float] = math.inf,
|
|
47
|
+
) -> None:
|
|
48
|
+
"""
|
|
49
|
+
Initializes the WebElement wrapper.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
selenium_web_element (legacyWebElement): The legacy Selenium WebElement instance to wrap.
|
|
53
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
54
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
55
|
+
trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
|
|
56
|
+
bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
UnifiedWebElement.__init__(self, selenium_web_element=selenium_web_element)
|
|
60
|
+
|
|
61
|
+
TrioBiDiMixin.__init__(
|
|
62
|
+
self,
|
|
63
|
+
lock=lock,
|
|
64
|
+
limiter=limiter,
|
|
65
|
+
token=trio_token,
|
|
66
|
+
buffer_size=bidi_buffer_size
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
async def accessible_name(self) -> str:
|
|
70
|
+
return await self.sync_to_trio(sync_function=self._accessible_name_impl)()
|
|
71
|
+
|
|
72
|
+
async def aria_role(self) -> str:
|
|
73
|
+
return await self.sync_to_trio(sync_function=self._aria_role_impl)()
|
|
74
|
+
|
|
75
|
+
async def clear(self) -> None:
|
|
76
|
+
await self.sync_to_trio(sync_function=self._clear_impl)()
|
|
77
|
+
|
|
78
|
+
async def click(self) -> None:
|
|
79
|
+
await self.sync_to_trio(sync_function=self._click_impl)()
|
|
80
|
+
|
|
81
|
+
async def find_element(self, by: str = By.ID, value: Any = None) -> Self:
|
|
82
|
+
web_element = await self.sync_to_trio(sync_function=self._find_element_impl)(by=by, value=value)
|
|
83
|
+
|
|
84
|
+
return get_trio_thread_instance_wrapper(
|
|
85
|
+
wrapper_class=self.__class__,
|
|
86
|
+
legacy_object=web_element,
|
|
87
|
+
lock=self._lock,
|
|
88
|
+
limiter=self._capacity_limiter
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
async def find_elements(self, by: str = By.ID, value: Any = None) -> List[Self]:
|
|
92
|
+
web_elements = await self.sync_to_trio(sync_function=self._find_elements_impl)(by=by, value=value)
|
|
93
|
+
|
|
94
|
+
return [
|
|
95
|
+
get_trio_thread_instance_wrapper(
|
|
96
|
+
wrapper_class=self.__class__,
|
|
97
|
+
legacy_object=web_element,
|
|
98
|
+
lock=self._lock,
|
|
99
|
+
limiter=self._capacity_limiter,
|
|
100
|
+
)
|
|
101
|
+
for web_element in web_elements
|
|
102
|
+
]
|
|
103
|
+
|
|
104
|
+
async def get_attribute(self, name: str) -> Optional[str]:
|
|
105
|
+
return await self.sync_to_trio(sync_function=self._get_attribute_impl)(name=name)
|
|
106
|
+
|
|
107
|
+
async def get_dom_attribute(self, name: str) -> Optional[str]:
|
|
108
|
+
return await self.sync_to_trio(sync_function=self._get_dom_attribute_impl)(name=name)
|
|
109
|
+
|
|
110
|
+
async def get_property(self, name: str) -> Any:
|
|
111
|
+
return await self.sync_to_trio(sync_function=self._get_property_impl)(name=name)
|
|
112
|
+
|
|
113
|
+
async def id(self) -> str:
|
|
114
|
+
return await self.sync_to_trio(sync_function=self._id_impl)()
|
|
115
|
+
|
|
116
|
+
async def is_displayed(self) -> bool:
|
|
117
|
+
return await self.sync_to_trio(sync_function=self._is_displayed_impl)()
|
|
118
|
+
|
|
119
|
+
async def is_enabled(self) -> bool:
|
|
120
|
+
return await self.sync_to_trio(sync_function=self._is_enabled_impl)()
|
|
121
|
+
|
|
122
|
+
async def is_selected(self) -> bool:
|
|
123
|
+
return await self.sync_to_trio(sync_function=self._is_selected_impl)()
|
|
124
|
+
|
|
125
|
+
@property
|
|
126
|
+
def legacy(self) -> legacyWebElement:
|
|
127
|
+
return self._legacy_impl
|
|
128
|
+
|
|
129
|
+
async def location(self) -> Dict:
|
|
130
|
+
return await self.sync_to_trio(sync_function=self._location_impl)()
|
|
131
|
+
|
|
132
|
+
async def location_once_scrolled_into_view(self) -> Dict:
|
|
133
|
+
return await self.sync_to_trio(sync_function=self._location_once_scrolled_into_view_impl)()
|
|
134
|
+
|
|
135
|
+
@classmethod
|
|
136
|
+
def from_legacy(
|
|
137
|
+
cls,
|
|
138
|
+
legacy_object: WEB_ELEMENT_TYPEHINT,
|
|
139
|
+
lock: trio.Lock,
|
|
140
|
+
limiter: trio.CapacityLimiter,
|
|
141
|
+
trio_token: Optional[trio.lowlevel.TrioToken] = None,
|
|
142
|
+
bidi_buffer_size: Union[int, float] = math.inf,
|
|
143
|
+
) -> Self:
|
|
144
|
+
"""
|
|
145
|
+
Creates an instance from a legacy Selenium WebElement object.
|
|
146
|
+
|
|
147
|
+
This factory method is used to wrap an existing Selenium WebElement
|
|
148
|
+
instance into the new interface.
|
|
149
|
+
|
|
150
|
+
Args:
|
|
151
|
+
legacy_object (WEB_ELEMENT_TYPEHINT): The legacy Selenium WebElement instance or its wrapper.
|
|
152
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
153
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
154
|
+
trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
|
|
155
|
+
bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
|
|
156
|
+
|
|
157
|
+
Returns:
|
|
158
|
+
Self: A new instance of a class implementing WebElement.
|
|
159
|
+
"""
|
|
160
|
+
|
|
161
|
+
legacy_element_obj = get_legacy_instance(instance=legacy_object)
|
|
162
|
+
|
|
163
|
+
if not isinstance(legacy_element_obj, legacyWebElement):
|
|
164
|
+
raise CannotConvertTypeError(from_=legacyWebElement, to_=legacy_object)
|
|
165
|
+
|
|
166
|
+
return cls(
|
|
167
|
+
selenium_web_element=legacy_element_obj,
|
|
168
|
+
lock=lock,
|
|
169
|
+
limiter=limiter,
|
|
170
|
+
trio_token=trio_token,
|
|
171
|
+
bidi_buffer_size=bidi_buffer_size,
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
async def parent(self) -> Self:
|
|
175
|
+
parent = await self.sync_to_trio(sync_function=self._parent_impl)()
|
|
176
|
+
|
|
177
|
+
return self.from_legacy(legacy_object=parent, lock=self._lock, limiter=self._capacity_limiter)
|
|
178
|
+
|
|
179
|
+
async def rect(self) -> Dict:
|
|
180
|
+
return await self.sync_to_trio(sync_function=self._rect_impl)()
|
|
181
|
+
|
|
182
|
+
async def screenshot(self, filename: str) -> bool:
|
|
183
|
+
return await self.sync_to_trio(sync_function=self._screenshot_impl)(filename=filename)
|
|
184
|
+
|
|
185
|
+
async def screenshot_as_base64(self) -> str:
|
|
186
|
+
return await self.sync_to_trio(sync_function=self._screenshot_as_base64_impl)()
|
|
187
|
+
|
|
188
|
+
async def screenshot_as_png(self) -> bytes:
|
|
189
|
+
return await self.sync_to_trio(sync_function=self._screenshot_as_png_impl)()
|
|
190
|
+
|
|
191
|
+
async def send_keys(self, *value: str) -> None:
|
|
192
|
+
await self.sync_to_trio(sync_function=self._send_keys_impl)(*value)
|
|
193
|
+
|
|
194
|
+
async def session_id(self) -> str:
|
|
195
|
+
return await self.sync_to_trio(sync_function=self._session_id_impl)()
|
|
196
|
+
|
|
197
|
+
async def shadow_root(self) -> ShadowRoot:
|
|
198
|
+
shadow_root = await self.sync_to_trio(sync_function=self._shadow_root_impl)()
|
|
199
|
+
|
|
200
|
+
return get_trio_thread_instance_wrapper(
|
|
201
|
+
wrapper_class=ShadowRoot,
|
|
202
|
+
legacy_object=shadow_root,
|
|
203
|
+
lock=self._lock,
|
|
204
|
+
limiter=self._capacity_limiter,
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
async def size(self) -> Dict:
|
|
208
|
+
return await self.sync_to_trio(sync_function=self._size_impl)()
|
|
209
|
+
|
|
210
|
+
async def submit(self) -> None:
|
|
211
|
+
await self.sync_to_trio(sync_function=self._submit_impl)()
|
|
212
|
+
|
|
213
|
+
async def tag_name(self) -> str:
|
|
214
|
+
return await self.sync_to_trio(sync_function=self._tag_name_impl)()
|
|
215
|
+
|
|
216
|
+
async def text(self) -> str:
|
|
217
|
+
return await self.sync_to_trio(sync_function=self._text_impl)()
|
|
218
|
+
|
|
219
|
+
async def value_of_css_property(self, property_name: str) -> str:
|
|
220
|
+
return await self.sync_to_trio(sync_function=self._value_of_css_property_impl)(property_name=property_name)
|
|
221
|
+
|
|
222
|
+
def web_driver_wait(
|
|
223
|
+
self,
|
|
224
|
+
timeout: float,
|
|
225
|
+
poll_frequency: float = 0.5,
|
|
226
|
+
ignored_exceptions: Optional[Iterable[BaseException]] = None,
|
|
227
|
+
) -> WebDriverWait:
|
|
228
|
+
web_driver_wait = self._web_driver_wait_impl(
|
|
229
|
+
timeout=timeout,
|
|
230
|
+
poll_frequency=poll_frequency,
|
|
231
|
+
ignored_exceptions=ignored_exceptions,
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
return get_trio_thread_instance_wrapper(
|
|
235
|
+
wrapper_class=WebDriverWait,
|
|
236
|
+
legacy_object=web_driver_wait,
|
|
237
|
+
lock=self._lock,
|
|
238
|
+
limiter=self._capacity_limiter,
|
|
239
|
+
)
|
|
@@ -58,8 +58,8 @@ class BrowsingContext(UnifiedBrowsingContext, TrioThreadMixin, AbstractBrowsingC
|
|
|
58
58
|
|
|
59
59
|
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
60
60
|
|
|
61
|
-
async def activate(self, context: str) ->
|
|
62
|
-
|
|
61
|
+
async def activate(self, context: str) -> None:
|
|
62
|
+
await self.sync_to_trio(sync_function=self._activate_impl)(context=context)
|
|
63
63
|
|
|
64
64
|
async def add_event_handler(
|
|
65
65
|
self,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import trio
|
|
2
|
-
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
3
2
|
from typing import (
|
|
4
3
|
Dict,
|
|
5
4
|
List,
|
|
6
5
|
Optional,
|
|
7
6
|
Self
|
|
8
7
|
)
|
|
8
|
+
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
9
9
|
from osn_selenium.instances._typehints import FEDCM_TYPEHINT
|
|
10
10
|
from osn_selenium.instances.unified.fedcm import UnifiedFedCM
|
|
11
11
|
from osn_selenium.instances.convert import get_legacy_instance
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import trio
|
|
2
|
-
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
3
2
|
from typing import (
|
|
4
3
|
Callable,
|
|
5
4
|
List,
|
|
6
5
|
Optional,
|
|
7
6
|
Self
|
|
8
7
|
)
|
|
8
|
+
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
9
9
|
from osn_selenium.instances._typehints import NETWORK_TYPEHINT
|
|
10
10
|
from osn_selenium.instances.convert import get_legacy_instance
|
|
11
11
|
from osn_selenium.instances.unified.network import UnifiedNetwork
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import trio
|
|
2
|
-
from typing import
|
|
2
|
+
from typing import (
|
|
3
|
+
Any,
|
|
4
|
+
Callable,
|
|
5
|
+
Dict,
|
|
6
|
+
Self
|
|
7
|
+
)
|
|
3
8
|
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
4
9
|
from osn_selenium.instances._typehints import SCRIPT_TYPEHINT
|
|
5
10
|
from osn_selenium.instances.convert import get_legacy_instance
|
|
@@ -49,7 +54,7 @@ class Script(UnifiedScript, TrioThreadMixin, AbstractScript):
|
|
|
49
54
|
async def add_javascript_error_handler(self, handler: Callable[[Any], None]) -> int:
|
|
50
55
|
return await self.sync_to_trio(sync_function=self._add_javascript_error_handler_impl)(handler=handler)
|
|
51
56
|
|
|
52
|
-
async def execute(self, script: str, *args: Any) -> Any:
|
|
57
|
+
async def execute(self, script: str, *args: Any) -> Dict[str, Any]:
|
|
53
58
|
return await self.sync_to_trio(sync_function=self._execute_impl)(script, *args)
|
|
54
59
|
|
|
55
60
|
@classmethod
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import trio
|
|
2
|
-
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
3
2
|
from typing import (
|
|
4
3
|
Dict,
|
|
5
4
|
Optional,
|
|
6
5
|
Self,
|
|
7
6
|
Union
|
|
8
7
|
)
|
|
8
|
+
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
9
9
|
from osn_selenium.instances.convert import get_legacy_instance
|
|
10
10
|
from osn_selenium.exceptions.instance import (
|
|
11
11
|
CannotConvertTypeError
|
|
@@ -26,8 +26,8 @@ class UnifiedBrowsingContext:
|
|
|
26
26
|
|
|
27
27
|
self._selenium_browsing_context = selenium_browsing_context
|
|
28
28
|
|
|
29
|
-
def _activate_impl(self, context: str) ->
|
|
30
|
-
|
|
29
|
+
def _activate_impl(self, context: str) -> None:
|
|
30
|
+
self._legacy_impl.activate(context)
|
|
31
31
|
|
|
32
32
|
def _add_event_handler_impl(
|
|
33
33
|
self,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any, Callable
|
|
1
|
+
from typing import Any, Callable, Dict
|
|
2
2
|
from osn_selenium.exceptions.instance import NotExpectedTypeError
|
|
3
3
|
from selenium.webdriver.common.bidi.script import (
|
|
4
4
|
Script as legacyScript
|
|
@@ -21,7 +21,7 @@ class UnifiedScript:
|
|
|
21
21
|
def _add_javascript_error_handler_impl(self, handler: Callable[[Any], None]) -> int:
|
|
22
22
|
return self._legacy_impl.add_javascript_error_handler(handler=handler)
|
|
23
23
|
|
|
24
|
-
def _execute_impl(self, script: str, *args: Any) -> Any:
|
|
24
|
+
def _execute_impl(self, script: str, *args: Any) -> Dict[str, Any]:
|
|
25
25
|
return self._legacy_impl.execute(script, *args)
|
|
26
26
|
|
|
27
27
|
@property
|
|
@@ -7,6 +7,7 @@ from typing import (
|
|
|
7
7
|
List,
|
|
8
8
|
Optional
|
|
9
9
|
)
|
|
10
|
+
from osn_selenium.exceptions.instance import NotExpectedTypeError
|
|
10
11
|
from selenium.webdriver.remote.shadowroot import (
|
|
11
12
|
ShadowRoot as legacyShadowRoot
|
|
12
13
|
)
|
|
@@ -24,10 +25,7 @@ __all__ = ["UnifiedWebElement"]
|
|
|
24
25
|
class UnifiedWebElement:
|
|
25
26
|
def __init__(self, selenium_web_element: legacyWebElement):
|
|
26
27
|
if not isinstance(selenium_web_element, legacyWebElement):
|
|
27
|
-
raise
|
|
28
|
-
expected_class=legacyWebElement,
|
|
29
|
-
received_instance=selenium_web_element
|
|
30
|
-
)
|
|
28
|
+
raise NotExpectedTypeError(expected_type=legacyWebElement, received_instance=selenium_web_element)
|
|
31
29
|
|
|
32
30
|
self._selenium_web_element = selenium_web_element
|
|
33
31
|
|
|
@@ -95,7 +93,7 @@ class UnifiedWebElement:
|
|
|
95
93
|
def _parent_impl(self) -> Any:
|
|
96
94
|
return self._legacy_impl.parent
|
|
97
95
|
|
|
98
|
-
def _rect_impl(self) -> Dict:
|
|
96
|
+
def _rect_impl(self) -> Dict[str, int]:
|
|
99
97
|
return self._legacy_impl.rect
|
|
100
98
|
|
|
101
99
|
def _screenshot_as_base64_impl(self) -> str:
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from copy import deepcopy
|
|
1
2
|
from pydantic import Field
|
|
2
3
|
from typing import Dict, List, Literal
|
|
3
4
|
from osn_selenium._base_models import DictModel
|
|
@@ -42,7 +43,7 @@ class FingerprintSettings(DictModel):
|
|
|
42
43
|
"""
|
|
43
44
|
|
|
44
45
|
if self.use_preset_registry:
|
|
45
|
-
registry_ = FINGERPRINT_REGISTRY
|
|
46
|
+
registry_ = deepcopy(FINGERPRINT_REGISTRY)
|
|
46
47
|
else:
|
|
47
48
|
registry_ = {}
|
|
48
49
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from _contextvars import ContextVar
|
|
2
|
+
from osn_selenium.trio_bidi._typehints import (
|
|
3
|
+
CURRENT_BROWSING_CONTEXT_TYPEHINT
|
|
4
|
+
)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
__all__ = ["CURRENT_BROWSING_CONTEXT"]
|
|
8
|
+
|
|
9
|
+
CURRENT_BROWSING_CONTEXT: ContextVar[CURRENT_BROWSING_CONTEXT_TYPEHINT] = ContextVar("current_browsing_context",
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
default=None)
|