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
@@ -1,6 +1,13 @@
1
+ import math
1
2
  import trio
2
- from typing import Any, Callable, Dict
3
3
  from osn_selenium.instances.protocols import AnyInstanceWrapper
4
+ from typing import (
5
+ Any,
6
+ Callable,
7
+ Dict,
8
+ Optional,
9
+ Union
10
+ )
4
11
  from osn_selenium.exceptions.protocol import (
5
12
  ProtocolComplianceError
6
13
  )
@@ -13,15 +20,20 @@ from osn_selenium.instances.sync.web_element import (
13
20
  from selenium.webdriver.remote.webelement import (
14
21
  WebElement as SeleniumWebElement
15
22
  )
16
- from osn_selenium.webdrivers.protocols import (
17
- SyncWebDriver,
18
- TrioThreadWebDriver
23
+ from osn_selenium.instances.trio_bidi.web_element import (
24
+ WebElement as TrioBiDiWebElement
19
25
  )
20
26
  from osn_selenium.instances.trio_threads.web_element import (
21
27
  WebElement as TrioThreadWebElement
22
28
  )
29
+ from osn_selenium.webdrivers.protocols import (
30
+ SyncWebDriver,
31
+ TrioBiDiWebDriver,
32
+ TrioThreadWebDriver
33
+ )
23
34
  from osn_selenium.instances.convert import (
24
35
  get_sync_instance_wrapper,
36
+ get_trio_bidi_instance_wrapper,
25
37
  get_trio_thread_instance_wrapper
26
38
  )
27
39
 
@@ -31,6 +43,7 @@ __all__ = [
31
43
  "get_wrap_args_function",
32
44
  "unwrap_args",
33
45
  "wrap_sync_args",
46
+ "wrap_trio_bidi_args",
34
47
  "wrap_trio_thread_args"
35
48
  ]
36
49
 
@@ -64,6 +77,91 @@ def unwrap_args(args: Any) -> Any:
64
77
  return args
65
78
 
66
79
 
80
+ def wrap_trio_bidi_args(
81
+ args: Any,
82
+ lock: trio.Lock,
83
+ limiter: trio.CapacityLimiter,
84
+ trio_token: Optional[trio.lowlevel.TrioToken] = None,
85
+ bidi_buffer_size: Union[int, float] = math.inf,
86
+ ) -> Any:
87
+ """
88
+ Recursively wraps Selenium WebElements into TrioBiDiWebElement instances.
89
+
90
+ Args:
91
+ args (Any): Data structure containing potential Selenium WebElements.
92
+ lock (trio.Lock): Trio lock for synchronization.
93
+ limiter (trio.CapacityLimiter): Trio capacity limiter.
94
+ trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
95
+ bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
96
+
97
+ Returns:
98
+ Any: Data structure with wrapped elements.
99
+ """
100
+
101
+ if isinstance(args, list):
102
+ return [
103
+ wrap_trio_bidi_args(
104
+ arg,
105
+ lock=lock,
106
+ limiter=limiter,
107
+ trio_token=trio_token,
108
+ bidi_buffer_size=bidi_buffer_size,
109
+ ) for arg in args
110
+ ]
111
+
112
+ if isinstance(args, set):
113
+ return {
114
+ wrap_trio_bidi_args(
115
+ arg,
116
+ lock=lock,
117
+ limiter=limiter,
118
+ trio_token=trio_token,
119
+ bidi_buffer_size=bidi_buffer_size,
120
+ ) for arg in args
121
+ }
122
+
123
+ if isinstance(args, tuple):
124
+ return (
125
+ wrap_trio_bidi_args(
126
+ arg,
127
+ lock=lock,
128
+ limiter=limiter,
129
+ trio_token=trio_token,
130
+ bidi_buffer_size=bidi_buffer_size,
131
+ ) for arg in args
132
+ )
133
+
134
+ if isinstance(args, dict):
135
+ return {
136
+ wrap_trio_bidi_args(
137
+ key,
138
+ lock=lock,
139
+ limiter=limiter,
140
+ trio_token=trio_token,
141
+ bidi_buffer_size=bidi_buffer_size,
142
+ ): wrap_trio_bidi_args(
143
+ value,
144
+ lock=lock,
145
+ limiter=limiter,
146
+ trio_token=trio_token,
147
+ bidi_buffer_size=bidi_buffer_size,
148
+ )
149
+ for key, value in args.items()
150
+ }
151
+
152
+ if isinstance(args, SeleniumWebElement):
153
+ return get_trio_bidi_instance_wrapper(
154
+ wrapper_class=TrioBiDiWebElement,
155
+ legacy_object=args,
156
+ lock=lock,
157
+ limiter=limiter,
158
+ trio_token=trio_token,
159
+ bidi_buffer_size=bidi_buffer_size,
160
+ )
161
+
162
+ return args
163
+
164
+
67
165
  def wrap_trio_thread_args(args: Any, lock: trio.Lock, limiter: trio.CapacityLimiter) -> Any:
68
166
  """
69
167
  Recursively wraps Selenium WebElements into TrioThreadWebElement instances.
@@ -158,7 +256,22 @@ def get_wrap_args_function(driver: ANY_WEBDRIVER_PROTOCOL_TYPEHINT) -> Callable[
158
256
 
159
257
  return wrapper
160
258
 
161
- raise ProtocolComplianceError(instance=driver, expected_protocols=(SyncWebDriver, TrioThreadWebDriver))
259
+ if isinstance(driver, TrioBiDiWebDriver) and driver.architecture == "trio_bidi":
260
+ def wrapper(args: Any) -> Any:
261
+ return wrap_trio_bidi_args(
262
+ args,
263
+ lock=driver.lock,
264
+ limiter=driver.capacity_limiter,
265
+ trio_token=driver.trio_token,
266
+ bidi_buffer_size=driver.trio_bidi_buffer_size,
267
+ )
268
+
269
+ return wrapper
270
+
271
+ raise ProtocolComplianceError(
272
+ instance=driver,
273
+ expected_protocols=(SyncWebDriver, TrioThreadWebDriver, TrioBiDiWebDriver)
274
+ )
162
275
 
163
276
 
164
277
  def build_cdp_kwargs(**kwargs: Any) -> Dict[str, Any]:
@@ -1,10 +1,16 @@
1
- from typing import Union
1
+ from typing import TYPE_CHECKING, Union
2
2
  from osn_selenium.webdrivers.protocols import (
3
3
  SyncWebDriver,
4
+ TrioBiDiWebDriver,
4
5
  TrioThreadWebDriver
5
6
  )
6
7
 
7
8
 
8
- __all__ = ["ANY_WEBDRIVER_PROTOCOL_TYPEHINT"]
9
+ __all__ = ["ANY_TRIO_WEBDRIVER_TYPEHINT", "ANY_WEBDRIVER_PROTOCOL_TYPEHINT"]
9
10
 
10
- ANY_WEBDRIVER_PROTOCOL_TYPEHINT = Union[SyncWebDriver, TrioThreadWebDriver]
11
+ if TYPE_CHECKING:
12
+ from osn_selenium.webdrivers.trio_threads.core import CoreWebDriver as TrioThreadsWebDriver
13
+ from osn_selenium.webdrivers.trio_bidi.core import CoreWebDriver as TrioBidiWebDriver
14
+
15
+ ANY_WEBDRIVER_PROTOCOL_TYPEHINT = Union[SyncWebDriver, TrioThreadWebDriver, TrioBiDiWebDriver]
16
+ ANY_TRIO_WEBDRIVER_TYPEHINT = Union["TrioThreadsWebDriver", "TrioBidiWebDriver"]
@@ -2,6 +2,7 @@ import trio
2
2
  from typing import (
3
3
  Optional,
4
4
  Protocol,
5
+ Union,
5
6
  runtime_checkable
6
7
  )
7
8
  from selenium.webdriver.remote.webdriver import (
@@ -9,7 +10,7 @@ from selenium.webdriver.remote.webdriver import (
9
10
  )
10
11
 
11
12
 
12
- __all__ = ["SyncWebDriver", "TrioThreadWebDriver"]
13
+ __all__ = ["SyncWebDriver", "TrioBiDiWebDriver", "TrioThreadWebDriver"]
13
14
 
14
15
 
15
16
  @runtime_checkable
@@ -20,18 +21,89 @@ class TrioThreadWebDriver(Protocol):
20
21
 
21
22
  @property
22
23
  def architecture(self) -> str:
24
+ """
25
+ Returns the driver architecture.
26
+ """
27
+
23
28
  ...
24
29
 
25
30
  @property
26
31
  def capacity_limiter(self) -> trio.CapacityLimiter:
32
+ """
33
+ Returns the Trio capacity limiter.
34
+ """
35
+
27
36
  ...
28
37
 
29
38
  @property
30
39
  def driver(self) -> Optional[legacyWebDriver]:
40
+ """
41
+ Returns the underlying legacy driver.
42
+ """
43
+
31
44
  ...
32
45
 
33
46
  @property
34
47
  def lock(self) -> trio.Lock:
48
+ """
49
+ Returns the Trio lock.
50
+ """
51
+
52
+ ...
53
+
54
+
55
+ @runtime_checkable
56
+ class TrioBiDiWebDriver(Protocol):
57
+ """
58
+ Protocol for a WebDriver that supports BiDi and Trio thread pool operations.
59
+ """
60
+
61
+ @property
62
+ def architecture(self) -> str:
63
+ """
64
+ Returns the driver architecture.
65
+ """
66
+
67
+ ...
68
+
69
+ @property
70
+ def capacity_limiter(self) -> trio.CapacityLimiter:
71
+ """
72
+ Returns the Trio capacity limiter.
73
+ """
74
+
75
+ ...
76
+
77
+ @property
78
+ def driver(self) -> Optional[legacyWebDriver]:
79
+ """
80
+ Returns the underlying legacy driver.
81
+ """
82
+
83
+ ...
84
+
85
+ @property
86
+ def lock(self) -> trio.Lock:
87
+ """
88
+ Returns the Trio lock.
89
+ """
90
+
91
+ ...
92
+
93
+ @property
94
+ def trio_bidi_buffer_size(self) -> Union[int, float]:
95
+ """
96
+ Returns the BiDi task buffer size.
97
+ """
98
+
99
+ ...
100
+
101
+ @property
102
+ def trio_token(self) -> trio.lowlevel.TrioToken:
103
+ """
104
+ Returns the Trio event loop token.
105
+ """
106
+
35
107
  ...
36
108
 
37
109
 
@@ -43,8 +115,16 @@ class SyncWebDriver(Protocol):
43
115
 
44
116
  @property
45
117
  def architecture(self) -> str:
118
+ """
119
+ Returns the driver architecture.
120
+ """
121
+
46
122
  ...
47
123
 
48
124
  @property
49
125
  def driver(self) -> Optional[legacyWebDriver]:
126
+ """
127
+ Returns the underlying legacy driver.
128
+ """
129
+
50
130
  ...
@@ -7,7 +7,11 @@ from typing import (
7
7
  )
8
8
  from osn_selenium.flags.blink import BlinkFlagsManager
9
9
  from osn_selenium.flags.models.blink import BlinkFlags
10
+ from osn_selenium.executors.sync.cdp import CDPExecutor
10
11
  from osn_selenium.webdrivers.sync.core.base import CoreBaseMixin
12
+ from osn_selenium.webdrivers._bridges import (
13
+ get_cdp_executor_bridge
14
+ )
11
15
  from osn_selenium._typehints import (
12
16
  ARCHITECTURES_TYPEHINT,
13
17
  PATH_TYPEHINT
@@ -119,11 +123,17 @@ class BlinkBaseMixin(UnifiedBlinkBaseMixin, CoreBaseMixin, AbstractBlinkBaseMixi
119
123
  cdp_versioned_packages_paths=cdp_versioned_packages_paths,
120
124
  ignore_cdp_version_package_missing=ignore_cdp_version_package_missing,
121
125
  )
126
+
127
+ self._cdp_executor = CDPExecutor(execute_function=get_cdp_executor_bridge(self))
122
128
 
123
129
  @property
124
130
  def browser_exe(self) -> Optional[pathlib.Path]:
125
131
  return self._browser_exe_impl
126
132
 
133
+ @property
134
+ def cdp(self) -> CDPExecutor:
135
+ return self._cdp_executor
136
+
127
137
  @property
128
138
  def debugging_ip(self) -> Optional[str]:
129
139
  return self._debugging_ip_impl
@@ -26,10 +26,7 @@ class BlinkLifecycleMixin(
26
26
  underlying browser instance, ensuring clean session management.
27
27
  """
28
28
 
29
- def close_webdriver(self) -> None:
30
- self._close_webdriver_impl()
31
-
32
- def restart_webdriver(
29
+ def start_webdriver(
33
30
  self,
34
31
  flags: Optional[BlinkFlags] = None,
35
32
  browser_exe: Optional[PATH_TYPEHINT] = None,
@@ -38,16 +35,16 @@ class BlinkLifecycleMixin(
38
35
  start_page_url: Optional[str] = None,
39
36
  window_rect: Optional[WindowRect] = None,
40
37
  ) -> None:
41
- self._restart_webdriver_impl(
38
+ self._start_webdriver_impl(
42
39
  flags=flags,
43
40
  browser_exe=browser_exe,
44
41
  browser_name_in_system=browser_name_in_system,
45
42
  use_browser_exe=use_browser_exe,
46
43
  start_page_url=start_page_url,
47
- window_rect=window_rect
44
+ window_rect=window_rect,
48
45
  )
49
46
 
50
- def start_webdriver(
47
+ def __enter__(
51
48
  self,
52
49
  flags: Optional[BlinkFlags] = None,
53
50
  browser_exe: Optional[PATH_TYPEHINT] = None,
@@ -56,7 +53,7 @@ class BlinkLifecycleMixin(
56
53
  start_page_url: Optional[str] = None,
57
54
  window_rect: Optional[WindowRect] = None,
58
55
  ) -> None:
59
- self._start_webdriver_impl(
56
+ self.start_webdriver(
60
57
  flags=flags,
61
58
  browser_exe=browser_exe,
62
59
  browser_name_in_system=browser_name_in_system,
@@ -64,3 +61,24 @@ class BlinkLifecycleMixin(
64
61
  start_page_url=start_page_url,
65
62
  window_rect=window_rect,
66
63
  )
64
+
65
+ def restart_webdriver(
66
+ self,
67
+ flags: Optional[BlinkFlags] = None,
68
+ browser_exe: Optional[PATH_TYPEHINT] = None,
69
+ browser_name_in_system: Optional[str] = None,
70
+ use_browser_exe: Optional[bool] = None,
71
+ start_page_url: Optional[str] = None,
72
+ window_rect: Optional[WindowRect] = None,
73
+ ) -> None:
74
+ self._restart_webdriver_impl(
75
+ flags=flags,
76
+ browser_exe=browser_exe,
77
+ browser_name_in_system=browser_name_in_system,
78
+ use_browser_exe=use_browser_exe,
79
+ start_page_url=start_page_url,
80
+ window_rect=window_rect
81
+ )
82
+
83
+ def stop_webdriver(self) -> None:
84
+ self._stop_webdriver_impl()
@@ -2,7 +2,7 @@ from typing import Optional
2
2
  from osn_selenium.models import WindowRect
3
3
  from osn_selenium._typehints import PATH_TYPEHINT
4
4
  from osn_selenium.flags.models.chrome import ChromeFlags
5
- from osn_selenium.webdrivers.sync.blink import BlinkLifecycleMixin
5
+ from osn_selenium.webdrivers.sync.blink.lifecycle import BlinkLifecycleMixin
6
6
  from osn_selenium.webdrivers.unified.chrome.lifecycle import (
7
7
  UnifiedChromeLifecycleMixin
8
8
  )
@@ -26,7 +26,7 @@ class ChromeLifecycleMixin(
26
26
  underlying browser instance, ensuring clean session management.
27
27
  """
28
28
 
29
- def restart_webdriver(
29
+ def start_webdriver(
30
30
  self,
31
31
  flags: Optional[ChromeFlags] = None,
32
32
  browser_exe: Optional[PATH_TYPEHINT] = None,
@@ -35,7 +35,7 @@ class ChromeLifecycleMixin(
35
35
  start_page_url: Optional[str] = None,
36
36
  window_rect: Optional[WindowRect] = None,
37
37
  ) -> None:
38
- self._restart_webdriver_impl(
38
+ self._start_webdriver_impl(
39
39
  flags=flags,
40
40
  browser_exe=browser_exe,
41
41
  browser_name_in_system=browser_name_in_system,
@@ -44,7 +44,7 @@ class ChromeLifecycleMixin(
44
44
  window_rect=window_rect,
45
45
  )
46
46
 
47
- def start_webdriver(
47
+ def __enter__(
48
48
  self,
49
49
  flags: Optional[ChromeFlags] = None,
50
50
  browser_exe: Optional[PATH_TYPEHINT] = None,
@@ -53,7 +53,25 @@ class ChromeLifecycleMixin(
53
53
  start_page_url: Optional[str] = None,
54
54
  window_rect: Optional[WindowRect] = None,
55
55
  ) -> None:
56
- self._start_webdriver_impl(
56
+ self.start_webdriver(
57
+ flags=flags,
58
+ browser_exe=browser_exe,
59
+ browser_name_in_system=browser_name_in_system,
60
+ use_browser_exe=use_browser_exe,
61
+ start_page_url=start_page_url,
62
+ window_rect=window_rect,
63
+ )
64
+
65
+ def restart_webdriver(
66
+ self,
67
+ flags: Optional[ChromeFlags] = None,
68
+ browser_exe: Optional[PATH_TYPEHINT] = None,
69
+ browser_name_in_system: Optional[str] = None,
70
+ use_browser_exe: Optional[bool] = None,
71
+ start_page_url: Optional[str] = None,
72
+ window_rect: Optional[WindowRect] = None,
73
+ ) -> None:
74
+ self._restart_webdriver_impl(
57
75
  flags=flags,
58
76
  browser_exe=browser_exe,
59
77
  browser_name_in_system=browser_name_in_system,
@@ -2,6 +2,7 @@ from typing import Optional
2
2
  from osn_selenium.models import WindowRect
3
3
  from osn_selenium._typehints import PATH_TYPEHINT
4
4
  from osn_selenium.flags.models.chrome import ChromeFlags
5
+ from osn_selenium.webdrivers.sync.blink.settings import BlinkSettingsMixin
5
6
  from osn_selenium.webdrivers.unified.chrome.settings import (
6
7
  UnifiedChromeSettingsMixin
7
8
  )
@@ -13,7 +14,11 @@ from osn_selenium.abstract.webdriver.chrome.settings import (
13
14
  __all__ = ["ChromeSettingsMixin"]
14
15
 
15
16
 
16
- class ChromeSettingsMixin(UnifiedChromeSettingsMixin, AbstractChromeSettingsMixin):
17
+ class ChromeSettingsMixin(
18
+ UnifiedChromeSettingsMixin,
19
+ BlinkSettingsMixin,
20
+ AbstractChromeSettingsMixin
21
+ ):
17
22
  """
18
23
  Mixin for configuring and updating settings of the Chrome WebDriver.
19
24
 
@@ -1,5 +1,4 @@
1
1
  from osn_selenium.models import WindowRect
2
- from osn_selenium.executors.sync.cdp import CDPExecutor
3
2
  from osn_selenium.flags.base import BrowserFlagsManager
4
3
  from osn_selenium.flags.models.base import BrowserFlags
5
4
  from selenium.webdriver.common.bidi.session import Session
@@ -14,6 +13,9 @@ from typing import (
14
13
  from selenium.webdriver.remote.errorhandler import ErrorHandler
15
14
  from selenium.webdriver.remote.locator_converter import LocatorConverter
16
15
  from selenium.webdriver.remote.remote_connection import RemoteConnection
16
+ from osn_selenium.webdrivers._bridges import (
17
+ get_js_executor_bridge
18
+ )
17
19
  from osn_selenium.webdrivers.unified.core.base import UnifiedCoreBaseMixin
18
20
  from osn_selenium._typehints import (
19
21
  ARCHITECTURES_TYPEHINT,
@@ -25,10 +27,6 @@ from osn_selenium.abstract.webdriver.core.base import (
25
27
  from selenium.webdriver.remote.webdriver import (
26
28
  WebDriver as legacyWebDriver
27
29
  )
28
- from osn_selenium.webdrivers._bridges import (
29
- get_cdp_executor_bridge,
30
- get_js_executor_bridge
31
- )
32
30
 
33
31
 
34
32
  __all__ = ["CoreBaseMixin"]
@@ -88,8 +86,6 @@ class CoreBaseMixin(UnifiedCoreBaseMixin, AbstractCoreBaseMixin):
88
86
  ignore_cdp_version_package_missing=ignore_cdp_version_package_missing,
89
87
  )
90
88
 
91
- self._cdp_executor = CDPExecutor(execute_function=get_cdp_executor_bridge(self))
92
-
93
89
  self._js_executor = JSExecutor(execute_function=get_js_executor_bridge(self))
94
90
 
95
91
  @property
@@ -108,10 +104,6 @@ class CoreBaseMixin(UnifiedCoreBaseMixin, AbstractCoreBaseMixin):
108
104
  def caps(self, value: Dict[str, Any]) -> None:
109
105
  self._caps_set_impl(value)
110
106
 
111
- @property
112
- def cdp(self) -> CDPExecutor:
113
- return self._cdp_executor
114
-
115
107
  @property
116
108
  def command_executor(self) -> RemoteConnection:
117
109
  return self._command_executor_get_impl()
@@ -1,4 +1,5 @@
1
- from typing import Any, Optional
1
+ from typing import Optional
2
+ from selenium.webdriver.common.print_page_options import PrintOptions
2
3
  from osn_selenium.webdrivers.unified.core.capture import (
3
4
  UnifiedCoreCaptureMixin
4
5
  )
@@ -30,7 +31,7 @@ class CoreCaptureMixin(UnifiedCoreCaptureMixin, AbstractCoreCaptureMixin):
30
31
  def page_source(self) -> str:
31
32
  return self._page_source_impl()
32
33
 
33
- def print_page(self, print_options: Optional[Any] = None) -> str:
34
+ def print_page(self, print_options: Optional[PrintOptions] = None) -> str:
34
35
  return self._print_page_impl(print_options=print_options)
35
36
 
36
37
  def save_screenshot(self, filename: str) -> bool:
@@ -1,5 +1,6 @@
1
1
  from contextlib import contextmanager
2
2
  from typing import Any, Generator, List
3
+ from selenium.webdriver.remote.file_detector import FileDetector
3
4
  from osn_selenium.webdrivers.unified.core.file import UnifiedCoreFileMixin
4
5
  from osn_selenium.abstract.webdriver.core.file import (
5
6
  AbstractCoreFileMixin
@@ -24,11 +25,11 @@ class CoreFileMixin(UnifiedCoreFileMixin, AbstractCoreFileMixin):
24
25
  self._download_file_impl(file_name=file_name, target_directory=target_directory)
25
26
 
26
27
  @property
27
- def file_detector(self) -> Any:
28
+ def file_detector(self) -> FileDetector:
28
29
  return self._file_detector_get_impl()
29
30
 
30
31
  @file_detector.setter
31
- def file_detector(self, value: Any) -> None:
32
+ def file_detector(self, value: FileDetector) -> None:
32
33
  self._file_detector_set_impl(value)
33
34
 
34
35
  @contextmanager
@@ -1,11 +1,13 @@
1
+ from types import TracebackType
1
2
  from osn_selenium.models import WindowRect
3
+ from osn_selenium.flags.models.base import BrowserFlags
2
4
  from typing import (
3
5
  Any,
4
6
  Dict,
5
7
  Optional,
8
+ Type,
6
9
  Union
7
10
  )
8
- from osn_selenium.flags.models.base import BrowserFlags
9
11
  from selenium.webdriver.remote.remote_connection import RemoteConnection
10
12
  from osn_selenium.webdrivers.unified.core.lifecycle import (
11
13
  UnifiedCoreLifecycleMixin
@@ -26,8 +28,47 @@ class CoreLifecycleMixin(UnifiedCoreLifecycleMixin, AbstractCoreLifecycleMixin):
26
28
  underlying browser instance, ensuring clean session management.
27
29
  """
28
30
 
29
- def close_webdriver(self) -> None:
30
- self._close_webdriver_impl()
31
+ def start_webdriver(
32
+ self,
33
+ flags: Optional[BrowserFlags] = None,
34
+ window_rect: Optional[WindowRect] = None,
35
+ ) -> None:
36
+ self._start_webdriver_impl(flags=flags, window_rect=window_rect)
37
+
38
+ def __enter__(
39
+ self,
40
+ flags: Optional[BrowserFlags] = None,
41
+ window_rect: Optional[WindowRect] = None,
42
+ ) -> None:
43
+ self.start_webdriver(flags=flags, window_rect=window_rect)
44
+
45
+ def stop_webdriver(self) -> None:
46
+ self._stop_webdriver_impl()
47
+
48
+ def __exit__(
49
+ self,
50
+ exc_type: Optional[Type[BaseException]],
51
+ exc_val: Optional[BaseException],
52
+ exc_tb: Optional[TracebackType],
53
+ ) -> bool:
54
+ """
55
+ Synchronously exits the WebDriver context.
56
+
57
+ Args:
58
+ exc_type (Optional[Type[BaseException]]): The exception type, if any.
59
+ exc_val (Optional[BaseException]): The exception value, if any.
60
+ exc_tb (Optional[TracebackType]): The exception traceback, if any.
61
+
62
+ Returns:
63
+ bool: True if an exception was suppressed, False otherwise.
64
+ """
65
+
66
+ self.stop_webdriver()
67
+
68
+ if exc_type is not None and exc_val is not None and exc_tb is not None:
69
+ return True
70
+
71
+ return False
31
72
 
32
73
  def quit(self) -> None:
33
74
  self._quit_impl()
@@ -48,12 +89,5 @@ class CoreLifecycleMixin(UnifiedCoreLifecycleMixin, AbstractCoreLifecycleMixin):
48
89
  def start_session(self, capabilities: Dict[str, Any]) -> None:
49
90
  self._start_session_impl(capabilities=capabilities)
50
91
 
51
- def start_webdriver(
52
- self,
53
- flags: Optional[BrowserFlags] = None,
54
- window_rect: Optional[WindowRect] = None,
55
- ) -> None:
56
- self._start_webdriver_impl(flags=flags, window_rect=window_rect)
57
-
58
92
  def stop_client(self) -> None:
59
93
  self._stop_client_impl()
@@ -1,5 +1,6 @@
1
1
  from typing import Any, List, Optional
2
2
  from osn_selenium.instances.sync.script import Script
3
+ from selenium.webdriver.remote.script_key import ScriptKey
3
4
  from osn_selenium.instances.convert import (
4
5
  get_sync_instance_wrapper
5
6
  )
@@ -41,7 +42,7 @@ class CoreScriptMixin(UnifiedCoreScriptMixin, AbstractCoreScriptMixin):
41
42
  def get_pinned_scripts(self) -> List[str]:
42
43
  return self._get_pinned_scripts_impl()
43
44
 
44
- def pin_script(self, script: str, script_key: Optional[Any] = None) -> Any:
45
+ def pin_script(self, script: str, script_key: Optional[Any] = None) -> ScriptKey:
45
46
  return self._pin_script_impl(script=script, script_key=script_key)
46
47
 
47
48
  def script(self) -> Script:
@@ -49,5 +50,5 @@ class CoreScriptMixin(UnifiedCoreScriptMixin, AbstractCoreScriptMixin):
49
50
 
50
51
  return get_sync_instance_wrapper(wrapper_class=Script, legacy_object=legacy)
51
52
 
52
- def unpin(self, script_key: Any) -> None:
53
+ def unpin(self, script_key: ScriptKey) -> None:
53
54
  self._unpin_impl(script_key=script_key)
@@ -47,6 +47,9 @@ class CoreWindowMixin(UnifiedCoreWindowMixin, AbstractCoreWindowMixin):
47
47
  def fullscreen_window(self) -> None:
48
48
  self._fullscreen_window_impl()
49
49
 
50
+ def get_orientation(self) -> Literal["LANDSCAPE", "PORTRAIT"]:
51
+ return self._orientation_get_impl()
52
+
50
53
  def get_window_handle(self, window: Optional[Union[str, int]] = None) -> str:
51
54
  return self._get_window_handle_impl(window=window)
52
55
 
@@ -68,9 +71,6 @@ class CoreWindowMixin(UnifiedCoreWindowMixin, AbstractCoreWindowMixin):
68
71
  def minimize_window(self) -> None:
69
72
  self._minimize_window_impl()
70
73
 
71
- def orientation(self) -> Literal["LANDSCAPE", "PORTRAIT"]:
72
- return self._orientation_get_impl()
73
-
74
74
  def set_orientation(self, value: Literal["LANDSCAPE", "PORTRAIT"]) -> None:
75
75
  self._orientation_set_impl(value=value)
76
76