osn-selenium 0.0.0__py3-none-any.whl → 1.1.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/_functions.py +84 -0
- osn_selenium/_typehints.py +19 -0
- osn_selenium/abstract/executors/cdp/__init__.py +435 -0
- osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
- osn_selenium/abstract/executors/cdp/animation.py +47 -0
- osn_selenium/abstract/executors/cdp/audits.py +39 -0
- osn_selenium/abstract/executors/cdp/autofill.py +34 -0
- osn_selenium/abstract/executors/cdp/background_service.py +22 -0
- osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
- osn_selenium/abstract/executors/cdp/browser.py +122 -0
- osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
- osn_selenium/abstract/executors/cdp/cast.py +31 -0
- osn_selenium/abstract/executors/cdp/console.py +18 -0
- osn_selenium/abstract/executors/cdp/css.py +197 -0
- osn_selenium/abstract/executors/cdp/debugger.py +198 -0
- osn_selenium/abstract/executors/cdp/device_access.py +22 -0
- osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
- osn_selenium/abstract/executors/cdp/dom.py +305 -0
- osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
- osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
- osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
- osn_selenium/abstract/executors/cdp/emulation.py +259 -0
- osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
- osn_selenium/abstract/executors/cdp/extensions.py +31 -0
- osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
- osn_selenium/abstract/executors/cdp/fetch.py +76 -0
- osn_selenium/abstract/executors/cdp/file_system.py +11 -0
- osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
- osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
- osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
- osn_selenium/abstract/executors/cdp/input.py +158 -0
- osn_selenium/abstract/executors/cdp/inspector.py +14 -0
- osn_selenium/abstract/executors/cdp/io.py +24 -0
- osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
- osn_selenium/abstract/executors/cdp/log.py +27 -0
- osn_selenium/abstract/executors/cdp/media.py +14 -0
- osn_selenium/abstract/executors/cdp/memory.py +61 -0
- osn_selenium/abstract/executors/cdp/network.py +252 -0
- osn_selenium/abstract/executors/cdp/overlay.py +166 -0
- osn_selenium/abstract/executors/cdp/page.py +347 -0
- osn_selenium/abstract/executors/cdp/performance.py +28 -0
- osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
- osn_selenium/abstract/executors/cdp/preload.py +14 -0
- osn_selenium/abstract/executors/cdp/profiler.py +54 -0
- osn_selenium/abstract/executors/cdp/pwa.py +46 -0
- osn_selenium/abstract/executors/cdp/runtime.py +176 -0
- osn_selenium/abstract/executors/cdp/schema.py +11 -0
- osn_selenium/abstract/executors/cdp/security.py +26 -0
- osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
- osn_selenium/abstract/executors/cdp/storage.py +175 -0
- osn_selenium/abstract/executors/cdp/system_info.py +24 -0
- osn_selenium/abstract/executors/cdp/target.py +125 -0
- osn_selenium/abstract/executors/cdp/tethering.py +14 -0
- osn_selenium/abstract/executors/cdp/tracing.py +48 -0
- osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
- osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
- osn_selenium/abstract/executors/cdp.py +63 -0
- osn_selenium/abstract/executors/javascript.py +203 -0
- osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
- osn_selenium/abstract/instances/action_chains/base.py +25 -0
- osn_selenium/abstract/instances/action_chains/click.py +93 -0
- osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
- osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
- osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
- osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
- osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
- osn_selenium/abstract/instances/action_chains/move.py +60 -0
- osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
- osn_selenium/abstract/instances/action_chains/utils.py +44 -0
- osn_selenium/abstract/instances/alert.py +67 -0
- osn_selenium/abstract/instances/browser.py +76 -0
- osn_selenium/abstract/instances/browsing_context.py +310 -0
- osn_selenium/abstract/instances/dialog.py +107 -0
- osn_selenium/abstract/instances/fedcm.py +133 -0
- osn_selenium/abstract/instances/mobile.py +79 -0
- osn_selenium/abstract/instances/network.py +100 -0
- osn_selenium/abstract/instances/permissions.py +52 -0
- osn_selenium/abstract/instances/script.py +109 -0
- osn_selenium/abstract/instances/shadow_root.py +81 -0
- osn_selenium/abstract/instances/storage.py +98 -0
- osn_selenium/abstract/instances/switch_to.py +104 -0
- osn_selenium/abstract/instances/web_driver_wait.py +57 -0
- osn_selenium/abstract/instances/web_element.py +395 -0
- osn_selenium/abstract/instances/web_extension.py +70 -0
- osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
- osn_selenium/abstract/webdriver/blink/base.py +80 -0
- osn_selenium/abstract/webdriver/blink/casting.py +82 -0
- osn_selenium/abstract/webdriver/blink/features.py +51 -0
- osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
- osn_selenium/abstract/webdriver/blink/logging.py +40 -0
- osn_selenium/abstract/webdriver/blink/network.py +45 -0
- osn_selenium/abstract/webdriver/blink/settings.py +68 -0
- osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
- osn_selenium/abstract/webdriver/chrome/base.py +36 -0
- osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
- osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
- osn_selenium/abstract/webdriver/core/__init__.py +16 -0
- osn_selenium/abstract/webdriver/core/actions.py +58 -0
- osn_selenium/abstract/webdriver/core/auth.py +145 -0
- osn_selenium/abstract/webdriver/core/base.py +298 -0
- osn_selenium/abstract/webdriver/core/capture.py +84 -0
- osn_selenium/abstract/webdriver/core/components.py +82 -0
- osn_selenium/abstract/webdriver/core/devtools.py +69 -0
- osn_selenium/abstract/webdriver/core/element.py +55 -0
- osn_selenium/abstract/webdriver/core/file.py +82 -0
- osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
- osn_selenium/abstract/webdriver/core/navigation.py +65 -0
- osn_selenium/abstract/webdriver/core/script.py +88 -0
- osn_selenium/abstract/webdriver/core/settings.py +43 -0
- osn_selenium/abstract/webdriver/core/storage.py +81 -0
- osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
- osn_selenium/abstract/webdriver/core/window.py +237 -0
- osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
- osn_selenium/abstract/webdriver/edge/base.py +36 -0
- osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
- osn_selenium/abstract/webdriver/edge/settings.py +110 -0
- osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
- osn_selenium/abstract/webdriver/yandex/base.py +18 -0
- osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
- osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
- osn_selenium/base_mixin.py +122 -0
- osn_selenium/browsers_handler/__init__.py +47 -17
- osn_selenium/browsers_handler/_linux.py +226 -0
- osn_selenium/browsers_handler/_windows.py +21 -14
- osn_selenium/browsers_handler/{types.py → models.py} +5 -2
- osn_selenium/dev_tools/_decorators.py +149 -0
- osn_selenium/dev_tools/_exception_helpers.py +116 -0
- osn_selenium/dev_tools/_functions.py +174 -0
- osn_selenium/dev_tools/_system_utils.py +35 -0
- osn_selenium/dev_tools/_typehints.py +35 -0
- osn_selenium/dev_tools/_validators.py +227 -0
- osn_selenium/dev_tools/_wrappers.py +92 -0
- osn_selenium/dev_tools/domains/__init__.py +7 -40
- osn_selenium/dev_tools/domains/abstract.py +98 -254
- osn_selenium/dev_tools/domains/fetch.py +229 -906
- osn_selenium/dev_tools/domains_default/fetch.py +40 -28
- osn_selenium/dev_tools/filters.py +40 -0
- osn_selenium/dev_tools/logger/main.py +214 -0
- osn_selenium/dev_tools/logger/models.py +232 -0
- osn_selenium/dev_tools/logger/target.py +278 -0
- osn_selenium/dev_tools/manager/__init__.py +16 -0
- osn_selenium/dev_tools/manager/base.py +124 -0
- osn_selenium/dev_tools/manager/lifecycle.py +236 -0
- osn_selenium/dev_tools/manager/logging.py +153 -0
- osn_selenium/dev_tools/manager/settings.py +89 -0
- osn_selenium/dev_tools/manager/targets.py +175 -0
- osn_selenium/dev_tools/models.py +49 -0
- osn_selenium/dev_tools/settings.py +139 -0
- osn_selenium/dev_tools/target/__init__.py +16 -0
- osn_selenium/dev_tools/target/base.py +427 -0
- osn_selenium/dev_tools/target/detach.py +54 -0
- osn_selenium/dev_tools/target/discovery.py +112 -0
- osn_selenium/dev_tools/target/events.py +120 -0
- osn_selenium/dev_tools/target/fingerprint.py +126 -0
- osn_selenium/dev_tools/target/lifecycle.py +184 -0
- osn_selenium/dev_tools/target/logging.py +163 -0
- osn_selenium/exceptions/__init__.py +1 -0
- osn_selenium/exceptions/base.py +9 -0
- osn_selenium/exceptions/configuration.py +84 -0
- osn_selenium/exceptions/dependencies.py +60 -0
- osn_selenium/exceptions/devtools.py +114 -0
- osn_selenium/exceptions/flags.py +45 -0
- osn_selenium/exceptions/instance.py +92 -0
- osn_selenium/exceptions/javascript.py +31 -0
- osn_selenium/exceptions/logic.py +31 -0
- osn_selenium/exceptions/path.py +77 -0
- osn_selenium/exceptions/platform.py +33 -0
- osn_selenium/exceptions/protocol.py +86 -0
- osn_selenium/exceptions/webdriver.py +44 -0
- osn_selenium/exceptions/window.py +63 -0
- osn_selenium/executors/__init__.py +1 -0
- osn_selenium/executors/sync/__init__.py +1 -0
- osn_selenium/executors/sync/cdp/__init__.py +550 -0
- osn_selenium/executors/sync/cdp/accessibility.py +74 -0
- osn_selenium/executors/sync/cdp/animation.py +50 -0
- osn_selenium/executors/sync/cdp/audits.py +48 -0
- osn_selenium/executors/sync/cdp/autofill.py +39 -0
- osn_selenium/executors/sync/cdp/background_service.py +30 -0
- osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
- osn_selenium/executors/sync/cdp/browser.py +131 -0
- osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
- osn_selenium/executors/sync/cdp/cast.py +38 -0
- osn_selenium/executors/sync/cdp/console.py +24 -0
- osn_selenium/executors/sync/cdp/css.py +187 -0
- osn_selenium/executors/sync/cdp/debugger.py +206 -0
- osn_selenium/executors/sync/cdp/device_access.py +27 -0
- osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
- osn_selenium/executors/sync/cdp/dom.py +310 -0
- osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
- osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
- osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
- osn_selenium/executors/sync/cdp/emulation.py +270 -0
- osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
- osn_selenium/executors/sync/cdp/extensions.py +39 -0
- osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
- osn_selenium/executors/sync/cdp/fetch.py +96 -0
- osn_selenium/executors/sync/cdp/file_system.py +18 -0
- osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
- osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
- osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
- osn_selenium/executors/sync/cdp/input.py +233 -0
- osn_selenium/executors/sync/cdp/inspector.py +21 -0
- osn_selenium/executors/sync/cdp/io.py +33 -0
- osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
- osn_selenium/executors/sync/cdp/log.py +35 -0
- osn_selenium/executors/sync/cdp/media.py +21 -0
- osn_selenium/executors/sync/cdp/memory.py +62 -0
- osn_selenium/executors/sync/cdp/network.py +287 -0
- osn_selenium/executors/sync/cdp/overlay.py +174 -0
- osn_selenium/executors/sync/cdp/page.py +365 -0
- osn_selenium/executors/sync/cdp/performance.py +33 -0
- osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
- osn_selenium/executors/sync/cdp/preload.py +21 -0
- osn_selenium/executors/sync/cdp/profiler.py +58 -0
- osn_selenium/executors/sync/cdp/pwa.py +55 -0
- osn_selenium/executors/sync/cdp/runtime.py +221 -0
- osn_selenium/executors/sync/cdp/schema.py +23 -0
- osn_selenium/executors/sync/cdp/security.py +30 -0
- osn_selenium/executors/sync/cdp/service_worker.py +56 -0
- osn_selenium/executors/sync/cdp/storage.py +151 -0
- osn_selenium/executors/sync/cdp/system_info.py +30 -0
- osn_selenium/executors/sync/cdp/target.py +147 -0
- osn_selenium/executors/sync/cdp/tethering.py +21 -0
- osn_selenium/executors/sync/cdp/tracing.py +62 -0
- osn_selenium/executors/sync/cdp/web_audio.py +24 -0
- osn_selenium/executors/sync/cdp/web_authn.py +82 -0
- osn_selenium/executors/sync/cdp.py +100 -0
- osn_selenium/executors/sync/javascript.py +79 -0
- osn_selenium/executors/trio_threads/__init__.py +1 -0
- osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
- osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
- osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
- osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
- osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
- osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
- osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
- osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
- osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
- osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
- osn_selenium/executors/trio_threads/cdp/console.py +33 -0
- osn_selenium/executors/trio_threads/cdp/css.py +196 -0
- osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
- osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
- osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
- osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
- osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
- osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
- osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
- osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
- osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
- osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
- osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
- osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
- osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
- osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
- osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
- osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
- osn_selenium/executors/trio_threads/cdp/input.py +242 -0
- osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
- osn_selenium/executors/trio_threads/cdp/io.py +42 -0
- osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
- osn_selenium/executors/trio_threads/cdp/log.py +44 -0
- osn_selenium/executors/trio_threads/cdp/media.py +30 -0
- osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
- osn_selenium/executors/trio_threads/cdp/network.py +296 -0
- osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
- osn_selenium/executors/trio_threads/cdp/page.py +374 -0
- osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
- osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
- osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
- osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
- osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
- osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
- osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
- osn_selenium/executors/trio_threads/cdp/security.py +43 -0
- osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
- osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
- osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
- osn_selenium/executors/trio_threads/cdp/target.py +156 -0
- osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
- osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
- osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
- osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
- osn_selenium/executors/trio_threads/cdp.py +104 -0
- osn_selenium/executors/trio_threads/javascript.py +90 -0
- osn_selenium/executors/unified/__init__.py +1 -0
- osn_selenium/executors/unified/cdp/__init__.py +1 -0
- osn_selenium/executors/unified/cdp/accessibility.py +81 -0
- osn_selenium/executors/unified/cdp/animation.py +50 -0
- osn_selenium/executors/unified/cdp/audits.py +45 -0
- osn_selenium/executors/unified/cdp/autofill.py +41 -0
- osn_selenium/executors/unified/cdp/background_service.py +24 -0
- osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
- osn_selenium/executors/unified/cdp/browser.py +143 -0
- osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
- osn_selenium/executors/unified/cdp/cast.py +32 -0
- osn_selenium/executors/unified/cdp/console.py +18 -0
- osn_selenium/executors/unified/cdp/css.py +237 -0
- osn_selenium/executors/unified/cdp/debugger.py +243 -0
- osn_selenium/executors/unified/cdp/device_access.py +21 -0
- osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
- osn_selenium/executors/unified/cdp/dom.py +380 -0
- osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
- osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
- osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
- osn_selenium/executors/unified/cdp/emulation.py +312 -0
- osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
- osn_selenium/executors/unified/cdp/extensions.py +45 -0
- osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
- osn_selenium/executors/unified/cdp/fetch.py +111 -0
- osn_selenium/executors/unified/cdp/file_system.py +15 -0
- osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
- osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
- osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
- osn_selenium/executors/unified/cdp/input.py +254 -0
- osn_selenium/executors/unified/cdp/inspector.py +15 -0
- osn_selenium/executors/unified/cdp/io.py +29 -0
- osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
- osn_selenium/executors/unified/cdp/log.py +29 -0
- osn_selenium/executors/unified/cdp/media.py +15 -0
- osn_selenium/executors/unified/cdp/memory.py +59 -0
- osn_selenium/executors/unified/cdp/network.py +323 -0
- osn_selenium/executors/unified/cdp/overlay.py +209 -0
- osn_selenium/executors/unified/cdp/page.py +410 -0
- osn_selenium/executors/unified/cdp/performance.py +27 -0
- osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
- osn_selenium/executors/unified/cdp/preload.py +15 -0
- osn_selenium/executors/unified/cdp/profiler.py +55 -0
- osn_selenium/executors/unified/cdp/pwa.py +55 -0
- osn_selenium/executors/unified/cdp/runtime.py +245 -0
- osn_selenium/executors/unified/cdp/schema.py +17 -0
- osn_selenium/executors/unified/cdp/security.py +27 -0
- osn_selenium/executors/unified/cdp/service_worker.py +62 -0
- osn_selenium/executors/unified/cdp/storage.py +178 -0
- osn_selenium/executors/unified/cdp/system_info.py +24 -0
- osn_selenium/executors/unified/cdp/target.py +165 -0
- osn_selenium/executors/unified/cdp/tethering.py +15 -0
- osn_selenium/executors/unified/cdp/tracing.py +62 -0
- osn_selenium/executors/unified/cdp/web_audio.py +18 -0
- osn_selenium/executors/unified/cdp/web_authn.py +103 -0
- osn_selenium/executors/unified/javascript.py +104 -0
- osn_selenium/flags/__init__.py +1 -0
- osn_selenium/flags/_functions.py +45 -0
- osn_selenium/flags/_typehints.py +34 -0
- osn_selenium/flags/_validators.py +101 -0
- osn_selenium/{webdrivers/BaseDriver/flags.py → flags/base.py} +159 -245
- osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +130 -374
- osn_selenium/flags/chrome.py +259 -0
- osn_selenium/flags/edge.py +259 -0
- osn_selenium/flags/models/__init__.py +1 -0
- osn_selenium/flags/models/base.py +130 -0
- osn_selenium/flags/models/blink.py +263 -0
- osn_selenium/{webdrivers/Chrome/flags.py → flags/models/chrome.py} +25 -75
- osn_selenium/{webdrivers/Edge/flags.py → flags/models/edge.py} +25 -75
- osn_selenium/flags/models/values.py +44 -0
- osn_selenium/{webdrivers/Yandex/flags.py → flags/models/yandex.py} +26 -76
- osn_selenium/flags/yandex.py +259 -0
- osn_selenium/instances/__init__.py +1 -0
- osn_selenium/instances/_functions.py +242 -0
- osn_selenium/instances/_typehints.py +148 -0
- osn_selenium/instances/_utils.py +143 -0
- osn_selenium/instances/convert.py +287 -0
- osn_selenium/instances/protocols.py +105 -0
- osn_selenium/instances/sync/__init__.py +1 -0
- osn_selenium/instances/sync/action_chains/__init__.py +32 -0
- osn_selenium/instances/sync/action_chains/base.py +74 -0
- osn_selenium/instances/sync/action_chains/click.py +61 -0
- osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
- osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
- osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
- osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
- osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
- osn_selenium/instances/sync/action_chains/move.py +46 -0
- osn_selenium/instances/sync/action_chains/scroll.py +43 -0
- osn_selenium/instances/sync/action_chains/utils.py +30 -0
- osn_selenium/instances/sync/alert.py +69 -0
- osn_selenium/instances/sync/browser.py +72 -0
- osn_selenium/instances/sync/browsing_context.py +193 -0
- osn_selenium/instances/sync/dialog.py +81 -0
- osn_selenium/instances/sync/fedcm.py +92 -0
- osn_selenium/instances/sync/mobile.py +75 -0
- osn_selenium/instances/sync/network.py +90 -0
- osn_selenium/instances/sync/permissions.py +80 -0
- osn_selenium/instances/sync/script.py +77 -0
- osn_selenium/instances/sync/shadow_root.py +113 -0
- osn_selenium/instances/sync/storage.py +91 -0
- osn_selenium/instances/sync/switch_to.py +92 -0
- osn_selenium/instances/sync/web_driver_wait.py +83 -0
- osn_selenium/instances/sync/web_element.py +179 -0
- osn_selenium/instances/sync/web_extension.py +77 -0
- osn_selenium/instances/trio_threads/__init__.py +1 -0
- osn_selenium/instances/trio_threads/action_chains/__init__.py +32 -0
- osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
- osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
- osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
- osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
- osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
- osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
- osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
- osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
- osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
- osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
- osn_selenium/instances/trio_threads/alert.py +87 -0
- osn_selenium/instances/trio_threads/browser.py +90 -0
- osn_selenium/instances/trio_threads/browsing_context.py +216 -0
- osn_selenium/instances/trio_threads/dialog.py +99 -0
- osn_selenium/instances/trio_threads/fedcm.py +110 -0
- osn_selenium/instances/trio_threads/mobile.py +93 -0
- osn_selenium/instances/trio_threads/network.py +108 -0
- osn_selenium/instances/trio_threads/permissions.py +102 -0
- osn_selenium/instances/trio_threads/script.py +95 -0
- osn_selenium/instances/trio_threads/shadow_root.py +154 -0
- osn_selenium/instances/trio_threads/storage.py +109 -0
- osn_selenium/instances/trio_threads/switch_to.py +124 -0
- osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
- osn_selenium/instances/trio_threads/web_element.py +217 -0
- osn_selenium/instances/trio_threads/web_extension.py +99 -0
- osn_selenium/instances/unified/__init__.py +1 -0
- osn_selenium/instances/unified/action_chains/__init__.py +22 -0
- osn_selenium/instances/unified/action_chains/base.py +31 -0
- osn_selenium/instances/unified/action_chains/click.py +27 -0
- osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
- osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
- osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
- osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
- osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
- osn_selenium/instances/unified/action_chains/move.py +24 -0
- osn_selenium/instances/unified/action_chains/scroll.py +21 -0
- osn_selenium/instances/unified/action_chains/utils.py +19 -0
- osn_selenium/instances/unified/alert.py +29 -0
- osn_selenium/instances/unified/browser.py +33 -0
- osn_selenium/instances/unified/browsing_context.py +151 -0
- osn_selenium/instances/unified/dialog.py +42 -0
- osn_selenium/instances/unified/fedcm.py +48 -0
- osn_selenium/instances/unified/mobile.py +36 -0
- osn_selenium/instances/unified/network.py +50 -0
- osn_selenium/instances/unified/permissions.py +43 -0
- osn_selenium/instances/unified/script.py +38 -0
- osn_selenium/instances/unified/shadow_root.py +46 -0
- osn_selenium/instances/unified/storage.py +48 -0
- osn_selenium/instances/unified/switch_to.py +49 -0
- osn_selenium/instances/unified/web_driver_wait.py +45 -0
- osn_selenium/instances/unified/web_element.py +145 -0
- osn_selenium/instances/unified/web_extension.py +38 -0
- osn_selenium/javascript/__init__.py +1 -0
- osn_selenium/javascript/_functions.py +63 -0
- osn_selenium/javascript/fingerprint/__init__.py +120 -0
- osn_selenium/javascript/fingerprint/_decorators.py +41 -0
- osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
- osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
- osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
- osn_selenium/javascript/fingerprint/_functions.py +35 -0
- osn_selenium/javascript/fingerprint/_typehints.py +27 -0
- osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
- osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
- osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
- osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
- osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
- osn_selenium/javascript/fingerprint/registry/models.py +41 -0
- osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
- osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
- osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
- osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
- osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
- osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
- osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
- osn_selenium/javascript/functions.py +44 -0
- osn_selenium/javascript/models.py +35 -0
- osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
- osn_selenium/models.py +94 -0
- osn_selenium/trio_threads_mixin.py +159 -0
- osn_selenium/webdrivers/_args_helpers.py +181 -0
- osn_selenium/webdrivers/_bridges.py +57 -0
- osn_selenium/webdrivers/_decorators.py +83 -0
- osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
- osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
- osn_selenium/webdrivers/_executable_tables/models.py +19 -0
- osn_selenium/webdrivers/_typehints.py +10 -0
- osn_selenium/webdrivers/protocols.py +50 -0
- osn_selenium/webdrivers/sync/__init__.py +1 -0
- osn_selenium/webdrivers/sync/blink/__init__.py +124 -0
- osn_selenium/webdrivers/sync/blink/base.py +140 -0
- osn_selenium/webdrivers/sync/blink/casting.py +34 -0
- osn_selenium/webdrivers/sync/blink/features.py +28 -0
- osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
- osn_selenium/webdrivers/sync/blink/logging.py +25 -0
- osn_selenium/webdrivers/sync/blink/network.py +28 -0
- osn_selenium/webdrivers/sync/blink/settings.py +63 -0
- osn_selenium/webdrivers/sync/chrome/__init__.py +102 -0
- osn_selenium/webdrivers/sync/chrome/base.py +118 -0
- osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
- osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
- osn_selenium/webdrivers/sync/core/__init__.py +100 -0
- osn_selenium/webdrivers/sync/core/actions.py +59 -0
- osn_selenium/webdrivers/sync/core/auth.py +77 -0
- osn_selenium/webdrivers/sync/core/base.py +175 -0
- osn_selenium/webdrivers/sync/core/capture.py +37 -0
- osn_selenium/webdrivers/sync/core/comonents.py +57 -0
- osn_selenium/webdrivers/sync/core/devtools.py +47 -0
- osn_selenium/webdrivers/sync/core/element.py +42 -0
- osn_selenium/webdrivers/sync/core/file.py +40 -0
- osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
- osn_selenium/webdrivers/sync/core/navigation.py +36 -0
- osn_selenium/webdrivers/sync/core/script.py +53 -0
- osn_selenium/webdrivers/sync/core/settings.py +35 -0
- osn_selenium/webdrivers/sync/core/storage.py +48 -0
- osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
- osn_selenium/webdrivers/sync/core/window.py +99 -0
- osn_selenium/webdrivers/sync/edge/__init__.py +102 -0
- osn_selenium/webdrivers/sync/edge/base.py +114 -0
- osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
- osn_selenium/webdrivers/sync/edge/settings.py +58 -0
- osn_selenium/webdrivers/sync/yandex/__init__.py +102 -0
- osn_selenium/webdrivers/sync/yandex/base.py +111 -0
- osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
- osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
- osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
- osn_selenium/webdrivers/trio_threads/blink/__init__.py +134 -0
- osn_selenium/webdrivers/trio_threads/blink/base.py +143 -0
- osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
- osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
- osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
- osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
- osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
- osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/chrome/__init__.py +114 -0
- osn_selenium/webdrivers/trio_threads/chrome/base.py +119 -0
- osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
- osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/core/__init__.py +115 -0
- osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
- osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
- osn_selenium/webdrivers/trio_threads/core/base.py +199 -0
- osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
- osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
- osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
- osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
- osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
- osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
- osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
- osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
- osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
- osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
- osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
- osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
- osn_selenium/webdrivers/trio_threads/edge/__init__.py +114 -0
- osn_selenium/webdrivers/trio_threads/edge/base.py +115 -0
- osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
- osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/yandex/__init__.py +114 -0
- osn_selenium/webdrivers/trio_threads/yandex/base.py +112 -0
- osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
- osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
- osn_selenium/webdrivers/unified/__init__.py +1 -0
- osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
- osn_selenium/webdrivers/unified/blink/base.py +135 -0
- osn_selenium/webdrivers/unified/blink/casting.py +30 -0
- osn_selenium/webdrivers/unified/blink/features.py +22 -0
- osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
- osn_selenium/webdrivers/unified/blink/logging.py +18 -0
- osn_selenium/webdrivers/unified/blink/network.py +22 -0
- osn_selenium/webdrivers/unified/blink/settings.py +86 -0
- osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
- osn_selenium/webdrivers/unified/chrome/base.py +58 -0
- osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
- osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
- osn_selenium/webdrivers/unified/core/__init__.py +1 -0
- osn_selenium/webdrivers/unified/core/actions.py +43 -0
- osn_selenium/webdrivers/unified/core/auth.py +70 -0
- osn_selenium/webdrivers/unified/core/base.py +139 -0
- osn_selenium/webdrivers/unified/core/capture.py +32 -0
- osn_selenium/webdrivers/unified/core/components.py +32 -0
- osn_selenium/webdrivers/unified/core/devtools.py +35 -0
- osn_selenium/webdrivers/unified/core/element.py +24 -0
- osn_selenium/webdrivers/unified/core/file.py +35 -0
- osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
- osn_selenium/webdrivers/unified/core/navigation.py +31 -0
- osn_selenium/webdrivers/unified/core/script.py +32 -0
- osn_selenium/webdrivers/unified/core/settings.py +44 -0
- osn_selenium/webdrivers/unified/core/storage.py +37 -0
- osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
- osn_selenium/webdrivers/unified/core/window.py +135 -0
- osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
- osn_selenium/webdrivers/unified/edge/base.py +56 -0
- osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
- osn_selenium/webdrivers/unified/edge/settings.py +48 -0
- osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
- osn_selenium/webdrivers/unified/yandex/base.py +58 -0
- osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
- osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
- osn_selenium-1.1.0.dist-info/METADATA +252 -0
- osn_selenium-1.1.0.dist-info/RECORD +615 -0
- {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/WHEEL +1 -1
- osn_selenium/captcha_workers/__init__.py +0 -26
- osn_selenium/dev_tools/_types.py +0 -22
- osn_selenium/dev_tools/errors.py +0 -89
- osn_selenium/dev_tools/logger.py +0 -558
- osn_selenium/dev_tools/manager.py +0 -1551
- osn_selenium/dev_tools/utils.py +0 -509
- osn_selenium/errors.py +0 -16
- osn_selenium/types.py +0 -118
- osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
- osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
- osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
- osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
- osn_selenium/webdrivers/Blink/protocols.py +0 -330
- osn_selenium/webdrivers/Blink/webdriver.py +0 -637
- osn_selenium/webdrivers/Chrome/protocols.py +0 -228
- osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
- osn_selenium/webdrivers/Edge/protocols.py +0 -228
- osn_selenium/webdrivers/Edge/webdriver.py +0 -394
- osn_selenium/webdrivers/Yandex/protocols.py +0 -211
- osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
- osn_selenium/webdrivers/_functions.py +0 -504
- osn_selenium/webdrivers/types.py +0 -390
- osn_selenium-0.0.0.dist-info/METADATA +0 -710
- osn_selenium-0.0.0.dist-info/RECORD +0 -57
- /osn_selenium/{webdrivers/BaseDriver → abstract}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Blink → abstract/executors}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Chrome → abstract/instances}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Edge → abstract/webdriver}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Yandex → dev_tools/logger}/__init__.py +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/check_element_in_viewport.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_document_scroll_size.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_css.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_rect_in_viewport.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_position.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_rect.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_size.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/open_new_tab.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/stop_window_loading.js +0 -0
- {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from typing import (
|
|
3
|
+
Callable,
|
|
4
|
+
Self,
|
|
5
|
+
TypeVar
|
|
6
|
+
)
|
|
7
|
+
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
8
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
9
|
+
from osn_selenium.exceptions.instance import (
|
|
10
|
+
CannotConvertTypeError
|
|
11
|
+
)
|
|
12
|
+
from osn_selenium.instances._typehints import (
|
|
13
|
+
WebDriverWaitInputType
|
|
14
|
+
)
|
|
15
|
+
from osn_selenium.instances.unified.web_driver_wait import UnifiedWebDriverWait
|
|
16
|
+
from selenium.webdriver.support.wait import (
|
|
17
|
+
WebDriverWait as legacyWebDriverWait
|
|
18
|
+
)
|
|
19
|
+
from osn_selenium.abstract.instances.web_driver_wait import (
|
|
20
|
+
AbstractWebDriverWait
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
__all__ = ["OUTPUT", "WebDriverWait"]
|
|
25
|
+
|
|
26
|
+
OUTPUT = TypeVar("OUTPUT")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class WebDriverWait(UnifiedWebDriverWait, TrioThreadMixin, AbstractWebDriverWait):
|
|
30
|
+
"""
|
|
31
|
+
Wrapper for the legacy Selenium WebDriverWait instance.
|
|
32
|
+
|
|
33
|
+
Provides conditional waiting functionality, pausing execution until
|
|
34
|
+
specific conditions (expected conditions) are met or a timeout occurs.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
def __init__(
|
|
38
|
+
self,
|
|
39
|
+
selenium_webdriver_wait: legacyWebDriverWait,
|
|
40
|
+
lock: trio.Lock,
|
|
41
|
+
limiter: trio.CapacityLimiter,
|
|
42
|
+
) -> None:
|
|
43
|
+
"""
|
|
44
|
+
Initializes the WebDriverWait wrapper.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
selenium_webdriver_wait (legacyWebDriverWait): The legacy Selenium WebDriverWait instance to wrap.
|
|
48
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
49
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
UnifiedWebDriverWait.__init__(self, selenium_webdriver_wait=selenium_webdriver_wait)
|
|
53
|
+
|
|
54
|
+
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
55
|
+
|
|
56
|
+
@classmethod
|
|
57
|
+
def from_legacy(
|
|
58
|
+
cls,
|
|
59
|
+
legacy_object: legacyWebDriverWait,
|
|
60
|
+
lock: trio.Lock,
|
|
61
|
+
limiter: trio.CapacityLimiter,
|
|
62
|
+
) -> Self:
|
|
63
|
+
"""
|
|
64
|
+
Creates a WebDriverWait wrapper instance from a legacy Selenium object.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
legacy_object (legacyWebDriverWait): The legacy object to convert.
|
|
68
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
69
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
Self: An instance of the WebDriverWait wrapper.
|
|
73
|
+
|
|
74
|
+
Raises:
|
|
75
|
+
CannotConvertTypeError: If the provided object cannot be converted to legacyWebDriverWait.
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
legacy_wait_obj = get_legacy_instance(instance=legacy_object)
|
|
79
|
+
|
|
80
|
+
if not isinstance(legacy_wait_obj, legacyWebDriverWait):
|
|
81
|
+
raise CannotConvertTypeError(from_=legacyWebDriverWait, to_=legacy_object)
|
|
82
|
+
|
|
83
|
+
return cls(selenium_webdriver_wait=legacy_wait_obj, lock=lock, limiter=limiter)
|
|
84
|
+
|
|
85
|
+
@property
|
|
86
|
+
def legacy(self) -> legacyWebDriverWait:
|
|
87
|
+
return self._legacy_impl
|
|
88
|
+
|
|
89
|
+
async def until(
|
|
90
|
+
self,
|
|
91
|
+
method: Callable[[WebDriverWaitInputType], OUTPUT],
|
|
92
|
+
message: str = ""
|
|
93
|
+
) -> OUTPUT:
|
|
94
|
+
return await self.sync_to_trio(sync_function=self._until_impl)(method=method, message=message)
|
|
95
|
+
|
|
96
|
+
async def until_not(
|
|
97
|
+
self,
|
|
98
|
+
method: Callable[[WebDriverWaitInputType], OUTPUT],
|
|
99
|
+
message: str = ""
|
|
100
|
+
) -> OUTPUT:
|
|
101
|
+
return await self.sync_to_trio(sync_function=self._until_not_impl)(method=method, message=message)
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from selenium.webdriver.common.by import By
|
|
3
|
+
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
4
|
+
from osn_selenium.instances._typehints import WEB_ELEMENT_TYPEHINT
|
|
5
|
+
from typing import (
|
|
6
|
+
Any,
|
|
7
|
+
Dict,
|
|
8
|
+
Iterable,
|
|
9
|
+
List,
|
|
10
|
+
Optional,
|
|
11
|
+
Self
|
|
12
|
+
)
|
|
13
|
+
from osn_selenium.instances.trio_threads.shadow_root import ShadowRoot
|
|
14
|
+
from osn_selenium.exceptions.instance import (
|
|
15
|
+
CannotConvertTypeError
|
|
16
|
+
)
|
|
17
|
+
from osn_selenium.instances.unified.web_element import UnifiedWebElement
|
|
18
|
+
from osn_selenium.abstract.instances.web_element import AbstractWebElement
|
|
19
|
+
from osn_selenium.instances.trio_threads.web_driver_wait import WebDriverWait
|
|
20
|
+
from selenium.webdriver.remote.webelement import (
|
|
21
|
+
WebElement as legacyWebElement
|
|
22
|
+
)
|
|
23
|
+
from osn_selenium.instances.convert import (
|
|
24
|
+
get_legacy_instance,
|
|
25
|
+
get_trio_thread_instance_wrapper
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
__all__ = ["WebElement"]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class WebElement(UnifiedWebElement, TrioThreadMixin, AbstractWebElement):
|
|
33
|
+
"""
|
|
34
|
+
Represents an HTML element in the DOM, offering methods for interaction (click, type),
|
|
35
|
+
property retrieval, and finding child elements.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(
|
|
39
|
+
self,
|
|
40
|
+
selenium_web_element: legacyWebElement,
|
|
41
|
+
lock: trio.Lock,
|
|
42
|
+
limiter: trio.CapacityLimiter,
|
|
43
|
+
) -> None:
|
|
44
|
+
"""
|
|
45
|
+
Initializes the WebElement wrapper.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
selenium_web_element (legacyWebElement): The legacy Selenium WebElement instance to wrap.
|
|
49
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
50
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
UnifiedWebElement.__init__(self, selenium_web_element=selenium_web_element)
|
|
54
|
+
|
|
55
|
+
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
56
|
+
|
|
57
|
+
async def accessible_name(self) -> str:
|
|
58
|
+
return await self.sync_to_trio(sync_function=self._accessible_name_impl)()
|
|
59
|
+
|
|
60
|
+
async def aria_role(self) -> str:
|
|
61
|
+
return await self.sync_to_trio(sync_function=self._aria_role_impl)()
|
|
62
|
+
|
|
63
|
+
async def clear(self) -> None:
|
|
64
|
+
await self.sync_to_trio(sync_function=self._clear_impl)()
|
|
65
|
+
|
|
66
|
+
async def click(self) -> None:
|
|
67
|
+
await self.sync_to_trio(sync_function=self._click_impl)()
|
|
68
|
+
|
|
69
|
+
async def find_element(self, by: str = By.ID, value: Any = None) -> Self:
|
|
70
|
+
web_element = await self.sync_to_trio(sync_function=self._find_element_impl)(by=by, value=value)
|
|
71
|
+
|
|
72
|
+
return get_trio_thread_instance_wrapper(
|
|
73
|
+
wrapper_class=self.__class__,
|
|
74
|
+
legacy_object=web_element,
|
|
75
|
+
lock=self._lock,
|
|
76
|
+
limiter=self._capacity_limiter
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
async def find_elements(self, by: str = By.ID, value: Any = None) -> List[Self]:
|
|
80
|
+
web_elements = await self.sync_to_trio(sync_function=self._find_elements_impl)(by=by, value=value)
|
|
81
|
+
|
|
82
|
+
return [
|
|
83
|
+
get_trio_thread_instance_wrapper(
|
|
84
|
+
wrapper_class=self.__class__,
|
|
85
|
+
legacy_object=web_element,
|
|
86
|
+
lock=self._lock,
|
|
87
|
+
limiter=self._capacity_limiter,
|
|
88
|
+
)
|
|
89
|
+
for web_element in web_elements
|
|
90
|
+
]
|
|
91
|
+
|
|
92
|
+
async def get_attribute(self, name: str) -> Optional[str]:
|
|
93
|
+
return await self.sync_to_trio(sync_function=self._get_attribute_impl)(name=name)
|
|
94
|
+
|
|
95
|
+
async def get_dom_attribute(self, name: str) -> Optional[str]:
|
|
96
|
+
return await self.sync_to_trio(sync_function=self._get_dom_attribute_impl)(name=name)
|
|
97
|
+
|
|
98
|
+
async def get_property(self, name: str) -> Any:
|
|
99
|
+
return await self.sync_to_trio(sync_function=self._get_property_impl)(name=name)
|
|
100
|
+
|
|
101
|
+
async def id(self) -> str:
|
|
102
|
+
return await self.sync_to_trio(sync_function=self._id_impl)()
|
|
103
|
+
|
|
104
|
+
async def is_displayed(self) -> bool:
|
|
105
|
+
return await self.sync_to_trio(sync_function=self._is_displayed_impl)()
|
|
106
|
+
|
|
107
|
+
async def is_enabled(self) -> bool:
|
|
108
|
+
return await self.sync_to_trio(sync_function=self._is_enabled_impl)()
|
|
109
|
+
|
|
110
|
+
async def is_selected(self) -> bool:
|
|
111
|
+
return await self.sync_to_trio(sync_function=self._is_selected_impl)()
|
|
112
|
+
|
|
113
|
+
@property
|
|
114
|
+
def legacy(self) -> legacyWebElement:
|
|
115
|
+
return self._legacy_impl
|
|
116
|
+
|
|
117
|
+
async def location(self) -> Dict:
|
|
118
|
+
return await self.sync_to_trio(sync_function=self._location_impl)()
|
|
119
|
+
|
|
120
|
+
async def location_once_scrolled_into_view(self) -> Dict:
|
|
121
|
+
return await self.sync_to_trio(sync_function=self._location_once_scrolled_into_view_impl)()
|
|
122
|
+
|
|
123
|
+
@classmethod
|
|
124
|
+
def from_legacy(
|
|
125
|
+
cls,
|
|
126
|
+
legacy_object: WEB_ELEMENT_TYPEHINT,
|
|
127
|
+
lock: trio.Lock,
|
|
128
|
+
limiter: trio.CapacityLimiter
|
|
129
|
+
) -> Self:
|
|
130
|
+
"""
|
|
131
|
+
Creates an instance from a legacy Selenium WebElement object.
|
|
132
|
+
|
|
133
|
+
This factory method is used to wrap an existing Selenium WebElement
|
|
134
|
+
instance into the new interface.
|
|
135
|
+
|
|
136
|
+
Args:
|
|
137
|
+
legacy_object (WEB_ELEMENT_TYPEHINT): The legacy Selenium WebElement instance or its wrapper.
|
|
138
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
139
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
140
|
+
|
|
141
|
+
Returns:
|
|
142
|
+
Self: A new instance of a class implementing WebElement.
|
|
143
|
+
"""
|
|
144
|
+
|
|
145
|
+
legacy_element_obj = get_legacy_instance(instance=legacy_object)
|
|
146
|
+
|
|
147
|
+
if not isinstance(legacy_element_obj, legacyWebElement):
|
|
148
|
+
raise CannotConvertTypeError(from_=legacyWebElement, to_=legacy_object)
|
|
149
|
+
|
|
150
|
+
return cls(selenium_web_element=legacy_element_obj, lock=lock, limiter=limiter)
|
|
151
|
+
|
|
152
|
+
async def parent(self) -> Self:
|
|
153
|
+
parent = await self.sync_to_trio(sync_function=self._parent_impl)()
|
|
154
|
+
|
|
155
|
+
return self.from_legacy(legacy_object=parent, lock=self._lock, limiter=self._capacity_limiter,)
|
|
156
|
+
|
|
157
|
+
async def rect(self) -> Dict:
|
|
158
|
+
return await self.sync_to_trio(sync_function=self._rect_impl)()
|
|
159
|
+
|
|
160
|
+
async def screenshot(self, filename: str) -> bool:
|
|
161
|
+
return await self.sync_to_trio(sync_function=self._screenshot_impl)(filename=filename)
|
|
162
|
+
|
|
163
|
+
async def screenshot_as_base64(self) -> str:
|
|
164
|
+
return await self.sync_to_trio(sync_function=self._screenshot_as_base64_impl)()
|
|
165
|
+
|
|
166
|
+
async def screenshot_as_png(self) -> bytes:
|
|
167
|
+
return await self.sync_to_trio(sync_function=self._screenshot_as_png_impl)()
|
|
168
|
+
|
|
169
|
+
async def send_keys(self, *value: str) -> None:
|
|
170
|
+
await self.sync_to_trio(sync_function=self._send_keys_impl)(*value)
|
|
171
|
+
|
|
172
|
+
async def session_id(self) -> str:
|
|
173
|
+
return await self.sync_to_trio(sync_function=self._session_id_impl)()
|
|
174
|
+
|
|
175
|
+
async def shadow_root(self) -> ShadowRoot:
|
|
176
|
+
shadow_root = await self.sync_to_trio(sync_function=self._shadow_root_impl)()
|
|
177
|
+
|
|
178
|
+
return get_trio_thread_instance_wrapper(
|
|
179
|
+
wrapper_class=ShadowRoot,
|
|
180
|
+
legacy_object=shadow_root,
|
|
181
|
+
lock=self._lock,
|
|
182
|
+
limiter=self._capacity_limiter,
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
async def size(self) -> Dict:
|
|
186
|
+
return await self.sync_to_trio(sync_function=self._size_impl)()
|
|
187
|
+
|
|
188
|
+
async def submit(self) -> None:
|
|
189
|
+
await self.sync_to_trio(sync_function=self._submit_impl)()
|
|
190
|
+
|
|
191
|
+
async def tag_name(self) -> str:
|
|
192
|
+
return await self.sync_to_trio(sync_function=self._tag_name_impl)()
|
|
193
|
+
|
|
194
|
+
async def text(self) -> str:
|
|
195
|
+
return await self.sync_to_trio(sync_function=self._text_impl)()
|
|
196
|
+
|
|
197
|
+
async def value_of_css_property(self, property_name: str) -> str:
|
|
198
|
+
return await self.sync_to_trio(sync_function=self._value_of_css_property_impl)(property_name=property_name)
|
|
199
|
+
|
|
200
|
+
def web_driver_wait(
|
|
201
|
+
self,
|
|
202
|
+
timeout: float,
|
|
203
|
+
poll_frequency: float = 0.5,
|
|
204
|
+
ignored_exceptions: Optional[Iterable[BaseException]] = None,
|
|
205
|
+
) -> WebDriverWait:
|
|
206
|
+
web_driver_wait = self._web_driver_wait_impl(
|
|
207
|
+
timeout=timeout,
|
|
208
|
+
poll_frequency=poll_frequency,
|
|
209
|
+
ignored_exceptions=ignored_exceptions,
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
return get_trio_thread_instance_wrapper(
|
|
213
|
+
wrapper_class=WebDriverWait,
|
|
214
|
+
legacy_object=web_driver_wait,
|
|
215
|
+
lock=self._lock,
|
|
216
|
+
limiter=self._capacity_limiter,
|
|
217
|
+
)
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
3
|
+
from typing import (
|
|
4
|
+
Dict,
|
|
5
|
+
Optional,
|
|
6
|
+
Self,
|
|
7
|
+
Union
|
|
8
|
+
)
|
|
9
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
10
|
+
from osn_selenium.exceptions.instance import (
|
|
11
|
+
CannotConvertTypeError
|
|
12
|
+
)
|
|
13
|
+
from osn_selenium.instances._typehints import (
|
|
14
|
+
WEB_EXTENSION_TYPEHINT
|
|
15
|
+
)
|
|
16
|
+
from osn_selenium.instances.unified.web_extension import UnifiedWebExtension
|
|
17
|
+
from osn_selenium.abstract.instances.web_extension import AbstractWebExtension
|
|
18
|
+
from selenium.webdriver.common.bidi.webextension import (
|
|
19
|
+
WebExtension as legacyWebExtension
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
__all__ = ["WebExtension"]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class WebExtension(UnifiedWebExtension, TrioThreadMixin, AbstractWebExtension):
|
|
27
|
+
"""
|
|
28
|
+
Wrapper for the legacy Selenium WebExtension instance.
|
|
29
|
+
|
|
30
|
+
Manages the installation and uninstallation of browser extensions via the
|
|
31
|
+
WebDriver BiDi protocol.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
def __init__(
|
|
35
|
+
self,
|
|
36
|
+
selenium_web_extension: legacyWebExtension,
|
|
37
|
+
lock: trio.Lock,
|
|
38
|
+
limiter: trio.CapacityLimiter,
|
|
39
|
+
) -> None:
|
|
40
|
+
"""
|
|
41
|
+
Initializes the WebExtension wrapper.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
selenium_web_extension (legacyWebExtension): The legacy Selenium WebExtension instance to wrap.
|
|
45
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
46
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
UnifiedWebExtension.__init__(self, selenium_web_extension=selenium_web_extension)
|
|
50
|
+
|
|
51
|
+
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
52
|
+
|
|
53
|
+
@classmethod
|
|
54
|
+
def from_legacy(
|
|
55
|
+
cls,
|
|
56
|
+
legacy_object: WEB_EXTENSION_TYPEHINT,
|
|
57
|
+
lock: trio.Lock,
|
|
58
|
+
limiter: trio.CapacityLimiter,
|
|
59
|
+
) -> Self:
|
|
60
|
+
"""
|
|
61
|
+
Creates an instance from a legacy Selenium WebExtension object.
|
|
62
|
+
|
|
63
|
+
This factory method is used to wrap an existing Selenium WebExtension
|
|
64
|
+
instance into the new interface.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
legacy_object (WEB_EXTENSION_TYPEHINT): The legacy Selenium WebExtension instance or its wrapper.
|
|
68
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
69
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
Self: A new instance of a class implementing WebExtension.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
legacy_web_extension_obj = get_legacy_instance(instance=legacy_object)
|
|
76
|
+
|
|
77
|
+
if not isinstance(legacy_web_extension_obj, legacyWebExtension):
|
|
78
|
+
raise CannotConvertTypeError(from_=legacyWebExtension, to_=legacy_object)
|
|
79
|
+
|
|
80
|
+
return cls(
|
|
81
|
+
selenium_web_extension=legacy_web_extension_obj,
|
|
82
|
+
lock=lock,
|
|
83
|
+
limiter=limiter
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
async def install(
|
|
87
|
+
self,
|
|
88
|
+
path: Optional[str] = None,
|
|
89
|
+
archive_path: Optional[str] = None,
|
|
90
|
+
base64_value: Optional[str] = None,
|
|
91
|
+
) -> Dict:
|
|
92
|
+
return await self.sync_to_trio(sync_function=self._install_impl)(path=path, archive_path=archive_path, base64_value=base64_value)
|
|
93
|
+
|
|
94
|
+
@property
|
|
95
|
+
def legacy(self) -> legacyWebExtension:
|
|
96
|
+
return self._legacy_impl
|
|
97
|
+
|
|
98
|
+
async def uninstall(self, extension_id_or_result: Union[str, Dict]) -> None:
|
|
99
|
+
await self.sync_to_trio(sync_function=self._uninstall_impl)(extension_id_or_result=extension_id_or_result)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from osn_selenium.instances.unified.action_chains.click import UnifiedClickMixin
|
|
2
|
+
from osn_selenium.instances.unified.action_chains.hm_move import UnifiedHMMoveMixin
|
|
3
|
+
from osn_selenium.instances.unified.action_chains.hm_scroll import UnifiedHMScrollMixin
|
|
4
|
+
from osn_selenium.instances.unified.action_chains.hm_keyboard import (
|
|
5
|
+
UnifiedHMKeyboardMixin
|
|
6
|
+
)
|
|
7
|
+
from osn_selenium.instances.unified.action_chains.drag_and_drop import (
|
|
8
|
+
UnifiedDragAndDropMixin
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
__all__ = ["UnifiedActionChains"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class UnifiedActionChains(
|
|
16
|
+
UnifiedClickMixin,
|
|
17
|
+
UnifiedDragAndDropMixin,
|
|
18
|
+
UnifiedHMKeyboardMixin,
|
|
19
|
+
UnifiedHMMoveMixin,
|
|
20
|
+
UnifiedHMScrollMixin,
|
|
21
|
+
):
|
|
22
|
+
pass
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from typing import Any, Callable
|
|
2
|
+
from osn_selenium.exceptions.instance import NotExpectedTypeError
|
|
3
|
+
from osn_selenium.executors.unified.javascript import UnifiedJSExecutor
|
|
4
|
+
from selenium.webdriver.common.action_chains import (
|
|
5
|
+
ActionChains as legacyActionChains
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
__all__ = ["UnifiedBaseMixin"]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class UnifiedBaseMixin:
|
|
13
|
+
def __init__(
|
|
14
|
+
self,
|
|
15
|
+
selenium_action_chains: legacyActionChains,
|
|
16
|
+
execute_js_script_function: Callable[[str, Any], Any]
|
|
17
|
+
):
|
|
18
|
+
if not isinstance(selenium_action_chains, legacyActionChains):
|
|
19
|
+
raise NotExpectedTypeError(
|
|
20
|
+
expected_type=legacyActionChains,
|
|
21
|
+
received_instance=selenium_action_chains
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
self._selenium_action_chains = selenium_action_chains
|
|
25
|
+
self._execute_js_script_function = execute_js_script_function
|
|
26
|
+
|
|
27
|
+
self._js_executor = UnifiedJSExecutor(execute_function=execute_js_script_function)
|
|
28
|
+
|
|
29
|
+
@property
|
|
30
|
+
def _legacy_impl(self) -> legacyActionChains:
|
|
31
|
+
return self._selenium_action_chains
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
3
|
+
from osn_selenium.instances._typehints import WEB_ELEMENT_TYPEHINT
|
|
4
|
+
from osn_selenium.instances.unified.action_chains.base import UnifiedBaseMixin
|
|
5
|
+
from selenium.webdriver.common.action_chains import (
|
|
6
|
+
ActionChains as legacyActionChains
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
__all__ = ["UnifiedClickMixin"]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class UnifiedClickMixin(UnifiedBaseMixin):
|
|
14
|
+
def _click_and_hold_impl(self, on_element: Optional[WEB_ELEMENT_TYPEHINT]) -> legacyActionChains:
|
|
15
|
+
return self._legacy_impl.click_and_hold(on_element=get_legacy_instance(instance=on_element))
|
|
16
|
+
|
|
17
|
+
def _click_impl(self, on_element: Optional[WEB_ELEMENT_TYPEHINT]) -> legacyActionChains:
|
|
18
|
+
return self._legacy_impl.click(on_element=get_legacy_instance(instance=on_element))
|
|
19
|
+
|
|
20
|
+
def _context_click_impl(self, on_element: Optional[WEB_ELEMENT_TYPEHINT]) -> legacyActionChains:
|
|
21
|
+
return self._legacy_impl.context_click(on_element=get_legacy_instance(instance=on_element))
|
|
22
|
+
|
|
23
|
+
def _double_click_impl(self, on_element: Optional[WEB_ELEMENT_TYPEHINT]) -> legacyActionChains:
|
|
24
|
+
return self._legacy_impl.double_click(on_element=get_legacy_instance(instance=on_element))
|
|
25
|
+
|
|
26
|
+
def _release_impl(self, on_element: Optional[WEB_ELEMENT_TYPEHINT]) -> legacyActionChains:
|
|
27
|
+
return self._legacy_impl.release(on_element=get_legacy_instance(instance=on_element))
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
2
|
+
from osn_selenium.instances._typehints import WEB_ELEMENT_TYPEHINT
|
|
3
|
+
from osn_selenium.instances.unified.action_chains.base import UnifiedBaseMixin
|
|
4
|
+
from selenium.webdriver.common.action_chains import (
|
|
5
|
+
ActionChains as legacyActionChains
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
__all__ = ["UnifiedDragAndDropMixin"]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class UnifiedDragAndDropMixin(UnifiedBaseMixin):
|
|
13
|
+
def _drag_and_drop_by_offset_impl(self, source: WEB_ELEMENT_TYPEHINT, xoffset: int, yoffset: int) -> legacyActionChains:
|
|
14
|
+
return self._legacy_impl.drag_and_drop_by_offset(
|
|
15
|
+
source=get_legacy_instance(instance=source),
|
|
16
|
+
xoffset=xoffset,
|
|
17
|
+
yoffset=yoffset
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
def _drag_and_drop_impl(self, source: WEB_ELEMENT_TYPEHINT, target: WEB_ELEMENT_TYPEHINT) -> legacyActionChains:
|
|
21
|
+
return self._legacy_impl.drag_and_drop(
|
|
22
|
+
source=get_legacy_instance(instance=source),
|
|
23
|
+
target=get_legacy_instance(instance=target)
|
|
24
|
+
)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from osn_selenium.instances._functions import text_input_to_parts
|
|
2
|
+
from osn_selenium.instances._typehints import WEB_ELEMENT_TYPEHINT
|
|
3
|
+
from osn_selenium.instances.unified.action_chains.utils import UnifiedUtilsMixin
|
|
4
|
+
from osn_selenium.instances.unified.action_chains.keyboard import UnifiedKeyboardMixin
|
|
5
|
+
from selenium.webdriver.common.action_chains import (
|
|
6
|
+
ActionChains as legacyActionChains
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
__all__ = ["UnifiedHMKeyboardMixin"]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class UnifiedHMKeyboardMixin(UnifiedUtilsMixin, UnifiedKeyboardMixin):
|
|
14
|
+
def _hm_send_keys_impl(self, text: str) -> legacyActionChains:
|
|
15
|
+
parts = text_input_to_parts(text=text)
|
|
16
|
+
|
|
17
|
+
for part in parts:
|
|
18
|
+
self._pause_impl(seconds=part.duration * 0.001)
|
|
19
|
+
self._send_keys_impl(part.text)
|
|
20
|
+
|
|
21
|
+
return self._legacy_impl
|
|
22
|
+
|
|
23
|
+
def _hm_send_keys_to_element_impl(self, element: WEB_ELEMENT_TYPEHINT, text: str) -> legacyActionChains:
|
|
24
|
+
parts = text_input_to_parts(text=text)
|
|
25
|
+
|
|
26
|
+
for part in parts:
|
|
27
|
+
self._pause_impl(seconds=part.duration * 0.001)
|
|
28
|
+
self._send_keys_to_element_impl(element, part.text)
|
|
29
|
+
|
|
30
|
+
return self._legacy_impl
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
from typing import Tuple
|
|
2
|
+
from osn_selenium.models import Point
|
|
3
|
+
from osn_selenium.instances._functions import move_to_parts
|
|
4
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
5
|
+
from osn_selenium.instances._typehints import WEB_ELEMENT_TYPEHINT
|
|
6
|
+
from osn_selenium.exceptions.instance import (
|
|
7
|
+
ElementNotVisibleError
|
|
8
|
+
)
|
|
9
|
+
from osn_selenium.instances.unified.web_element import UnifiedWebElement
|
|
10
|
+
from osn_selenium.instances.unified.action_chains.move import UnifiedMoveMixin
|
|
11
|
+
from osn_selenium.instances.unified.action_chains.utils import UnifiedUtilsMixin
|
|
12
|
+
from selenium.webdriver.common.action_chains import (
|
|
13
|
+
ActionChains as legacyActionChains
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
__all__ = ["UnifiedHMMoveMixin"]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class UnifiedHMMoveMixin(UnifiedUtilsMixin, UnifiedMoveMixin):
|
|
21
|
+
def _hm_move_impl(self, start_position: Point, end_position: Point) -> legacyActionChains:
|
|
22
|
+
parts = move_to_parts(start_position=start_position, end_position=end_position)
|
|
23
|
+
|
|
24
|
+
for part in parts:
|
|
25
|
+
self._pause_impl(seconds=part.duration * 0.001)
|
|
26
|
+
self._move_by_offset_impl(xoffset=part.offset.x, yoffset=part.offset.y)
|
|
27
|
+
|
|
28
|
+
return self._legacy_impl
|
|
29
|
+
|
|
30
|
+
def _hm_move_by_offset_impl(self, start_position: Point, xoffset: int, yoffset: int) -> Tuple[legacyActionChains, Point]:
|
|
31
|
+
end_position = Point(x=start_position.x + xoffset, y=start_position.y + yoffset)
|
|
32
|
+
|
|
33
|
+
return self._hm_move_impl(start_position=start_position, end_position=end_position), end_position
|
|
34
|
+
|
|
35
|
+
def _hm_move_to_element_impl(self, start_position: Point, element: WEB_ELEMENT_TYPEHINT) -> Tuple[legacyActionChains, Point]:
|
|
36
|
+
element_rect = UnifiedWebElement(selenium_web_element=get_legacy_instance(instance=element))._rect_impl()
|
|
37
|
+
end_position = Point(
|
|
38
|
+
x=element_rect["x"] +
|
|
39
|
+
element_rect["width"] //
|
|
40
|
+
2,
|
|
41
|
+
y=element_rect["y"] +
|
|
42
|
+
element_rect["height"] //
|
|
43
|
+
2
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
return self._hm_move_impl(start_position=start_position, end_position=end_position), end_position
|
|
47
|
+
|
|
48
|
+
def _hm_move_to_element_with_offset_impl(
|
|
49
|
+
self,
|
|
50
|
+
start_position: Point,
|
|
51
|
+
element: WEB_ELEMENT_TYPEHINT,
|
|
52
|
+
xoffset: int,
|
|
53
|
+
yoffset: int
|
|
54
|
+
) -> Tuple[legacyActionChains, Point]:
|
|
55
|
+
element_rect = UnifiedWebElement(selenium_web_element=get_legacy_instance(instance=element))._rect_impl()
|
|
56
|
+
end_position = Point(x=element_rect["x"] + xoffset, y=element_rect["y"] + yoffset)
|
|
57
|
+
|
|
58
|
+
return self._hm_move_impl(start_position=start_position, end_position=end_position), end_position
|
|
59
|
+
|
|
60
|
+
def _hm_move_to_element_with_random_offset_impl(self, start_position: Point, element: WEB_ELEMENT_TYPEHINT) -> Tuple[legacyActionChains, Point]:
|
|
61
|
+
end_position = self._js_executor._get_random_element_point_impl(element=get_legacy_instance(instance=element))
|
|
62
|
+
|
|
63
|
+
if end_position is None:
|
|
64
|
+
raise ElementNotVisibleError(element_id=get_legacy_instance(instance=element).id)
|
|
65
|
+
|
|
66
|
+
return self._hm_move_impl(start_position=start_position, end_position=end_position), end_position
|