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,87 @@
1
+ import trio
2
+ from typing import Optional, Self
3
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
4
+ from osn_selenium.instances._typehints import ALERT_TYPEHINT
5
+ from osn_selenium.instances.unified.alert import UnifiedAlert
6
+ from osn_selenium.instances.convert import get_legacy_instance
7
+ from osn_selenium.abstract.instances.alert import AbstractAlert
8
+ from selenium.webdriver.common.alert import Alert as legacyAlert
9
+ from osn_selenium.exceptions.instance import (
10
+ CannotConvertTypeError
11
+ )
12
+
13
+
14
+ __all__ = ["Alert"]
15
+
16
+
17
+ class Alert(UnifiedAlert, TrioThreadMixin, AbstractAlert):
18
+ """
19
+ Wrapper for the legacy Selenium Alert instance.
20
+
21
+ Manages browser alerts, prompts, and confirmation dialogs, allowing
22
+ acceptance, dismissal, text retrieval, and input.
23
+ """
24
+
25
+ def __init__(
26
+ self,
27
+ selenium_alert: legacyAlert,
28
+ lock: trio.Lock,
29
+ limiter: Optional[trio.CapacityLimiter] = None,
30
+ ) -> None:
31
+ """
32
+ Initializes the Alert wrapper.
33
+
34
+ Args:
35
+ selenium_alert (legacyAlert): The legacy Selenium Alert instance to wrap.
36
+ lock (trio.Lock): A Trio lock for managing concurrent access.
37
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
38
+ """
39
+
40
+ UnifiedAlert.__init__(self, selenium_alert=selenium_alert)
41
+
42
+ TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
43
+
44
+ async def accept(self) -> None:
45
+ await self.sync_to_trio(sync_function=self._accept_impl)()
46
+
47
+ async def dismiss(self) -> None:
48
+ await self.sync_to_trio(sync_function=self._dismiss_impl)()
49
+
50
+ @classmethod
51
+ def from_legacy(
52
+ cls,
53
+ legacy_object: ALERT_TYPEHINT,
54
+ lock: trio.Lock,
55
+ limiter: trio.CapacityLimiter,
56
+ ) -> Self:
57
+ """
58
+ Creates an instance from a legacy Selenium Alert object.
59
+
60
+ This factory method is used to wrap an existing Selenium Alert
61
+ instance into the new interface.
62
+
63
+ Args:
64
+ legacy_object (ALERT_TYPEHINT): The legacy Selenium Alert instance or its wrapper.
65
+ lock (trio.Lock): A Trio lock for managing concurrent access.
66
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
67
+
68
+ Returns:
69
+ Self: A new instance of a class implementing Alert.
70
+ """
71
+
72
+ legacy_alert_obj = get_legacy_instance(instance=legacy_object)
73
+
74
+ if not isinstance(legacy_alert_obj, legacyAlert):
75
+ raise CannotConvertTypeError(from_=legacyAlert, to_=legacy_object)
76
+
77
+ return cls(selenium_alert=legacy_alert_obj, lock=lock, limiter=limiter)
78
+
79
+ @property
80
+ def legacy(self) -> legacyAlert:
81
+ return self._legacy_impl
82
+
83
+ async def send_keys(self, keysToSend: str) -> None:
84
+ await self.sync_to_trio(sync_function=self._send_keys_impl)(keysToSend=keysToSend)
85
+
86
+ async def text(self) -> str:
87
+ return await self.sync_to_trio(sync_function=self._text_impl)()
@@ -0,0 +1,90 @@
1
+ import trio
2
+ from typing import List, Self
3
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
4
+ from osn_selenium.instances._typehints import BROWSER_TYPEHINT
5
+ from osn_selenium.instances.convert import get_legacy_instance
6
+ from osn_selenium.instances.unified.browser import UnifiedBrowser
7
+ from osn_selenium.abstract.instances.browser import AbstractBrowser
8
+ from osn_selenium.exceptions.instance import (
9
+ CannotConvertTypeError
10
+ )
11
+ from selenium.webdriver.common.bidi.browser import (
12
+ Browser as legacyBrowser,
13
+ ClientWindowInfo
14
+ )
15
+
16
+
17
+ __all__ = ["Browser"]
18
+
19
+
20
+ class Browser(UnifiedBrowser, TrioThreadMixin, AbstractBrowser):
21
+ """
22
+ Wrapper for the legacy Selenium BiDi Browser instance.
23
+
24
+ Provides methods to manage user contexts (profiles) and inspect client
25
+ window information via the WebDriver BiDi protocol.
26
+ """
27
+
28
+ def __init__(
29
+ self,
30
+ selenium_browser: legacyBrowser,
31
+ lock: trio.Lock,
32
+ limiter: trio.CapacityLimiter,
33
+ ) -> None:
34
+ """
35
+ Initializes the Browser wrapper.
36
+
37
+ Args:
38
+ selenium_browser (legacyBrowser): The legacy Selenium Browser instance to wrap.
39
+ lock (trio.Lock): A Trio lock for managing concurrent access.
40
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
41
+ """
42
+
43
+ UnifiedBrowser.__init__(self, selenium_browser=selenium_browser)
44
+
45
+ TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
46
+
47
+ async def create_user_context(self) -> str:
48
+ return await self.sync_to_trio(sync_function=self._create_user_context_impl)()
49
+
50
+ @classmethod
51
+ def from_legacy(
52
+ cls,
53
+ legacy_object: BROWSER_TYPEHINT,
54
+ lock: trio.Lock,
55
+ limiter: trio.CapacityLimiter,
56
+ ) -> Self:
57
+ """
58
+ Creates an instance from a legacy Selenium Browser object.
59
+
60
+ This factory method is used to wrap an existing Selenium Browser
61
+ instance into the new interface.
62
+
63
+ Args:
64
+ legacy_object (BROWSER_TYPEHINT): The legacy Selenium Browser instance or its wrapper.
65
+ lock (trio.Lock): A Trio lock for managing concurrent access.
66
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
67
+
68
+ Returns:
69
+ Self: A new instance of a class implementing Browser.
70
+ """
71
+
72
+ legacy_browser_obj = get_legacy_instance(instance=legacy_object)
73
+
74
+ if not isinstance(legacy_browser_obj, legacyBrowser):
75
+ raise CannotConvertTypeError(from_=legacyBrowser, to_=legacy_object)
76
+
77
+ return cls(selenium_browser=legacy_browser_obj, limiter=limiter, lock=lock)
78
+
79
+ async def get_client_windows(self) -> List[ClientWindowInfo]:
80
+ return await self.sync_to_trio(sync_function=self._get_client_windows_impl)()
81
+
82
+ async def get_user_contexts(self) -> List[str]:
83
+ return await self.sync_to_trio(sync_function=self._get_user_contexts_impl)()
84
+
85
+ @property
86
+ def legacy(self) -> legacyBrowser:
87
+ return self._legacy_impl
88
+
89
+ async def remove_user_context(self, user_context_id: str) -> None:
90
+ await self.sync_to_trio(sync_function=self._remove_user_context_impl)(user_context_id=user_context_id)
@@ -0,0 +1,216 @@
1
+ import trio
2
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
3
+ from osn_selenium.instances.convert import get_legacy_instance
4
+ from osn_selenium.exceptions.instance import (
5
+ CannotConvertTypeError
6
+ )
7
+ from osn_selenium.instances._typehints import (
8
+ BROWSING_CONTEXT_TYPEHINT
9
+ )
10
+ from typing import (
11
+ Any,
12
+ Callable,
13
+ Dict,
14
+ List,
15
+ Optional,
16
+ Self,
17
+ Union
18
+ )
19
+ from osn_selenium.instances.unified.browsing_context import (
20
+ UnifiedBrowsingContext
21
+ )
22
+ from osn_selenium.abstract.instances.browsing_context import (
23
+ AbstractBrowsingContext
24
+ )
25
+ from selenium.webdriver.common.bidi.browsing_context import (
26
+ BrowsingContext as legacyBrowsingContext,
27
+ BrowsingContextInfo
28
+ )
29
+
30
+
31
+ __all__ = ["BrowsingContext"]
32
+
33
+
34
+ class BrowsingContext(UnifiedBrowsingContext, TrioThreadMixin, AbstractBrowsingContext):
35
+ """
36
+ Wrapper for the legacy Selenium BiDi BrowsingContext instance (Trio/Async).
37
+
38
+ Controls browser tabs and windows (contexts), allowing navigation,
39
+ reloading, closing, screenshotting, and DOM tree inspection.
40
+ """
41
+
42
+ def __init__(
43
+ self,
44
+ selenium_browsing_context: legacyBrowsingContext,
45
+ lock: trio.Lock,
46
+ limiter: trio.CapacityLimiter,
47
+ ) -> None:
48
+ """
49
+ Initializes the BrowsingContext wrapper.
50
+
51
+ Args:
52
+ selenium_browsing_context (legacyBrowsingContext): The legacy Selenium instance to wrap.
53
+ lock (trio.Lock): A Trio lock for managing concurrent access.
54
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
55
+ """
56
+
57
+ UnifiedBrowsingContext.__init__(self, selenium_browsing_context=selenium_browsing_context)
58
+
59
+ TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
60
+
61
+ async def activate(self, context: str) -> Any:
62
+ return await self.sync_to_trio(sync_function=self._activate_impl)(context=context)
63
+
64
+ async def add_event_handler(
65
+ self,
66
+ event: str,
67
+ callback: Callable,
68
+ contexts: Optional[List[str]] = None,
69
+ ) -> int:
70
+ return await self.sync_to_trio(sync_function=self._add_event_handler_impl)(event=event, callback=callback, contexts=contexts)
71
+
72
+ async def capture_screenshot(
73
+ self,
74
+ context: str,
75
+ origin: str = "viewport",
76
+ format: Optional[Dict] = None,
77
+ clip: Optional[Dict] = None,
78
+ ) -> str:
79
+ return await self.sync_to_trio(sync_function=self._capture_screenshot_impl)(context=context, origin=origin, format=format, clip=clip)
80
+
81
+ async def clear_event_handlers(self) -> None:
82
+ await self.sync_to_trio(sync_function=self._clear_event_handlers_impl)()
83
+
84
+ async def close(self, context: str, prompt_unload: bool = False) -> None:
85
+ await self.sync_to_trio(sync_function=self._close_impl)(context=context, prompt_unload=prompt_unload)
86
+
87
+ async def create(
88
+ self,
89
+ type: str,
90
+ reference_context: Optional[str] = None,
91
+ background: bool = False,
92
+ user_context: Optional[str] = None,
93
+ ) -> str:
94
+ return await self.sync_to_trio(sync_function=self._create_impl)(
95
+ type=type,
96
+ reference_context=reference_context,
97
+ background=background,
98
+ user_context=user_context
99
+ )
100
+
101
+ @classmethod
102
+ def from_legacy(
103
+ cls,
104
+ legacy_object: BROWSING_CONTEXT_TYPEHINT,
105
+ lock: trio.Lock,
106
+ limiter: trio.CapacityLimiter,
107
+ ) -> Self:
108
+ """
109
+ Creates an instance from a legacy Selenium BrowsingContext object.
110
+
111
+ This factory method is used to wrap an existing Selenium BrowsingContext
112
+ instance into the new interface.
113
+
114
+ Args:
115
+ legacy_object (BROWSING_CONTEXT_TYPEHINT): The legacy Selenium BrowsingContext instance or its wrapper.
116
+ lock (trio.Lock): A Trio lock for managing concurrent access.
117
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
118
+
119
+ Returns:
120
+ Self: A new instance of a class implementing BrowsingContext.
121
+ """
122
+
123
+ legacy_browsing_context_obj = get_legacy_instance(instance=legacy_object)
124
+
125
+ if not isinstance(legacy_browsing_context_obj, legacyBrowsingContext):
126
+ raise CannotConvertTypeError(from_=legacyBrowsingContext, to_=legacy_object)
127
+
128
+ return cls(
129
+ selenium_browsing_context=legacy_browsing_context_obj,
130
+ lock=lock,
131
+ limiter=limiter
132
+ )
133
+
134
+ async def get_tree(self, max_depth: Optional[int] = None, root: Optional[str] = None) -> List[BrowsingContextInfo]:
135
+ return await self.sync_to_trio(sync_function=self._get_tree_impl)(max_depth=max_depth, root=root)
136
+
137
+ async def handle_user_prompt(
138
+ self,
139
+ context: str,
140
+ accept: Optional[bool] = None,
141
+ user_text: Optional[str] = None,
142
+ ) -> None:
143
+ await self.sync_to_trio(sync_function=self._handle_user_prompt_impl)(context=context, accept=accept, user_text=user_text)
144
+
145
+ @property
146
+ def legacy(self) -> legacyBrowsingContext:
147
+ return self._legacy_impl
148
+
149
+ async def locate_nodes(
150
+ self,
151
+ context: str,
152
+ locator: Dict,
153
+ max_node_count: Optional[int] = None,
154
+ serialization_options: Optional[Dict] = None,
155
+ start_nodes: Optional[List[Dict]] = None,
156
+ ) -> List[Dict]:
157
+ return await self.sync_to_trio(sync_function=self._locate_nodes_impl)(
158
+ context=context,
159
+ locator=locator,
160
+ max_node_count=max_node_count,
161
+ serialization_options=serialization_options,
162
+ start_nodes=start_nodes
163
+ )
164
+
165
+ async def navigate(self, context: str, url: str, wait: Optional[str] = None) -> Dict:
166
+ return await self.sync_to_trio(sync_function=self._navigate_impl)(context=context, url=url, wait=wait)
167
+
168
+ async def print(
169
+ self,
170
+ context: str,
171
+ background: bool = False,
172
+ margin: Optional[Dict] = None,
173
+ orientation: str = "portrait",
174
+ page: Optional[Dict] = None,
175
+ page_ranges: Optional[List[Union[int, str]]] = None,
176
+ scale: float = 1.0,
177
+ shrink_to_fit: bool = True,
178
+ ) -> str:
179
+ return await self.sync_to_trio(sync_function=self._print_impl)(
180
+ context=context,
181
+ background=background,
182
+ margin=margin,
183
+ orientation=orientation,
184
+ page=page,
185
+ page_ranges=page_ranges,
186
+ scale=scale,
187
+ shrink_to_fit=shrink_to_fit
188
+ )
189
+
190
+ async def reload(
191
+ self,
192
+ context: str,
193
+ ignore_cache: Optional[bool] = None,
194
+ wait: Optional[str] = None,
195
+ ) -> Dict:
196
+ return await self.sync_to_trio(sync_function=self._reload_impl)(context=context, ignore_cache=ignore_cache, wait=wait)
197
+
198
+ async def remove_event_handler(self, event: str, callback_id: int) -> None:
199
+ await self.sync_to_trio(sync_function=self._remove_event_handler_impl)(event=event, callback_id=callback_id)
200
+
201
+ async def set_viewport(
202
+ self,
203
+ context: Optional[str] = None,
204
+ viewport: Optional[Dict] = None,
205
+ device_pixel_ratio: Optional[float] = None,
206
+ user_contexts: Optional[List[str]] = None,
207
+ ) -> None:
208
+ await self.sync_to_trio(sync_function=self._set_viewport_impl)(
209
+ context=context,
210
+ viewport=viewport,
211
+ device_pixel_ratio=device_pixel_ratio,
212
+ user_contexts=user_contexts
213
+ )
214
+
215
+ async def traverse_history(self, context: str, delta: int) -> Dict:
216
+ return await self.sync_to_trio(sync_function=self._traverse_history_impl)(context=context, delta=delta)
@@ -0,0 +1,99 @@
1
+ import trio
2
+ from typing import List, Optional, Self
3
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
4
+ from selenium.webdriver.common.fedcm.account import Account
5
+ from osn_selenium.instances._typehints import DIALOG_TYPEHINT
6
+ from osn_selenium.instances.convert import get_legacy_instance
7
+ from osn_selenium.instances.unified.dialog import UnifiedDialog
8
+ from osn_selenium.abstract.instances.dialog import AbstractDialog
9
+ from osn_selenium.exceptions.instance import (
10
+ CannotConvertTypeError
11
+ )
12
+ from selenium.webdriver.common.fedcm.dialog import (
13
+ Dialog as legacyDialog
14
+ )
15
+
16
+
17
+ __all__ = ["Dialog"]
18
+
19
+
20
+ class Dialog(UnifiedDialog, TrioThreadMixin, AbstractDialog):
21
+ """
22
+ Wrapper for the legacy Selenium FedCM Dialog instance.
23
+
24
+ Handles Federated Credential Management dialogs, including account selection
25
+ and dismissal.
26
+ """
27
+
28
+ def __init__(
29
+ self,
30
+ selenium_dialog: legacyDialog,
31
+ lock: trio.Lock,
32
+ limiter: trio.CapacityLimiter,
33
+ ) -> None:
34
+ """
35
+ Initializes the Dialog wrapper.
36
+
37
+ Args:
38
+ selenium_dialog (legacyDialog): The legacy Selenium Dialog instance to wrap.
39
+ lock (trio.Lock): A Trio lock for managing concurrent access.
40
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
41
+ """
42
+
43
+ UnifiedDialog.__init__(self, selenium_dialog=selenium_dialog)
44
+
45
+ TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
46
+
47
+ async def accept(self) -> None:
48
+ await self.sync_to_trio(sync_function=self._accept_impl)()
49
+
50
+ async def dismiss(self) -> None:
51
+ await self.sync_to_trio(sync_function=self._dismiss_impl)()
52
+
53
+ @classmethod
54
+ def from_legacy(
55
+ cls,
56
+ legacy_object: DIALOG_TYPEHINT,
57
+ lock: trio.Lock,
58
+ limiter: trio.CapacityLimiter,
59
+ ) -> Self:
60
+ """
61
+ Creates an instance from a legacy Selenium Dialog object.
62
+
63
+ This factory method is used to wrap an existing Selenium Dialog
64
+ instance into the new interface.
65
+
66
+ Args:
67
+ legacy_object (DIALOG_TYPEHINT): The legacy Selenium Dialog 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 Dialog.
73
+ """
74
+
75
+ legacy_dialog_obj = get_legacy_instance(instance=legacy_object)
76
+
77
+ if not isinstance(legacy_dialog_obj, legacyDialog):
78
+ raise CannotConvertTypeError(from_=legacyDialog, to_=legacy_object)
79
+
80
+ return cls(selenium_dialog=legacy_dialog_obj, lock=lock, limiter=limiter)
81
+
82
+ async def get_accounts(self) -> List[Account]:
83
+ return await self.sync_to_trio(sync_function=self._get_accounts_impl)()
84
+
85
+ @property
86
+ def legacy(self) -> legacyDialog:
87
+ return self._legacy_impl
88
+
89
+ async def select_account(self, index: int) -> None:
90
+ await self.sync_to_trio(sync_function=self._select_account_impl)(index=index)
91
+
92
+ async def subtitle(self) -> Optional[str]:
93
+ return await self.sync_to_trio(sync_function=self._subtitle_impl)()
94
+
95
+ async def title(self) -> str:
96
+ return await self.sync_to_trio(sync_function=self._title_impl)()
97
+
98
+ async def type(self) -> Optional[str]:
99
+ return await self.sync_to_trio(sync_function=self._type_impl)()
@@ -0,0 +1,110 @@
1
+ import trio
2
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
3
+ from typing import (
4
+ Dict,
5
+ List,
6
+ Optional,
7
+ Self
8
+ )
9
+ from osn_selenium.instances._typehints import FEDCM_TYPEHINT
10
+ from osn_selenium.instances.unified.fedcm import UnifiedFedCM
11
+ from osn_selenium.instances.convert import get_legacy_instance
12
+ from osn_selenium.abstract.instances.fedcm import AbstractFedCM
13
+ from selenium.webdriver.remote.fedcm import FedCM as legacyFedCM
14
+ from osn_selenium.exceptions.instance import (
15
+ CannotConvertTypeError
16
+ )
17
+
18
+
19
+ __all__ = ["FedCM"]
20
+
21
+
22
+ class FedCM(UnifiedFedCM, TrioThreadMixin, AbstractFedCM):
23
+ """
24
+ Wrapper for the legacy Selenium FedCM instance.
25
+
26
+ Provides an interface for controlling the Federated Credential Management API,
27
+ including dialog delays and cooldown resets.
28
+ """
29
+
30
+ def __init__(
31
+ self,
32
+ selenium_fedcm: legacyFedCM,
33
+ lock: trio.Lock,
34
+ limiter: trio.CapacityLimiter,
35
+ ) -> None:
36
+ """
37
+ Initializes the FedCM wrapper.
38
+
39
+ Args:
40
+ selenium_fedcm (legacyFedCM): The legacy Selenium FedCM instance to wrap.
41
+ lock (trio.Lock): A Trio lock for managing concurrent access.
42
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
43
+ """
44
+
45
+ UnifiedFedCM.__init__(self, selenium_fedcm=selenium_fedcm)
46
+
47
+ TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
48
+
49
+ async def accept(self) -> None:
50
+ await self.sync_to_trio(sync_function=self._accept_impl)()
51
+
52
+ async def account_list(self) -> List[Dict]:
53
+ return await self.sync_to_trio(sync_function=self._account_list_impl)()
54
+
55
+ async def dialog_type(self) -> str:
56
+ return await self.sync_to_trio(sync_function=self._dialog_type_impl)()
57
+
58
+ async def disable_delay(self) -> None:
59
+ await self.sync_to_trio(sync_function=self._disable_delay_impl)()
60
+
61
+ async def dismiss(self) -> None:
62
+ await self.sync_to_trio(sync_function=self._dismiss_impl)()
63
+
64
+ async def enable_delay(self) -> None:
65
+ await self.sync_to_trio(sync_function=self._enable_delay_impl)()
66
+
67
+ @classmethod
68
+ def from_legacy(
69
+ cls,
70
+ legacy_object: FEDCM_TYPEHINT,
71
+ lock: trio.Lock,
72
+ limiter: trio.CapacityLimiter,
73
+ ) -> Self:
74
+ """
75
+ Creates an instance from a legacy Selenium FedCM object.
76
+
77
+ This factory method is used to wrap an existing Selenium FedCM
78
+ instance into the new interface.
79
+
80
+ Args:
81
+ legacy_object (FEDCM_TYPEHINT): The legacy Selenium FedCM instance or its wrapper.
82
+ lock (trio.Lock): A Trio lock for managing concurrent access.
83
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
84
+
85
+ Returns:
86
+ Self: A new instance of a class implementing FedCM.
87
+ """
88
+
89
+ legacy_fedcm_obj = get_legacy_instance(instance=legacy_object)
90
+
91
+ if not isinstance(legacy_fedcm_obj, legacyFedCM):
92
+ raise CannotConvertTypeError(from_=legacyFedCM, to_=legacy_object)
93
+
94
+ return cls(selenium_fedcm=legacy_fedcm_obj, lock=lock, limiter=limiter)
95
+
96
+ @property
97
+ def legacy(self) -> legacyFedCM:
98
+ return self._legacy_impl
99
+
100
+ async def reset_cooldown(self) -> None:
101
+ await self.sync_to_trio(sync_function=self._reset_cooldown_impl)()
102
+
103
+ async def select_account(self, index: int) -> None:
104
+ await self.sync_to_trio(sync_function=self._select_account_impl)(index=index)
105
+
106
+ async def subtitle(self) -> Optional[str]:
107
+ return await self.sync_to_trio(sync_function=self._subtitle_impl)()
108
+
109
+ async def title(self) -> str:
110
+ return await self.sync_to_trio(sync_function=self._title_impl)()
@@ -0,0 +1,93 @@
1
+ import trio
2
+ from typing import List, Self, Union
3
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
4
+ from osn_selenium.instances._typehints import MOBILE_TYPEHINT
5
+ from osn_selenium.instances.convert import get_legacy_instance
6
+ from osn_selenium.instances.unified.mobile import UnifiedMobile
7
+ from osn_selenium.abstract.instances.mobile import AbstractMobile
8
+ from osn_selenium.exceptions.instance import (
9
+ CannotConvertTypeError
10
+ )
11
+ from selenium.webdriver.remote.mobile import (
12
+ Mobile as legacyMobile,
13
+ _ConnectionType
14
+ )
15
+
16
+
17
+ __all__ = ["Mobile"]
18
+
19
+
20
+ class Mobile(UnifiedMobile, TrioThreadMixin, AbstractMobile):
21
+ """
22
+ Wrapper for the legacy Selenium Mobile instance.
23
+
24
+ Manages network connection types and context settings (e.g., native app vs web view)
25
+ for mobile emulation.
26
+ """
27
+
28
+ def __init__(
29
+ self,
30
+ selenium_mobile: legacyMobile,
31
+ lock: trio.Lock,
32
+ limiter: trio.CapacityLimiter,
33
+ ) -> None:
34
+ """
35
+ Initializes the Mobile wrapper.
36
+
37
+ Args:
38
+ selenium_mobile (legacyMobile): The legacy Selenium Mobile instance to wrap.
39
+ lock (trio.Lock): A Trio lock for managing concurrent access.
40
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
41
+ """
42
+
43
+ UnifiedMobile.__init__(self, selenium_mobile=selenium_mobile)
44
+
45
+ TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
46
+
47
+ async def context(self) -> str:
48
+ return await self.sync_to_trio(sync_function=self._get_context_impl)()
49
+
50
+ async def contexts(self) -> List[str]:
51
+ return await self.sync_to_trio(sync_function=self._contexts_impl)()
52
+
53
+ @classmethod
54
+ def from_legacy(
55
+ cls,
56
+ legacy_object: MOBILE_TYPEHINT,
57
+ lock: trio.Lock,
58
+ limiter: trio.CapacityLimiter,
59
+ ) -> Self:
60
+ """
61
+ Creates an instance from a legacy Selenium Mobile object.
62
+
63
+ This factory method is used to wrap an existing Selenium Mobile
64
+ instance into the new interface.
65
+
66
+ Args:
67
+ legacy_object (MOBILE_TYPEHINT): The legacy Selenium Mobile 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 Mobile.
73
+ """
74
+
75
+ legacy_mobile_obj = get_legacy_instance(instance=legacy_object)
76
+
77
+ if not isinstance(legacy_mobile_obj, legacyMobile):
78
+ raise CannotConvertTypeError(from_=legacyMobile, to_=legacy_object)
79
+
80
+ return cls(selenium_mobile=legacy_mobile_obj, lock=lock, limiter=limiter)
81
+
82
+ @property
83
+ def legacy(self) -> legacyMobile:
84
+ return self._legacy_impl
85
+
86
+ async def network_connection(self) -> _ConnectionType:
87
+ return await self.sync_to_trio(sync_function=self._network_connection_impl)()
88
+
89
+ async def set_context(self, new_context: str) -> None:
90
+ await self.sync_to_trio(sync_function=self._set_context_impl)(new_context=new_context)
91
+
92
+ async def set_network_connection(self, network: Union[int, _ConnectionType]) -> _ConnectionType:
93
+ return await self.sync_to_trio(sync_function=self._set_network_connection_impl)(network=network)