osn-selenium 1.0.0__py3-none-any.whl → 1.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (475) hide show
  1. osn_selenium/_base_models.py +41 -0
  2. osn_selenium/_cdp_import.py +253 -0
  3. osn_selenium/_decorators.py +57 -0
  4. osn_selenium/_trio_threads_helpers.py +157 -0
  5. osn_selenium/_typehints.py +1 -1
  6. osn_selenium/abstract/executors/cdp.py +63 -0
  7. osn_selenium/abstract/webdriver/blink/base.py +14 -0
  8. osn_selenium/abstract/webdriver/blink/lifecycle.py +8 -8
  9. osn_selenium/abstract/webdriver/core/base.py +0 -14
  10. osn_selenium/abstract/webdriver/core/capture.py +4 -3
  11. osn_selenium/abstract/webdriver/core/lifecycle.py +8 -8
  12. osn_selenium/abstract/webdriver/core/script.py +5 -4
  13. osn_selenium/abstract/webdriver/core/window.py +11 -11
  14. osn_selenium/browsers_handler/models.py +1 -1
  15. osn_selenium/dev_tools/_decorators.py +19 -51
  16. osn_selenium/dev_tools/_functions.py +2 -4
  17. osn_selenium/dev_tools/_typehints.py +5 -2
  18. osn_selenium/dev_tools/_wrappers.py +0 -3
  19. osn_selenium/dev_tools/domains/__init__.py +2 -2
  20. osn_selenium/dev_tools/domains/abstract.py +1 -1
  21. osn_selenium/dev_tools/domains/fetch.py +6 -8
  22. osn_selenium/dev_tools/domains_default/fetch.py +2 -2
  23. osn_selenium/dev_tools/filters.py +1 -1
  24. osn_selenium/dev_tools/logger/main.py +9 -21
  25. osn_selenium/dev_tools/logger/models.py +1 -1
  26. osn_selenium/dev_tools/logger/target.py +49 -29
  27. osn_selenium/dev_tools/manager/base.py +10 -42
  28. osn_selenium/dev_tools/manager/lifecycle.py +84 -75
  29. osn_selenium/dev_tools/manager/logging.py +1 -1
  30. osn_selenium/dev_tools/manager/targets.py +13 -5
  31. osn_selenium/dev_tools/models.py +1 -1
  32. osn_selenium/dev_tools/settings.py +9 -5
  33. osn_selenium/dev_tools/target/base.py +30 -34
  34. osn_selenium/dev_tools/target/discovery.py +1 -1
  35. osn_selenium/dev_tools/target/events.py +2 -2
  36. osn_selenium/dev_tools/target/fingerprint.py +1 -1
  37. osn_selenium/dev_tools/target/lifecycle.py +103 -38
  38. osn_selenium/dev_tools/target/logging.py +11 -3
  39. osn_selenium/exceptions/__init__.py +0 -1
  40. osn_selenium/exceptions/base.py +28 -1
  41. osn_selenium/exceptions/bidi_bridge.py +59 -0
  42. osn_selenium/exceptions/configuration.py +1 -8
  43. osn_selenium/exceptions/dependencies.py +60 -0
  44. osn_selenium/exceptions/devtools.py +9 -39
  45. osn_selenium/exceptions/experimental.py +26 -0
  46. osn_selenium/exceptions/flags.py +0 -2
  47. osn_selenium/exceptions/instance.py +1 -9
  48. osn_selenium/exceptions/javascript.py +0 -2
  49. osn_selenium/exceptions/logic.py +0 -2
  50. osn_selenium/exceptions/path.py +1 -9
  51. osn_selenium/exceptions/platform.py +0 -2
  52. osn_selenium/exceptions/protocol.py +0 -3
  53. osn_selenium/exceptions/webdriver.py +1 -7
  54. osn_selenium/exceptions/window.py +1 -8
  55. osn_selenium/executors/sync/cdp.py +95 -0
  56. osn_selenium/executors/trio_bidi/cdp.py +101 -0
  57. osn_selenium/executors/trio_bidi/javascript.py +101 -0
  58. osn_selenium/executors/trio_threads/cdp.py +99 -0
  59. osn_selenium/executors/trio_threads/javascript.py +1 -1
  60. osn_selenium/executors/unified/javascript.py +0 -4
  61. osn_selenium/flags/base.py +7 -13
  62. osn_selenium/flags/blink.py +2 -8
  63. osn_selenium/flags/chrome.py +6 -6
  64. osn_selenium/flags/edge.py +6 -6
  65. osn_selenium/flags/models/base.py +4 -4
  66. osn_selenium/flags/models/blink.py +1 -1
  67. osn_selenium/flags/models/values.py +1 -1
  68. osn_selenium/instances/convert.py +44 -3
  69. osn_selenium/instances/protocols.py +47 -1
  70. osn_selenium/instances/sync/action_chains/__init__.py +6 -0
  71. osn_selenium/instances/sync/browsing_context.py +2 -2
  72. osn_selenium/instances/sync/script.py +7 -2
  73. osn_selenium/instances/sync/shadow_root.py +30 -8
  74. osn_selenium/instances/sync/web_element.py +1 -1
  75. osn_selenium/instances/trio_bidi/__init__.py +1 -0
  76. osn_selenium/instances/trio_bidi/shadow_root.py +180 -0
  77. osn_selenium/instances/trio_bidi/switch_to.py +143 -0
  78. osn_selenium/instances/trio_bidi/web_driver_wait.py +124 -0
  79. osn_selenium/instances/trio_bidi/web_element.py +239 -0
  80. osn_selenium/instances/trio_threads/action_chains/__init__.py +6 -0
  81. osn_selenium/instances/trio_threads/action_chains/base.py +1 -1
  82. osn_selenium/instances/trio_threads/alert.py +1 -1
  83. osn_selenium/instances/trio_threads/browser.py +1 -1
  84. osn_selenium/instances/trio_threads/browsing_context.py +3 -3
  85. osn_selenium/instances/trio_threads/dialog.py +1 -1
  86. osn_selenium/instances/trio_threads/fedcm.py +1 -1
  87. osn_selenium/instances/trio_threads/mobile.py +1 -1
  88. osn_selenium/instances/trio_threads/network.py +1 -1
  89. osn_selenium/instances/trio_threads/permissions.py +1 -1
  90. osn_selenium/instances/trio_threads/script.py +8 -3
  91. osn_selenium/instances/trio_threads/shadow_root.py +46 -15
  92. osn_selenium/instances/trio_threads/storage.py +1 -1
  93. osn_selenium/instances/trio_threads/switch_to.py +1 -1
  94. osn_selenium/instances/trio_threads/web_driver_wait.py +1 -1
  95. osn_selenium/instances/trio_threads/web_element.py +1 -1
  96. osn_selenium/instances/trio_threads/web_extension.py +1 -1
  97. osn_selenium/instances/unified/browsing_context.py +2 -2
  98. osn_selenium/instances/unified/script.py +2 -2
  99. osn_selenium/instances/unified/web_element.py +3 -5
  100. osn_selenium/javascript/fingerprint/__init__.py +3 -2
  101. osn_selenium/javascript/fingerprint/registry/models.py +1 -1
  102. osn_selenium/javascript/fingerprint/spoof/core_rules.py +1 -1
  103. osn_selenium/javascript/fingerprint/spoof/noise.py +1 -1
  104. osn_selenium/javascript/models.py +1 -1
  105. osn_selenium/models.py +2 -47
  106. osn_selenium/trio_bidi/__init__.py +1 -0
  107. osn_selenium/trio_bidi/_context_vars.py +12 -0
  108. osn_selenium/trio_bidi/_error_mappings.py +123 -0
  109. osn_selenium/trio_bidi/_error_redirects.py +194 -0
  110. osn_selenium/trio_bidi/_file_functions.py +28 -0
  111. osn_selenium/trio_bidi/_internal_mappings.py +10 -0
  112. osn_selenium/trio_bidi/_models.py +199 -0
  113. osn_selenium/trio_bidi/_typehints.py +20 -0
  114. osn_selenium/trio_bidi/connection_pool.py +587 -0
  115. osn_selenium/trio_bidi/mapping/__init__.py +1 -0
  116. osn_selenium/trio_bidi/mapping/_constants.py +14 -0
  117. osn_selenium/trio_bidi/mapping/_js_snippets.py +285 -0
  118. osn_selenium/trio_bidi/mapping/_utils.py +4 -0
  119. osn_selenium/trio_bidi/mapping/request_functions/__init__.py +87 -0
  120. osn_selenium/trio_bidi/mapping/request_functions/_alert.py +102 -0
  121. osn_selenium/trio_bidi/mapping/request_functions/_args_helpers.py +225 -0
  122. osn_selenium/trio_bidi/mapping/request_functions/_capture.py +71 -0
  123. osn_selenium/trio_bidi/mapping/request_functions/_cdp.py +40 -0
  124. osn_selenium/trio_bidi/mapping/request_functions/_element.py +55 -0
  125. osn_selenium/trio_bidi/mapping/request_functions/_file.py +32 -0
  126. osn_selenium/trio_bidi/mapping/request_functions/_navigation.py +147 -0
  127. osn_selenium/trio_bidi/mapping/request_functions/_script.py +85 -0
  128. osn_selenium/trio_bidi/mapping/request_functions/_shadow_root.py +65 -0
  129. osn_selenium/trio_bidi/mapping/request_functions/_switch_to.py +59 -0
  130. osn_selenium/trio_bidi/mapping/request_functions/_web_element.py +448 -0
  131. osn_selenium/trio_bidi/mapping/request_functions/_window.py +125 -0
  132. osn_selenium/trio_bidi/mapping/response_functions/__init__.py +86 -0
  133. osn_selenium/trio_bidi/mapping/response_functions/_alert.py +81 -0
  134. osn_selenium/trio_bidi/mapping/response_functions/_args_helpers.py +183 -0
  135. osn_selenium/trio_bidi/mapping/response_functions/_args_validators.py +153 -0
  136. osn_selenium/trio_bidi/mapping/response_functions/_capture.py +71 -0
  137. osn_selenium/trio_bidi/mapping/response_functions/_cdp.py +26 -0
  138. osn_selenium/trio_bidi/mapping/response_functions/_element.py +58 -0
  139. osn_selenium/trio_bidi/mapping/response_functions/_file.py +30 -0
  140. osn_selenium/trio_bidi/mapping/response_functions/_navigation.py +120 -0
  141. osn_selenium/trio_bidi/mapping/response_functions/_script.py +57 -0
  142. osn_selenium/trio_bidi/mapping/response_functions/_shadow_root.py +58 -0
  143. osn_selenium/trio_bidi/mapping/response_functions/_switch_to.py +57 -0
  144. osn_selenium/trio_bidi/mapping/response_functions/_web_element.py +368 -0
  145. osn_selenium/trio_bidi/mapping/response_functions/_window.py +119 -0
  146. osn_selenium/trio_bidi/mixin.py +186 -0
  147. osn_selenium/trio_bidi/remote_connection.py +164 -0
  148. osn_selenium/{base_mixin.py → trio_threads_mixin.py} +31 -40
  149. osn_selenium/webdrivers/_args_helpers.py +120 -7
  150. osn_selenium/webdrivers/_bridges.py +2 -2
  151. osn_selenium/webdrivers/_executable_tables/models.py +1 -1
  152. osn_selenium/webdrivers/_typehints.py +9 -3
  153. osn_selenium/webdrivers/protocols.py +81 -1
  154. osn_selenium/webdrivers/sync/blink/__init__.py +11 -1
  155. osn_selenium/webdrivers/sync/blink/base.py +23 -1
  156. osn_selenium/webdrivers/sync/blink/lifecycle.py +26 -8
  157. osn_selenium/webdrivers/sync/chrome/__init__.py +36 -1
  158. osn_selenium/webdrivers/sync/chrome/base.py +13 -1
  159. osn_selenium/webdrivers/sync/chrome/lifecycle.py +23 -5
  160. osn_selenium/webdrivers/sync/chrome/settings.py +6 -1
  161. osn_selenium/webdrivers/sync/core/__init__.py +10 -1
  162. osn_selenium/webdrivers/sync/core/base.py +18 -18
  163. osn_selenium/webdrivers/sync/core/capture.py +3 -2
  164. osn_selenium/webdrivers/sync/core/file.py +3 -2
  165. osn_selenium/webdrivers/sync/core/lifecycle.py +44 -10
  166. osn_selenium/webdrivers/sync/core/script.py +3 -2
  167. osn_selenium/webdrivers/sync/core/window.py +3 -3
  168. osn_selenium/webdrivers/sync/edge/__init__.py +36 -1
  169. osn_selenium/webdrivers/sync/edge/base.py +13 -1
  170. osn_selenium/webdrivers/sync/edge/lifecycle.py +23 -5
  171. osn_selenium/webdrivers/sync/edge/settings.py +6 -1
  172. osn_selenium/webdrivers/sync/yandex/__init__.py +36 -1
  173. osn_selenium/webdrivers/sync/yandex/base.py +13 -1
  174. osn_selenium/webdrivers/sync/yandex/lifecycle.py +23 -5
  175. osn_selenium/webdrivers/sync/yandex/settings.py +6 -1
  176. osn_selenium/webdrivers/trio_bidi/__init__.py +1 -0
  177. osn_selenium/webdrivers/trio_bidi/blink/__init__.py +132 -0
  178. osn_selenium/webdrivers/trio_bidi/blink/base.py +167 -0
  179. osn_selenium/webdrivers/trio_bidi/blink/lifecycle.py +89 -0
  180. osn_selenium/webdrivers/trio_bidi/blink/settings.py +63 -0
  181. osn_selenium/webdrivers/trio_bidi/chrome/__init__.py +114 -0
  182. osn_selenium/webdrivers/trio_bidi/chrome/base.py +127 -0
  183. osn_selenium/webdrivers/trio_bidi/chrome/lifecycle.py +85 -0
  184. osn_selenium/webdrivers/trio_bidi/chrome/settings.py +63 -0
  185. osn_selenium/webdrivers/trio_bidi/core/__init__.py +95 -0
  186. osn_selenium/webdrivers/trio_bidi/core/actions.py +70 -0
  187. osn_selenium/webdrivers/trio_bidi/core/base.py +200 -0
  188. osn_selenium/webdrivers/trio_bidi/core/capture.py +39 -0
  189. osn_selenium/webdrivers/trio_bidi/core/devtools.py +49 -0
  190. osn_selenium/webdrivers/trio_bidi/core/element.py +64 -0
  191. osn_selenium/webdrivers/trio_bidi/core/lifecycle.py +135 -0
  192. osn_selenium/webdrivers/trio_bidi/core/navigation.py +37 -0
  193. osn_selenium/webdrivers/trio_bidi/core/script.py +56 -0
  194. osn_selenium/webdrivers/trio_bidi/core/settings.py +36 -0
  195. osn_selenium/webdrivers/trio_bidi/core/window.py +134 -0
  196. osn_selenium/webdrivers/trio_bidi/edge/__init__.py +114 -0
  197. osn_selenium/webdrivers/trio_bidi/edge/base.py +123 -0
  198. osn_selenium/webdrivers/trio_bidi/edge/lifecycle.py +85 -0
  199. osn_selenium/webdrivers/trio_bidi/edge/settings.py +63 -0
  200. osn_selenium/webdrivers/trio_bidi/yandex/__init__.py +114 -0
  201. osn_selenium/webdrivers/trio_bidi/yandex/base.py +120 -0
  202. osn_selenium/webdrivers/trio_bidi/yandex/lifecycle.py +85 -0
  203. osn_selenium/webdrivers/trio_bidi/yandex/settings.py +63 -0
  204. osn_selenium/webdrivers/trio_threads/blink/__init__.py +18 -2
  205. osn_selenium/webdrivers/trio_threads/blink/base.py +25 -1
  206. osn_selenium/webdrivers/trio_threads/blink/casting.py +1 -1
  207. osn_selenium/webdrivers/trio_threads/blink/features.py +1 -1
  208. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +26 -8
  209. osn_selenium/webdrivers/trio_threads/blink/logging.py +1 -1
  210. osn_selenium/webdrivers/trio_threads/blink/network.py +1 -1
  211. osn_selenium/webdrivers/trio_threads/chrome/__init__.py +34 -1
  212. osn_selenium/webdrivers/trio_threads/chrome/base.py +14 -2
  213. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +23 -5
  214. osn_selenium/webdrivers/trio_threads/chrome/settings.py +1 -1
  215. osn_selenium/webdrivers/trio_threads/core/__init__.py +10 -14
  216. osn_selenium/webdrivers/trio_threads/core/actions.py +1 -1
  217. osn_selenium/webdrivers/trio_threads/core/auth.py +1 -1
  218. osn_selenium/webdrivers/trio_threads/core/base.py +18 -22
  219. osn_selenium/webdrivers/trio_threads/core/capture.py +4 -3
  220. osn_selenium/webdrivers/trio_threads/core/comonents.py +1 -1
  221. osn_selenium/webdrivers/trio_threads/core/devtools.py +1 -1
  222. osn_selenium/webdrivers/trio_threads/core/element.py +1 -1
  223. osn_selenium/webdrivers/trio_threads/core/file.py +5 -4
  224. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +45 -11
  225. osn_selenium/webdrivers/trio_threads/core/navigation.py +1 -1
  226. osn_selenium/webdrivers/trio_threads/core/script.py +4 -3
  227. osn_selenium/webdrivers/trio_threads/core/settings.py +1 -1
  228. osn_selenium/webdrivers/trio_threads/core/storage.py +1 -1
  229. osn_selenium/webdrivers/trio_threads/core/timeouts.py +1 -1
  230. osn_selenium/webdrivers/trio_threads/core/window.py +6 -6
  231. osn_selenium/webdrivers/trio_threads/edge/__init__.py +34 -1
  232. osn_selenium/webdrivers/trio_threads/edge/base.py +14 -2
  233. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +23 -5
  234. osn_selenium/webdrivers/trio_threads/edge/settings.py +1 -1
  235. osn_selenium/webdrivers/trio_threads/yandex/__init__.py +34 -1
  236. osn_selenium/webdrivers/trio_threads/yandex/base.py +14 -2
  237. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +23 -5
  238. osn_selenium/webdrivers/trio_threads/yandex/settings.py +1 -1
  239. osn_selenium/webdrivers/unified/blink/base.py +9 -1
  240. osn_selenium/webdrivers/unified/blink/lifecycle.py +4 -2
  241. osn_selenium/webdrivers/unified/chrome/base.py +9 -1
  242. osn_selenium/webdrivers/unified/core/auth.py +4 -2
  243. osn_selenium/webdrivers/unified/core/base.py +19 -6
  244. osn_selenium/webdrivers/unified/core/capture.py +3 -2
  245. osn_selenium/webdrivers/unified/core/components.py +12 -7
  246. osn_selenium/webdrivers/unified/core/devtools.py +2 -1
  247. osn_selenium/webdrivers/unified/core/file.py +3 -2
  248. osn_selenium/webdrivers/unified/core/lifecycle.py +5 -3
  249. osn_selenium/webdrivers/unified/core/script.py +5 -3
  250. osn_selenium/webdrivers/unified/core/storage.py +2 -1
  251. osn_selenium/webdrivers/unified/core/window.py +9 -8
  252. osn_selenium/webdrivers/unified/edge/base.py +9 -1
  253. osn_selenium/webdrivers/unified/yandex/base.py +9 -1
  254. {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/METADATA +24 -10
  255. osn_selenium-1.2.0.dist-info/RECORD +480 -0
  256. {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/WHEEL +1 -1
  257. osn_selenium/abstract/executors/cdp/__init__.py +0 -435
  258. osn_selenium/abstract/executors/cdp/accessibility.py +0 -62
  259. osn_selenium/abstract/executors/cdp/animation.py +0 -47
  260. osn_selenium/abstract/executors/cdp/audits.py +0 -39
  261. osn_selenium/abstract/executors/cdp/autofill.py +0 -34
  262. osn_selenium/abstract/executors/cdp/background_service.py +0 -22
  263. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +0 -95
  264. osn_selenium/abstract/executors/cdp/browser.py +0 -122
  265. osn_selenium/abstract/executors/cdp/cache_storage.py +0 -49
  266. osn_selenium/abstract/executors/cdp/cast.py +0 -31
  267. osn_selenium/abstract/executors/cdp/console.py +0 -18
  268. osn_selenium/abstract/executors/cdp/css.py +0 -197
  269. osn_selenium/abstract/executors/cdp/debugger.py +0 -198
  270. osn_selenium/abstract/executors/cdp/device_access.py +0 -22
  271. osn_selenium/abstract/executors/cdp/device_orientation.py +0 -14
  272. osn_selenium/abstract/executors/cdp/dom.py +0 -305
  273. osn_selenium/abstract/executors/cdp/dom_debugger.py +0 -57
  274. osn_selenium/abstract/executors/cdp/dom_snapshot.py +0 -42
  275. osn_selenium/abstract/executors/cdp/dom_storage.py +0 -31
  276. osn_selenium/abstract/executors/cdp/emulation.py +0 -259
  277. osn_selenium/abstract/executors/cdp/event_breakpoints.py +0 -18
  278. osn_selenium/abstract/executors/cdp/extensions.py +0 -31
  279. osn_selenium/abstract/executors/cdp/fed_cm.py +0 -35
  280. osn_selenium/abstract/executors/cdp/fetch.py +0 -76
  281. osn_selenium/abstract/executors/cdp/file_system.py +0 -11
  282. osn_selenium/abstract/executors/cdp/headless_experimental.py +0 -30
  283. osn_selenium/abstract/executors/cdp/heap_profiler.py +0 -73
  284. osn_selenium/abstract/executors/cdp/indexed_db.py +0 -99
  285. osn_selenium/abstract/executors/cdp/input.py +0 -158
  286. osn_selenium/abstract/executors/cdp/inspector.py +0 -14
  287. osn_selenium/abstract/executors/cdp/io.py +0 -24
  288. osn_selenium/abstract/executors/cdp/layer_tree.py +0 -61
  289. osn_selenium/abstract/executors/cdp/log.py +0 -27
  290. osn_selenium/abstract/executors/cdp/media.py +0 -14
  291. osn_selenium/abstract/executors/cdp/memory.py +0 -61
  292. osn_selenium/abstract/executors/cdp/network.py +0 -252
  293. osn_selenium/abstract/executors/cdp/overlay.py +0 -166
  294. osn_selenium/abstract/executors/cdp/page.py +0 -347
  295. osn_selenium/abstract/executors/cdp/performance.py +0 -28
  296. osn_selenium/abstract/executors/cdp/performance_timeline.py +0 -11
  297. osn_selenium/abstract/executors/cdp/preload.py +0 -14
  298. osn_selenium/abstract/executors/cdp/profiler.py +0 -54
  299. osn_selenium/abstract/executors/cdp/pwa.py +0 -46
  300. osn_selenium/abstract/executors/cdp/runtime.py +0 -176
  301. osn_selenium/abstract/executors/cdp/schema.py +0 -11
  302. osn_selenium/abstract/executors/cdp/security.py +0 -26
  303. osn_selenium/abstract/executors/cdp/service_worker.py +0 -54
  304. osn_selenium/abstract/executors/cdp/storage.py +0 -175
  305. osn_selenium/abstract/executors/cdp/system_info.py +0 -24
  306. osn_selenium/abstract/executors/cdp/target.py +0 -125
  307. osn_selenium/abstract/executors/cdp/tethering.py +0 -14
  308. osn_selenium/abstract/executors/cdp/tracing.py +0 -48
  309. osn_selenium/abstract/executors/cdp/web_audio.py +0 -19
  310. osn_selenium/abstract/executors/cdp/web_authn.py +0 -76
  311. osn_selenium/executors/sync/cdp/__init__.py +0 -550
  312. osn_selenium/executors/sync/cdp/accessibility.py +0 -74
  313. osn_selenium/executors/sync/cdp/animation.py +0 -50
  314. osn_selenium/executors/sync/cdp/audits.py +0 -48
  315. osn_selenium/executors/sync/cdp/autofill.py +0 -39
  316. osn_selenium/executors/sync/cdp/background_service.py +0 -30
  317. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +0 -101
  318. osn_selenium/executors/sync/cdp/browser.py +0 -131
  319. osn_selenium/executors/sync/cdp/cache_storage.py +0 -66
  320. osn_selenium/executors/sync/cdp/cast.py +0 -38
  321. osn_selenium/executors/sync/cdp/console.py +0 -24
  322. osn_selenium/executors/sync/cdp/css.py +0 -187
  323. osn_selenium/executors/sync/cdp/debugger.py +0 -206
  324. osn_selenium/executors/sync/cdp/device_access.py +0 -27
  325. osn_selenium/executors/sync/cdp/device_orientation.py +0 -24
  326. osn_selenium/executors/sync/cdp/dom.py +0 -310
  327. osn_selenium/executors/sync/cdp/dom_debugger.py +0 -56
  328. osn_selenium/executors/sync/cdp/dom_snapshot.py +0 -58
  329. osn_selenium/executors/sync/cdp/dom_storage.py +0 -38
  330. osn_selenium/executors/sync/cdp/emulation.py +0 -270
  331. osn_selenium/executors/sync/cdp/event_breakpoints.py +0 -27
  332. osn_selenium/executors/sync/cdp/extensions.py +0 -39
  333. osn_selenium/executors/sync/cdp/fed_cm.py +0 -45
  334. osn_selenium/executors/sync/cdp/fetch.py +0 -96
  335. osn_selenium/executors/sync/cdp/file_system.py +0 -18
  336. osn_selenium/executors/sync/cdp/headless_experimental.py +0 -44
  337. osn_selenium/executors/sync/cdp/heap_profiler.py +0 -89
  338. osn_selenium/executors/sync/cdp/indexed_db.py +0 -142
  339. osn_selenium/executors/sync/cdp/input.py +0 -233
  340. osn_selenium/executors/sync/cdp/inspector.py +0 -21
  341. osn_selenium/executors/sync/cdp/io.py +0 -33
  342. osn_selenium/executors/sync/cdp/layer_tree.py +0 -71
  343. osn_selenium/executors/sync/cdp/log.py +0 -35
  344. osn_selenium/executors/sync/cdp/media.py +0 -21
  345. osn_selenium/executors/sync/cdp/memory.py +0 -62
  346. osn_selenium/executors/sync/cdp/network.py +0 -287
  347. osn_selenium/executors/sync/cdp/overlay.py +0 -174
  348. osn_selenium/executors/sync/cdp/page.py +0 -365
  349. osn_selenium/executors/sync/cdp/performance.py +0 -33
  350. osn_selenium/executors/sync/cdp/performance_timeline.py +0 -26
  351. osn_selenium/executors/sync/cdp/preload.py +0 -21
  352. osn_selenium/executors/sync/cdp/profiler.py +0 -58
  353. osn_selenium/executors/sync/cdp/pwa.py +0 -55
  354. osn_selenium/executors/sync/cdp/runtime.py +0 -221
  355. osn_selenium/executors/sync/cdp/schema.py +0 -23
  356. osn_selenium/executors/sync/cdp/security.py +0 -30
  357. osn_selenium/executors/sync/cdp/service_worker.py +0 -56
  358. osn_selenium/executors/sync/cdp/storage.py +0 -151
  359. osn_selenium/executors/sync/cdp/system_info.py +0 -30
  360. osn_selenium/executors/sync/cdp/target.py +0 -147
  361. osn_selenium/executors/sync/cdp/tethering.py +0 -21
  362. osn_selenium/executors/sync/cdp/tracing.py +0 -62
  363. osn_selenium/executors/sync/cdp/web_audio.py +0 -24
  364. osn_selenium/executors/sync/cdp/web_authn.py +0 -82
  365. osn_selenium/executors/trio_threads/cdp/__init__.py +0 -771
  366. osn_selenium/executors/trio_threads/cdp/accessibility.py +0 -87
  367. osn_selenium/executors/trio_threads/cdp/animation.py +0 -63
  368. osn_selenium/executors/trio_threads/cdp/audits.py +0 -57
  369. osn_selenium/executors/trio_threads/cdp/autofill.py +0 -52
  370. osn_selenium/executors/trio_threads/cdp/background_service.py +0 -40
  371. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +0 -111
  372. osn_selenium/executors/trio_threads/cdp/browser.py +0 -140
  373. osn_selenium/executors/trio_threads/cdp/cache_storage.py +0 -79
  374. osn_selenium/executors/trio_threads/cdp/cast.py +0 -47
  375. osn_selenium/executors/trio_threads/cdp/console.py +0 -33
  376. osn_selenium/executors/trio_threads/cdp/css.py +0 -196
  377. osn_selenium/executors/trio_threads/cdp/debugger.py +0 -219
  378. osn_selenium/executors/trio_threads/cdp/device_access.py +0 -40
  379. osn_selenium/executors/trio_threads/cdp/device_orientation.py +0 -34
  380. osn_selenium/executors/trio_threads/cdp/dom.py +0 -319
  381. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +0 -69
  382. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +0 -71
  383. osn_selenium/executors/trio_threads/cdp/dom_storage.py +0 -51
  384. osn_selenium/executors/trio_threads/cdp/emulation.py +0 -283
  385. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +0 -37
  386. osn_selenium/executors/trio_threads/cdp/extensions.py +0 -52
  387. osn_selenium/executors/trio_threads/cdp/fed_cm.py +0 -54
  388. osn_selenium/executors/trio_threads/cdp/fetch.py +0 -105
  389. osn_selenium/executors/trio_threads/cdp/file_system.py +0 -31
  390. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +0 -54
  391. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +0 -102
  392. osn_selenium/executors/trio_threads/cdp/indexed_db.py +0 -155
  393. osn_selenium/executors/trio_threads/cdp/input.py +0 -242
  394. osn_selenium/executors/trio_threads/cdp/inspector.py +0 -34
  395. osn_selenium/executors/trio_threads/cdp/io.py +0 -42
  396. osn_selenium/executors/trio_threads/cdp/layer_tree.py +0 -84
  397. osn_selenium/executors/trio_threads/cdp/log.py +0 -44
  398. osn_selenium/executors/trio_threads/cdp/media.py +0 -30
  399. osn_selenium/executors/trio_threads/cdp/memory.py +0 -71
  400. osn_selenium/executors/trio_threads/cdp/network.py +0 -296
  401. osn_selenium/executors/trio_threads/cdp/overlay.py +0 -183
  402. osn_selenium/executors/trio_threads/cdp/page.py +0 -374
  403. osn_selenium/executors/trio_threads/cdp/performance.py +0 -46
  404. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +0 -36
  405. osn_selenium/executors/trio_threads/cdp/preload.py +0 -30
  406. osn_selenium/executors/trio_threads/cdp/profiler.py +0 -71
  407. osn_selenium/executors/trio_threads/cdp/pwa.py +0 -64
  408. osn_selenium/executors/trio_threads/cdp/runtime.py +0 -230
  409. osn_selenium/executors/trio_threads/cdp/schema.py +0 -32
  410. osn_selenium/executors/trio_threads/cdp/security.py +0 -43
  411. osn_selenium/executors/trio_threads/cdp/service_worker.py +0 -69
  412. osn_selenium/executors/trio_threads/cdp/storage.py +0 -162
  413. osn_selenium/executors/trio_threads/cdp/system_info.py +0 -43
  414. osn_selenium/executors/trio_threads/cdp/target.py +0 -156
  415. osn_selenium/executors/trio_threads/cdp/tethering.py +0 -34
  416. osn_selenium/executors/trio_threads/cdp/tracing.py +0 -71
  417. osn_selenium/executors/trio_threads/cdp/web_audio.py +0 -37
  418. osn_selenium/executors/trio_threads/cdp/web_authn.py +0 -95
  419. osn_selenium/executors/unified/cdp/accessibility.py +0 -81
  420. osn_selenium/executors/unified/cdp/animation.py +0 -50
  421. osn_selenium/executors/unified/cdp/audits.py +0 -45
  422. osn_selenium/executors/unified/cdp/autofill.py +0 -41
  423. osn_selenium/executors/unified/cdp/background_service.py +0 -24
  424. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +0 -132
  425. osn_selenium/executors/unified/cdp/browser.py +0 -143
  426. osn_selenium/executors/unified/cdp/cache_storage.py +0 -69
  427. osn_selenium/executors/unified/cdp/cast.py +0 -32
  428. osn_selenium/executors/unified/cdp/console.py +0 -18
  429. osn_selenium/executors/unified/cdp/css.py +0 -237
  430. osn_selenium/executors/unified/cdp/debugger.py +0 -243
  431. osn_selenium/executors/unified/cdp/device_access.py +0 -21
  432. osn_selenium/executors/unified/cdp/device_orientation.py +0 -18
  433. osn_selenium/executors/unified/cdp/dom.py +0 -380
  434. osn_selenium/executors/unified/cdp/dom_debugger.py +0 -65
  435. osn_selenium/executors/unified/cdp/dom_snapshot.py +0 -58
  436. osn_selenium/executors/unified/cdp/dom_storage.py +0 -38
  437. osn_selenium/executors/unified/cdp/emulation.py +0 -312
  438. osn_selenium/executors/unified/cdp/event_breakpoints.py +0 -24
  439. osn_selenium/executors/unified/cdp/extensions.py +0 -45
  440. osn_selenium/executors/unified/cdp/fed_cm.py +0 -51
  441. osn_selenium/executors/unified/cdp/fetch.py +0 -111
  442. osn_selenium/executors/unified/cdp/file_system.py +0 -15
  443. osn_selenium/executors/unified/cdp/headless_experimental.py +0 -38
  444. osn_selenium/executors/unified/cdp/heap_profiler.py +0 -101
  445. osn_selenium/executors/unified/cdp/indexed_db.py +0 -157
  446. osn_selenium/executors/unified/cdp/input.py +0 -254
  447. osn_selenium/executors/unified/cdp/inspector.py +0 -15
  448. osn_selenium/executors/unified/cdp/io.py +0 -29
  449. osn_selenium/executors/unified/cdp/layer_tree.py +0 -71
  450. osn_selenium/executors/unified/cdp/log.py +0 -29
  451. osn_selenium/executors/unified/cdp/media.py +0 -15
  452. osn_selenium/executors/unified/cdp/memory.py +0 -59
  453. osn_selenium/executors/unified/cdp/network.py +0 -323
  454. osn_selenium/executors/unified/cdp/overlay.py +0 -209
  455. osn_selenium/executors/unified/cdp/page.py +0 -410
  456. osn_selenium/executors/unified/cdp/performance.py +0 -27
  457. osn_selenium/executors/unified/cdp/performance_timeline.py +0 -17
  458. osn_selenium/executors/unified/cdp/preload.py +0 -15
  459. osn_selenium/executors/unified/cdp/profiler.py +0 -55
  460. osn_selenium/executors/unified/cdp/pwa.py +0 -55
  461. osn_selenium/executors/unified/cdp/runtime.py +0 -245
  462. osn_selenium/executors/unified/cdp/schema.py +0 -17
  463. osn_selenium/executors/unified/cdp/security.py +0 -27
  464. osn_selenium/executors/unified/cdp/service_worker.py +0 -62
  465. osn_selenium/executors/unified/cdp/storage.py +0 -178
  466. osn_selenium/executors/unified/cdp/system_info.py +0 -24
  467. osn_selenium/executors/unified/cdp/target.py +0 -165
  468. osn_selenium/executors/unified/cdp/tethering.py +0 -15
  469. osn_selenium/executors/unified/cdp/tracing.py +0 -62
  470. osn_selenium/executors/unified/cdp/web_audio.py +0 -18
  471. osn_selenium/executors/unified/cdp/web_authn.py +0 -103
  472. osn_selenium-1.0.0.dist-info/RECORD +0 -608
  473. /osn_selenium/{dev_tools/_exception_helpers.py → _exception_helpers.py} +0 -0
  474. /osn_selenium/executors/{unified/cdp → trio_bidi}/__init__.py +0 -0
  475. {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,239 @@
1
+ import math
2
+ import trio
3
+ from selenium.webdriver.common.by import By
4
+ from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
5
+ from osn_selenium.instances._typehints import WEB_ELEMENT_TYPEHINT
6
+ from osn_selenium.instances.trio_bidi.shadow_root import ShadowRoot
7
+ from osn_selenium.exceptions.instance import (
8
+ CannotConvertTypeError
9
+ )
10
+ from osn_selenium.instances.unified.web_element import UnifiedWebElement
11
+ from osn_selenium.abstract.instances.web_element import AbstractWebElement
12
+ from osn_selenium.instances.trio_bidi.web_driver_wait import WebDriverWait
13
+ from typing import (
14
+ Any,
15
+ Dict,
16
+ Iterable,
17
+ List,
18
+ Optional,
19
+ Self,
20
+ Union
21
+ )
22
+ from selenium.webdriver.remote.webelement import (
23
+ WebElement as legacyWebElement
24
+ )
25
+ from osn_selenium.instances.convert import (
26
+ get_legacy_instance,
27
+ get_trio_thread_instance_wrapper
28
+ )
29
+
30
+
31
+ __all__ = ["WebElement"]
32
+
33
+
34
+ class WebElement(UnifiedWebElement, TrioBiDiMixin, AbstractWebElement):
35
+ """
36
+ Represents an HTML element in the DOM, offering methods for interaction (click, type),
37
+ property retrieval, and finding child elements.
38
+ """
39
+
40
+ def __init__(
41
+ self,
42
+ selenium_web_element: legacyWebElement,
43
+ lock: trio.Lock,
44
+ limiter: trio.CapacityLimiter,
45
+ trio_token: Optional[trio.lowlevel.TrioToken] = None,
46
+ bidi_buffer_size: Union[int, float] = math.inf,
47
+ ) -> None:
48
+ """
49
+ Initializes the WebElement wrapper.
50
+
51
+ Args:
52
+ selenium_web_element (legacyWebElement): The legacy Selenium WebElement instance to wrap.
53
+ lock (trio.Lock): A Trio lock for managing concurrent access.
54
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
55
+ trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
56
+ bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
57
+ """
58
+
59
+ UnifiedWebElement.__init__(self, selenium_web_element=selenium_web_element)
60
+
61
+ TrioBiDiMixin.__init__(
62
+ self,
63
+ lock=lock,
64
+ limiter=limiter,
65
+ token=trio_token,
66
+ buffer_size=bidi_buffer_size
67
+ )
68
+
69
+ async def accessible_name(self) -> str:
70
+ return await self.sync_to_trio(sync_function=self._accessible_name_impl)()
71
+
72
+ async def aria_role(self) -> str:
73
+ return await self.sync_to_trio(sync_function=self._aria_role_impl)()
74
+
75
+ async def clear(self) -> None:
76
+ await self.sync_to_trio(sync_function=self._clear_impl)()
77
+
78
+ async def click(self) -> None:
79
+ await self.sync_to_trio(sync_function=self._click_impl)()
80
+
81
+ async def find_element(self, by: str = By.ID, value: Any = None) -> Self:
82
+ web_element = await self.sync_to_trio(sync_function=self._find_element_impl)(by=by, value=value)
83
+
84
+ return get_trio_thread_instance_wrapper(
85
+ wrapper_class=self.__class__,
86
+ legacy_object=web_element,
87
+ lock=self._lock,
88
+ limiter=self._capacity_limiter
89
+ )
90
+
91
+ async def find_elements(self, by: str = By.ID, value: Any = None) -> List[Self]:
92
+ web_elements = await self.sync_to_trio(sync_function=self._find_elements_impl)(by=by, value=value)
93
+
94
+ return [
95
+ get_trio_thread_instance_wrapper(
96
+ wrapper_class=self.__class__,
97
+ legacy_object=web_element,
98
+ lock=self._lock,
99
+ limiter=self._capacity_limiter,
100
+ )
101
+ for web_element in web_elements
102
+ ]
103
+
104
+ async def get_attribute(self, name: str) -> Optional[str]:
105
+ return await self.sync_to_trio(sync_function=self._get_attribute_impl)(name=name)
106
+
107
+ async def get_dom_attribute(self, name: str) -> Optional[str]:
108
+ return await self.sync_to_trio(sync_function=self._get_dom_attribute_impl)(name=name)
109
+
110
+ async def get_property(self, name: str) -> Any:
111
+ return await self.sync_to_trio(sync_function=self._get_property_impl)(name=name)
112
+
113
+ async def id(self) -> str:
114
+ return await self.sync_to_trio(sync_function=self._id_impl)()
115
+
116
+ async def is_displayed(self) -> bool:
117
+ return await self.sync_to_trio(sync_function=self._is_displayed_impl)()
118
+
119
+ async def is_enabled(self) -> bool:
120
+ return await self.sync_to_trio(sync_function=self._is_enabled_impl)()
121
+
122
+ async def is_selected(self) -> bool:
123
+ return await self.sync_to_trio(sync_function=self._is_selected_impl)()
124
+
125
+ @property
126
+ def legacy(self) -> legacyWebElement:
127
+ return self._legacy_impl
128
+
129
+ async def location(self) -> Dict:
130
+ return await self.sync_to_trio(sync_function=self._location_impl)()
131
+
132
+ async def location_once_scrolled_into_view(self) -> Dict:
133
+ return await self.sync_to_trio(sync_function=self._location_once_scrolled_into_view_impl)()
134
+
135
+ @classmethod
136
+ def from_legacy(
137
+ cls,
138
+ legacy_object: WEB_ELEMENT_TYPEHINT,
139
+ lock: trio.Lock,
140
+ limiter: trio.CapacityLimiter,
141
+ trio_token: Optional[trio.lowlevel.TrioToken] = None,
142
+ bidi_buffer_size: Union[int, float] = math.inf,
143
+ ) -> Self:
144
+ """
145
+ Creates an instance from a legacy Selenium WebElement object.
146
+
147
+ This factory method is used to wrap an existing Selenium WebElement
148
+ instance into the new interface.
149
+
150
+ Args:
151
+ legacy_object (WEB_ELEMENT_TYPEHINT): The legacy Selenium WebElement instance or its wrapper.
152
+ lock (trio.Lock): A Trio lock for managing concurrent access.
153
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
154
+ trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
155
+ bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
156
+
157
+ Returns:
158
+ Self: A new instance of a class implementing WebElement.
159
+ """
160
+
161
+ legacy_element_obj = get_legacy_instance(instance=legacy_object)
162
+
163
+ if not isinstance(legacy_element_obj, legacyWebElement):
164
+ raise CannotConvertTypeError(from_=legacyWebElement, to_=legacy_object)
165
+
166
+ return cls(
167
+ selenium_web_element=legacy_element_obj,
168
+ lock=lock,
169
+ limiter=limiter,
170
+ trio_token=trio_token,
171
+ bidi_buffer_size=bidi_buffer_size,
172
+ )
173
+
174
+ async def parent(self) -> Self:
175
+ parent = await self.sync_to_trio(sync_function=self._parent_impl)()
176
+
177
+ return self.from_legacy(legacy_object=parent, lock=self._lock, limiter=self._capacity_limiter)
178
+
179
+ async def rect(self) -> Dict:
180
+ return await self.sync_to_trio(sync_function=self._rect_impl)()
181
+
182
+ async def screenshot(self, filename: str) -> bool:
183
+ return await self.sync_to_trio(sync_function=self._screenshot_impl)(filename=filename)
184
+
185
+ async def screenshot_as_base64(self) -> str:
186
+ return await self.sync_to_trio(sync_function=self._screenshot_as_base64_impl)()
187
+
188
+ async def screenshot_as_png(self) -> bytes:
189
+ return await self.sync_to_trio(sync_function=self._screenshot_as_png_impl)()
190
+
191
+ async def send_keys(self, *value: str) -> None:
192
+ await self.sync_to_trio(sync_function=self._send_keys_impl)(*value)
193
+
194
+ async def session_id(self) -> str:
195
+ return await self.sync_to_trio(sync_function=self._session_id_impl)()
196
+
197
+ async def shadow_root(self) -> ShadowRoot:
198
+ shadow_root = await self.sync_to_trio(sync_function=self._shadow_root_impl)()
199
+
200
+ return get_trio_thread_instance_wrapper(
201
+ wrapper_class=ShadowRoot,
202
+ legacy_object=shadow_root,
203
+ lock=self._lock,
204
+ limiter=self._capacity_limiter,
205
+ )
206
+
207
+ async def size(self) -> Dict:
208
+ return await self.sync_to_trio(sync_function=self._size_impl)()
209
+
210
+ async def submit(self) -> None:
211
+ await self.sync_to_trio(sync_function=self._submit_impl)()
212
+
213
+ async def tag_name(self) -> str:
214
+ return await self.sync_to_trio(sync_function=self._tag_name_impl)()
215
+
216
+ async def text(self) -> str:
217
+ return await self.sync_to_trio(sync_function=self._text_impl)()
218
+
219
+ async def value_of_css_property(self, property_name: str) -> str:
220
+ return await self.sync_to_trio(sync_function=self._value_of_css_property_impl)(property_name=property_name)
221
+
222
+ def web_driver_wait(
223
+ self,
224
+ timeout: float,
225
+ poll_frequency: float = 0.5,
226
+ ignored_exceptions: Optional[Iterable[BaseException]] = None,
227
+ ) -> WebDriverWait:
228
+ web_driver_wait = self._web_driver_wait_impl(
229
+ timeout=timeout,
230
+ poll_frequency=poll_frequency,
231
+ ignored_exceptions=ignored_exceptions,
232
+ )
233
+
234
+ return get_trio_thread_instance_wrapper(
235
+ wrapper_class=WebDriverWait,
236
+ legacy_object=web_driver_wait,
237
+ lock=self._lock,
238
+ limiter=self._capacity_limiter,
239
+ )
@@ -1,7 +1,10 @@
1
+ from osn_selenium.instances.trio_threads.action_chains.move import MoveMixin
1
2
  from osn_selenium.abstract.instances.action_chains import AbstractActionChains
2
3
  from osn_selenium.instances.trio_threads.action_chains.click import ClickMixin
3
4
  from osn_selenium.instances.trio_threads.action_chains.utils import UtilsMixin
5
+ from osn_selenium.instances.trio_threads.action_chains.scroll import ScrollMixin
4
6
  from osn_selenium.instances.trio_threads.action_chains.hm_move import HMMoveMixin
7
+ from osn_selenium.instances.trio_threads.action_chains.keyboard import KeyboardMixin
5
8
  from osn_selenium.instances.trio_threads.action_chains.hm_scroll import HMScrollMixin
6
9
  from osn_selenium.instances.trio_threads.action_chains.hm_keyboard import HMKeyboardMixin
7
10
  from osn_selenium.instances.trio_threads.action_chains.drag_and_drop import DragAndDropMixin
@@ -17,6 +20,9 @@ class ActionChains(
17
20
  HMKeyboardMixin,
18
21
  HMMoveMixin,
19
22
  HMScrollMixin,
23
+ KeyboardMixin,
24
+ MoveMixin,
25
+ ScrollMixin,
20
26
  AbstractActionChains,
21
27
  ):
22
28
  """
@@ -1,5 +1,5 @@
1
1
  import trio
2
- from osn_selenium.base_mixin import TrioThreadMixin
2
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
3
3
  from typing import (
4
4
  Any,
5
5
  Callable,
@@ -1,6 +1,6 @@
1
1
  import trio
2
2
  from typing import Optional, Self
3
- from osn_selenium.base_mixin import TrioThreadMixin
3
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
4
4
  from osn_selenium.instances._typehints import ALERT_TYPEHINT
5
5
  from osn_selenium.instances.unified.alert import UnifiedAlert
6
6
  from osn_selenium.instances.convert import get_legacy_instance
@@ -1,6 +1,6 @@
1
1
  import trio
2
2
  from typing import List, Self
3
- from osn_selenium.base_mixin import TrioThreadMixin
3
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
4
4
  from osn_selenium.instances._typehints import BROWSER_TYPEHINT
5
5
  from osn_selenium.instances.convert import get_legacy_instance
6
6
  from osn_selenium.instances.unified.browser import UnifiedBrowser
@@ -1,5 +1,5 @@
1
1
  import trio
2
- from osn_selenium.base_mixin import TrioThreadMixin
2
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
3
3
  from osn_selenium.instances.convert import get_legacy_instance
4
4
  from osn_selenium.exceptions.instance import (
5
5
  CannotConvertTypeError
@@ -58,8 +58,8 @@ class BrowsingContext(UnifiedBrowsingContext, TrioThreadMixin, AbstractBrowsingC
58
58
 
59
59
  TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
60
60
 
61
- async def activate(self, context: str) -> Any:
62
- return await self.sync_to_trio(sync_function=self._activate_impl)(context=context)
61
+ async def activate(self, context: str) -> None:
62
+ await self.sync_to_trio(sync_function=self._activate_impl)(context=context)
63
63
 
64
64
  async def add_event_handler(
65
65
  self,
@@ -1,6 +1,6 @@
1
1
  import trio
2
2
  from typing import List, Optional, Self
3
- from osn_selenium.base_mixin import TrioThreadMixin
3
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
4
4
  from selenium.webdriver.common.fedcm.account import Account
5
5
  from osn_selenium.instances._typehints import DIALOG_TYPEHINT
6
6
  from osn_selenium.instances.convert import get_legacy_instance
@@ -1,11 +1,11 @@
1
1
  import trio
2
- from osn_selenium.base_mixin import TrioThreadMixin
3
2
  from typing import (
4
3
  Dict,
5
4
  List,
6
5
  Optional,
7
6
  Self
8
7
  )
8
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
9
9
  from osn_selenium.instances._typehints import FEDCM_TYPEHINT
10
10
  from osn_selenium.instances.unified.fedcm import UnifiedFedCM
11
11
  from osn_selenium.instances.convert import get_legacy_instance
@@ -1,6 +1,6 @@
1
1
  import trio
2
2
  from typing import List, Self, Union
3
- from osn_selenium.base_mixin import TrioThreadMixin
3
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
4
4
  from osn_selenium.instances._typehints import MOBILE_TYPEHINT
5
5
  from osn_selenium.instances.convert import get_legacy_instance
6
6
  from osn_selenium.instances.unified.mobile import UnifiedMobile
@@ -1,11 +1,11 @@
1
1
  import trio
2
- from osn_selenium.base_mixin import TrioThreadMixin
3
2
  from typing import (
4
3
  Callable,
5
4
  List,
6
5
  Optional,
7
6
  Self
8
7
  )
8
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
9
9
  from osn_selenium.instances._typehints import NETWORK_TYPEHINT
10
10
  from osn_selenium.instances.convert import get_legacy_instance
11
11
  from osn_selenium.instances.unified.network import UnifiedNetwork
@@ -1,5 +1,5 @@
1
1
  import trio
2
- from osn_selenium.base_mixin import TrioThreadMixin
2
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
3
3
  from typing import (
4
4
  Any,
5
5
  Dict,
@@ -1,6 +1,11 @@
1
1
  import trio
2
- from typing import Any, Callable, Self
3
- from osn_selenium.base_mixin import TrioThreadMixin
2
+ from typing import (
3
+ Any,
4
+ Callable,
5
+ Dict,
6
+ Self
7
+ )
8
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
4
9
  from osn_selenium.instances._typehints import SCRIPT_TYPEHINT
5
10
  from osn_selenium.instances.convert import get_legacy_instance
6
11
  from osn_selenium.instances.unified.script import UnifiedScript
@@ -49,7 +54,7 @@ class Script(UnifiedScript, TrioThreadMixin, AbstractScript):
49
54
  async def add_javascript_error_handler(self, handler: Callable[[Any], None]) -> int:
50
55
  return await self.sync_to_trio(sync_function=self._add_javascript_error_handler_impl)(handler=handler)
51
56
 
52
- async def execute(self, script: str, *args: Any) -> Any:
57
+ async def execute(self, script: str, *args: Any) -> Dict[str, Any]:
53
58
  return await self.sync_to_trio(sync_function=self._execute_impl)(script, *args)
54
59
 
55
60
  @classmethod
@@ -1,13 +1,14 @@
1
1
  import trio
2
2
  from selenium.webdriver.common.by import By
3
- from osn_selenium.base_mixin import TrioThreadMixin
3
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
4
+ from osn_selenium.instances._typehints import SHADOW_ROOT_TYPEHINT
4
5
  from typing import (
5
6
  List,
6
7
  Optional,
7
8
  Self,
8
- TYPE_CHECKING
9
+ TYPE_CHECKING,
10
+ Type
9
11
  )
10
- from osn_selenium.instances._typehints import SHADOW_ROOT_TYPEHINT
11
12
  from osn_selenium.exceptions.instance import (
12
13
  CannotConvertTypeError
13
14
  )
@@ -16,6 +17,9 @@ from osn_selenium.abstract.instances.shadow_root import AbstractShadowRoot
16
17
  from selenium.webdriver.remote.shadowroot import (
17
18
  ShadowRoot as legacyShadowRoot
18
19
  )
20
+ from selenium.webdriver.remote.webelement import (
21
+ WebElement as legacyWebElement
22
+ )
19
23
  from osn_selenium.instances.convert import (
20
24
  get_legacy_instance,
21
25
  get_trio_thread_instance_wrapper
@@ -27,6 +31,39 @@ __all__ = ["ShadowRoot"]
27
31
  if TYPE_CHECKING:
28
32
  from osn_selenium.instances.trio_threads.web_element import WebElement
29
33
 
34
+ _WEB_ELEMENT_TYPE: Optional[Type["WebElement"]] = None
35
+
36
+
37
+ def _build_web_element(
38
+ legacy_element: legacyWebElement,
39
+ lock: trio.Lock,
40
+ limiter: trio.CapacityLimiter,
41
+ ):
42
+ """
43
+ Builds a wrapped WebElement from a legacy element.
44
+
45
+ Args:
46
+ legacy_element (legacyWebElement): The legacy Selenium WebElement instance.
47
+ lock (trio.Lock): A Trio lock for managing concurrent access.
48
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
49
+
50
+ Returns:
51
+ WebElement: The wrapped WebElement instance.
52
+ """
53
+
54
+ global _WEB_ELEMENT_TYPE
55
+
56
+ if _WEB_ELEMENT_TYPE is None:
57
+ from osn_selenium.instances.trio_threads.web_element import WebElement
58
+ _WEB_ELEMENT_TYPE = WebElement
59
+
60
+ return get_trio_thread_instance_wrapper(
61
+ wrapper_class=_WEB_ELEMENT_TYPE,
62
+ legacy_object=legacy_element,
63
+ lock=lock,
64
+ limiter=limiter,
65
+ )
66
+
30
67
 
31
68
  class ShadowRoot(UnifiedShadowRoot, TrioThreadMixin, AbstractShadowRoot):
32
69
  """
@@ -58,26 +95,20 @@ class ShadowRoot(UnifiedShadowRoot, TrioThreadMixin, AbstractShadowRoot):
58
95
  async def find_element(self, by: str = By.ID, value: Optional[str] = None) -> "WebElement":
59
96
  legacy_element = await self.sync_to_trio(sync_function=self._find_element_impl)(by=by, value=value)
60
97
 
61
- from osn_selenium.instances.trio_threads.web_element import WebElement
62
-
63
- return get_trio_thread_instance_wrapper(
64
- wrapper_class=WebElement,
65
- legacy_object=legacy_element,
98
+ return _build_web_element(
99
+ legacy_element=legacy_element,
66
100
  lock=self._lock,
67
- limiter=self._capacity_limiter
101
+ limiter=self._capacity_limiter,
68
102
  )
69
103
 
70
104
  async def find_elements(self, by: str = By.ID, value: Optional[str] = None) -> List["WebElement"]:
71
105
  legacy_elements = await self.sync_to_trio(sync_function=self._find_elements_impl)(by=by, value=value)
72
106
 
73
- from osn_selenium.instances.trio_threads.web_element import WebElement
74
-
75
107
  return [
76
- get_trio_thread_instance_wrapper(
77
- wrapper_class=WebElement,
78
- legacy_object=legacy_element,
108
+ _build_web_element(
109
+ legacy_element=legacy_element,
79
110
  lock=self._lock,
80
- limiter=self._capacity_limiter
111
+ limiter=self._capacity_limiter,
81
112
  )
82
113
  for legacy_element in legacy_elements
83
114
  ]
@@ -4,7 +4,7 @@ from typing import (
4
4
  Self,
5
5
  Union
6
6
  )
7
- from osn_selenium.base_mixin import TrioThreadMixin
7
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
8
8
  from osn_selenium.instances._typehints import STORAGE_TYPEHINT
9
9
  from osn_selenium.instances.convert import get_legacy_instance
10
10
  from osn_selenium.instances.unified.storage import UnifiedStorage
@@ -4,7 +4,7 @@ from typing import (
4
4
  Self,
5
5
  Union
6
6
  )
7
- from osn_selenium.base_mixin import TrioThreadMixin
7
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
8
8
  from osn_selenium.instances.trio_threads.alert import Alert
9
9
  from osn_selenium.instances.unified.switch_to import UnifiedSwitchTo
10
10
  from osn_selenium.abstract.instances.switch_to import AbstractSwitchTo
@@ -4,7 +4,7 @@ from typing import (
4
4
  Self,
5
5
  TypeVar
6
6
  )
7
- from osn_selenium.base_mixin import TrioThreadMixin
7
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
8
8
  from osn_selenium.instances.convert import get_legacy_instance
9
9
  from osn_selenium.exceptions.instance import (
10
10
  CannotConvertTypeError
@@ -1,6 +1,6 @@
1
1
  import trio
2
2
  from selenium.webdriver.common.by import By
3
- from osn_selenium.base_mixin import TrioThreadMixin
3
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
4
4
  from osn_selenium.instances._typehints import WEB_ELEMENT_TYPEHINT
5
5
  from typing import (
6
6
  Any,
@@ -1,11 +1,11 @@
1
1
  import trio
2
- from osn_selenium.base_mixin import TrioThreadMixin
3
2
  from typing import (
4
3
  Dict,
5
4
  Optional,
6
5
  Self,
7
6
  Union
8
7
  )
8
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
9
9
  from osn_selenium.instances.convert import get_legacy_instance
10
10
  from osn_selenium.exceptions.instance import (
11
11
  CannotConvertTypeError
@@ -26,8 +26,8 @@ class UnifiedBrowsingContext:
26
26
 
27
27
  self._selenium_browsing_context = selenium_browsing_context
28
28
 
29
- def _activate_impl(self, context: str) -> Any:
30
- return self._legacy_impl.activate(context)
29
+ def _activate_impl(self, context: str) -> None:
30
+ self._legacy_impl.activate(context)
31
31
 
32
32
  def _add_event_handler_impl(
33
33
  self,
@@ -1,4 +1,4 @@
1
- from typing import Any, Callable
1
+ from typing import Any, Callable, Dict
2
2
  from osn_selenium.exceptions.instance import NotExpectedTypeError
3
3
  from selenium.webdriver.common.bidi.script import (
4
4
  Script as legacyScript
@@ -21,7 +21,7 @@ class UnifiedScript:
21
21
  def _add_javascript_error_handler_impl(self, handler: Callable[[Any], None]) -> int:
22
22
  return self._legacy_impl.add_javascript_error_handler(handler=handler)
23
23
 
24
- def _execute_impl(self, script: str, *args: Any) -> Any:
24
+ def _execute_impl(self, script: str, *args: Any) -> Dict[str, Any]:
25
25
  return self._legacy_impl.execute(script, *args)
26
26
 
27
27
  @property
@@ -7,6 +7,7 @@ from typing import (
7
7
  List,
8
8
  Optional
9
9
  )
10
+ from osn_selenium.exceptions.instance import NotExpectedTypeError
10
11
  from selenium.webdriver.remote.shadowroot import (
11
12
  ShadowRoot as legacyShadowRoot
12
13
  )
@@ -24,10 +25,7 @@ __all__ = ["UnifiedWebElement"]
24
25
  class UnifiedWebElement:
25
26
  def __init__(self, selenium_web_element: legacyWebElement):
26
27
  if not isinstance(selenium_web_element, legacyWebElement):
27
- raise ExpectedTypeError(
28
- expected_class=legacyWebElement,
29
- received_instance=selenium_web_element
30
- )
28
+ raise NotExpectedTypeError(expected_type=legacyWebElement, received_instance=selenium_web_element)
31
29
 
32
30
  self._selenium_web_element = selenium_web_element
33
31
 
@@ -95,7 +93,7 @@ class UnifiedWebElement:
95
93
  def _parent_impl(self) -> Any:
96
94
  return self._legacy_impl.parent
97
95
 
98
- def _rect_impl(self) -> Dict:
96
+ def _rect_impl(self) -> Dict[str, int]:
99
97
  return self._legacy_impl.rect
100
98
 
101
99
  def _screenshot_as_base64_impl(self) -> str:
@@ -1,6 +1,7 @@
1
+ from copy import deepcopy
1
2
  from pydantic import Field
2
3
  from typing import Dict, List, Literal
3
- from osn_selenium.models import DictModel
4
+ from osn_selenium._base_models import DictModel
4
5
  from osn_selenium.javascript.functions import get_js_scripts
5
6
  from osn_selenium.javascript.fingerprint._functions import add_code_level
6
7
  from osn_selenium.javascript.fingerprint.registry.models import RegistryItem
@@ -42,7 +43,7 @@ class FingerprintSettings(DictModel):
42
43
  """
43
44
 
44
45
  if self.use_preset_registry:
45
- registry_ = FINGERPRINT_REGISTRY.copy()
46
+ registry_ = deepcopy(FINGERPRINT_REGISTRY)
46
47
  else:
47
48
  registry_ = {}
48
49
 
@@ -1,6 +1,6 @@
1
1
  from pydantic import Field
2
2
  from typing import Any, Dict, Optional
3
- from osn_selenium.models import DictModel
3
+ from osn_selenium._base_models import DictModel
4
4
  from osn_selenium.javascript.fingerprint._typehints import SPOOF_RULE_TYPEHINT
5
5
  from osn_selenium.javascript.fingerprint.registry._typehints import ITEM_TYPE_TYPEHINT
6
6
 
@@ -1,4 +1,4 @@
1
- from osn_selenium.models import DictModel
1
+ from osn_selenium._base_models import DictModel
2
2
  from pydantic import (
3
3
  Field,
4
4
  model_validator
@@ -1,6 +1,6 @@
1
1
  from pydantic import Field
2
2
  from typing import Any, Literal
3
- from osn_selenium.models import DictModel
3
+ from osn_selenium._base_models import DictModel
4
4
  from osn_selenium.javascript.fingerprint.spoof._typehints import (
5
5
  NOISE_TYPEHINT,
6
6
  RANDOM_NOISE_TYPEHINT
@@ -1,4 +1,4 @@
1
- from osn_selenium.models import DictModel
1
+ from osn_selenium._base_models import DictModel
2
2
 
3
3
 
4
4
  __all__ = ["JS_Scripts"]