osn-selenium 1.1.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 (418) hide show
  1. osn_selenium/_decorators.py +57 -0
  2. osn_selenium/_trio_threads_helpers.py +157 -0
  3. osn_selenium/_typehints.py +1 -1
  4. osn_selenium/abstract/webdriver/blink/base.py +14 -0
  5. osn_selenium/abstract/webdriver/blink/lifecycle.py +8 -8
  6. osn_selenium/abstract/webdriver/core/base.py +0 -14
  7. osn_selenium/abstract/webdriver/core/capture.py +4 -3
  8. osn_selenium/abstract/webdriver/core/lifecycle.py +8 -8
  9. osn_selenium/abstract/webdriver/core/script.py +5 -4
  10. osn_selenium/abstract/webdriver/core/window.py +11 -11
  11. osn_selenium/dev_tools/_decorators.py +1 -42
  12. osn_selenium/dev_tools/_functions.py +2 -4
  13. osn_selenium/dev_tools/domains/__init__.py +1 -1
  14. osn_selenium/dev_tools/domains/fetch.py +5 -7
  15. osn_selenium/dev_tools/domains_default/fetch.py +1 -1
  16. osn_selenium/dev_tools/logger/main.py +9 -9
  17. osn_selenium/dev_tools/logger/target.py +7 -7
  18. osn_selenium/dev_tools/manager/base.py +10 -19
  19. osn_selenium/dev_tools/manager/lifecycle.py +83 -74
  20. osn_selenium/dev_tools/manager/logging.py +1 -1
  21. osn_selenium/dev_tools/manager/targets.py +13 -5
  22. osn_selenium/dev_tools/settings.py +4 -4
  23. osn_selenium/dev_tools/target/base.py +18 -11
  24. osn_selenium/dev_tools/target/discovery.py +1 -1
  25. osn_selenium/dev_tools/target/events.py +2 -2
  26. osn_selenium/dev_tools/target/fingerprint.py +1 -1
  27. osn_selenium/dev_tools/target/lifecycle.py +103 -43
  28. osn_selenium/dev_tools/target/logging.py +1 -1
  29. osn_selenium/exceptions/__init__.py +0 -1
  30. osn_selenium/exceptions/base.py +28 -1
  31. osn_selenium/exceptions/bidi_bridge.py +59 -0
  32. osn_selenium/exceptions/configuration.py +1 -8
  33. osn_selenium/exceptions/dependencies.py +2 -2
  34. osn_selenium/exceptions/devtools.py +9 -39
  35. osn_selenium/exceptions/experimental.py +26 -0
  36. osn_selenium/exceptions/flags.py +0 -2
  37. osn_selenium/exceptions/instance.py +1 -9
  38. osn_selenium/exceptions/javascript.py +0 -2
  39. osn_selenium/exceptions/logic.py +0 -2
  40. osn_selenium/exceptions/path.py +1 -9
  41. osn_selenium/exceptions/platform.py +0 -2
  42. osn_selenium/exceptions/protocol.py +0 -3
  43. osn_selenium/exceptions/webdriver.py +1 -7
  44. osn_selenium/exceptions/window.py +1 -8
  45. osn_selenium/executors/sync/cdp.py +0 -5
  46. osn_selenium/executors/trio_bidi/cdp.py +101 -0
  47. osn_selenium/executors/trio_bidi/javascript.py +101 -0
  48. osn_selenium/executors/trio_threads/cdp.py +0 -5
  49. osn_selenium/flags/base.py +6 -4
  50. osn_selenium/flags/blink.py +2 -2
  51. osn_selenium/flags/chrome.py +6 -6
  52. osn_selenium/flags/edge.py +6 -6
  53. osn_selenium/instances/convert.py +44 -3
  54. osn_selenium/instances/protocols.py +47 -1
  55. osn_selenium/instances/sync/browsing_context.py +2 -2
  56. osn_selenium/instances/sync/script.py +7 -2
  57. osn_selenium/instances/sync/web_element.py +1 -1
  58. osn_selenium/instances/trio_bidi/__init__.py +1 -0
  59. osn_selenium/instances/trio_bidi/shadow_root.py +180 -0
  60. osn_selenium/instances/trio_bidi/switch_to.py +143 -0
  61. osn_selenium/instances/trio_bidi/web_driver_wait.py +124 -0
  62. osn_selenium/instances/trio_bidi/web_element.py +239 -0
  63. osn_selenium/instances/trio_threads/browsing_context.py +2 -2
  64. osn_selenium/instances/trio_threads/fedcm.py +1 -1
  65. osn_selenium/instances/trio_threads/network.py +1 -1
  66. osn_selenium/instances/trio_threads/script.py +7 -2
  67. osn_selenium/instances/trio_threads/web_extension.py +1 -1
  68. osn_selenium/instances/unified/browsing_context.py +2 -2
  69. osn_selenium/instances/unified/script.py +2 -2
  70. osn_selenium/instances/unified/web_element.py +3 -5
  71. osn_selenium/javascript/fingerprint/__init__.py +2 -1
  72. osn_selenium/trio_bidi/__init__.py +1 -0
  73. osn_selenium/trio_bidi/_context_vars.py +12 -0
  74. osn_selenium/trio_bidi/_error_mappings.py +123 -0
  75. osn_selenium/trio_bidi/_error_redirects.py +194 -0
  76. osn_selenium/trio_bidi/_file_functions.py +28 -0
  77. osn_selenium/trio_bidi/_internal_mappings.py +10 -0
  78. osn_selenium/trio_bidi/_models.py +199 -0
  79. osn_selenium/trio_bidi/_typehints.py +20 -0
  80. osn_selenium/trio_bidi/connection_pool.py +587 -0
  81. osn_selenium/trio_bidi/mapping/__init__.py +1 -0
  82. osn_selenium/trio_bidi/mapping/_constants.py +14 -0
  83. osn_selenium/trio_bidi/mapping/_js_snippets.py +285 -0
  84. osn_selenium/trio_bidi/mapping/_utils.py +4 -0
  85. osn_selenium/trio_bidi/mapping/request_functions/__init__.py +87 -0
  86. osn_selenium/trio_bidi/mapping/request_functions/_alert.py +102 -0
  87. osn_selenium/trio_bidi/mapping/request_functions/_args_helpers.py +225 -0
  88. osn_selenium/trio_bidi/mapping/request_functions/_capture.py +71 -0
  89. osn_selenium/trio_bidi/mapping/request_functions/_cdp.py +40 -0
  90. osn_selenium/trio_bidi/mapping/request_functions/_element.py +55 -0
  91. osn_selenium/trio_bidi/mapping/request_functions/_file.py +32 -0
  92. osn_selenium/trio_bidi/mapping/request_functions/_navigation.py +147 -0
  93. osn_selenium/trio_bidi/mapping/request_functions/_script.py +85 -0
  94. osn_selenium/trio_bidi/mapping/request_functions/_shadow_root.py +65 -0
  95. osn_selenium/trio_bidi/mapping/request_functions/_switch_to.py +59 -0
  96. osn_selenium/trio_bidi/mapping/request_functions/_web_element.py +448 -0
  97. osn_selenium/trio_bidi/mapping/request_functions/_window.py +125 -0
  98. osn_selenium/trio_bidi/mapping/response_functions/__init__.py +86 -0
  99. osn_selenium/trio_bidi/mapping/response_functions/_alert.py +81 -0
  100. osn_selenium/trio_bidi/mapping/response_functions/_args_helpers.py +183 -0
  101. osn_selenium/trio_bidi/mapping/response_functions/_args_validators.py +153 -0
  102. osn_selenium/trio_bidi/mapping/response_functions/_capture.py +71 -0
  103. osn_selenium/trio_bidi/mapping/response_functions/_cdp.py +26 -0
  104. osn_selenium/trio_bidi/mapping/response_functions/_element.py +58 -0
  105. osn_selenium/trio_bidi/mapping/response_functions/_file.py +30 -0
  106. osn_selenium/trio_bidi/mapping/response_functions/_navigation.py +120 -0
  107. osn_selenium/trio_bidi/mapping/response_functions/_script.py +57 -0
  108. osn_selenium/trio_bidi/mapping/response_functions/_shadow_root.py +58 -0
  109. osn_selenium/trio_bidi/mapping/response_functions/_switch_to.py +57 -0
  110. osn_selenium/trio_bidi/mapping/response_functions/_web_element.py +368 -0
  111. osn_selenium/trio_bidi/mapping/response_functions/_window.py +119 -0
  112. osn_selenium/trio_bidi/mixin.py +186 -0
  113. osn_selenium/trio_bidi/remote_connection.py +164 -0
  114. osn_selenium/trio_threads_mixin.py +22 -68
  115. osn_selenium/webdrivers/_args_helpers.py +118 -5
  116. osn_selenium/webdrivers/_typehints.py +9 -3
  117. osn_selenium/webdrivers/protocols.py +81 -1
  118. osn_selenium/webdrivers/sync/blink/base.py +10 -0
  119. osn_selenium/webdrivers/sync/blink/lifecycle.py +26 -8
  120. osn_selenium/webdrivers/sync/chrome/lifecycle.py +23 -5
  121. osn_selenium/webdrivers/sync/chrome/settings.py +6 -1
  122. osn_selenium/webdrivers/sync/core/base.py +3 -11
  123. osn_selenium/webdrivers/sync/core/capture.py +3 -2
  124. osn_selenium/webdrivers/sync/core/file.py +3 -2
  125. osn_selenium/webdrivers/sync/core/lifecycle.py +44 -10
  126. osn_selenium/webdrivers/sync/core/script.py +3 -2
  127. osn_selenium/webdrivers/sync/core/window.py +3 -3
  128. osn_selenium/webdrivers/sync/edge/lifecycle.py +23 -5
  129. osn_selenium/webdrivers/sync/edge/settings.py +6 -1
  130. osn_selenium/webdrivers/sync/yandex/lifecycle.py +23 -5
  131. osn_selenium/webdrivers/sync/yandex/settings.py +6 -1
  132. osn_selenium/webdrivers/trio_bidi/__init__.py +1 -0
  133. osn_selenium/webdrivers/trio_bidi/blink/__init__.py +132 -0
  134. osn_selenium/webdrivers/trio_bidi/blink/base.py +167 -0
  135. osn_selenium/webdrivers/trio_bidi/blink/lifecycle.py +89 -0
  136. osn_selenium/webdrivers/trio_bidi/blink/settings.py +63 -0
  137. osn_selenium/webdrivers/trio_bidi/chrome/__init__.py +114 -0
  138. osn_selenium/webdrivers/trio_bidi/chrome/base.py +127 -0
  139. osn_selenium/webdrivers/trio_bidi/chrome/lifecycle.py +85 -0
  140. osn_selenium/webdrivers/trio_bidi/chrome/settings.py +63 -0
  141. osn_selenium/webdrivers/trio_bidi/core/__init__.py +95 -0
  142. osn_selenium/webdrivers/trio_bidi/core/actions.py +70 -0
  143. osn_selenium/webdrivers/trio_bidi/core/base.py +200 -0
  144. osn_selenium/webdrivers/trio_bidi/core/capture.py +39 -0
  145. osn_selenium/webdrivers/trio_bidi/core/devtools.py +49 -0
  146. osn_selenium/webdrivers/trio_bidi/core/element.py +64 -0
  147. osn_selenium/webdrivers/trio_bidi/core/lifecycle.py +135 -0
  148. osn_selenium/webdrivers/trio_bidi/core/navigation.py +37 -0
  149. osn_selenium/webdrivers/trio_bidi/core/script.py +56 -0
  150. osn_selenium/webdrivers/trio_bidi/core/settings.py +36 -0
  151. osn_selenium/webdrivers/trio_bidi/core/window.py +134 -0
  152. osn_selenium/webdrivers/trio_bidi/edge/__init__.py +114 -0
  153. osn_selenium/webdrivers/trio_bidi/edge/base.py +123 -0
  154. osn_selenium/webdrivers/trio_bidi/edge/lifecycle.py +85 -0
  155. osn_selenium/webdrivers/trio_bidi/edge/settings.py +63 -0
  156. osn_selenium/webdrivers/trio_bidi/yandex/__init__.py +114 -0
  157. osn_selenium/webdrivers/trio_bidi/yandex/base.py +120 -0
  158. osn_selenium/webdrivers/trio_bidi/yandex/lifecycle.py +85 -0
  159. osn_selenium/webdrivers/trio_bidi/yandex/settings.py +63 -0
  160. osn_selenium/webdrivers/trio_threads/blink/__init__.py +7 -1
  161. osn_selenium/webdrivers/trio_threads/blink/base.py +14 -0
  162. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +26 -8
  163. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +23 -5
  164. osn_selenium/webdrivers/trio_threads/chrome/settings.py +1 -1
  165. osn_selenium/webdrivers/trio_threads/core/__init__.py +0 -10
  166. osn_selenium/webdrivers/trio_threads/core/actions.py +1 -1
  167. osn_selenium/webdrivers/trio_threads/core/auth.py +1 -1
  168. osn_selenium/webdrivers/trio_threads/core/base.py +4 -16
  169. osn_selenium/webdrivers/trio_threads/core/capture.py +3 -2
  170. osn_selenium/webdrivers/trio_threads/core/file.py +3 -2
  171. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +44 -10
  172. osn_selenium/webdrivers/trio_threads/core/script.py +3 -2
  173. osn_selenium/webdrivers/trio_threads/core/settings.py +1 -1
  174. osn_selenium/webdrivers/trio_threads/core/storage.py +1 -1
  175. osn_selenium/webdrivers/trio_threads/core/timeouts.py +1 -1
  176. osn_selenium/webdrivers/trio_threads/core/window.py +4 -4
  177. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +23 -5
  178. osn_selenium/webdrivers/trio_threads/edge/settings.py +1 -1
  179. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +23 -5
  180. osn_selenium/webdrivers/trio_threads/yandex/settings.py +1 -1
  181. osn_selenium/webdrivers/unified/blink/base.py +5 -1
  182. osn_selenium/webdrivers/unified/blink/lifecycle.py +4 -2
  183. osn_selenium/webdrivers/unified/chrome/base.py +5 -1
  184. osn_selenium/webdrivers/unified/core/auth.py +4 -2
  185. osn_selenium/webdrivers/unified/core/base.py +16 -10
  186. osn_selenium/webdrivers/unified/core/capture.py +3 -2
  187. osn_selenium/webdrivers/unified/core/components.py +12 -7
  188. osn_selenium/webdrivers/unified/core/devtools.py +2 -1
  189. osn_selenium/webdrivers/unified/core/file.py +3 -2
  190. osn_selenium/webdrivers/unified/core/lifecycle.py +5 -3
  191. osn_selenium/webdrivers/unified/core/script.py +5 -3
  192. osn_selenium/webdrivers/unified/core/storage.py +2 -1
  193. osn_selenium/webdrivers/unified/core/window.py +9 -8
  194. osn_selenium/webdrivers/unified/edge/base.py +5 -1
  195. osn_selenium/webdrivers/unified/yandex/base.py +5 -1
  196. {osn_selenium-1.1.0.dist-info → osn_selenium-1.2.0.dist-info}/METADATA +3 -2
  197. osn_selenium-1.2.0.dist-info/RECORD +480 -0
  198. osn_selenium/abstract/executors/cdp/__init__.py +0 -435
  199. osn_selenium/abstract/executors/cdp/accessibility.py +0 -62
  200. osn_selenium/abstract/executors/cdp/animation.py +0 -47
  201. osn_selenium/abstract/executors/cdp/audits.py +0 -39
  202. osn_selenium/abstract/executors/cdp/autofill.py +0 -34
  203. osn_selenium/abstract/executors/cdp/background_service.py +0 -22
  204. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +0 -95
  205. osn_selenium/abstract/executors/cdp/browser.py +0 -122
  206. osn_selenium/abstract/executors/cdp/cache_storage.py +0 -49
  207. osn_selenium/abstract/executors/cdp/cast.py +0 -31
  208. osn_selenium/abstract/executors/cdp/console.py +0 -18
  209. osn_selenium/abstract/executors/cdp/css.py +0 -197
  210. osn_selenium/abstract/executors/cdp/debugger.py +0 -198
  211. osn_selenium/abstract/executors/cdp/device_access.py +0 -22
  212. osn_selenium/abstract/executors/cdp/device_orientation.py +0 -14
  213. osn_selenium/abstract/executors/cdp/dom.py +0 -305
  214. osn_selenium/abstract/executors/cdp/dom_debugger.py +0 -57
  215. osn_selenium/abstract/executors/cdp/dom_snapshot.py +0 -42
  216. osn_selenium/abstract/executors/cdp/dom_storage.py +0 -31
  217. osn_selenium/abstract/executors/cdp/emulation.py +0 -259
  218. osn_selenium/abstract/executors/cdp/event_breakpoints.py +0 -18
  219. osn_selenium/abstract/executors/cdp/extensions.py +0 -31
  220. osn_selenium/abstract/executors/cdp/fed_cm.py +0 -35
  221. osn_selenium/abstract/executors/cdp/fetch.py +0 -76
  222. osn_selenium/abstract/executors/cdp/file_system.py +0 -11
  223. osn_selenium/abstract/executors/cdp/headless_experimental.py +0 -30
  224. osn_selenium/abstract/executors/cdp/heap_profiler.py +0 -73
  225. osn_selenium/abstract/executors/cdp/indexed_db.py +0 -99
  226. osn_selenium/abstract/executors/cdp/input.py +0 -158
  227. osn_selenium/abstract/executors/cdp/inspector.py +0 -14
  228. osn_selenium/abstract/executors/cdp/io.py +0 -24
  229. osn_selenium/abstract/executors/cdp/layer_tree.py +0 -61
  230. osn_selenium/abstract/executors/cdp/log.py +0 -27
  231. osn_selenium/abstract/executors/cdp/media.py +0 -14
  232. osn_selenium/abstract/executors/cdp/memory.py +0 -61
  233. osn_selenium/abstract/executors/cdp/network.py +0 -252
  234. osn_selenium/abstract/executors/cdp/overlay.py +0 -166
  235. osn_selenium/abstract/executors/cdp/page.py +0 -347
  236. osn_selenium/abstract/executors/cdp/performance.py +0 -28
  237. osn_selenium/abstract/executors/cdp/performance_timeline.py +0 -11
  238. osn_selenium/abstract/executors/cdp/preload.py +0 -14
  239. osn_selenium/abstract/executors/cdp/profiler.py +0 -54
  240. osn_selenium/abstract/executors/cdp/pwa.py +0 -46
  241. osn_selenium/abstract/executors/cdp/runtime.py +0 -176
  242. osn_selenium/abstract/executors/cdp/schema.py +0 -11
  243. osn_selenium/abstract/executors/cdp/security.py +0 -26
  244. osn_selenium/abstract/executors/cdp/service_worker.py +0 -54
  245. osn_selenium/abstract/executors/cdp/storage.py +0 -175
  246. osn_selenium/abstract/executors/cdp/system_info.py +0 -24
  247. osn_selenium/abstract/executors/cdp/target.py +0 -125
  248. osn_selenium/abstract/executors/cdp/tethering.py +0 -14
  249. osn_selenium/abstract/executors/cdp/tracing.py +0 -48
  250. osn_selenium/abstract/executors/cdp/web_audio.py +0 -19
  251. osn_selenium/abstract/executors/cdp/web_authn.py +0 -76
  252. osn_selenium/base_mixin.py +0 -122
  253. osn_selenium/executors/sync/cdp/__init__.py +0 -550
  254. osn_selenium/executors/sync/cdp/accessibility.py +0 -74
  255. osn_selenium/executors/sync/cdp/animation.py +0 -50
  256. osn_selenium/executors/sync/cdp/audits.py +0 -48
  257. osn_selenium/executors/sync/cdp/autofill.py +0 -39
  258. osn_selenium/executors/sync/cdp/background_service.py +0 -30
  259. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +0 -101
  260. osn_selenium/executors/sync/cdp/browser.py +0 -131
  261. osn_selenium/executors/sync/cdp/cache_storage.py +0 -66
  262. osn_selenium/executors/sync/cdp/cast.py +0 -38
  263. osn_selenium/executors/sync/cdp/console.py +0 -24
  264. osn_selenium/executors/sync/cdp/css.py +0 -187
  265. osn_selenium/executors/sync/cdp/debugger.py +0 -206
  266. osn_selenium/executors/sync/cdp/device_access.py +0 -27
  267. osn_selenium/executors/sync/cdp/device_orientation.py +0 -24
  268. osn_selenium/executors/sync/cdp/dom.py +0 -310
  269. osn_selenium/executors/sync/cdp/dom_debugger.py +0 -56
  270. osn_selenium/executors/sync/cdp/dom_snapshot.py +0 -58
  271. osn_selenium/executors/sync/cdp/dom_storage.py +0 -38
  272. osn_selenium/executors/sync/cdp/emulation.py +0 -270
  273. osn_selenium/executors/sync/cdp/event_breakpoints.py +0 -27
  274. osn_selenium/executors/sync/cdp/extensions.py +0 -39
  275. osn_selenium/executors/sync/cdp/fed_cm.py +0 -45
  276. osn_selenium/executors/sync/cdp/fetch.py +0 -96
  277. osn_selenium/executors/sync/cdp/file_system.py +0 -18
  278. osn_selenium/executors/sync/cdp/headless_experimental.py +0 -44
  279. osn_selenium/executors/sync/cdp/heap_profiler.py +0 -89
  280. osn_selenium/executors/sync/cdp/indexed_db.py +0 -142
  281. osn_selenium/executors/sync/cdp/input.py +0 -233
  282. osn_selenium/executors/sync/cdp/inspector.py +0 -21
  283. osn_selenium/executors/sync/cdp/io.py +0 -33
  284. osn_selenium/executors/sync/cdp/layer_tree.py +0 -71
  285. osn_selenium/executors/sync/cdp/log.py +0 -35
  286. osn_selenium/executors/sync/cdp/media.py +0 -21
  287. osn_selenium/executors/sync/cdp/memory.py +0 -62
  288. osn_selenium/executors/sync/cdp/network.py +0 -287
  289. osn_selenium/executors/sync/cdp/overlay.py +0 -174
  290. osn_selenium/executors/sync/cdp/page.py +0 -365
  291. osn_selenium/executors/sync/cdp/performance.py +0 -33
  292. osn_selenium/executors/sync/cdp/performance_timeline.py +0 -26
  293. osn_selenium/executors/sync/cdp/preload.py +0 -21
  294. osn_selenium/executors/sync/cdp/profiler.py +0 -58
  295. osn_selenium/executors/sync/cdp/pwa.py +0 -55
  296. osn_selenium/executors/sync/cdp/runtime.py +0 -221
  297. osn_selenium/executors/sync/cdp/schema.py +0 -23
  298. osn_selenium/executors/sync/cdp/security.py +0 -30
  299. osn_selenium/executors/sync/cdp/service_worker.py +0 -56
  300. osn_selenium/executors/sync/cdp/storage.py +0 -151
  301. osn_selenium/executors/sync/cdp/system_info.py +0 -30
  302. osn_selenium/executors/sync/cdp/target.py +0 -147
  303. osn_selenium/executors/sync/cdp/tethering.py +0 -21
  304. osn_selenium/executors/sync/cdp/tracing.py +0 -62
  305. osn_selenium/executors/sync/cdp/web_audio.py +0 -24
  306. osn_selenium/executors/sync/cdp/web_authn.py +0 -82
  307. osn_selenium/executors/trio_threads/cdp/__init__.py +0 -771
  308. osn_selenium/executors/trio_threads/cdp/accessibility.py +0 -87
  309. osn_selenium/executors/trio_threads/cdp/animation.py +0 -63
  310. osn_selenium/executors/trio_threads/cdp/audits.py +0 -57
  311. osn_selenium/executors/trio_threads/cdp/autofill.py +0 -52
  312. osn_selenium/executors/trio_threads/cdp/background_service.py +0 -40
  313. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +0 -111
  314. osn_selenium/executors/trio_threads/cdp/browser.py +0 -140
  315. osn_selenium/executors/trio_threads/cdp/cache_storage.py +0 -79
  316. osn_selenium/executors/trio_threads/cdp/cast.py +0 -47
  317. osn_selenium/executors/trio_threads/cdp/console.py +0 -33
  318. osn_selenium/executors/trio_threads/cdp/css.py +0 -196
  319. osn_selenium/executors/trio_threads/cdp/debugger.py +0 -219
  320. osn_selenium/executors/trio_threads/cdp/device_access.py +0 -40
  321. osn_selenium/executors/trio_threads/cdp/device_orientation.py +0 -34
  322. osn_selenium/executors/trio_threads/cdp/dom.py +0 -319
  323. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +0 -69
  324. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +0 -71
  325. osn_selenium/executors/trio_threads/cdp/dom_storage.py +0 -51
  326. osn_selenium/executors/trio_threads/cdp/emulation.py +0 -283
  327. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +0 -37
  328. osn_selenium/executors/trio_threads/cdp/extensions.py +0 -52
  329. osn_selenium/executors/trio_threads/cdp/fed_cm.py +0 -54
  330. osn_selenium/executors/trio_threads/cdp/fetch.py +0 -105
  331. osn_selenium/executors/trio_threads/cdp/file_system.py +0 -31
  332. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +0 -54
  333. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +0 -102
  334. osn_selenium/executors/trio_threads/cdp/indexed_db.py +0 -155
  335. osn_selenium/executors/trio_threads/cdp/input.py +0 -242
  336. osn_selenium/executors/trio_threads/cdp/inspector.py +0 -34
  337. osn_selenium/executors/trio_threads/cdp/io.py +0 -42
  338. osn_selenium/executors/trio_threads/cdp/layer_tree.py +0 -84
  339. osn_selenium/executors/trio_threads/cdp/log.py +0 -44
  340. osn_selenium/executors/trio_threads/cdp/media.py +0 -30
  341. osn_selenium/executors/trio_threads/cdp/memory.py +0 -71
  342. osn_selenium/executors/trio_threads/cdp/network.py +0 -296
  343. osn_selenium/executors/trio_threads/cdp/overlay.py +0 -183
  344. osn_selenium/executors/trio_threads/cdp/page.py +0 -374
  345. osn_selenium/executors/trio_threads/cdp/performance.py +0 -46
  346. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +0 -36
  347. osn_selenium/executors/trio_threads/cdp/preload.py +0 -30
  348. osn_selenium/executors/trio_threads/cdp/profiler.py +0 -71
  349. osn_selenium/executors/trio_threads/cdp/pwa.py +0 -64
  350. osn_selenium/executors/trio_threads/cdp/runtime.py +0 -230
  351. osn_selenium/executors/trio_threads/cdp/schema.py +0 -32
  352. osn_selenium/executors/trio_threads/cdp/security.py +0 -43
  353. osn_selenium/executors/trio_threads/cdp/service_worker.py +0 -69
  354. osn_selenium/executors/trio_threads/cdp/storage.py +0 -162
  355. osn_selenium/executors/trio_threads/cdp/system_info.py +0 -43
  356. osn_selenium/executors/trio_threads/cdp/target.py +0 -156
  357. osn_selenium/executors/trio_threads/cdp/tethering.py +0 -34
  358. osn_selenium/executors/trio_threads/cdp/tracing.py +0 -71
  359. osn_selenium/executors/trio_threads/cdp/web_audio.py +0 -37
  360. osn_selenium/executors/trio_threads/cdp/web_authn.py +0 -95
  361. osn_selenium/executors/unified/cdp/accessibility.py +0 -81
  362. osn_selenium/executors/unified/cdp/animation.py +0 -50
  363. osn_selenium/executors/unified/cdp/audits.py +0 -45
  364. osn_selenium/executors/unified/cdp/autofill.py +0 -41
  365. osn_selenium/executors/unified/cdp/background_service.py +0 -24
  366. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +0 -132
  367. osn_selenium/executors/unified/cdp/browser.py +0 -143
  368. osn_selenium/executors/unified/cdp/cache_storage.py +0 -69
  369. osn_selenium/executors/unified/cdp/cast.py +0 -32
  370. osn_selenium/executors/unified/cdp/console.py +0 -18
  371. osn_selenium/executors/unified/cdp/css.py +0 -237
  372. osn_selenium/executors/unified/cdp/debugger.py +0 -243
  373. osn_selenium/executors/unified/cdp/device_access.py +0 -21
  374. osn_selenium/executors/unified/cdp/device_orientation.py +0 -18
  375. osn_selenium/executors/unified/cdp/dom.py +0 -380
  376. osn_selenium/executors/unified/cdp/dom_debugger.py +0 -65
  377. osn_selenium/executors/unified/cdp/dom_snapshot.py +0 -58
  378. osn_selenium/executors/unified/cdp/dom_storage.py +0 -38
  379. osn_selenium/executors/unified/cdp/emulation.py +0 -312
  380. osn_selenium/executors/unified/cdp/event_breakpoints.py +0 -24
  381. osn_selenium/executors/unified/cdp/extensions.py +0 -45
  382. osn_selenium/executors/unified/cdp/fed_cm.py +0 -51
  383. osn_selenium/executors/unified/cdp/fetch.py +0 -111
  384. osn_selenium/executors/unified/cdp/file_system.py +0 -15
  385. osn_selenium/executors/unified/cdp/headless_experimental.py +0 -38
  386. osn_selenium/executors/unified/cdp/heap_profiler.py +0 -101
  387. osn_selenium/executors/unified/cdp/indexed_db.py +0 -157
  388. osn_selenium/executors/unified/cdp/input.py +0 -254
  389. osn_selenium/executors/unified/cdp/inspector.py +0 -15
  390. osn_selenium/executors/unified/cdp/io.py +0 -29
  391. osn_selenium/executors/unified/cdp/layer_tree.py +0 -71
  392. osn_selenium/executors/unified/cdp/log.py +0 -29
  393. osn_selenium/executors/unified/cdp/media.py +0 -15
  394. osn_selenium/executors/unified/cdp/memory.py +0 -59
  395. osn_selenium/executors/unified/cdp/network.py +0 -323
  396. osn_selenium/executors/unified/cdp/overlay.py +0 -209
  397. osn_selenium/executors/unified/cdp/page.py +0 -410
  398. osn_selenium/executors/unified/cdp/performance.py +0 -27
  399. osn_selenium/executors/unified/cdp/performance_timeline.py +0 -17
  400. osn_selenium/executors/unified/cdp/preload.py +0 -15
  401. osn_selenium/executors/unified/cdp/profiler.py +0 -55
  402. osn_selenium/executors/unified/cdp/pwa.py +0 -55
  403. osn_selenium/executors/unified/cdp/runtime.py +0 -245
  404. osn_selenium/executors/unified/cdp/schema.py +0 -17
  405. osn_selenium/executors/unified/cdp/security.py +0 -27
  406. osn_selenium/executors/unified/cdp/service_worker.py +0 -62
  407. osn_selenium/executors/unified/cdp/storage.py +0 -178
  408. osn_selenium/executors/unified/cdp/system_info.py +0 -24
  409. osn_selenium/executors/unified/cdp/target.py +0 -165
  410. osn_selenium/executors/unified/cdp/tethering.py +0 -15
  411. osn_selenium/executors/unified/cdp/tracing.py +0 -62
  412. osn_selenium/executors/unified/cdp/web_audio.py +0 -18
  413. osn_selenium/executors/unified/cdp/web_authn.py +0 -103
  414. osn_selenium-1.1.0.dist-info/RECORD +0 -615
  415. /osn_selenium/{dev_tools/_exception_helpers.py → _exception_helpers.py} +0 -0
  416. /osn_selenium/executors/{unified/cdp → trio_bidi}/__init__.py +0 -0
  417. {osn_selenium-1.1.0.dist-info → osn_selenium-1.2.0.dist-info}/WHEEL +0 -0
  418. {osn_selenium-1.1.0.dist-info → osn_selenium-1.2.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,143 @@
1
+ import math
2
+ import trio
3
+ from typing_extensions import deprecated
4
+ from typing import (
5
+ Optional,
6
+ Self,
7
+ Union
8
+ )
9
+ from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
10
+ from osn_selenium.instances.convert import get_legacy_instance
11
+ from osn_selenium.instances.trio_bidi.web_element import WebElement
12
+ from osn_selenium.instances.unified.switch_to import UnifiedSwitchTo
13
+ from osn_selenium.abstract.instances.switch_to import AbstractSwitchTo
14
+ from osn_selenium.exceptions.instance import (
15
+ CannotConvertTypeError
16
+ )
17
+ from selenium.webdriver.remote.switch_to import (
18
+ SwitchTo as legacySwitchTo
19
+ )
20
+ from osn_selenium.exceptions.experimental import (
21
+ NotImplementedExperimentalFeatureError
22
+ )
23
+ from osn_selenium.instances._typehints import (
24
+ SWITCH_TO_TYPEHINT,
25
+ WEB_ELEMENT_TYPEHINT
26
+ )
27
+
28
+
29
+ __all__ = ["SwitchTo"]
30
+
31
+
32
+ class SwitchTo(UnifiedSwitchTo, TrioBiDiMixin, AbstractSwitchTo):
33
+ """
34
+ Wrapper for the legacy Selenium SwitchTo instance.
35
+
36
+ Provides mechanisms to change the driver's focus to different frames,
37
+ windows, or alerts.
38
+ """
39
+
40
+ def __init__(
41
+ self,
42
+ selenium_switch_to: legacySwitchTo,
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 SwitchTo wrapper.
50
+
51
+ Args:
52
+ selenium_switch_to (legacySwitchTo): The legacy Selenium SwitchTo 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
+ UnifiedSwitchTo.__init__(self, selenium_switch_to=selenium_switch_to)
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
+ @deprecated(
70
+ "This method is currently not supported. It will raise 'NotImplementedExperimentalFeatureError' on call."
71
+ )
72
+ async def active_element(self) -> WebElement:
73
+ raise NotImplementedExperimentalFeatureError(name="SwitchTo.active_element")
74
+
75
+ @deprecated(
76
+ "This method is currently not supported. It will raise 'NotImplementedExperimentalFeatureError' on call."
77
+ )
78
+ async def alert(self):
79
+ raise NotImplementedExperimentalFeatureError(name="SwitchTo.alert")
80
+
81
+ @deprecated(
82
+ "This method is currently not supported. It will raise 'NotImplementedExperimentalFeatureError' on call."
83
+ )
84
+ async def default_content(self) -> None:
85
+ raise NotImplementedExperimentalFeatureError(name="SwitchTo.default_content")
86
+
87
+ @deprecated(
88
+ "This method is currently not supported. It will raise 'NotImplementedExperimentalFeatureError' on call."
89
+ )
90
+ async def frame(self, frame_reference: Union[str, int, WEB_ELEMENT_TYPEHINT]) -> None:
91
+ raise NotImplementedExperimentalFeatureError(name="SwitchTo.frame")
92
+
93
+ @classmethod
94
+ def from_legacy(
95
+ cls,
96
+ legacy_object: SWITCH_TO_TYPEHINT,
97
+ lock: trio.Lock,
98
+ limiter: trio.CapacityLimiter,
99
+ trio_token: Optional[trio.lowlevel.TrioToken] = None,
100
+ bidi_buffer_size: Union[int, float] = math.inf,
101
+ ) -> Self:
102
+ """
103
+ Creates an instance from a legacy Selenium SwitchTo object.
104
+
105
+ This factory method is used to wrap an existing Selenium SwitchTo
106
+ instance into the new interface.
107
+
108
+ Args:
109
+ legacy_object (SWITCH_TO_TYPEHINT): The legacy Selenium SwitchTo instance or its wrapper.
110
+ lock (trio.Lock): A Trio lock for managing concurrent access.
111
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
112
+ trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
113
+ bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
114
+
115
+ Returns:
116
+ Self: A new instance of a class implementing SwitchTo.
117
+ """
118
+
119
+ legacy_switch_to_obj = get_legacy_instance(instance=legacy_object)
120
+
121
+ if not isinstance(legacy_switch_to_obj, legacySwitchTo):
122
+ raise CannotConvertTypeError(from_=legacySwitchTo, to_=legacy_object)
123
+
124
+ return cls(
125
+ selenium_switch_to=legacy_switch_to_obj,
126
+ lock=lock,
127
+ limiter=limiter,
128
+ trio_token=trio_token,
129
+ bidi_buffer_size=bidi_buffer_size,
130
+ )
131
+
132
+ @property
133
+ def legacy(self) -> legacySwitchTo:
134
+ return self._legacy_impl
135
+
136
+ async def new_window(self, type_hint: Optional[str] = None) -> None:
137
+ await self.sync_to_trio(sync_function=self._new_window_impl)(type_hint=type_hint)
138
+
139
+ async def parent_frame(self) -> None:
140
+ raise NotImplementedExperimentalFeatureError(name="SwitchTo.parent_frame")
141
+
142
+ async def window(self, window_name: str) -> None:
143
+ await self.sync_to_trio(sync_function=self._window_impl)(window_name=window_name)
@@ -0,0 +1,124 @@
1
+ import math
2
+ import trio
3
+ from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
4
+ from osn_selenium.instances.convert import get_legacy_instance
5
+ from typing import (
6
+ Callable,
7
+ Optional,
8
+ Self,
9
+ TypeVar,
10
+ Union
11
+ )
12
+ from osn_selenium.exceptions.instance import (
13
+ CannotConvertTypeError
14
+ )
15
+ from osn_selenium.instances._typehints import (
16
+ WebDriverWaitInputType
17
+ )
18
+ from osn_selenium.instances.unified.web_driver_wait import UnifiedWebDriverWait
19
+ from selenium.webdriver.support.wait import (
20
+ WebDriverWait as legacyWebDriverWait
21
+ )
22
+ from osn_selenium.abstract.instances.web_driver_wait import (
23
+ AbstractWebDriverWait
24
+ )
25
+
26
+
27
+ __all__ = ["OUTPUT", "WebDriverWait"]
28
+
29
+ OUTPUT = TypeVar("OUTPUT")
30
+
31
+
32
+ class WebDriverWait(UnifiedWebDriverWait, TrioBiDiMixin, AbstractWebDriverWait):
33
+ """
34
+ Wrapper for the legacy Selenium WebDriverWait instance.
35
+
36
+ Provides conditional waiting functionality, pausing execution until
37
+ specific conditions (expected conditions) are met or a timeout occurs.
38
+ """
39
+
40
+ def __init__(
41
+ self,
42
+ selenium_webdriver_wait: legacyWebDriverWait,
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 WebDriverWait wrapper.
50
+
51
+ Args:
52
+ selenium_webdriver_wait (legacyWebDriverWait): The legacy Selenium WebDriverWait 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
+ UnifiedWebDriverWait.__init__(self, selenium_webdriver_wait=selenium_webdriver_wait)
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
+ @classmethod
70
+ def from_legacy(
71
+ cls,
72
+ legacy_object: legacyWebDriverWait,
73
+ lock: trio.Lock,
74
+ limiter: trio.CapacityLimiter,
75
+ trio_token: Optional[trio.lowlevel.TrioToken] = None,
76
+ bidi_buffer_size: Union[int, float] = math.inf,
77
+ ) -> Self:
78
+ """
79
+ Creates a WebDriverWait wrapper instance from a legacy Selenium object.
80
+
81
+ Args:
82
+ legacy_object (legacyWebDriverWait): The legacy object to convert.
83
+ lock (trio.Lock): A Trio lock for managing concurrent access.
84
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
85
+ trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
86
+ bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
87
+
88
+ Returns:
89
+ Self: An instance of the WebDriverWait wrapper.
90
+
91
+ Raises:
92
+ CannotConvertTypeError: If the provided object cannot be converted to legacyWebDriverWait.
93
+ """
94
+
95
+ legacy_wait_obj = get_legacy_instance(instance=legacy_object)
96
+
97
+ if not isinstance(legacy_wait_obj, legacyWebDriverWait):
98
+ raise CannotConvertTypeError(from_=legacyWebDriverWait, to_=legacy_object)
99
+
100
+ return cls(
101
+ selenium_webdriver_wait=legacy_wait_obj,
102
+ lock=lock,
103
+ limiter=limiter,
104
+ trio_token=trio_token,
105
+ bidi_buffer_size=bidi_buffer_size,
106
+ )
107
+
108
+ @property
109
+ def legacy(self) -> legacyWebDriverWait:
110
+ return self._legacy_impl
111
+
112
+ async def until(
113
+ self,
114
+ method: Callable[[WebDriverWaitInputType], OUTPUT],
115
+ message: str = ""
116
+ ) -> OUTPUT:
117
+ return await self.sync_to_trio(sync_function=self._until_impl)(method=method, message=message)
118
+
119
+ async def until_not(
120
+ self,
121
+ method: Callable[[WebDriverWaitInputType], OUTPUT],
122
+ message: str = ""
123
+ ) -> OUTPUT:
124
+ return await self.sync_to_trio(sync_function=self._until_not_impl)(method=method, message=message)
@@ -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
+ )
@@ -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,11 +1,11 @@
1
1
  import trio
2
- from osn_selenium.trio_threads_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,11 +1,11 @@
1
1
  import trio
2
- from osn_selenium.trio_threads_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,10 @@
1
1
  import trio
2
- from typing import Any, Callable, Self
2
+ from typing import (
3
+ Any,
4
+ Callable,
5
+ Dict,
6
+ Self
7
+ )
3
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
@@ -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,11 +1,11 @@
1
1
  import trio
2
- from osn_selenium.trio_threads_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,3 +1,4 @@
1
+ from copy import deepcopy
1
2
  from pydantic import Field
2
3
  from typing import Dict, List, Literal
3
4
  from osn_selenium._base_models import DictModel
@@ -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
 
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,12 @@
1
+ from _contextvars import ContextVar
2
+ from osn_selenium.trio_bidi._typehints import (
3
+ CURRENT_BROWSING_CONTEXT_TYPEHINT
4
+ )
5
+
6
+
7
+ __all__ = ["CURRENT_BROWSING_CONTEXT"]
8
+
9
+ CURRENT_BROWSING_CONTEXT: ContextVar[CURRENT_BROWSING_CONTEXT_TYPEHINT] = ContextVar("current_browsing_context",
10
+
11
+
12
+ default=None)