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.
Files changed (635) hide show
  1. osn_selenium/_base_models.py +41 -0
  2. osn_selenium/_cdp_import.py +253 -0
  3. osn_selenium/_functions.py +84 -0
  4. osn_selenium/_typehints.py +19 -0
  5. osn_selenium/abstract/executors/cdp/__init__.py +435 -0
  6. osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
  7. osn_selenium/abstract/executors/cdp/animation.py +47 -0
  8. osn_selenium/abstract/executors/cdp/audits.py +39 -0
  9. osn_selenium/abstract/executors/cdp/autofill.py +34 -0
  10. osn_selenium/abstract/executors/cdp/background_service.py +22 -0
  11. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
  12. osn_selenium/abstract/executors/cdp/browser.py +122 -0
  13. osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
  14. osn_selenium/abstract/executors/cdp/cast.py +31 -0
  15. osn_selenium/abstract/executors/cdp/console.py +18 -0
  16. osn_selenium/abstract/executors/cdp/css.py +197 -0
  17. osn_selenium/abstract/executors/cdp/debugger.py +198 -0
  18. osn_selenium/abstract/executors/cdp/device_access.py +22 -0
  19. osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
  20. osn_selenium/abstract/executors/cdp/dom.py +305 -0
  21. osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
  22. osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
  23. osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
  24. osn_selenium/abstract/executors/cdp/emulation.py +259 -0
  25. osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
  26. osn_selenium/abstract/executors/cdp/extensions.py +31 -0
  27. osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
  28. osn_selenium/abstract/executors/cdp/fetch.py +76 -0
  29. osn_selenium/abstract/executors/cdp/file_system.py +11 -0
  30. osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
  31. osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
  32. osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
  33. osn_selenium/abstract/executors/cdp/input.py +158 -0
  34. osn_selenium/abstract/executors/cdp/inspector.py +14 -0
  35. osn_selenium/abstract/executors/cdp/io.py +24 -0
  36. osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
  37. osn_selenium/abstract/executors/cdp/log.py +27 -0
  38. osn_selenium/abstract/executors/cdp/media.py +14 -0
  39. osn_selenium/abstract/executors/cdp/memory.py +61 -0
  40. osn_selenium/abstract/executors/cdp/network.py +252 -0
  41. osn_selenium/abstract/executors/cdp/overlay.py +166 -0
  42. osn_selenium/abstract/executors/cdp/page.py +347 -0
  43. osn_selenium/abstract/executors/cdp/performance.py +28 -0
  44. osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
  45. osn_selenium/abstract/executors/cdp/preload.py +14 -0
  46. osn_selenium/abstract/executors/cdp/profiler.py +54 -0
  47. osn_selenium/abstract/executors/cdp/pwa.py +46 -0
  48. osn_selenium/abstract/executors/cdp/runtime.py +176 -0
  49. osn_selenium/abstract/executors/cdp/schema.py +11 -0
  50. osn_selenium/abstract/executors/cdp/security.py +26 -0
  51. osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
  52. osn_selenium/abstract/executors/cdp/storage.py +175 -0
  53. osn_selenium/abstract/executors/cdp/system_info.py +24 -0
  54. osn_selenium/abstract/executors/cdp/target.py +125 -0
  55. osn_selenium/abstract/executors/cdp/tethering.py +14 -0
  56. osn_selenium/abstract/executors/cdp/tracing.py +48 -0
  57. osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
  58. osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
  59. osn_selenium/abstract/executors/cdp.py +63 -0
  60. osn_selenium/abstract/executors/javascript.py +203 -0
  61. osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
  62. osn_selenium/abstract/instances/action_chains/base.py +25 -0
  63. osn_selenium/abstract/instances/action_chains/click.py +93 -0
  64. osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
  65. osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
  66. osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
  67. osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
  68. osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
  69. osn_selenium/abstract/instances/action_chains/move.py +60 -0
  70. osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
  71. osn_selenium/abstract/instances/action_chains/utils.py +44 -0
  72. osn_selenium/abstract/instances/alert.py +67 -0
  73. osn_selenium/abstract/instances/browser.py +76 -0
  74. osn_selenium/abstract/instances/browsing_context.py +310 -0
  75. osn_selenium/abstract/instances/dialog.py +107 -0
  76. osn_selenium/abstract/instances/fedcm.py +133 -0
  77. osn_selenium/abstract/instances/mobile.py +79 -0
  78. osn_selenium/abstract/instances/network.py +100 -0
  79. osn_selenium/abstract/instances/permissions.py +52 -0
  80. osn_selenium/abstract/instances/script.py +109 -0
  81. osn_selenium/abstract/instances/shadow_root.py +81 -0
  82. osn_selenium/abstract/instances/storage.py +98 -0
  83. osn_selenium/abstract/instances/switch_to.py +104 -0
  84. osn_selenium/abstract/instances/web_driver_wait.py +57 -0
  85. osn_selenium/abstract/instances/web_element.py +395 -0
  86. osn_selenium/abstract/instances/web_extension.py +70 -0
  87. osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
  88. osn_selenium/abstract/webdriver/blink/base.py +80 -0
  89. osn_selenium/abstract/webdriver/blink/casting.py +82 -0
  90. osn_selenium/abstract/webdriver/blink/features.py +51 -0
  91. osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
  92. osn_selenium/abstract/webdriver/blink/logging.py +40 -0
  93. osn_selenium/abstract/webdriver/blink/network.py +45 -0
  94. osn_selenium/abstract/webdriver/blink/settings.py +68 -0
  95. osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
  96. osn_selenium/abstract/webdriver/chrome/base.py +36 -0
  97. osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
  98. osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
  99. osn_selenium/abstract/webdriver/core/__init__.py +16 -0
  100. osn_selenium/abstract/webdriver/core/actions.py +58 -0
  101. osn_selenium/abstract/webdriver/core/auth.py +145 -0
  102. osn_selenium/abstract/webdriver/core/base.py +298 -0
  103. osn_selenium/abstract/webdriver/core/capture.py +84 -0
  104. osn_selenium/abstract/webdriver/core/components.py +82 -0
  105. osn_selenium/abstract/webdriver/core/devtools.py +69 -0
  106. osn_selenium/abstract/webdriver/core/element.py +55 -0
  107. osn_selenium/abstract/webdriver/core/file.py +82 -0
  108. osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
  109. osn_selenium/abstract/webdriver/core/navigation.py +65 -0
  110. osn_selenium/abstract/webdriver/core/script.py +88 -0
  111. osn_selenium/abstract/webdriver/core/settings.py +43 -0
  112. osn_selenium/abstract/webdriver/core/storage.py +81 -0
  113. osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
  114. osn_selenium/abstract/webdriver/core/window.py +237 -0
  115. osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
  116. osn_selenium/abstract/webdriver/edge/base.py +36 -0
  117. osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
  118. osn_selenium/abstract/webdriver/edge/settings.py +110 -0
  119. osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
  120. osn_selenium/abstract/webdriver/yandex/base.py +18 -0
  121. osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
  122. osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
  123. osn_selenium/base_mixin.py +122 -0
  124. osn_selenium/browsers_handler/__init__.py +47 -17
  125. osn_selenium/browsers_handler/_linux.py +226 -0
  126. osn_selenium/browsers_handler/_windows.py +21 -14
  127. osn_selenium/browsers_handler/{types.py → models.py} +5 -2
  128. osn_selenium/dev_tools/_decorators.py +149 -0
  129. osn_selenium/dev_tools/_exception_helpers.py +116 -0
  130. osn_selenium/dev_tools/_functions.py +174 -0
  131. osn_selenium/dev_tools/_system_utils.py +35 -0
  132. osn_selenium/dev_tools/_typehints.py +35 -0
  133. osn_selenium/dev_tools/_validators.py +227 -0
  134. osn_selenium/dev_tools/_wrappers.py +92 -0
  135. osn_selenium/dev_tools/domains/__init__.py +7 -40
  136. osn_selenium/dev_tools/domains/abstract.py +98 -254
  137. osn_selenium/dev_tools/domains/fetch.py +229 -906
  138. osn_selenium/dev_tools/domains_default/fetch.py +40 -28
  139. osn_selenium/dev_tools/filters.py +40 -0
  140. osn_selenium/dev_tools/logger/main.py +214 -0
  141. osn_selenium/dev_tools/logger/models.py +232 -0
  142. osn_selenium/dev_tools/logger/target.py +278 -0
  143. osn_selenium/dev_tools/manager/__init__.py +16 -0
  144. osn_selenium/dev_tools/manager/base.py +124 -0
  145. osn_selenium/dev_tools/manager/lifecycle.py +236 -0
  146. osn_selenium/dev_tools/manager/logging.py +153 -0
  147. osn_selenium/dev_tools/manager/settings.py +89 -0
  148. osn_selenium/dev_tools/manager/targets.py +175 -0
  149. osn_selenium/dev_tools/models.py +49 -0
  150. osn_selenium/dev_tools/settings.py +139 -0
  151. osn_selenium/dev_tools/target/__init__.py +16 -0
  152. osn_selenium/dev_tools/target/base.py +427 -0
  153. osn_selenium/dev_tools/target/detach.py +54 -0
  154. osn_selenium/dev_tools/target/discovery.py +112 -0
  155. osn_selenium/dev_tools/target/events.py +120 -0
  156. osn_selenium/dev_tools/target/fingerprint.py +126 -0
  157. osn_selenium/dev_tools/target/lifecycle.py +184 -0
  158. osn_selenium/dev_tools/target/logging.py +163 -0
  159. osn_selenium/exceptions/__init__.py +1 -0
  160. osn_selenium/exceptions/base.py +9 -0
  161. osn_selenium/exceptions/configuration.py +84 -0
  162. osn_selenium/exceptions/dependencies.py +60 -0
  163. osn_selenium/exceptions/devtools.py +114 -0
  164. osn_selenium/exceptions/flags.py +45 -0
  165. osn_selenium/exceptions/instance.py +92 -0
  166. osn_selenium/exceptions/javascript.py +31 -0
  167. osn_selenium/exceptions/logic.py +31 -0
  168. osn_selenium/exceptions/path.py +77 -0
  169. osn_selenium/exceptions/platform.py +33 -0
  170. osn_selenium/exceptions/protocol.py +86 -0
  171. osn_selenium/exceptions/webdriver.py +44 -0
  172. osn_selenium/exceptions/window.py +63 -0
  173. osn_selenium/executors/__init__.py +1 -0
  174. osn_selenium/executors/sync/__init__.py +1 -0
  175. osn_selenium/executors/sync/cdp/__init__.py +550 -0
  176. osn_selenium/executors/sync/cdp/accessibility.py +74 -0
  177. osn_selenium/executors/sync/cdp/animation.py +50 -0
  178. osn_selenium/executors/sync/cdp/audits.py +48 -0
  179. osn_selenium/executors/sync/cdp/autofill.py +39 -0
  180. osn_selenium/executors/sync/cdp/background_service.py +30 -0
  181. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
  182. osn_selenium/executors/sync/cdp/browser.py +131 -0
  183. osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
  184. osn_selenium/executors/sync/cdp/cast.py +38 -0
  185. osn_selenium/executors/sync/cdp/console.py +24 -0
  186. osn_selenium/executors/sync/cdp/css.py +187 -0
  187. osn_selenium/executors/sync/cdp/debugger.py +206 -0
  188. osn_selenium/executors/sync/cdp/device_access.py +27 -0
  189. osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
  190. osn_selenium/executors/sync/cdp/dom.py +310 -0
  191. osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
  192. osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
  193. osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
  194. osn_selenium/executors/sync/cdp/emulation.py +270 -0
  195. osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
  196. osn_selenium/executors/sync/cdp/extensions.py +39 -0
  197. osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
  198. osn_selenium/executors/sync/cdp/fetch.py +96 -0
  199. osn_selenium/executors/sync/cdp/file_system.py +18 -0
  200. osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
  201. osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
  202. osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
  203. osn_selenium/executors/sync/cdp/input.py +233 -0
  204. osn_selenium/executors/sync/cdp/inspector.py +21 -0
  205. osn_selenium/executors/sync/cdp/io.py +33 -0
  206. osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
  207. osn_selenium/executors/sync/cdp/log.py +35 -0
  208. osn_selenium/executors/sync/cdp/media.py +21 -0
  209. osn_selenium/executors/sync/cdp/memory.py +62 -0
  210. osn_selenium/executors/sync/cdp/network.py +287 -0
  211. osn_selenium/executors/sync/cdp/overlay.py +174 -0
  212. osn_selenium/executors/sync/cdp/page.py +365 -0
  213. osn_selenium/executors/sync/cdp/performance.py +33 -0
  214. osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
  215. osn_selenium/executors/sync/cdp/preload.py +21 -0
  216. osn_selenium/executors/sync/cdp/profiler.py +58 -0
  217. osn_selenium/executors/sync/cdp/pwa.py +55 -0
  218. osn_selenium/executors/sync/cdp/runtime.py +221 -0
  219. osn_selenium/executors/sync/cdp/schema.py +23 -0
  220. osn_selenium/executors/sync/cdp/security.py +30 -0
  221. osn_selenium/executors/sync/cdp/service_worker.py +56 -0
  222. osn_selenium/executors/sync/cdp/storage.py +151 -0
  223. osn_selenium/executors/sync/cdp/system_info.py +30 -0
  224. osn_selenium/executors/sync/cdp/target.py +147 -0
  225. osn_selenium/executors/sync/cdp/tethering.py +21 -0
  226. osn_selenium/executors/sync/cdp/tracing.py +62 -0
  227. osn_selenium/executors/sync/cdp/web_audio.py +24 -0
  228. osn_selenium/executors/sync/cdp/web_authn.py +82 -0
  229. osn_selenium/executors/sync/cdp.py +100 -0
  230. osn_selenium/executors/sync/javascript.py +79 -0
  231. osn_selenium/executors/trio_threads/__init__.py +1 -0
  232. osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
  233. osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
  234. osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
  235. osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
  236. osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
  237. osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
  238. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
  239. osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
  240. osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
  241. osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
  242. osn_selenium/executors/trio_threads/cdp/console.py +33 -0
  243. osn_selenium/executors/trio_threads/cdp/css.py +196 -0
  244. osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
  245. osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
  246. osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
  247. osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
  248. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
  249. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
  250. osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
  251. osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
  252. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
  253. osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
  254. osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
  255. osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
  256. osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
  257. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
  258. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
  259. osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
  260. osn_selenium/executors/trio_threads/cdp/input.py +242 -0
  261. osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
  262. osn_selenium/executors/trio_threads/cdp/io.py +42 -0
  263. osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
  264. osn_selenium/executors/trio_threads/cdp/log.py +44 -0
  265. osn_selenium/executors/trio_threads/cdp/media.py +30 -0
  266. osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
  267. osn_selenium/executors/trio_threads/cdp/network.py +296 -0
  268. osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
  269. osn_selenium/executors/trio_threads/cdp/page.py +374 -0
  270. osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
  271. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
  272. osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
  273. osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
  274. osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
  275. osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
  276. osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
  277. osn_selenium/executors/trio_threads/cdp/security.py +43 -0
  278. osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
  279. osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
  280. osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
  281. osn_selenium/executors/trio_threads/cdp/target.py +156 -0
  282. osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
  283. osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
  284. osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
  285. osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
  286. osn_selenium/executors/trio_threads/cdp.py +104 -0
  287. osn_selenium/executors/trio_threads/javascript.py +90 -0
  288. osn_selenium/executors/unified/__init__.py +1 -0
  289. osn_selenium/executors/unified/cdp/__init__.py +1 -0
  290. osn_selenium/executors/unified/cdp/accessibility.py +81 -0
  291. osn_selenium/executors/unified/cdp/animation.py +50 -0
  292. osn_selenium/executors/unified/cdp/audits.py +45 -0
  293. osn_selenium/executors/unified/cdp/autofill.py +41 -0
  294. osn_selenium/executors/unified/cdp/background_service.py +24 -0
  295. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
  296. osn_selenium/executors/unified/cdp/browser.py +143 -0
  297. osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
  298. osn_selenium/executors/unified/cdp/cast.py +32 -0
  299. osn_selenium/executors/unified/cdp/console.py +18 -0
  300. osn_selenium/executors/unified/cdp/css.py +237 -0
  301. osn_selenium/executors/unified/cdp/debugger.py +243 -0
  302. osn_selenium/executors/unified/cdp/device_access.py +21 -0
  303. osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
  304. osn_selenium/executors/unified/cdp/dom.py +380 -0
  305. osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
  306. osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
  307. osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
  308. osn_selenium/executors/unified/cdp/emulation.py +312 -0
  309. osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
  310. osn_selenium/executors/unified/cdp/extensions.py +45 -0
  311. osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
  312. osn_selenium/executors/unified/cdp/fetch.py +111 -0
  313. osn_selenium/executors/unified/cdp/file_system.py +15 -0
  314. osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
  315. osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
  316. osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
  317. osn_selenium/executors/unified/cdp/input.py +254 -0
  318. osn_selenium/executors/unified/cdp/inspector.py +15 -0
  319. osn_selenium/executors/unified/cdp/io.py +29 -0
  320. osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
  321. osn_selenium/executors/unified/cdp/log.py +29 -0
  322. osn_selenium/executors/unified/cdp/media.py +15 -0
  323. osn_selenium/executors/unified/cdp/memory.py +59 -0
  324. osn_selenium/executors/unified/cdp/network.py +323 -0
  325. osn_selenium/executors/unified/cdp/overlay.py +209 -0
  326. osn_selenium/executors/unified/cdp/page.py +410 -0
  327. osn_selenium/executors/unified/cdp/performance.py +27 -0
  328. osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
  329. osn_selenium/executors/unified/cdp/preload.py +15 -0
  330. osn_selenium/executors/unified/cdp/profiler.py +55 -0
  331. osn_selenium/executors/unified/cdp/pwa.py +55 -0
  332. osn_selenium/executors/unified/cdp/runtime.py +245 -0
  333. osn_selenium/executors/unified/cdp/schema.py +17 -0
  334. osn_selenium/executors/unified/cdp/security.py +27 -0
  335. osn_selenium/executors/unified/cdp/service_worker.py +62 -0
  336. osn_selenium/executors/unified/cdp/storage.py +178 -0
  337. osn_selenium/executors/unified/cdp/system_info.py +24 -0
  338. osn_selenium/executors/unified/cdp/target.py +165 -0
  339. osn_selenium/executors/unified/cdp/tethering.py +15 -0
  340. osn_selenium/executors/unified/cdp/tracing.py +62 -0
  341. osn_selenium/executors/unified/cdp/web_audio.py +18 -0
  342. osn_selenium/executors/unified/cdp/web_authn.py +103 -0
  343. osn_selenium/executors/unified/javascript.py +104 -0
  344. osn_selenium/flags/__init__.py +1 -0
  345. osn_selenium/flags/_functions.py +45 -0
  346. osn_selenium/flags/_typehints.py +34 -0
  347. osn_selenium/flags/_validators.py +101 -0
  348. osn_selenium/{webdrivers/BaseDriver/flags.py → flags/base.py} +159 -245
  349. osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +130 -374
  350. osn_selenium/flags/chrome.py +259 -0
  351. osn_selenium/flags/edge.py +259 -0
  352. osn_selenium/flags/models/__init__.py +1 -0
  353. osn_selenium/flags/models/base.py +130 -0
  354. osn_selenium/flags/models/blink.py +263 -0
  355. osn_selenium/{webdrivers/Chrome/flags.py → flags/models/chrome.py} +25 -75
  356. osn_selenium/{webdrivers/Edge/flags.py → flags/models/edge.py} +25 -75
  357. osn_selenium/flags/models/values.py +44 -0
  358. osn_selenium/{webdrivers/Yandex/flags.py → flags/models/yandex.py} +26 -76
  359. osn_selenium/flags/yandex.py +259 -0
  360. osn_selenium/instances/__init__.py +1 -0
  361. osn_selenium/instances/_functions.py +242 -0
  362. osn_selenium/instances/_typehints.py +148 -0
  363. osn_selenium/instances/_utils.py +143 -0
  364. osn_selenium/instances/convert.py +287 -0
  365. osn_selenium/instances/protocols.py +105 -0
  366. osn_selenium/instances/sync/__init__.py +1 -0
  367. osn_selenium/instances/sync/action_chains/__init__.py +32 -0
  368. osn_selenium/instances/sync/action_chains/base.py +74 -0
  369. osn_selenium/instances/sync/action_chains/click.py +61 -0
  370. osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
  371. osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
  372. osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
  373. osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
  374. osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
  375. osn_selenium/instances/sync/action_chains/move.py +46 -0
  376. osn_selenium/instances/sync/action_chains/scroll.py +43 -0
  377. osn_selenium/instances/sync/action_chains/utils.py +30 -0
  378. osn_selenium/instances/sync/alert.py +69 -0
  379. osn_selenium/instances/sync/browser.py +72 -0
  380. osn_selenium/instances/sync/browsing_context.py +193 -0
  381. osn_selenium/instances/sync/dialog.py +81 -0
  382. osn_selenium/instances/sync/fedcm.py +92 -0
  383. osn_selenium/instances/sync/mobile.py +75 -0
  384. osn_selenium/instances/sync/network.py +90 -0
  385. osn_selenium/instances/sync/permissions.py +80 -0
  386. osn_selenium/instances/sync/script.py +77 -0
  387. osn_selenium/instances/sync/shadow_root.py +113 -0
  388. osn_selenium/instances/sync/storage.py +91 -0
  389. osn_selenium/instances/sync/switch_to.py +92 -0
  390. osn_selenium/instances/sync/web_driver_wait.py +83 -0
  391. osn_selenium/instances/sync/web_element.py +179 -0
  392. osn_selenium/instances/sync/web_extension.py +77 -0
  393. osn_selenium/instances/trio_threads/__init__.py +1 -0
  394. osn_selenium/instances/trio_threads/action_chains/__init__.py +32 -0
  395. osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
  396. osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
  397. osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
  398. osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
  399. osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
  400. osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
  401. osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
  402. osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
  403. osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
  404. osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
  405. osn_selenium/instances/trio_threads/alert.py +87 -0
  406. osn_selenium/instances/trio_threads/browser.py +90 -0
  407. osn_selenium/instances/trio_threads/browsing_context.py +216 -0
  408. osn_selenium/instances/trio_threads/dialog.py +99 -0
  409. osn_selenium/instances/trio_threads/fedcm.py +110 -0
  410. osn_selenium/instances/trio_threads/mobile.py +93 -0
  411. osn_selenium/instances/trio_threads/network.py +108 -0
  412. osn_selenium/instances/trio_threads/permissions.py +102 -0
  413. osn_selenium/instances/trio_threads/script.py +95 -0
  414. osn_selenium/instances/trio_threads/shadow_root.py +154 -0
  415. osn_selenium/instances/trio_threads/storage.py +109 -0
  416. osn_selenium/instances/trio_threads/switch_to.py +124 -0
  417. osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
  418. osn_selenium/instances/trio_threads/web_element.py +217 -0
  419. osn_selenium/instances/trio_threads/web_extension.py +99 -0
  420. osn_selenium/instances/unified/__init__.py +1 -0
  421. osn_selenium/instances/unified/action_chains/__init__.py +22 -0
  422. osn_selenium/instances/unified/action_chains/base.py +31 -0
  423. osn_selenium/instances/unified/action_chains/click.py +27 -0
  424. osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
  425. osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
  426. osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
  427. osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
  428. osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
  429. osn_selenium/instances/unified/action_chains/move.py +24 -0
  430. osn_selenium/instances/unified/action_chains/scroll.py +21 -0
  431. osn_selenium/instances/unified/action_chains/utils.py +19 -0
  432. osn_selenium/instances/unified/alert.py +29 -0
  433. osn_selenium/instances/unified/browser.py +33 -0
  434. osn_selenium/instances/unified/browsing_context.py +151 -0
  435. osn_selenium/instances/unified/dialog.py +42 -0
  436. osn_selenium/instances/unified/fedcm.py +48 -0
  437. osn_selenium/instances/unified/mobile.py +36 -0
  438. osn_selenium/instances/unified/network.py +50 -0
  439. osn_selenium/instances/unified/permissions.py +43 -0
  440. osn_selenium/instances/unified/script.py +38 -0
  441. osn_selenium/instances/unified/shadow_root.py +46 -0
  442. osn_selenium/instances/unified/storage.py +48 -0
  443. osn_selenium/instances/unified/switch_to.py +49 -0
  444. osn_selenium/instances/unified/web_driver_wait.py +45 -0
  445. osn_selenium/instances/unified/web_element.py +145 -0
  446. osn_selenium/instances/unified/web_extension.py +38 -0
  447. osn_selenium/javascript/__init__.py +1 -0
  448. osn_selenium/javascript/_functions.py +63 -0
  449. osn_selenium/javascript/fingerprint/__init__.py +120 -0
  450. osn_selenium/javascript/fingerprint/_decorators.py +41 -0
  451. osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
  452. osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
  453. osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
  454. osn_selenium/javascript/fingerprint/_functions.py +35 -0
  455. osn_selenium/javascript/fingerprint/_typehints.py +27 -0
  456. osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
  457. osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
  458. osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
  459. osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
  460. osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
  461. osn_selenium/javascript/fingerprint/registry/models.py +41 -0
  462. osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
  463. osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
  464. osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
  465. osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
  466. osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
  467. osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
  468. osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
  469. osn_selenium/javascript/functions.py +44 -0
  470. osn_selenium/javascript/models.py +35 -0
  471. osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
  472. osn_selenium/models.py +94 -0
  473. osn_selenium/trio_threads_mixin.py +159 -0
  474. osn_selenium/webdrivers/_args_helpers.py +181 -0
  475. osn_selenium/webdrivers/_bridges.py +57 -0
  476. osn_selenium/webdrivers/_decorators.py +83 -0
  477. osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
  478. osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
  479. osn_selenium/webdrivers/_executable_tables/models.py +19 -0
  480. osn_selenium/webdrivers/_typehints.py +10 -0
  481. osn_selenium/webdrivers/protocols.py +50 -0
  482. osn_selenium/webdrivers/sync/__init__.py +1 -0
  483. osn_selenium/webdrivers/sync/blink/__init__.py +124 -0
  484. osn_selenium/webdrivers/sync/blink/base.py +140 -0
  485. osn_selenium/webdrivers/sync/blink/casting.py +34 -0
  486. osn_selenium/webdrivers/sync/blink/features.py +28 -0
  487. osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
  488. osn_selenium/webdrivers/sync/blink/logging.py +25 -0
  489. osn_selenium/webdrivers/sync/blink/network.py +28 -0
  490. osn_selenium/webdrivers/sync/blink/settings.py +63 -0
  491. osn_selenium/webdrivers/sync/chrome/__init__.py +102 -0
  492. osn_selenium/webdrivers/sync/chrome/base.py +118 -0
  493. osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
  494. osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
  495. osn_selenium/webdrivers/sync/core/__init__.py +100 -0
  496. osn_selenium/webdrivers/sync/core/actions.py +59 -0
  497. osn_selenium/webdrivers/sync/core/auth.py +77 -0
  498. osn_selenium/webdrivers/sync/core/base.py +175 -0
  499. osn_selenium/webdrivers/sync/core/capture.py +37 -0
  500. osn_selenium/webdrivers/sync/core/comonents.py +57 -0
  501. osn_selenium/webdrivers/sync/core/devtools.py +47 -0
  502. osn_selenium/webdrivers/sync/core/element.py +42 -0
  503. osn_selenium/webdrivers/sync/core/file.py +40 -0
  504. osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
  505. osn_selenium/webdrivers/sync/core/navigation.py +36 -0
  506. osn_selenium/webdrivers/sync/core/script.py +53 -0
  507. osn_selenium/webdrivers/sync/core/settings.py +35 -0
  508. osn_selenium/webdrivers/sync/core/storage.py +48 -0
  509. osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
  510. osn_selenium/webdrivers/sync/core/window.py +99 -0
  511. osn_selenium/webdrivers/sync/edge/__init__.py +102 -0
  512. osn_selenium/webdrivers/sync/edge/base.py +114 -0
  513. osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
  514. osn_selenium/webdrivers/sync/edge/settings.py +58 -0
  515. osn_selenium/webdrivers/sync/yandex/__init__.py +102 -0
  516. osn_selenium/webdrivers/sync/yandex/base.py +111 -0
  517. osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
  518. osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
  519. osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
  520. osn_selenium/webdrivers/trio_threads/blink/__init__.py +134 -0
  521. osn_selenium/webdrivers/trio_threads/blink/base.py +143 -0
  522. osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
  523. osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
  524. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
  525. osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
  526. osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
  527. osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
  528. osn_selenium/webdrivers/trio_threads/chrome/__init__.py +114 -0
  529. osn_selenium/webdrivers/trio_threads/chrome/base.py +119 -0
  530. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
  531. osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
  532. osn_selenium/webdrivers/trio_threads/core/__init__.py +115 -0
  533. osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
  534. osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
  535. osn_selenium/webdrivers/trio_threads/core/base.py +199 -0
  536. osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
  537. osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
  538. osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
  539. osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
  540. osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
  541. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
  542. osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
  543. osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
  544. osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
  545. osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
  546. osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
  547. osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
  548. osn_selenium/webdrivers/trio_threads/edge/__init__.py +114 -0
  549. osn_selenium/webdrivers/trio_threads/edge/base.py +115 -0
  550. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
  551. osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
  552. osn_selenium/webdrivers/trio_threads/yandex/__init__.py +114 -0
  553. osn_selenium/webdrivers/trio_threads/yandex/base.py +112 -0
  554. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
  555. osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
  556. osn_selenium/webdrivers/unified/__init__.py +1 -0
  557. osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
  558. osn_selenium/webdrivers/unified/blink/base.py +135 -0
  559. osn_selenium/webdrivers/unified/blink/casting.py +30 -0
  560. osn_selenium/webdrivers/unified/blink/features.py +22 -0
  561. osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
  562. osn_selenium/webdrivers/unified/blink/logging.py +18 -0
  563. osn_selenium/webdrivers/unified/blink/network.py +22 -0
  564. osn_selenium/webdrivers/unified/blink/settings.py +86 -0
  565. osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
  566. osn_selenium/webdrivers/unified/chrome/base.py +58 -0
  567. osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
  568. osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
  569. osn_selenium/webdrivers/unified/core/__init__.py +1 -0
  570. osn_selenium/webdrivers/unified/core/actions.py +43 -0
  571. osn_selenium/webdrivers/unified/core/auth.py +70 -0
  572. osn_selenium/webdrivers/unified/core/base.py +139 -0
  573. osn_selenium/webdrivers/unified/core/capture.py +32 -0
  574. osn_selenium/webdrivers/unified/core/components.py +32 -0
  575. osn_selenium/webdrivers/unified/core/devtools.py +35 -0
  576. osn_selenium/webdrivers/unified/core/element.py +24 -0
  577. osn_selenium/webdrivers/unified/core/file.py +35 -0
  578. osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
  579. osn_selenium/webdrivers/unified/core/navigation.py +31 -0
  580. osn_selenium/webdrivers/unified/core/script.py +32 -0
  581. osn_selenium/webdrivers/unified/core/settings.py +44 -0
  582. osn_selenium/webdrivers/unified/core/storage.py +37 -0
  583. osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
  584. osn_selenium/webdrivers/unified/core/window.py +135 -0
  585. osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
  586. osn_selenium/webdrivers/unified/edge/base.py +56 -0
  587. osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
  588. osn_selenium/webdrivers/unified/edge/settings.py +48 -0
  589. osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
  590. osn_selenium/webdrivers/unified/yandex/base.py +58 -0
  591. osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
  592. osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
  593. osn_selenium-1.1.0.dist-info/METADATA +252 -0
  594. osn_selenium-1.1.0.dist-info/RECORD +615 -0
  595. {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/WHEEL +1 -1
  596. osn_selenium/captcha_workers/__init__.py +0 -26
  597. osn_selenium/dev_tools/_types.py +0 -22
  598. osn_selenium/dev_tools/errors.py +0 -89
  599. osn_selenium/dev_tools/logger.py +0 -558
  600. osn_selenium/dev_tools/manager.py +0 -1551
  601. osn_selenium/dev_tools/utils.py +0 -509
  602. osn_selenium/errors.py +0 -16
  603. osn_selenium/types.py +0 -118
  604. osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
  605. osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
  606. osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
  607. osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
  608. osn_selenium/webdrivers/Blink/protocols.py +0 -330
  609. osn_selenium/webdrivers/Blink/webdriver.py +0 -637
  610. osn_selenium/webdrivers/Chrome/protocols.py +0 -228
  611. osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
  612. osn_selenium/webdrivers/Edge/protocols.py +0 -228
  613. osn_selenium/webdrivers/Edge/webdriver.py +0 -394
  614. osn_selenium/webdrivers/Yandex/protocols.py +0 -211
  615. osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
  616. osn_selenium/webdrivers/_functions.py +0 -504
  617. osn_selenium/webdrivers/types.py +0 -390
  618. osn_selenium-0.0.0.dist-info/METADATA +0 -710
  619. osn_selenium-0.0.0.dist-info/RECORD +0 -57
  620. /osn_selenium/{webdrivers/BaseDriver → abstract}/__init__.py +0 -0
  621. /osn_selenium/{webdrivers/Blink → abstract/executors}/__init__.py +0 -0
  622. /osn_selenium/{webdrivers/Chrome → abstract/instances}/__init__.py +0 -0
  623. /osn_selenium/{webdrivers/Edge → abstract/webdriver}/__init__.py +0 -0
  624. /osn_selenium/{webdrivers/Yandex → dev_tools/logger}/__init__.py +0 -0
  625. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/check_element_in_viewport.js +0 -0
  626. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_document_scroll_size.js +0 -0
  627. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_css.js +0 -0
  628. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_rect_in_viewport.js +0 -0
  629. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
  630. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_position.js +0 -0
  631. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_rect.js +0 -0
  632. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_size.js +0 -0
  633. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/open_new_tab.js +0 -0
  634. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/stop_window_loading.js +0 -0
  635. {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