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,74 @@
1
+ from typing import (
2
+ Any,
3
+ Callable,
4
+ TYPE_CHECKING,
5
+ cast
6
+ )
7
+ from osn_selenium.instances.unified.action_chains.base import UnifiedBaseMixin
8
+ from osn_selenium.abstract.instances.action_chains.base import AbstractBaseMixin
9
+ from selenium.webdriver.common.action_chains import (
10
+ ActionChains as legacyActionChains
11
+ )
12
+
13
+
14
+ __all__ = ["BaseMixin"]
15
+
16
+ if TYPE_CHECKING:
17
+ from osn_selenium.instances.sync.action_chains import ActionChains
18
+
19
+
20
+ class BaseMixin(UnifiedBaseMixin, AbstractBaseMixin):
21
+ """
22
+ Base mixin class that bridges legacy Selenium actions with unified execution logic.
23
+ """
24
+
25
+ def __init__(
26
+ self,
27
+ selenium_action_chains: legacyActionChains,
28
+ execute_js_script_function: Callable[[str, Any], Any]
29
+ ):
30
+ """
31
+ Initializes an ActionChains instance from a legacy Selenium ActionChains object.
32
+
33
+ Args:
34
+ selenium_action_chains (legacyActionChains): The legacy Selenium action chain.
35
+ execute_js_script_function (Callable[[str, Any], Any]): The function used to execute JS.
36
+
37
+ Returns:
38
+ "ActionChains": The ActionChains instance.
39
+ """
40
+
41
+ UnifiedBaseMixin.__init__(
42
+ self,
43
+ selenium_action_chains=selenium_action_chains,
44
+ execute_js_script_function=execute_js_script_function,
45
+ )
46
+
47
+ @classmethod
48
+ def from_legacy(
49
+ cls,
50
+ legacy_object: legacyActionChains,
51
+ execute_js_script_function: Callable[[str, Any], Any],
52
+ ) -> "ActionChains":
53
+ """
54
+ Creates an ActionChains instance from a legacy Selenium ActionChains object.
55
+
56
+ Args:
57
+ legacy_object (legacyActionChains): The legacy Selenium action chain.
58
+ execute_js_script_function (Callable[[str, Any], Any]): The function used to execute JS.
59
+
60
+ Returns:
61
+ "ActionChains": The ActionChains instance.
62
+ """
63
+
64
+ return cast(
65
+ "ActionChains",
66
+ cls(
67
+ selenium_action_chains=legacy_object,
68
+ execute_js_script_function=execute_js_script_function,
69
+ )
70
+ )
71
+
72
+ @property
73
+ def legacy(self) -> legacyActionChains:
74
+ return self._legacy_impl
@@ -0,0 +1,61 @@
1
+ from typing import (
2
+ Optional,
3
+ TYPE_CHECKING
4
+ )
5
+ from osn_selenium.instances.convert import get_legacy_instance
6
+ from osn_selenium.instances._typehints import WEB_ELEMENT_TYPEHINT
7
+ from osn_selenium.instances.sync.action_chains.base import BaseMixin
8
+ from osn_selenium.instances.unified.action_chains.click import UnifiedClickMixin
9
+ from osn_selenium.abstract.instances.action_chains.click import AbstractClickMixin
10
+
11
+
12
+ __all__ = ["ClickMixin"]
13
+
14
+ if TYPE_CHECKING:
15
+ from osn_selenium.instances.sync.action_chains import ActionChains
16
+
17
+
18
+ class ClickMixin(BaseMixin, UnifiedClickMixin, AbstractClickMixin):
19
+ """
20
+ Mixin class providing mouse click interaction methods.
21
+ """
22
+
23
+ def click(self, on_element: Optional[WEB_ELEMENT_TYPEHINT]) -> "ActionChains":
24
+ action_chains = self._click_impl(on_element=get_legacy_instance(instance=on_element))
25
+
26
+ return self.from_legacy(
27
+ legacy_object=action_chains,
28
+ execute_js_script_function=self._execute_js_script_function,
29
+ )
30
+
31
+ def click_and_hold(self, on_element: Optional[WEB_ELEMENT_TYPEHINT]) -> "ActionChains":
32
+ action_chains = self._click_and_hold_impl(on_element=get_legacy_instance(instance=on_element))
33
+
34
+ return self.from_legacy(
35
+ legacy_object=action_chains,
36
+ execute_js_script_function=self._execute_js_script_function,
37
+ )
38
+
39
+ def context_click(self, on_element: Optional[WEB_ELEMENT_TYPEHINT]) -> "ActionChains":
40
+ action_chains = self._context_click_impl(on_element=get_legacy_instance(instance=on_element))
41
+
42
+ return self.from_legacy(
43
+ legacy_object=action_chains,
44
+ execute_js_script_function=self._execute_js_script_function,
45
+ )
46
+
47
+ def double_click(self, on_element: Optional[WEB_ELEMENT_TYPEHINT]) -> "ActionChains":
48
+ action_chains = self._double_click_impl(on_element=get_legacy_instance(instance=on_element))
49
+
50
+ return self.from_legacy(
51
+ legacy_object=action_chains,
52
+ execute_js_script_function=self._execute_js_script_function,
53
+ )
54
+
55
+ def release(self, on_element: Optional[WEB_ELEMENT_TYPEHINT]) -> "ActionChains":
56
+ action_chains = self._release_impl(on_element=get_legacy_instance(instance=on_element))
57
+
58
+ return self.from_legacy(
59
+ legacy_object=action_chains,
60
+ execute_js_script_function=self._execute_js_script_function,
61
+ )
@@ -0,0 +1,45 @@
1
+ from typing import TYPE_CHECKING
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.sync.action_chains.base import BaseMixin
5
+ from osn_selenium.instances.unified.action_chains.drag_and_drop import (
6
+ UnifiedDragAndDropMixin
7
+ )
8
+ from osn_selenium.abstract.instances.action_chains.drag_and_drop import (
9
+ AbstractDragAndDropMixin
10
+ )
11
+
12
+
13
+ __all__ = ["DragAndDropMixin"]
14
+
15
+ if TYPE_CHECKING:
16
+ from osn_selenium.instances.sync.action_chains import ActionChains
17
+
18
+
19
+ class DragAndDropMixin(BaseMixin, UnifiedDragAndDropMixin, AbstractDragAndDropMixin):
20
+ """
21
+ Mixin class providing drag and drop interaction methods.
22
+ """
23
+
24
+ def drag_and_drop(self, source: WEB_ELEMENT_TYPEHINT, target: WEB_ELEMENT_TYPEHINT) -> "ActionChains":
25
+ action_chains = self._drag_and_drop_impl(
26
+ source=get_legacy_instance(instance=source),
27
+ target=get_legacy_instance(instance=target)
28
+ )
29
+
30
+ return self.from_legacy(
31
+ legacy_object=action_chains,
32
+ execute_js_script_function=self._execute_js_script_function,
33
+ )
34
+
35
+ def drag_and_drop_by_offset(self, source: WEB_ELEMENT_TYPEHINT, xoffset: int, yoffset: int) -> "ActionChains":
36
+ action_chains = self._drag_and_drop_by_offset_impl(
37
+ source=get_legacy_instance(instance=source),
38
+ xoffset=xoffset,
39
+ yoffset=yoffset
40
+ )
41
+
42
+ return self.from_legacy(
43
+ legacy_object=action_chains,
44
+ execute_js_script_function=self._execute_js_script_function,
45
+ )
@@ -0,0 +1,37 @@
1
+ from typing import TYPE_CHECKING
2
+ from osn_selenium.instances._typehints import WEB_ELEMENT_TYPEHINT
3
+ from osn_selenium.instances.sync.action_chains.base import BaseMixin
4
+ from osn_selenium.instances.unified.action_chains.hm_keyboard import (
5
+ UnifiedHMKeyboardMixin
6
+ )
7
+ from osn_selenium.abstract.instances.action_chains.hm_keyboard import (
8
+ AbstractHMKeyboardMixin
9
+ )
10
+
11
+
12
+ __all__ = ["HMKeyboardMixin"]
13
+
14
+ if TYPE_CHECKING:
15
+ from osn_selenium.instances.sync.action_chains import ActionChains
16
+
17
+
18
+ class HMKeyboardMixin(BaseMixin, UnifiedHMKeyboardMixin, AbstractHMKeyboardMixin):
19
+ """
20
+ Mixin class providing human-like keyboard interaction methods.
21
+ """
22
+
23
+ def hm_send_keys(self, text: str) -> "ActionChains":
24
+ action_chains = self._hm_send_keys_impl(text=text)
25
+
26
+ return self.from_legacy(
27
+ legacy_object=action_chains,
28
+ execute_js_script_function=self._execute_js_script_function,
29
+ )
30
+
31
+ def hm_send_keys_to_element(self, element: WEB_ELEMENT_TYPEHINT, text: str) -> "ActionChains":
32
+ action_chains = self._hm_send_keys_to_element_impl(element=element, text=text)
33
+
34
+ return self.from_legacy(
35
+ legacy_object=action_chains,
36
+ execute_js_script_function=self._execute_js_script_function,
37
+ )
@@ -0,0 +1,81 @@
1
+ from osn_selenium.models import Point
2
+ from typing import TYPE_CHECKING, Tuple
3
+ from osn_selenium.instances._typehints import WEB_ELEMENT_TYPEHINT
4
+ from osn_selenium.instances.sync.action_chains.base import BaseMixin
5
+ from osn_selenium.instances.unified.action_chains.hm_move import UnifiedHMMoveMixin
6
+ from osn_selenium.abstract.instances.action_chains.hm_move import AbstractHMMoveMixin
7
+
8
+
9
+ __all__ = ["HMMoveMixin"]
10
+
11
+ if TYPE_CHECKING:
12
+ from osn_selenium.instances.sync.action_chains import ActionChains
13
+
14
+
15
+ class HMMoveMixin(BaseMixin, UnifiedHMMoveMixin, AbstractHMMoveMixin):
16
+ """
17
+ Mixin class providing human-like mouse movement interaction methods.
18
+ """
19
+
20
+ def hm_move(self, start_position: Point, end_position: Point) -> "ActionChains":
21
+ action_chains = self._hm_move_impl(start_position=start_position, end_position=end_position)
22
+
23
+ return self.from_legacy(
24
+ legacy_object=action_chains,
25
+ execute_js_script_function=self._execute_js_script_function,
26
+ )
27
+
28
+ def hm_move_by_offset(self, start_position: Point, xoffset: int, yoffset: int) -> Tuple["ActionChains", Point]:
29
+ action_chains, point = self._hm_move_by_offset_impl(start_position=start_position, xoffset=xoffset, yoffset=yoffset)
30
+
31
+ return (
32
+ self.from_legacy(
33
+ legacy_object=action_chains,
34
+ execute_js_script_function=self._execute_js_script_function,
35
+ ),
36
+ point,
37
+ )
38
+
39
+ def hm_move_to_element(self, start_position: Point, element: WEB_ELEMENT_TYPEHINT) -> Tuple["ActionChains", Point]:
40
+ action_chains, point = self._hm_move_to_element_impl(start_position=start_position, element=element)
41
+
42
+ return (
43
+ self.from_legacy(
44
+ legacy_object=action_chains,
45
+ execute_js_script_function=self._execute_js_script_function,
46
+ ),
47
+ point,
48
+ )
49
+
50
+ def hm_move_to_element_with_offset(
51
+ self,
52
+ start_position: Point,
53
+ element: WEB_ELEMENT_TYPEHINT,
54
+ xoffset: int,
55
+ yoffset: int
56
+ ) -> Tuple["ActionChains", Point]:
57
+ action_chains, point = self._hm_move_to_element_with_offset_impl(
58
+ start_position=start_position,
59
+ element=element,
60
+ xoffset=xoffset,
61
+ yoffset=yoffset
62
+ )
63
+
64
+ return (
65
+ self.from_legacy(
66
+ legacy_object=action_chains,
67
+ execute_js_script_function=self._execute_js_script_function,
68
+ ),
69
+ point,
70
+ )
71
+
72
+ def hm_move_to_element_with_random_offset(self, start_position: Point, element: WEB_ELEMENT_TYPEHINT) -> Tuple["ActionChains", Point]:
73
+ action_chains, point = self._hm_move_to_element_with_random_offset_impl(start_position=start_position, element=element)
74
+
75
+ return (
76
+ self.from_legacy(
77
+ legacy_object=action_chains,
78
+ execute_js_script_function=self._execute_js_script_function,
79
+ ),
80
+ point,
81
+ )
@@ -0,0 +1,60 @@
1
+ from typing import (
2
+ Optional,
3
+ TYPE_CHECKING
4
+ )
5
+ from osn_selenium.instances._typehints import WEB_ELEMENT_TYPEHINT
6
+ from osn_selenium.instances.sync.action_chains.base import BaseMixin
7
+ from selenium.webdriver.common.actions.wheel_input import ScrollOrigin
8
+ from osn_selenium.instances.unified.action_chains.hm_scroll import UnifiedHMScrollMixin
9
+ from osn_selenium.abstract.instances.action_chains.hm_scroll import (
10
+ AbstractHMScrollMixin
11
+ )
12
+
13
+
14
+ __all__ = ["HMScrollMixin"]
15
+
16
+ if TYPE_CHECKING:
17
+ from osn_selenium.instances.sync.action_chains import ActionChains
18
+
19
+
20
+ class HMScrollMixin(BaseMixin, UnifiedHMScrollMixin, AbstractHMScrollMixin):
21
+ """
22
+ Mixin class providing human-like scroll interaction methods.
23
+ """
24
+
25
+ def hm_scroll_by_amount(self, delta_x: int, delta_y: int) -> "ActionChains":
26
+ action_chains = self._hm_scroll_by_amount_impl(delta_x=delta_x, delta_y=delta_y)
27
+
28
+ return self.from_legacy(
29
+ legacy_object=action_chains,
30
+ execute_js_script_function=self._execute_js_script_function,
31
+ )
32
+
33
+ def hm_scroll_from_origin(self, delta_x: int, delta_y: int, origin: Optional[ScrollOrigin] = None) -> "ActionChains":
34
+ action_chains = self._hm_scroll_from_origin_impl(delta_x=delta_x, delta_y=delta_y, origin=origin)
35
+
36
+ return self.from_legacy(
37
+ legacy_object=action_chains,
38
+ execute_js_script_function=self._execute_js_script_function,
39
+ )
40
+
41
+ def hm_scroll_to_element(
42
+ self,
43
+ element: WEB_ELEMENT_TYPEHINT,
44
+ additional_lower_y_offset: int = 0,
45
+ additional_upper_y_offset: int = 0,
46
+ additional_right_x_offset: int = 0,
47
+ additional_left_x_offset: int = 0,
48
+ ) -> "ActionChains":
49
+ action_chains = self._hm_scroll_to_element_impl(
50
+ element=element,
51
+ additional_lower_y_offset=additional_lower_y_offset,
52
+ additional_upper_y_offset=additional_upper_y_offset,
53
+ additional_right_x_offset=additional_right_x_offset,
54
+ additional_left_x_offset=additional_left_x_offset,
55
+ )
56
+
57
+ return self.from_legacy(
58
+ legacy_object=action_chains,
59
+ execute_js_script_function=self._execute_js_script_function,
60
+ )
@@ -0,0 +1,55 @@
1
+ from typing import (
2
+ Optional,
3
+ TYPE_CHECKING
4
+ )
5
+ from osn_selenium.instances.convert import get_legacy_instance
6
+ from osn_selenium.instances._typehints import WEB_ELEMENT_TYPEHINT
7
+ from osn_selenium.instances.sync.action_chains.base import BaseMixin
8
+ from osn_selenium.instances.unified.action_chains.keyboard import UnifiedKeyboardMixin
9
+ from osn_selenium.abstract.instances.action_chains.keyboard import (
10
+ AbstractKeyboardMixin
11
+ )
12
+
13
+
14
+ __all__ = ["KeyboardMixin"]
15
+
16
+ if TYPE_CHECKING:
17
+ from osn_selenium.instances.sync.action_chains import ActionChains
18
+
19
+
20
+ class KeyboardMixin(BaseMixin, UnifiedKeyboardMixin, AbstractKeyboardMixin):
21
+ """
22
+ Mixin class providing keyboard interaction methods.
23
+ """
24
+
25
+ def key_down(self, value: str, element: Optional[WEB_ELEMENT_TYPEHINT]) -> "ActionChains":
26
+ action_chains = self._key_down_impl(value=value, element=get_legacy_instance(instance=element))
27
+
28
+ return self.from_legacy(
29
+ legacy_object=action_chains,
30
+ execute_js_script_function=self._execute_js_script_function,
31
+ )
32
+
33
+ def key_up(self, value: str, element: Optional[WEB_ELEMENT_TYPEHINT]) -> "ActionChains":
34
+ action_chains = self._key_up_impl(value=value, element=get_legacy_instance(instance=element))
35
+
36
+ return self.from_legacy(
37
+ legacy_object=action_chains,
38
+ execute_js_script_function=self._execute_js_script_function,
39
+ )
40
+
41
+ def send_keys(self, *keys_to_send: str) -> "ActionChains":
42
+ action_chains = self._send_keys_impl(*keys_to_send)
43
+
44
+ return self.from_legacy(
45
+ legacy_object=action_chains,
46
+ execute_js_script_function=self._execute_js_script_function,
47
+ )
48
+
49
+ def send_keys_to_element(self, element: WEB_ELEMENT_TYPEHINT, *keys_to_send: str) -> "ActionChains":
50
+ action_chains = self._send_keys_to_element_impl(get_legacy_instance(instance=element), *keys_to_send)
51
+
52
+ return self.from_legacy(
53
+ legacy_object=action_chains,
54
+ execute_js_script_function=self._execute_js_script_function,
55
+ )
@@ -0,0 +1,46 @@
1
+ from typing import TYPE_CHECKING
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.sync.action_chains.base import BaseMixin
5
+ from osn_selenium.instances.unified.action_chains.move import UnifiedMoveMixin
6
+ from osn_selenium.abstract.instances.action_chains.move import AbstractMoveMixin
7
+
8
+
9
+ __all__ = ["MoveMixin"]
10
+
11
+ if TYPE_CHECKING:
12
+ from osn_selenium.instances.sync.action_chains import ActionChains
13
+
14
+
15
+ class MoveMixin(BaseMixin, UnifiedMoveMixin, AbstractMoveMixin):
16
+ """
17
+ Mixin class providing mouse movement interaction methods.
18
+ """
19
+
20
+ def move_by_offset(self, xoffset: int, yoffset: int) -> "ActionChains":
21
+ action_chains = self._move_by_offset_impl(xoffset=xoffset, yoffset=yoffset)
22
+
23
+ return self.from_legacy(
24
+ legacy_object=action_chains,
25
+ execute_js_script_function=self._execute_js_script_function,
26
+ )
27
+
28
+ def move_to_element(self, to_element: WEB_ELEMENT_TYPEHINT) -> "ActionChains":
29
+ action_chains = self._move_to_element_impl(to_element=get_legacy_instance(instance=to_element))
30
+
31
+ return self.from_legacy(
32
+ legacy_object=action_chains,
33
+ execute_js_script_function=self._execute_js_script_function,
34
+ )
35
+
36
+ def move_to_element_with_offset(self, to_element: WEB_ELEMENT_TYPEHINT, xoffset: int, yoffset: int) -> "ActionChains":
37
+ action_chains = self._move_to_element_with_offset_impl(
38
+ to_element=get_legacy_instance(instance=to_element),
39
+ xoffset=xoffset,
40
+ yoffset=yoffset
41
+ )
42
+
43
+ return self.from_legacy(
44
+ legacy_object=action_chains,
45
+ execute_js_script_function=self._execute_js_script_function,
46
+ )
@@ -0,0 +1,43 @@
1
+ from typing import TYPE_CHECKING
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.sync.action_chains.base import BaseMixin
5
+ from selenium.webdriver.common.actions.wheel_input import ScrollOrigin
6
+ from osn_selenium.instances.unified.action_chains.scroll import UnifiedScrollMixin
7
+ from osn_selenium.abstract.instances.action_chains.scroll import AbstractScrollMixin
8
+
9
+
10
+ __all__ = ["ScrollMixin"]
11
+
12
+ if TYPE_CHECKING:
13
+ from osn_selenium.instances.sync.action_chains import ActionChains
14
+
15
+
16
+ class ScrollMixin(BaseMixin, UnifiedScrollMixin, AbstractScrollMixin):
17
+ """
18
+ Mixin class providing scroll and wheel interaction methods.
19
+ """
20
+
21
+ def scroll_by_amount(self, delta_x: int, delta_y: int) -> "ActionChains":
22
+ action_chains = self._scroll_by_amount_impl(delta_x=delta_x, delta_y=delta_y)
23
+
24
+ return self.from_legacy(
25
+ legacy_object=action_chains,
26
+ execute_js_script_function=self._execute_js_script_function,
27
+ )
28
+
29
+ def scroll_from_origin(self, scroll_origin: ScrollOrigin, delta_x: int, delta_y: int) -> "ActionChains":
30
+ action_chains = self._scroll_from_origin_impl(scroll_origin=scroll_origin, delta_x=delta_x, delta_y=delta_y)
31
+
32
+ return self.from_legacy(
33
+ legacy_object=action_chains,
34
+ execute_js_script_function=self._execute_js_script_function,
35
+ )
36
+
37
+ def scroll_to_element(self, element: WEB_ELEMENT_TYPEHINT) -> "ActionChains":
38
+ action_chains = self._scroll_to_element_impl(element=get_legacy_instance(instance=element))
39
+
40
+ return self.from_legacy(
41
+ legacy_object=action_chains,
42
+ execute_js_script_function=self._execute_js_script_function,
43
+ )
@@ -0,0 +1,30 @@
1
+ from typing import TYPE_CHECKING, Union
2
+ from osn_selenium.instances.sync.action_chains.base import BaseMixin
3
+ from osn_selenium.instances.unified.action_chains.utils import UnifiedUtilsMixin
4
+ from osn_selenium.abstract.instances.action_chains.utils import AbstractUtilsMixin
5
+
6
+
7
+ __all__ = ["UtilsMixin"]
8
+
9
+ if TYPE_CHECKING:
10
+ from osn_selenium.instances.sync.action_chains import ActionChains
11
+
12
+
13
+ class UtilsMixin(BaseMixin, UnifiedUtilsMixin, AbstractUtilsMixin):
14
+ """
15
+ Mixin class providing utility methods for action chains.
16
+ """
17
+
18
+ def pause(self, seconds: Union[float, int]) -> "ActionChains":
19
+ action_chains = self._pause_impl(seconds=seconds)
20
+
21
+ return self.from_legacy(
22
+ legacy_object=action_chains,
23
+ execute_js_script_function=self._execute_js_script_function,
24
+ )
25
+
26
+ def perform(self) -> None:
27
+ self._perform_impl()
28
+
29
+ def reset_actions(self) -> None:
30
+ self._reset_actions_impl()
@@ -0,0 +1,69 @@
1
+ from typing import Self
2
+ from osn_selenium.instances._typehints import ALERT_TYPEHINT
3
+ from osn_selenium.instances.unified.alert import UnifiedAlert
4
+ from osn_selenium.instances.convert import get_legacy_instance
5
+ from osn_selenium.abstract.instances.alert import AbstractAlert
6
+ from selenium.webdriver.common.alert import Alert as legacyAlert
7
+ from osn_selenium.exceptions.instance import (
8
+ CannotConvertTypeError
9
+ )
10
+
11
+
12
+ __all__ = ["Alert"]
13
+
14
+
15
+ class Alert(UnifiedAlert, AbstractAlert):
16
+ """
17
+ Wrapper for the legacy Selenium Alert instance.
18
+
19
+ Manages browser alerts, prompts, and confirmation dialogs, allowing
20
+ acceptance, dismissal, text retrieval, and input.
21
+ """
22
+
23
+ def __init__(self, selenium_alert: legacyAlert) -> None:
24
+ """
25
+ Initializes the Alert wrapper.
26
+
27
+ Args:
28
+ selenium_alert (legacyAlert): The legacy Selenium Alert instance to wrap.
29
+ """
30
+
31
+ UnifiedAlert.__init__(self, selenium_alert=selenium_alert)
32
+
33
+ def accept(self) -> None:
34
+ self._accept_impl()
35
+
36
+ def dismiss(self) -> None:
37
+ self._dismiss_impl()
38
+
39
+ @classmethod
40
+ def from_legacy(cls, legacy_object: ALERT_TYPEHINT) -> Self:
41
+ """
42
+ Creates an instance from a legacy Selenium Alert object.
43
+
44
+ This factory method is used to wrap an existing Selenium Alert
45
+ instance into the new interface.
46
+
47
+ Args:
48
+ legacy_object (ALERT_TYPEHINT): The legacy Selenium Alert instance or its wrapper.
49
+
50
+ Returns:
51
+ Self: A new instance of a class implementing Alert.
52
+ """
53
+
54
+ legacy_alert_obj = get_legacy_instance(instance=legacy_object)
55
+
56
+ if not isinstance(legacy_alert_obj, legacyAlert):
57
+ raise CannotConvertTypeError(from_=legacyAlert, to_=legacy_object)
58
+
59
+ return cls(selenium_alert=legacy_alert_obj)
60
+
61
+ @property
62
+ def legacy(self) -> legacyAlert:
63
+ return self._legacy_impl
64
+
65
+ def send_keys(self, keysToSend: str) -> None:
66
+ self._send_keys_impl(keysToSend=keysToSend)
67
+
68
+ def text(self) -> str:
69
+ return self._text_impl()
@@ -0,0 +1,72 @@
1
+ from typing import List, Self
2
+ from osn_selenium.instances._typehints import BROWSER_TYPEHINT
3
+ from osn_selenium.instances.convert import get_legacy_instance
4
+ from osn_selenium.instances.unified.browser import UnifiedBrowser
5
+ from osn_selenium.abstract.instances.browser import AbstractBrowser
6
+ from osn_selenium.exceptions.instance import (
7
+ CannotConvertTypeError
8
+ )
9
+ from selenium.webdriver.common.bidi.browser import (
10
+ Browser as legacyBrowser,
11
+ ClientWindowInfo
12
+ )
13
+
14
+
15
+ __all__ = ["Browser"]
16
+
17
+
18
+ class Browser(UnifiedBrowser, AbstractBrowser):
19
+ """
20
+ Wrapper for the legacy Selenium BiDi Browser instance.
21
+
22
+ Provides methods to manage user contexts (profiles) and inspect client
23
+ window information via the WebDriver BiDi protocol.
24
+ """
25
+
26
+ def __init__(self, selenium_browser: legacyBrowser) -> None:
27
+ """
28
+ Initializes the Browser wrapper.
29
+
30
+ Args:
31
+ selenium_browser (legacyBrowser): The legacy Selenium Browser instance to wrap.
32
+ """
33
+
34
+ UnifiedBrowser.__init__(self, selenium_browser=selenium_browser)
35
+
36
+ def create_user_context(self) -> str:
37
+ return self._create_user_context_impl()
38
+
39
+ @classmethod
40
+ def from_legacy(cls, legacy_object: BROWSER_TYPEHINT) -> Self:
41
+ """
42
+ Creates an instance from a legacy Selenium Browser object.
43
+
44
+ This factory method is used to wrap an existing Selenium Browser
45
+ instance into the new interface.
46
+
47
+ Args:
48
+ legacy_object (BROWSER_TYPEHINT): The legacy Selenium Browser instance or its wrapper.
49
+
50
+ Returns:
51
+ Self: A new instance of a class implementing Browser.
52
+ """
53
+
54
+ legacy_browser_obj = get_legacy_instance(instance=legacy_object)
55
+
56
+ if not isinstance(legacy_browser_obj, legacyBrowser):
57
+ raise CannotConvertTypeError(from_=legacyBrowser, to_=legacy_object)
58
+
59
+ return cls(selenium_browser=legacy_browser_obj)
60
+
61
+ def get_client_windows(self) -> List[ClientWindowInfo]:
62
+ return self._get_client_windows_impl()
63
+
64
+ def get_user_contexts(self) -> List[str]:
65
+ return self._get_user_contexts_impl()
66
+
67
+ @property
68
+ def legacy(self) -> legacyBrowser:
69
+ return self._legacy_impl
70
+
71
+ def remove_user_context(self, user_context_id: str) -> None:
72
+ self._remove_user_context_impl(user_context_id=user_context_id)