osn-selenium 1.0.0__py3-none-any.whl → 1.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- osn_selenium/_base_models.py +41 -0
- osn_selenium/_cdp_import.py +253 -0
- osn_selenium/_decorators.py +57 -0
- osn_selenium/_trio_threads_helpers.py +157 -0
- osn_selenium/_typehints.py +1 -1
- osn_selenium/abstract/executors/cdp.py +63 -0
- osn_selenium/abstract/webdriver/blink/base.py +14 -0
- osn_selenium/abstract/webdriver/blink/lifecycle.py +8 -8
- osn_selenium/abstract/webdriver/core/base.py +0 -14
- osn_selenium/abstract/webdriver/core/capture.py +4 -3
- osn_selenium/abstract/webdriver/core/lifecycle.py +8 -8
- osn_selenium/abstract/webdriver/core/script.py +5 -4
- osn_selenium/abstract/webdriver/core/window.py +11 -11
- osn_selenium/browsers_handler/models.py +1 -1
- osn_selenium/dev_tools/_decorators.py +19 -51
- osn_selenium/dev_tools/_functions.py +2 -4
- osn_selenium/dev_tools/_typehints.py +5 -2
- osn_selenium/dev_tools/_wrappers.py +0 -3
- osn_selenium/dev_tools/domains/__init__.py +2 -2
- osn_selenium/dev_tools/domains/abstract.py +1 -1
- osn_selenium/dev_tools/domains/fetch.py +6 -8
- osn_selenium/dev_tools/domains_default/fetch.py +2 -2
- osn_selenium/dev_tools/filters.py +1 -1
- osn_selenium/dev_tools/logger/main.py +9 -21
- osn_selenium/dev_tools/logger/models.py +1 -1
- osn_selenium/dev_tools/logger/target.py +49 -29
- osn_selenium/dev_tools/manager/base.py +10 -42
- osn_selenium/dev_tools/manager/lifecycle.py +84 -75
- osn_selenium/dev_tools/manager/logging.py +1 -1
- osn_selenium/dev_tools/manager/targets.py +13 -5
- osn_selenium/dev_tools/models.py +1 -1
- osn_selenium/dev_tools/settings.py +9 -5
- osn_selenium/dev_tools/target/base.py +30 -34
- osn_selenium/dev_tools/target/discovery.py +1 -1
- osn_selenium/dev_tools/target/events.py +2 -2
- osn_selenium/dev_tools/target/fingerprint.py +1 -1
- osn_selenium/dev_tools/target/lifecycle.py +103 -38
- osn_selenium/dev_tools/target/logging.py +11 -3
- osn_selenium/exceptions/__init__.py +0 -1
- osn_selenium/exceptions/base.py +28 -1
- osn_selenium/exceptions/bidi_bridge.py +59 -0
- osn_selenium/exceptions/configuration.py +1 -8
- osn_selenium/exceptions/dependencies.py +60 -0
- osn_selenium/exceptions/devtools.py +9 -39
- osn_selenium/exceptions/experimental.py +26 -0
- osn_selenium/exceptions/flags.py +0 -2
- osn_selenium/exceptions/instance.py +1 -9
- osn_selenium/exceptions/javascript.py +0 -2
- osn_selenium/exceptions/logic.py +0 -2
- osn_selenium/exceptions/path.py +1 -9
- osn_selenium/exceptions/platform.py +0 -2
- osn_selenium/exceptions/protocol.py +0 -3
- osn_selenium/exceptions/webdriver.py +1 -7
- osn_selenium/exceptions/window.py +1 -8
- osn_selenium/executors/sync/cdp.py +95 -0
- osn_selenium/executors/trio_bidi/cdp.py +101 -0
- osn_selenium/executors/trio_bidi/javascript.py +101 -0
- osn_selenium/executors/trio_threads/cdp.py +99 -0
- osn_selenium/executors/trio_threads/javascript.py +1 -1
- osn_selenium/executors/unified/javascript.py +0 -4
- osn_selenium/flags/base.py +7 -13
- osn_selenium/flags/blink.py +2 -8
- osn_selenium/flags/chrome.py +6 -6
- osn_selenium/flags/edge.py +6 -6
- osn_selenium/flags/models/base.py +4 -4
- osn_selenium/flags/models/blink.py +1 -1
- osn_selenium/flags/models/values.py +1 -1
- osn_selenium/instances/convert.py +44 -3
- osn_selenium/instances/protocols.py +47 -1
- osn_selenium/instances/sync/action_chains/__init__.py +6 -0
- osn_selenium/instances/sync/browsing_context.py +2 -2
- osn_selenium/instances/sync/script.py +7 -2
- osn_selenium/instances/sync/shadow_root.py +30 -8
- osn_selenium/instances/sync/web_element.py +1 -1
- osn_selenium/instances/trio_bidi/__init__.py +1 -0
- osn_selenium/instances/trio_bidi/shadow_root.py +180 -0
- osn_selenium/instances/trio_bidi/switch_to.py +143 -0
- osn_selenium/instances/trio_bidi/web_driver_wait.py +124 -0
- osn_selenium/instances/trio_bidi/web_element.py +239 -0
- osn_selenium/instances/trio_threads/action_chains/__init__.py +6 -0
- osn_selenium/instances/trio_threads/action_chains/base.py +1 -1
- osn_selenium/instances/trio_threads/alert.py +1 -1
- osn_selenium/instances/trio_threads/browser.py +1 -1
- osn_selenium/instances/trio_threads/browsing_context.py +3 -3
- osn_selenium/instances/trio_threads/dialog.py +1 -1
- osn_selenium/instances/trio_threads/fedcm.py +1 -1
- osn_selenium/instances/trio_threads/mobile.py +1 -1
- osn_selenium/instances/trio_threads/network.py +1 -1
- osn_selenium/instances/trio_threads/permissions.py +1 -1
- osn_selenium/instances/trio_threads/script.py +8 -3
- osn_selenium/instances/trio_threads/shadow_root.py +46 -15
- osn_selenium/instances/trio_threads/storage.py +1 -1
- osn_selenium/instances/trio_threads/switch_to.py +1 -1
- osn_selenium/instances/trio_threads/web_driver_wait.py +1 -1
- osn_selenium/instances/trio_threads/web_element.py +1 -1
- osn_selenium/instances/trio_threads/web_extension.py +1 -1
- osn_selenium/instances/unified/browsing_context.py +2 -2
- osn_selenium/instances/unified/script.py +2 -2
- osn_selenium/instances/unified/web_element.py +3 -5
- osn_selenium/javascript/fingerprint/__init__.py +3 -2
- osn_selenium/javascript/fingerprint/registry/models.py +1 -1
- osn_selenium/javascript/fingerprint/spoof/core_rules.py +1 -1
- osn_selenium/javascript/fingerprint/spoof/noise.py +1 -1
- osn_selenium/javascript/models.py +1 -1
- osn_selenium/models.py +2 -47
- osn_selenium/trio_bidi/__init__.py +1 -0
- osn_selenium/trio_bidi/_context_vars.py +12 -0
- osn_selenium/trio_bidi/_error_mappings.py +123 -0
- osn_selenium/trio_bidi/_error_redirects.py +194 -0
- osn_selenium/trio_bidi/_file_functions.py +28 -0
- osn_selenium/trio_bidi/_internal_mappings.py +10 -0
- osn_selenium/trio_bidi/_models.py +199 -0
- osn_selenium/trio_bidi/_typehints.py +20 -0
- osn_selenium/trio_bidi/connection_pool.py +587 -0
- osn_selenium/trio_bidi/mapping/__init__.py +1 -0
- osn_selenium/trio_bidi/mapping/_constants.py +14 -0
- osn_selenium/trio_bidi/mapping/_js_snippets.py +285 -0
- osn_selenium/trio_bidi/mapping/_utils.py +4 -0
- osn_selenium/trio_bidi/mapping/request_functions/__init__.py +87 -0
- osn_selenium/trio_bidi/mapping/request_functions/_alert.py +102 -0
- osn_selenium/trio_bidi/mapping/request_functions/_args_helpers.py +225 -0
- osn_selenium/trio_bidi/mapping/request_functions/_capture.py +71 -0
- osn_selenium/trio_bidi/mapping/request_functions/_cdp.py +40 -0
- osn_selenium/trio_bidi/mapping/request_functions/_element.py +55 -0
- osn_selenium/trio_bidi/mapping/request_functions/_file.py +32 -0
- osn_selenium/trio_bidi/mapping/request_functions/_navigation.py +147 -0
- osn_selenium/trio_bidi/mapping/request_functions/_script.py +85 -0
- osn_selenium/trio_bidi/mapping/request_functions/_shadow_root.py +65 -0
- osn_selenium/trio_bidi/mapping/request_functions/_switch_to.py +59 -0
- osn_selenium/trio_bidi/mapping/request_functions/_web_element.py +448 -0
- osn_selenium/trio_bidi/mapping/request_functions/_window.py +125 -0
- osn_selenium/trio_bidi/mapping/response_functions/__init__.py +86 -0
- osn_selenium/trio_bidi/mapping/response_functions/_alert.py +81 -0
- osn_selenium/trio_bidi/mapping/response_functions/_args_helpers.py +183 -0
- osn_selenium/trio_bidi/mapping/response_functions/_args_validators.py +153 -0
- osn_selenium/trio_bidi/mapping/response_functions/_capture.py +71 -0
- osn_selenium/trio_bidi/mapping/response_functions/_cdp.py +26 -0
- osn_selenium/trio_bidi/mapping/response_functions/_element.py +58 -0
- osn_selenium/trio_bidi/mapping/response_functions/_file.py +30 -0
- osn_selenium/trio_bidi/mapping/response_functions/_navigation.py +120 -0
- osn_selenium/trio_bidi/mapping/response_functions/_script.py +57 -0
- osn_selenium/trio_bidi/mapping/response_functions/_shadow_root.py +58 -0
- osn_selenium/trio_bidi/mapping/response_functions/_switch_to.py +57 -0
- osn_selenium/trio_bidi/mapping/response_functions/_web_element.py +368 -0
- osn_selenium/trio_bidi/mapping/response_functions/_window.py +119 -0
- osn_selenium/trio_bidi/mixin.py +186 -0
- osn_selenium/trio_bidi/remote_connection.py +164 -0
- osn_selenium/{base_mixin.py → trio_threads_mixin.py} +31 -40
- osn_selenium/webdrivers/_args_helpers.py +120 -7
- osn_selenium/webdrivers/_bridges.py +2 -2
- osn_selenium/webdrivers/_executable_tables/models.py +1 -1
- osn_selenium/webdrivers/_typehints.py +9 -3
- osn_selenium/webdrivers/protocols.py +81 -1
- osn_selenium/webdrivers/sync/blink/__init__.py +11 -1
- osn_selenium/webdrivers/sync/blink/base.py +23 -1
- osn_selenium/webdrivers/sync/blink/lifecycle.py +26 -8
- osn_selenium/webdrivers/sync/chrome/__init__.py +36 -1
- osn_selenium/webdrivers/sync/chrome/base.py +13 -1
- osn_selenium/webdrivers/sync/chrome/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/chrome/settings.py +6 -1
- osn_selenium/webdrivers/sync/core/__init__.py +10 -1
- osn_selenium/webdrivers/sync/core/base.py +18 -18
- osn_selenium/webdrivers/sync/core/capture.py +3 -2
- osn_selenium/webdrivers/sync/core/file.py +3 -2
- osn_selenium/webdrivers/sync/core/lifecycle.py +44 -10
- osn_selenium/webdrivers/sync/core/script.py +3 -2
- osn_selenium/webdrivers/sync/core/window.py +3 -3
- osn_selenium/webdrivers/sync/edge/__init__.py +36 -1
- osn_selenium/webdrivers/sync/edge/base.py +13 -1
- osn_selenium/webdrivers/sync/edge/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/edge/settings.py +6 -1
- osn_selenium/webdrivers/sync/yandex/__init__.py +36 -1
- osn_selenium/webdrivers/sync/yandex/base.py +13 -1
- osn_selenium/webdrivers/sync/yandex/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/yandex/settings.py +6 -1
- osn_selenium/webdrivers/trio_bidi/__init__.py +1 -0
- osn_selenium/webdrivers/trio_bidi/blink/__init__.py +132 -0
- osn_selenium/webdrivers/trio_bidi/blink/base.py +167 -0
- osn_selenium/webdrivers/trio_bidi/blink/lifecycle.py +89 -0
- osn_selenium/webdrivers/trio_bidi/blink/settings.py +63 -0
- osn_selenium/webdrivers/trio_bidi/chrome/__init__.py +114 -0
- osn_selenium/webdrivers/trio_bidi/chrome/base.py +127 -0
- osn_selenium/webdrivers/trio_bidi/chrome/lifecycle.py +85 -0
- osn_selenium/webdrivers/trio_bidi/chrome/settings.py +63 -0
- osn_selenium/webdrivers/trio_bidi/core/__init__.py +95 -0
- osn_selenium/webdrivers/trio_bidi/core/actions.py +70 -0
- osn_selenium/webdrivers/trio_bidi/core/base.py +200 -0
- osn_selenium/webdrivers/trio_bidi/core/capture.py +39 -0
- osn_selenium/webdrivers/trio_bidi/core/devtools.py +49 -0
- osn_selenium/webdrivers/trio_bidi/core/element.py +64 -0
- osn_selenium/webdrivers/trio_bidi/core/lifecycle.py +135 -0
- osn_selenium/webdrivers/trio_bidi/core/navigation.py +37 -0
- osn_selenium/webdrivers/trio_bidi/core/script.py +56 -0
- osn_selenium/webdrivers/trio_bidi/core/settings.py +36 -0
- osn_selenium/webdrivers/trio_bidi/core/window.py +134 -0
- osn_selenium/webdrivers/trio_bidi/edge/__init__.py +114 -0
- osn_selenium/webdrivers/trio_bidi/edge/base.py +123 -0
- osn_selenium/webdrivers/trio_bidi/edge/lifecycle.py +85 -0
- osn_selenium/webdrivers/trio_bidi/edge/settings.py +63 -0
- osn_selenium/webdrivers/trio_bidi/yandex/__init__.py +114 -0
- osn_selenium/webdrivers/trio_bidi/yandex/base.py +120 -0
- osn_selenium/webdrivers/trio_bidi/yandex/lifecycle.py +85 -0
- osn_selenium/webdrivers/trio_bidi/yandex/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/blink/__init__.py +18 -2
- osn_selenium/webdrivers/trio_threads/blink/base.py +25 -1
- osn_selenium/webdrivers/trio_threads/blink/casting.py +1 -1
- osn_selenium/webdrivers/trio_threads/blink/features.py +1 -1
- osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +26 -8
- osn_selenium/webdrivers/trio_threads/blink/logging.py +1 -1
- osn_selenium/webdrivers/trio_threads/blink/network.py +1 -1
- osn_selenium/webdrivers/trio_threads/chrome/__init__.py +34 -1
- osn_selenium/webdrivers/trio_threads/chrome/base.py +14 -2
- osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/chrome/settings.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/__init__.py +10 -14
- osn_selenium/webdrivers/trio_threads/core/actions.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/auth.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/base.py +18 -22
- osn_selenium/webdrivers/trio_threads/core/capture.py +4 -3
- osn_selenium/webdrivers/trio_threads/core/comonents.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/devtools.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/element.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/file.py +5 -4
- osn_selenium/webdrivers/trio_threads/core/lifecycle.py +45 -11
- osn_selenium/webdrivers/trio_threads/core/navigation.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/script.py +4 -3
- osn_selenium/webdrivers/trio_threads/core/settings.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/storage.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/timeouts.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/window.py +6 -6
- osn_selenium/webdrivers/trio_threads/edge/__init__.py +34 -1
- osn_selenium/webdrivers/trio_threads/edge/base.py +14 -2
- osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/edge/settings.py +1 -1
- osn_selenium/webdrivers/trio_threads/yandex/__init__.py +34 -1
- osn_selenium/webdrivers/trio_threads/yandex/base.py +14 -2
- osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/yandex/settings.py +1 -1
- osn_selenium/webdrivers/unified/blink/base.py +9 -1
- osn_selenium/webdrivers/unified/blink/lifecycle.py +4 -2
- osn_selenium/webdrivers/unified/chrome/base.py +9 -1
- osn_selenium/webdrivers/unified/core/auth.py +4 -2
- osn_selenium/webdrivers/unified/core/base.py +19 -6
- osn_selenium/webdrivers/unified/core/capture.py +3 -2
- osn_selenium/webdrivers/unified/core/components.py +12 -7
- osn_selenium/webdrivers/unified/core/devtools.py +2 -1
- osn_selenium/webdrivers/unified/core/file.py +3 -2
- osn_selenium/webdrivers/unified/core/lifecycle.py +5 -3
- osn_selenium/webdrivers/unified/core/script.py +5 -3
- osn_selenium/webdrivers/unified/core/storage.py +2 -1
- osn_selenium/webdrivers/unified/core/window.py +9 -8
- osn_selenium/webdrivers/unified/edge/base.py +9 -1
- osn_selenium/webdrivers/unified/yandex/base.py +9 -1
- {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/METADATA +24 -10
- osn_selenium-1.2.0.dist-info/RECORD +480 -0
- {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/WHEEL +1 -1
- osn_selenium/abstract/executors/cdp/__init__.py +0 -435
- osn_selenium/abstract/executors/cdp/accessibility.py +0 -62
- osn_selenium/abstract/executors/cdp/animation.py +0 -47
- osn_selenium/abstract/executors/cdp/audits.py +0 -39
- osn_selenium/abstract/executors/cdp/autofill.py +0 -34
- osn_selenium/abstract/executors/cdp/background_service.py +0 -22
- osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +0 -95
- osn_selenium/abstract/executors/cdp/browser.py +0 -122
- osn_selenium/abstract/executors/cdp/cache_storage.py +0 -49
- osn_selenium/abstract/executors/cdp/cast.py +0 -31
- osn_selenium/abstract/executors/cdp/console.py +0 -18
- osn_selenium/abstract/executors/cdp/css.py +0 -197
- osn_selenium/abstract/executors/cdp/debugger.py +0 -198
- osn_selenium/abstract/executors/cdp/device_access.py +0 -22
- osn_selenium/abstract/executors/cdp/device_orientation.py +0 -14
- osn_selenium/abstract/executors/cdp/dom.py +0 -305
- osn_selenium/abstract/executors/cdp/dom_debugger.py +0 -57
- osn_selenium/abstract/executors/cdp/dom_snapshot.py +0 -42
- osn_selenium/abstract/executors/cdp/dom_storage.py +0 -31
- osn_selenium/abstract/executors/cdp/emulation.py +0 -259
- osn_selenium/abstract/executors/cdp/event_breakpoints.py +0 -18
- osn_selenium/abstract/executors/cdp/extensions.py +0 -31
- osn_selenium/abstract/executors/cdp/fed_cm.py +0 -35
- osn_selenium/abstract/executors/cdp/fetch.py +0 -76
- osn_selenium/abstract/executors/cdp/file_system.py +0 -11
- osn_selenium/abstract/executors/cdp/headless_experimental.py +0 -30
- osn_selenium/abstract/executors/cdp/heap_profiler.py +0 -73
- osn_selenium/abstract/executors/cdp/indexed_db.py +0 -99
- osn_selenium/abstract/executors/cdp/input.py +0 -158
- osn_selenium/abstract/executors/cdp/inspector.py +0 -14
- osn_selenium/abstract/executors/cdp/io.py +0 -24
- osn_selenium/abstract/executors/cdp/layer_tree.py +0 -61
- osn_selenium/abstract/executors/cdp/log.py +0 -27
- osn_selenium/abstract/executors/cdp/media.py +0 -14
- osn_selenium/abstract/executors/cdp/memory.py +0 -61
- osn_selenium/abstract/executors/cdp/network.py +0 -252
- osn_selenium/abstract/executors/cdp/overlay.py +0 -166
- osn_selenium/abstract/executors/cdp/page.py +0 -347
- osn_selenium/abstract/executors/cdp/performance.py +0 -28
- osn_selenium/abstract/executors/cdp/performance_timeline.py +0 -11
- osn_selenium/abstract/executors/cdp/preload.py +0 -14
- osn_selenium/abstract/executors/cdp/profiler.py +0 -54
- osn_selenium/abstract/executors/cdp/pwa.py +0 -46
- osn_selenium/abstract/executors/cdp/runtime.py +0 -176
- osn_selenium/abstract/executors/cdp/schema.py +0 -11
- osn_selenium/abstract/executors/cdp/security.py +0 -26
- osn_selenium/abstract/executors/cdp/service_worker.py +0 -54
- osn_selenium/abstract/executors/cdp/storage.py +0 -175
- osn_selenium/abstract/executors/cdp/system_info.py +0 -24
- osn_selenium/abstract/executors/cdp/target.py +0 -125
- osn_selenium/abstract/executors/cdp/tethering.py +0 -14
- osn_selenium/abstract/executors/cdp/tracing.py +0 -48
- osn_selenium/abstract/executors/cdp/web_audio.py +0 -19
- osn_selenium/abstract/executors/cdp/web_authn.py +0 -76
- osn_selenium/executors/sync/cdp/__init__.py +0 -550
- osn_selenium/executors/sync/cdp/accessibility.py +0 -74
- osn_selenium/executors/sync/cdp/animation.py +0 -50
- osn_selenium/executors/sync/cdp/audits.py +0 -48
- osn_selenium/executors/sync/cdp/autofill.py +0 -39
- osn_selenium/executors/sync/cdp/background_service.py +0 -30
- osn_selenium/executors/sync/cdp/bluetooth_emulation.py +0 -101
- osn_selenium/executors/sync/cdp/browser.py +0 -131
- osn_selenium/executors/sync/cdp/cache_storage.py +0 -66
- osn_selenium/executors/sync/cdp/cast.py +0 -38
- osn_selenium/executors/sync/cdp/console.py +0 -24
- osn_selenium/executors/sync/cdp/css.py +0 -187
- osn_selenium/executors/sync/cdp/debugger.py +0 -206
- osn_selenium/executors/sync/cdp/device_access.py +0 -27
- osn_selenium/executors/sync/cdp/device_orientation.py +0 -24
- osn_selenium/executors/sync/cdp/dom.py +0 -310
- osn_selenium/executors/sync/cdp/dom_debugger.py +0 -56
- osn_selenium/executors/sync/cdp/dom_snapshot.py +0 -58
- osn_selenium/executors/sync/cdp/dom_storage.py +0 -38
- osn_selenium/executors/sync/cdp/emulation.py +0 -270
- osn_selenium/executors/sync/cdp/event_breakpoints.py +0 -27
- osn_selenium/executors/sync/cdp/extensions.py +0 -39
- osn_selenium/executors/sync/cdp/fed_cm.py +0 -45
- osn_selenium/executors/sync/cdp/fetch.py +0 -96
- osn_selenium/executors/sync/cdp/file_system.py +0 -18
- osn_selenium/executors/sync/cdp/headless_experimental.py +0 -44
- osn_selenium/executors/sync/cdp/heap_profiler.py +0 -89
- osn_selenium/executors/sync/cdp/indexed_db.py +0 -142
- osn_selenium/executors/sync/cdp/input.py +0 -233
- osn_selenium/executors/sync/cdp/inspector.py +0 -21
- osn_selenium/executors/sync/cdp/io.py +0 -33
- osn_selenium/executors/sync/cdp/layer_tree.py +0 -71
- osn_selenium/executors/sync/cdp/log.py +0 -35
- osn_selenium/executors/sync/cdp/media.py +0 -21
- osn_selenium/executors/sync/cdp/memory.py +0 -62
- osn_selenium/executors/sync/cdp/network.py +0 -287
- osn_selenium/executors/sync/cdp/overlay.py +0 -174
- osn_selenium/executors/sync/cdp/page.py +0 -365
- osn_selenium/executors/sync/cdp/performance.py +0 -33
- osn_selenium/executors/sync/cdp/performance_timeline.py +0 -26
- osn_selenium/executors/sync/cdp/preload.py +0 -21
- osn_selenium/executors/sync/cdp/profiler.py +0 -58
- osn_selenium/executors/sync/cdp/pwa.py +0 -55
- osn_selenium/executors/sync/cdp/runtime.py +0 -221
- osn_selenium/executors/sync/cdp/schema.py +0 -23
- osn_selenium/executors/sync/cdp/security.py +0 -30
- osn_selenium/executors/sync/cdp/service_worker.py +0 -56
- osn_selenium/executors/sync/cdp/storage.py +0 -151
- osn_selenium/executors/sync/cdp/system_info.py +0 -30
- osn_selenium/executors/sync/cdp/target.py +0 -147
- osn_selenium/executors/sync/cdp/tethering.py +0 -21
- osn_selenium/executors/sync/cdp/tracing.py +0 -62
- osn_selenium/executors/sync/cdp/web_audio.py +0 -24
- osn_selenium/executors/sync/cdp/web_authn.py +0 -82
- osn_selenium/executors/trio_threads/cdp/__init__.py +0 -771
- osn_selenium/executors/trio_threads/cdp/accessibility.py +0 -87
- osn_selenium/executors/trio_threads/cdp/animation.py +0 -63
- osn_selenium/executors/trio_threads/cdp/audits.py +0 -57
- osn_selenium/executors/trio_threads/cdp/autofill.py +0 -52
- osn_selenium/executors/trio_threads/cdp/background_service.py +0 -40
- osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +0 -111
- osn_selenium/executors/trio_threads/cdp/browser.py +0 -140
- osn_selenium/executors/trio_threads/cdp/cache_storage.py +0 -79
- osn_selenium/executors/trio_threads/cdp/cast.py +0 -47
- osn_selenium/executors/trio_threads/cdp/console.py +0 -33
- osn_selenium/executors/trio_threads/cdp/css.py +0 -196
- osn_selenium/executors/trio_threads/cdp/debugger.py +0 -219
- osn_selenium/executors/trio_threads/cdp/device_access.py +0 -40
- osn_selenium/executors/trio_threads/cdp/device_orientation.py +0 -34
- osn_selenium/executors/trio_threads/cdp/dom.py +0 -319
- osn_selenium/executors/trio_threads/cdp/dom_debugger.py +0 -69
- osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +0 -71
- osn_selenium/executors/trio_threads/cdp/dom_storage.py +0 -51
- osn_selenium/executors/trio_threads/cdp/emulation.py +0 -283
- osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +0 -37
- osn_selenium/executors/trio_threads/cdp/extensions.py +0 -52
- osn_selenium/executors/trio_threads/cdp/fed_cm.py +0 -54
- osn_selenium/executors/trio_threads/cdp/fetch.py +0 -105
- osn_selenium/executors/trio_threads/cdp/file_system.py +0 -31
- osn_selenium/executors/trio_threads/cdp/headless_experimental.py +0 -54
- osn_selenium/executors/trio_threads/cdp/heap_profiler.py +0 -102
- osn_selenium/executors/trio_threads/cdp/indexed_db.py +0 -155
- osn_selenium/executors/trio_threads/cdp/input.py +0 -242
- osn_selenium/executors/trio_threads/cdp/inspector.py +0 -34
- osn_selenium/executors/trio_threads/cdp/io.py +0 -42
- osn_selenium/executors/trio_threads/cdp/layer_tree.py +0 -84
- osn_selenium/executors/trio_threads/cdp/log.py +0 -44
- osn_selenium/executors/trio_threads/cdp/media.py +0 -30
- osn_selenium/executors/trio_threads/cdp/memory.py +0 -71
- osn_selenium/executors/trio_threads/cdp/network.py +0 -296
- osn_selenium/executors/trio_threads/cdp/overlay.py +0 -183
- osn_selenium/executors/trio_threads/cdp/page.py +0 -374
- osn_selenium/executors/trio_threads/cdp/performance.py +0 -46
- osn_selenium/executors/trio_threads/cdp/performance_timeline.py +0 -36
- osn_selenium/executors/trio_threads/cdp/preload.py +0 -30
- osn_selenium/executors/trio_threads/cdp/profiler.py +0 -71
- osn_selenium/executors/trio_threads/cdp/pwa.py +0 -64
- osn_selenium/executors/trio_threads/cdp/runtime.py +0 -230
- osn_selenium/executors/trio_threads/cdp/schema.py +0 -32
- osn_selenium/executors/trio_threads/cdp/security.py +0 -43
- osn_selenium/executors/trio_threads/cdp/service_worker.py +0 -69
- osn_selenium/executors/trio_threads/cdp/storage.py +0 -162
- osn_selenium/executors/trio_threads/cdp/system_info.py +0 -43
- osn_selenium/executors/trio_threads/cdp/target.py +0 -156
- osn_selenium/executors/trio_threads/cdp/tethering.py +0 -34
- osn_selenium/executors/trio_threads/cdp/tracing.py +0 -71
- osn_selenium/executors/trio_threads/cdp/web_audio.py +0 -37
- osn_selenium/executors/trio_threads/cdp/web_authn.py +0 -95
- osn_selenium/executors/unified/cdp/accessibility.py +0 -81
- osn_selenium/executors/unified/cdp/animation.py +0 -50
- osn_selenium/executors/unified/cdp/audits.py +0 -45
- osn_selenium/executors/unified/cdp/autofill.py +0 -41
- osn_selenium/executors/unified/cdp/background_service.py +0 -24
- osn_selenium/executors/unified/cdp/bluetooth_emulation.py +0 -132
- osn_selenium/executors/unified/cdp/browser.py +0 -143
- osn_selenium/executors/unified/cdp/cache_storage.py +0 -69
- osn_selenium/executors/unified/cdp/cast.py +0 -32
- osn_selenium/executors/unified/cdp/console.py +0 -18
- osn_selenium/executors/unified/cdp/css.py +0 -237
- osn_selenium/executors/unified/cdp/debugger.py +0 -243
- osn_selenium/executors/unified/cdp/device_access.py +0 -21
- osn_selenium/executors/unified/cdp/device_orientation.py +0 -18
- osn_selenium/executors/unified/cdp/dom.py +0 -380
- osn_selenium/executors/unified/cdp/dom_debugger.py +0 -65
- osn_selenium/executors/unified/cdp/dom_snapshot.py +0 -58
- osn_selenium/executors/unified/cdp/dom_storage.py +0 -38
- osn_selenium/executors/unified/cdp/emulation.py +0 -312
- osn_selenium/executors/unified/cdp/event_breakpoints.py +0 -24
- osn_selenium/executors/unified/cdp/extensions.py +0 -45
- osn_selenium/executors/unified/cdp/fed_cm.py +0 -51
- osn_selenium/executors/unified/cdp/fetch.py +0 -111
- osn_selenium/executors/unified/cdp/file_system.py +0 -15
- osn_selenium/executors/unified/cdp/headless_experimental.py +0 -38
- osn_selenium/executors/unified/cdp/heap_profiler.py +0 -101
- osn_selenium/executors/unified/cdp/indexed_db.py +0 -157
- osn_selenium/executors/unified/cdp/input.py +0 -254
- osn_selenium/executors/unified/cdp/inspector.py +0 -15
- osn_selenium/executors/unified/cdp/io.py +0 -29
- osn_selenium/executors/unified/cdp/layer_tree.py +0 -71
- osn_selenium/executors/unified/cdp/log.py +0 -29
- osn_selenium/executors/unified/cdp/media.py +0 -15
- osn_selenium/executors/unified/cdp/memory.py +0 -59
- osn_selenium/executors/unified/cdp/network.py +0 -323
- osn_selenium/executors/unified/cdp/overlay.py +0 -209
- osn_selenium/executors/unified/cdp/page.py +0 -410
- osn_selenium/executors/unified/cdp/performance.py +0 -27
- osn_selenium/executors/unified/cdp/performance_timeline.py +0 -17
- osn_selenium/executors/unified/cdp/preload.py +0 -15
- osn_selenium/executors/unified/cdp/profiler.py +0 -55
- osn_selenium/executors/unified/cdp/pwa.py +0 -55
- osn_selenium/executors/unified/cdp/runtime.py +0 -245
- osn_selenium/executors/unified/cdp/schema.py +0 -17
- osn_selenium/executors/unified/cdp/security.py +0 -27
- osn_selenium/executors/unified/cdp/service_worker.py +0 -62
- osn_selenium/executors/unified/cdp/storage.py +0 -178
- osn_selenium/executors/unified/cdp/system_info.py +0 -24
- osn_selenium/executors/unified/cdp/target.py +0 -165
- osn_selenium/executors/unified/cdp/tethering.py +0 -15
- osn_selenium/executors/unified/cdp/tracing.py +0 -62
- osn_selenium/executors/unified/cdp/web_audio.py +0 -18
- osn_selenium/executors/unified/cdp/web_authn.py +0 -103
- osn_selenium-1.0.0.dist-info/RECORD +0 -608
- /osn_selenium/{dev_tools/_exception_helpers.py → _exception_helpers.py} +0 -0
- /osn_selenium/executors/{unified/cdp → trio_bidi}/__init__.py +0 -0
- {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/top_level.txt +0 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import trio
|
|
2
2
|
from typing import (
|
|
3
|
+
Optional,
|
|
3
4
|
Protocol,
|
|
4
5
|
Self,
|
|
5
6
|
TypeVar,
|
|
7
|
+
Union,
|
|
6
8
|
runtime_checkable
|
|
7
9
|
)
|
|
8
10
|
|
|
@@ -10,6 +12,7 @@ from typing import (
|
|
|
10
12
|
__all__ = [
|
|
11
13
|
"AnyInstanceWrapper",
|
|
12
14
|
"SyncInstanceWrapper",
|
|
15
|
+
"TrioBiDiInstanceWrapper",
|
|
13
16
|
"TrioThreadInstanceWrapper"
|
|
14
17
|
]
|
|
15
18
|
|
|
@@ -27,7 +30,7 @@ class TrioThreadInstanceWrapper(Protocol):
|
|
|
27
30
|
cls,
|
|
28
31
|
legacy_object: _LEGACY_OBJECT,
|
|
29
32
|
lock: trio.Lock,
|
|
30
|
-
limiter: trio.CapacityLimiter
|
|
33
|
+
limiter: trio.CapacityLimiter,
|
|
31
34
|
) -> Self:
|
|
32
35
|
"""
|
|
33
36
|
Creates an instance of the wrapper from a legacy object.
|
|
@@ -55,6 +58,49 @@ class TrioThreadInstanceWrapper(Protocol):
|
|
|
55
58
|
...
|
|
56
59
|
|
|
57
60
|
|
|
61
|
+
@runtime_checkable
|
|
62
|
+
class TrioBiDiInstanceWrapper(Protocol):
|
|
63
|
+
"""
|
|
64
|
+
Protocol for instances that wrap legacy objects and operate within Trio threads.
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def from_legacy(
|
|
69
|
+
cls,
|
|
70
|
+
legacy_object: _LEGACY_OBJECT,
|
|
71
|
+
lock: trio.Lock,
|
|
72
|
+
limiter: trio.CapacityLimiter,
|
|
73
|
+
trio_token: Optional[trio.lowlevel.TrioToken],
|
|
74
|
+
bidi_buffer_size: Union[int, float],
|
|
75
|
+
) -> Self:
|
|
76
|
+
"""
|
|
77
|
+
Creates an instance of the wrapper from a legacy object.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
legacy_object (_LEGACY_OBJECT): The legacy Selenium object to wrap.
|
|
81
|
+
lock (trio.Lock): Trio lock for synchronization.
|
|
82
|
+
limiter (trio.CapacityLimiter): Trio capacity limiter.
|
|
83
|
+
trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
|
|
84
|
+
bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
Self: An instance of the wrapper.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
...
|
|
91
|
+
|
|
92
|
+
@property
|
|
93
|
+
def legacy(self) -> _LEGACY_OBJECT:
|
|
94
|
+
"""
|
|
95
|
+
Returns the underlying legacy Selenium object.
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
_LEGACY_OBJECT: The legacy Selenium instance.
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
...
|
|
102
|
+
|
|
103
|
+
|
|
58
104
|
@runtime_checkable
|
|
59
105
|
class SyncInstanceWrapper(Protocol):
|
|
60
106
|
"""
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
from osn_selenium.instances.sync.action_chains.move import MoveMixin
|
|
1
2
|
from osn_selenium.instances.sync.action_chains.click import ClickMixin
|
|
2
3
|
from osn_selenium.instances.sync.action_chains.utils import UtilsMixin
|
|
4
|
+
from osn_selenium.instances.sync.action_chains.scroll import ScrollMixin
|
|
3
5
|
from osn_selenium.instances.sync.action_chains.hm_move import HMMoveMixin
|
|
6
|
+
from osn_selenium.instances.sync.action_chains.keyboard import KeyboardMixin
|
|
4
7
|
from osn_selenium.instances.sync.action_chains.hm_scroll import HMScrollMixin
|
|
5
8
|
from osn_selenium.abstract.instances.action_chains import AbstractActionChains
|
|
6
9
|
from osn_selenium.instances.sync.action_chains.hm_keyboard import HMKeyboardMixin
|
|
@@ -17,6 +20,9 @@ class ActionChains(
|
|
|
17
20
|
HMKeyboardMixin,
|
|
18
21
|
HMMoveMixin,
|
|
19
22
|
HMScrollMixin,
|
|
23
|
+
KeyboardMixin,
|
|
24
|
+
MoveMixin,
|
|
25
|
+
ScrollMixin,
|
|
20
26
|
AbstractActionChains,
|
|
21
27
|
):
|
|
22
28
|
"""
|
|
@@ -47,8 +47,8 @@ class BrowsingContext(UnifiedBrowsingContext, AbstractBrowsingContext):
|
|
|
47
47
|
|
|
48
48
|
UnifiedBrowsingContext.__init__(self, selenium_browsing_context=selenium_browsing_context)
|
|
49
49
|
|
|
50
|
-
def activate(self, context: str) ->
|
|
51
|
-
|
|
50
|
+
def activate(self, context: str) -> None:
|
|
51
|
+
self._activate_impl(context=context)
|
|
52
52
|
|
|
53
53
|
def add_event_handler(
|
|
54
54
|
self,
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
from typing import
|
|
1
|
+
from typing import (
|
|
2
|
+
Any,
|
|
3
|
+
Callable,
|
|
4
|
+
Dict,
|
|
5
|
+
Self
|
|
6
|
+
)
|
|
2
7
|
from osn_selenium.instances._typehints import SCRIPT_TYPEHINT
|
|
3
8
|
from osn_selenium.instances.convert import get_legacy_instance
|
|
4
9
|
from osn_selenium.instances.unified.script import UnifiedScript
|
|
@@ -38,7 +43,7 @@ class Script(UnifiedScript, AbstractScript):
|
|
|
38
43
|
def add_javascript_error_handler(self, handler: Callable[[Any], None]) -> int:
|
|
39
44
|
return self._add_javascript_error_handler_impl(handler=handler)
|
|
40
45
|
|
|
41
|
-
def execute(self, script: str, *args: Any) -> Any:
|
|
46
|
+
def execute(self, script: str, *args: Any) -> Dict[str, Any]:
|
|
42
47
|
return self._execute_impl(script, *args)
|
|
43
48
|
|
|
44
49
|
@classmethod
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
from selenium.webdriver.common.by import By
|
|
2
|
+
from osn_selenium.instances._typehints import SHADOW_ROOT_TYPEHINT
|
|
2
3
|
from typing import (
|
|
3
4
|
List,
|
|
4
5
|
Optional,
|
|
5
6
|
Self,
|
|
6
|
-
TYPE_CHECKING
|
|
7
|
+
TYPE_CHECKING,
|
|
8
|
+
Type
|
|
7
9
|
)
|
|
8
|
-
from osn_selenium.instances._typehints import SHADOW_ROOT_TYPEHINT
|
|
9
10
|
from osn_selenium.exceptions.instance import (
|
|
10
11
|
CannotConvertTypeError
|
|
11
12
|
)
|
|
@@ -14,6 +15,9 @@ from osn_selenium.abstract.instances.shadow_root import AbstractShadowRoot
|
|
|
14
15
|
from selenium.webdriver.remote.shadowroot import (
|
|
15
16
|
ShadowRoot as legacyShadowRoot
|
|
16
17
|
)
|
|
18
|
+
from selenium.webdriver.remote.webelement import (
|
|
19
|
+
WebElement as legacyWebElement
|
|
20
|
+
)
|
|
17
21
|
from osn_selenium.instances.convert import (
|
|
18
22
|
get_legacy_instance,
|
|
19
23
|
get_sync_instance_wrapper
|
|
@@ -25,6 +29,28 @@ __all__ = ["ShadowRoot"]
|
|
|
25
29
|
if TYPE_CHECKING:
|
|
26
30
|
from osn_selenium.instances.sync.web_element import WebElement
|
|
27
31
|
|
|
32
|
+
_WEB_ELEMENT_TYPE: Optional[Type["WebElement"]] = None
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _build_web_element(legacy_element: legacyWebElement):
|
|
36
|
+
"""
|
|
37
|
+
Builds a wrapped WebElement from a legacy element.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
legacy_element (legacyWebElement): The legacy Selenium WebElement instance.
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
WebElement: The wrapped WebElement instance.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
global _WEB_ELEMENT_TYPE
|
|
47
|
+
|
|
48
|
+
if _WEB_ELEMENT_TYPE is None:
|
|
49
|
+
from osn_selenium.instances.sync.web_element import WebElement
|
|
50
|
+
_WEB_ELEMENT_TYPE = WebElement
|
|
51
|
+
|
|
52
|
+
return get_sync_instance_wrapper(wrapper_class=_WEB_ELEMENT_TYPE, legacy_object=legacy_element)
|
|
53
|
+
|
|
28
54
|
|
|
29
55
|
class ShadowRoot(UnifiedShadowRoot, AbstractShadowRoot):
|
|
30
56
|
"""
|
|
@@ -47,17 +73,13 @@ class ShadowRoot(UnifiedShadowRoot, AbstractShadowRoot):
|
|
|
47
73
|
def find_element(self, by: str = By.ID, value: Optional[str] = None) -> "WebElement":
|
|
48
74
|
legacy_element = self._find_element_impl(by=by, value=value)
|
|
49
75
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return get_sync_instance_wrapper(wrapper_class=WebElement, legacy_object=legacy_element)
|
|
76
|
+
return _build_web_element(legacy_element=legacy_element)
|
|
53
77
|
|
|
54
78
|
def find_elements(self, by: str = By.ID, value: Optional[str] = None) -> List["WebElement"]:
|
|
55
79
|
legacy_elements = self._find_elements_impl(by=by, value=value)
|
|
56
80
|
|
|
57
|
-
from osn_selenium.instances.sync.web_element import WebElement
|
|
58
|
-
|
|
59
81
|
return [
|
|
60
|
-
|
|
82
|
+
_build_web_element(legacy_element=legacy_element)
|
|
61
83
|
for legacy_element in legacy_elements
|
|
62
84
|
]
|
|
63
85
|
|
|
@@ -126,7 +126,7 @@ class WebElement(UnifiedWebElement, AbstractWebElement):
|
|
|
126
126
|
|
|
127
127
|
return self.from_legacy(legacy_object=web_element)
|
|
128
128
|
|
|
129
|
-
def rect(self) -> Dict:
|
|
129
|
+
def rect(self) -> Dict[str, int]:
|
|
130
130
|
return self._rect_impl()
|
|
131
131
|
|
|
132
132
|
def screenshot(self, filename: str) -> bool:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,180 @@
|
|
|
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 SHADOW_ROOT_TYPEHINT
|
|
6
|
+
from osn_selenium.exceptions.instance import (
|
|
7
|
+
CannotConvertTypeError
|
|
8
|
+
)
|
|
9
|
+
from osn_selenium.instances.unified.shadow_root import UnifiedShadowRoot
|
|
10
|
+
from osn_selenium.abstract.instances.shadow_root import AbstractShadowRoot
|
|
11
|
+
from typing import (
|
|
12
|
+
List,
|
|
13
|
+
Optional,
|
|
14
|
+
Self,
|
|
15
|
+
TYPE_CHECKING,
|
|
16
|
+
Type,
|
|
17
|
+
Union
|
|
18
|
+
)
|
|
19
|
+
from selenium.webdriver.remote.shadowroot import (
|
|
20
|
+
ShadowRoot as legacyShadowRoot
|
|
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_bidi_instance_wrapper
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
__all__ = ["ShadowRoot"]
|
|
32
|
+
|
|
33
|
+
if TYPE_CHECKING:
|
|
34
|
+
from osn_selenium.instances.trio_bidi.web_element import WebElement
|
|
35
|
+
|
|
36
|
+
_WEB_ELEMENT_TYPE: Optional[Type["WebElement"]] = None
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _build_web_element(
|
|
40
|
+
legacy_element: legacyWebElement,
|
|
41
|
+
lock: trio.Lock,
|
|
42
|
+
limiter: trio.CapacityLimiter,
|
|
43
|
+
trio_token: Optional[trio.lowlevel.TrioToken] = None,
|
|
44
|
+
bidi_buffer_size: Union[int, float] = math.inf,
|
|
45
|
+
):
|
|
46
|
+
"""
|
|
47
|
+
Builds a wrapped WebElement from a legacy element.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
legacy_element (legacyWebElement): The legacy Selenium WebElement instance.
|
|
51
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
52
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
WebElement: The wrapped WebElement instance.
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
global _WEB_ELEMENT_TYPE
|
|
59
|
+
|
|
60
|
+
if _WEB_ELEMENT_TYPE is None:
|
|
61
|
+
from osn_selenium.instances.trio_bidi.web_element import WebElement
|
|
62
|
+
_WEB_ELEMENT_TYPE = WebElement
|
|
63
|
+
|
|
64
|
+
return get_trio_bidi_instance_wrapper(
|
|
65
|
+
wrapper_class=_WEB_ELEMENT_TYPE,
|
|
66
|
+
legacy_object=legacy_element,
|
|
67
|
+
lock=lock,
|
|
68
|
+
limiter=limiter,
|
|
69
|
+
trio_token=trio_token,
|
|
70
|
+
bidi_buffer_size=bidi_buffer_size,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class ShadowRoot(UnifiedShadowRoot, TrioBiDiMixin, AbstractShadowRoot):
|
|
75
|
+
"""
|
|
76
|
+
Wrapper for the legacy Selenium ShadowRoot instance.
|
|
77
|
+
|
|
78
|
+
Represents the root of a Shadow DOM tree, allowing element search
|
|
79
|
+
within the encapsulated shadow scope.
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
def __init__(
|
|
83
|
+
self,
|
|
84
|
+
selenium_shadow_root: legacyShadowRoot,
|
|
85
|
+
lock: trio.Lock,
|
|
86
|
+
limiter: trio.CapacityLimiter,
|
|
87
|
+
trio_token: Optional[trio.lowlevel.TrioToken] = None,
|
|
88
|
+
bidi_buffer_size: Union[int, float] = math.inf,
|
|
89
|
+
) -> None:
|
|
90
|
+
"""
|
|
91
|
+
Initializes the ShadowRoot wrapper.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
selenium_shadow_root (legacyShadowRoot): The legacy Selenium ShadowRoot instance to wrap.
|
|
95
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
96
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
97
|
+
trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
|
|
98
|
+
bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
UnifiedShadowRoot.__init__(self, selenium_shadow_root=selenium_shadow_root)
|
|
102
|
+
|
|
103
|
+
TrioBiDiMixin.__init__(
|
|
104
|
+
self,
|
|
105
|
+
lock=lock,
|
|
106
|
+
limiter=limiter,
|
|
107
|
+
token=trio_token,
|
|
108
|
+
buffer_size=bidi_buffer_size
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
async def find_element(self, by: str = By.ID, value: Optional[str] = None) -> "WebElement":
|
|
112
|
+
legacy_element = await self.sync_to_trio(sync_function=self._find_element_impl)(by=by, value=value)
|
|
113
|
+
|
|
114
|
+
return _build_web_element(
|
|
115
|
+
legacy_element=legacy_element,
|
|
116
|
+
lock=self._lock,
|
|
117
|
+
limiter=self._capacity_limiter,
|
|
118
|
+
trio_token=self._trio_token,
|
|
119
|
+
bidi_buffer_size=self._trio_bidi_buffer_size,
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
async def find_elements(self, by: str = By.ID, value: Optional[str] = None) -> List["WebElement"]:
|
|
123
|
+
legacy_elements = await self.sync_to_trio(sync_function=self._find_elements_impl)(by=by, value=value)
|
|
124
|
+
|
|
125
|
+
return [
|
|
126
|
+
_build_web_element(
|
|
127
|
+
legacy_element=legacy_element,
|
|
128
|
+
lock=self._lock,
|
|
129
|
+
limiter=self._capacity_limiter,
|
|
130
|
+
trio_token=self._trio_token,
|
|
131
|
+
bidi_buffer_size=self._trio_bidi_buffer_size,
|
|
132
|
+
)
|
|
133
|
+
for legacy_element in legacy_elements
|
|
134
|
+
]
|
|
135
|
+
|
|
136
|
+
@classmethod
|
|
137
|
+
def from_legacy(
|
|
138
|
+
cls,
|
|
139
|
+
legacy_object: SHADOW_ROOT_TYPEHINT,
|
|
140
|
+
lock: trio.Lock,
|
|
141
|
+
limiter: trio.CapacityLimiter,
|
|
142
|
+
trio_token: Optional[trio.lowlevel.TrioToken] = None,
|
|
143
|
+
bidi_buffer_size: Union[int, float] = math.inf,
|
|
144
|
+
) -> Self:
|
|
145
|
+
"""
|
|
146
|
+
Creates an instance from a legacy Selenium ShadowRoot object.
|
|
147
|
+
|
|
148
|
+
This factory method is used to wrap an existing Selenium ShadowRoot
|
|
149
|
+
instance into the new interface.
|
|
150
|
+
|
|
151
|
+
Args:
|
|
152
|
+
legacy_object (SHADOW_ROOT_TYPEHINT): The legacy Selenium ShadowRoot instance or its wrapper.
|
|
153
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
154
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
155
|
+
trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
|
|
156
|
+
bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
|
|
157
|
+
|
|
158
|
+
Returns:
|
|
159
|
+
Self: A new instance of a class implementing ShadowRoot.
|
|
160
|
+
"""
|
|
161
|
+
|
|
162
|
+
legacy_shadow_root_obj = get_legacy_instance(instance=legacy_object)
|
|
163
|
+
|
|
164
|
+
if not isinstance(legacy_shadow_root_obj, legacyShadowRoot):
|
|
165
|
+
raise CannotConvertTypeError(from_=legacyShadowRoot, to_=legacy_object)
|
|
166
|
+
|
|
167
|
+
return cls(
|
|
168
|
+
selenium_shadow_root=legacy_shadow_root_obj,
|
|
169
|
+
lock=lock,
|
|
170
|
+
limiter=limiter,
|
|
171
|
+
trio_token=trio_token,
|
|
172
|
+
bidi_buffer_size=bidi_buffer_size,
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
async def id(self) -> str:
|
|
176
|
+
return await self.sync_to_trio(sync_function=self._id_impl)()
|
|
177
|
+
|
|
178
|
+
@property
|
|
179
|
+
def legacy(self) -> legacyShadowRoot:
|
|
180
|
+
return self._legacy_impl
|
|
@@ -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)
|