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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (475) hide show
  1. osn_selenium/_base_models.py +41 -0
  2. osn_selenium/_cdp_import.py +253 -0
  3. osn_selenium/_decorators.py +57 -0
  4. osn_selenium/_trio_threads_helpers.py +157 -0
  5. osn_selenium/_typehints.py +1 -1
  6. osn_selenium/abstract/executors/cdp.py +63 -0
  7. osn_selenium/abstract/webdriver/blink/base.py +14 -0
  8. osn_selenium/abstract/webdriver/blink/lifecycle.py +8 -8
  9. osn_selenium/abstract/webdriver/core/base.py +0 -14
  10. osn_selenium/abstract/webdriver/core/capture.py +4 -3
  11. osn_selenium/abstract/webdriver/core/lifecycle.py +8 -8
  12. osn_selenium/abstract/webdriver/core/script.py +5 -4
  13. osn_selenium/abstract/webdriver/core/window.py +11 -11
  14. osn_selenium/browsers_handler/models.py +1 -1
  15. osn_selenium/dev_tools/_decorators.py +19 -51
  16. osn_selenium/dev_tools/_functions.py +2 -4
  17. osn_selenium/dev_tools/_typehints.py +5 -2
  18. osn_selenium/dev_tools/_wrappers.py +0 -3
  19. osn_selenium/dev_tools/domains/__init__.py +2 -2
  20. osn_selenium/dev_tools/domains/abstract.py +1 -1
  21. osn_selenium/dev_tools/domains/fetch.py +6 -8
  22. osn_selenium/dev_tools/domains_default/fetch.py +2 -2
  23. osn_selenium/dev_tools/filters.py +1 -1
  24. osn_selenium/dev_tools/logger/main.py +9 -21
  25. osn_selenium/dev_tools/logger/models.py +1 -1
  26. osn_selenium/dev_tools/logger/target.py +49 -29
  27. osn_selenium/dev_tools/manager/base.py +10 -42
  28. osn_selenium/dev_tools/manager/lifecycle.py +84 -75
  29. osn_selenium/dev_tools/manager/logging.py +1 -1
  30. osn_selenium/dev_tools/manager/targets.py +13 -5
  31. osn_selenium/dev_tools/models.py +1 -1
  32. osn_selenium/dev_tools/settings.py +9 -5
  33. osn_selenium/dev_tools/target/base.py +30 -34
  34. osn_selenium/dev_tools/target/discovery.py +1 -1
  35. osn_selenium/dev_tools/target/events.py +2 -2
  36. osn_selenium/dev_tools/target/fingerprint.py +1 -1
  37. osn_selenium/dev_tools/target/lifecycle.py +103 -38
  38. osn_selenium/dev_tools/target/logging.py +11 -3
  39. osn_selenium/exceptions/__init__.py +0 -1
  40. osn_selenium/exceptions/base.py +28 -1
  41. osn_selenium/exceptions/bidi_bridge.py +59 -0
  42. osn_selenium/exceptions/configuration.py +1 -8
  43. osn_selenium/exceptions/dependencies.py +60 -0
  44. osn_selenium/exceptions/devtools.py +9 -39
  45. osn_selenium/exceptions/experimental.py +26 -0
  46. osn_selenium/exceptions/flags.py +0 -2
  47. osn_selenium/exceptions/instance.py +1 -9
  48. osn_selenium/exceptions/javascript.py +0 -2
  49. osn_selenium/exceptions/logic.py +0 -2
  50. osn_selenium/exceptions/path.py +1 -9
  51. osn_selenium/exceptions/platform.py +0 -2
  52. osn_selenium/exceptions/protocol.py +0 -3
  53. osn_selenium/exceptions/webdriver.py +1 -7
  54. osn_selenium/exceptions/window.py +1 -8
  55. osn_selenium/executors/sync/cdp.py +95 -0
  56. osn_selenium/executors/trio_bidi/cdp.py +101 -0
  57. osn_selenium/executors/trio_bidi/javascript.py +101 -0
  58. osn_selenium/executors/trio_threads/cdp.py +99 -0
  59. osn_selenium/executors/trio_threads/javascript.py +1 -1
  60. osn_selenium/executors/unified/javascript.py +0 -4
  61. osn_selenium/flags/base.py +7 -13
  62. osn_selenium/flags/blink.py +2 -8
  63. osn_selenium/flags/chrome.py +6 -6
  64. osn_selenium/flags/edge.py +6 -6
  65. osn_selenium/flags/models/base.py +4 -4
  66. osn_selenium/flags/models/blink.py +1 -1
  67. osn_selenium/flags/models/values.py +1 -1
  68. osn_selenium/instances/convert.py +44 -3
  69. osn_selenium/instances/protocols.py +47 -1
  70. osn_selenium/instances/sync/action_chains/__init__.py +6 -0
  71. osn_selenium/instances/sync/browsing_context.py +2 -2
  72. osn_selenium/instances/sync/script.py +7 -2
  73. osn_selenium/instances/sync/shadow_root.py +30 -8
  74. osn_selenium/instances/sync/web_element.py +1 -1
  75. osn_selenium/instances/trio_bidi/__init__.py +1 -0
  76. osn_selenium/instances/trio_bidi/shadow_root.py +180 -0
  77. osn_selenium/instances/trio_bidi/switch_to.py +143 -0
  78. osn_selenium/instances/trio_bidi/web_driver_wait.py +124 -0
  79. osn_selenium/instances/trio_bidi/web_element.py +239 -0
  80. osn_selenium/instances/trio_threads/action_chains/__init__.py +6 -0
  81. osn_selenium/instances/trio_threads/action_chains/base.py +1 -1
  82. osn_selenium/instances/trio_threads/alert.py +1 -1
  83. osn_selenium/instances/trio_threads/browser.py +1 -1
  84. osn_selenium/instances/trio_threads/browsing_context.py +3 -3
  85. osn_selenium/instances/trio_threads/dialog.py +1 -1
  86. osn_selenium/instances/trio_threads/fedcm.py +1 -1
  87. osn_selenium/instances/trio_threads/mobile.py +1 -1
  88. osn_selenium/instances/trio_threads/network.py +1 -1
  89. osn_selenium/instances/trio_threads/permissions.py +1 -1
  90. osn_selenium/instances/trio_threads/script.py +8 -3
  91. osn_selenium/instances/trio_threads/shadow_root.py +46 -15
  92. osn_selenium/instances/trio_threads/storage.py +1 -1
  93. osn_selenium/instances/trio_threads/switch_to.py +1 -1
  94. osn_selenium/instances/trio_threads/web_driver_wait.py +1 -1
  95. osn_selenium/instances/trio_threads/web_element.py +1 -1
  96. osn_selenium/instances/trio_threads/web_extension.py +1 -1
  97. osn_selenium/instances/unified/browsing_context.py +2 -2
  98. osn_selenium/instances/unified/script.py +2 -2
  99. osn_selenium/instances/unified/web_element.py +3 -5
  100. osn_selenium/javascript/fingerprint/__init__.py +3 -2
  101. osn_selenium/javascript/fingerprint/registry/models.py +1 -1
  102. osn_selenium/javascript/fingerprint/spoof/core_rules.py +1 -1
  103. osn_selenium/javascript/fingerprint/spoof/noise.py +1 -1
  104. osn_selenium/javascript/models.py +1 -1
  105. osn_selenium/models.py +2 -47
  106. osn_selenium/trio_bidi/__init__.py +1 -0
  107. osn_selenium/trio_bidi/_context_vars.py +12 -0
  108. osn_selenium/trio_bidi/_error_mappings.py +123 -0
  109. osn_selenium/trio_bidi/_error_redirects.py +194 -0
  110. osn_selenium/trio_bidi/_file_functions.py +28 -0
  111. osn_selenium/trio_bidi/_internal_mappings.py +10 -0
  112. osn_selenium/trio_bidi/_models.py +199 -0
  113. osn_selenium/trio_bidi/_typehints.py +20 -0
  114. osn_selenium/trio_bidi/connection_pool.py +587 -0
  115. osn_selenium/trio_bidi/mapping/__init__.py +1 -0
  116. osn_selenium/trio_bidi/mapping/_constants.py +14 -0
  117. osn_selenium/trio_bidi/mapping/_js_snippets.py +285 -0
  118. osn_selenium/trio_bidi/mapping/_utils.py +4 -0
  119. osn_selenium/trio_bidi/mapping/request_functions/__init__.py +87 -0
  120. osn_selenium/trio_bidi/mapping/request_functions/_alert.py +102 -0
  121. osn_selenium/trio_bidi/mapping/request_functions/_args_helpers.py +225 -0
  122. osn_selenium/trio_bidi/mapping/request_functions/_capture.py +71 -0
  123. osn_selenium/trio_bidi/mapping/request_functions/_cdp.py +40 -0
  124. osn_selenium/trio_bidi/mapping/request_functions/_element.py +55 -0
  125. osn_selenium/trio_bidi/mapping/request_functions/_file.py +32 -0
  126. osn_selenium/trio_bidi/mapping/request_functions/_navigation.py +147 -0
  127. osn_selenium/trio_bidi/mapping/request_functions/_script.py +85 -0
  128. osn_selenium/trio_bidi/mapping/request_functions/_shadow_root.py +65 -0
  129. osn_selenium/trio_bidi/mapping/request_functions/_switch_to.py +59 -0
  130. osn_selenium/trio_bidi/mapping/request_functions/_web_element.py +448 -0
  131. osn_selenium/trio_bidi/mapping/request_functions/_window.py +125 -0
  132. osn_selenium/trio_bidi/mapping/response_functions/__init__.py +86 -0
  133. osn_selenium/trio_bidi/mapping/response_functions/_alert.py +81 -0
  134. osn_selenium/trio_bidi/mapping/response_functions/_args_helpers.py +183 -0
  135. osn_selenium/trio_bidi/mapping/response_functions/_args_validators.py +153 -0
  136. osn_selenium/trio_bidi/mapping/response_functions/_capture.py +71 -0
  137. osn_selenium/trio_bidi/mapping/response_functions/_cdp.py +26 -0
  138. osn_selenium/trio_bidi/mapping/response_functions/_element.py +58 -0
  139. osn_selenium/trio_bidi/mapping/response_functions/_file.py +30 -0
  140. osn_selenium/trio_bidi/mapping/response_functions/_navigation.py +120 -0
  141. osn_selenium/trio_bidi/mapping/response_functions/_script.py +57 -0
  142. osn_selenium/trio_bidi/mapping/response_functions/_shadow_root.py +58 -0
  143. osn_selenium/trio_bidi/mapping/response_functions/_switch_to.py +57 -0
  144. osn_selenium/trio_bidi/mapping/response_functions/_web_element.py +368 -0
  145. osn_selenium/trio_bidi/mapping/response_functions/_window.py +119 -0
  146. osn_selenium/trio_bidi/mixin.py +186 -0
  147. osn_selenium/trio_bidi/remote_connection.py +164 -0
  148. osn_selenium/{base_mixin.py → trio_threads_mixin.py} +31 -40
  149. osn_selenium/webdrivers/_args_helpers.py +120 -7
  150. osn_selenium/webdrivers/_bridges.py +2 -2
  151. osn_selenium/webdrivers/_executable_tables/models.py +1 -1
  152. osn_selenium/webdrivers/_typehints.py +9 -3
  153. osn_selenium/webdrivers/protocols.py +81 -1
  154. osn_selenium/webdrivers/sync/blink/__init__.py +11 -1
  155. osn_selenium/webdrivers/sync/blink/base.py +23 -1
  156. osn_selenium/webdrivers/sync/blink/lifecycle.py +26 -8
  157. osn_selenium/webdrivers/sync/chrome/__init__.py +36 -1
  158. osn_selenium/webdrivers/sync/chrome/base.py +13 -1
  159. osn_selenium/webdrivers/sync/chrome/lifecycle.py +23 -5
  160. osn_selenium/webdrivers/sync/chrome/settings.py +6 -1
  161. osn_selenium/webdrivers/sync/core/__init__.py +10 -1
  162. osn_selenium/webdrivers/sync/core/base.py +18 -18
  163. osn_selenium/webdrivers/sync/core/capture.py +3 -2
  164. osn_selenium/webdrivers/sync/core/file.py +3 -2
  165. osn_selenium/webdrivers/sync/core/lifecycle.py +44 -10
  166. osn_selenium/webdrivers/sync/core/script.py +3 -2
  167. osn_selenium/webdrivers/sync/core/window.py +3 -3
  168. osn_selenium/webdrivers/sync/edge/__init__.py +36 -1
  169. osn_selenium/webdrivers/sync/edge/base.py +13 -1
  170. osn_selenium/webdrivers/sync/edge/lifecycle.py +23 -5
  171. osn_selenium/webdrivers/sync/edge/settings.py +6 -1
  172. osn_selenium/webdrivers/sync/yandex/__init__.py +36 -1
  173. osn_selenium/webdrivers/sync/yandex/base.py +13 -1
  174. osn_selenium/webdrivers/sync/yandex/lifecycle.py +23 -5
  175. osn_selenium/webdrivers/sync/yandex/settings.py +6 -1
  176. osn_selenium/webdrivers/trio_bidi/__init__.py +1 -0
  177. osn_selenium/webdrivers/trio_bidi/blink/__init__.py +132 -0
  178. osn_selenium/webdrivers/trio_bidi/blink/base.py +167 -0
  179. osn_selenium/webdrivers/trio_bidi/blink/lifecycle.py +89 -0
  180. osn_selenium/webdrivers/trio_bidi/blink/settings.py +63 -0
  181. osn_selenium/webdrivers/trio_bidi/chrome/__init__.py +114 -0
  182. osn_selenium/webdrivers/trio_bidi/chrome/base.py +127 -0
  183. osn_selenium/webdrivers/trio_bidi/chrome/lifecycle.py +85 -0
  184. osn_selenium/webdrivers/trio_bidi/chrome/settings.py +63 -0
  185. osn_selenium/webdrivers/trio_bidi/core/__init__.py +95 -0
  186. osn_selenium/webdrivers/trio_bidi/core/actions.py +70 -0
  187. osn_selenium/webdrivers/trio_bidi/core/base.py +200 -0
  188. osn_selenium/webdrivers/trio_bidi/core/capture.py +39 -0
  189. osn_selenium/webdrivers/trio_bidi/core/devtools.py +49 -0
  190. osn_selenium/webdrivers/trio_bidi/core/element.py +64 -0
  191. osn_selenium/webdrivers/trio_bidi/core/lifecycle.py +135 -0
  192. osn_selenium/webdrivers/trio_bidi/core/navigation.py +37 -0
  193. osn_selenium/webdrivers/trio_bidi/core/script.py +56 -0
  194. osn_selenium/webdrivers/trio_bidi/core/settings.py +36 -0
  195. osn_selenium/webdrivers/trio_bidi/core/window.py +134 -0
  196. osn_selenium/webdrivers/trio_bidi/edge/__init__.py +114 -0
  197. osn_selenium/webdrivers/trio_bidi/edge/base.py +123 -0
  198. osn_selenium/webdrivers/trio_bidi/edge/lifecycle.py +85 -0
  199. osn_selenium/webdrivers/trio_bidi/edge/settings.py +63 -0
  200. osn_selenium/webdrivers/trio_bidi/yandex/__init__.py +114 -0
  201. osn_selenium/webdrivers/trio_bidi/yandex/base.py +120 -0
  202. osn_selenium/webdrivers/trio_bidi/yandex/lifecycle.py +85 -0
  203. osn_selenium/webdrivers/trio_bidi/yandex/settings.py +63 -0
  204. osn_selenium/webdrivers/trio_threads/blink/__init__.py +18 -2
  205. osn_selenium/webdrivers/trio_threads/blink/base.py +25 -1
  206. osn_selenium/webdrivers/trio_threads/blink/casting.py +1 -1
  207. osn_selenium/webdrivers/trio_threads/blink/features.py +1 -1
  208. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +26 -8
  209. osn_selenium/webdrivers/trio_threads/blink/logging.py +1 -1
  210. osn_selenium/webdrivers/trio_threads/blink/network.py +1 -1
  211. osn_selenium/webdrivers/trio_threads/chrome/__init__.py +34 -1
  212. osn_selenium/webdrivers/trio_threads/chrome/base.py +14 -2
  213. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +23 -5
  214. osn_selenium/webdrivers/trio_threads/chrome/settings.py +1 -1
  215. osn_selenium/webdrivers/trio_threads/core/__init__.py +10 -14
  216. osn_selenium/webdrivers/trio_threads/core/actions.py +1 -1
  217. osn_selenium/webdrivers/trio_threads/core/auth.py +1 -1
  218. osn_selenium/webdrivers/trio_threads/core/base.py +18 -22
  219. osn_selenium/webdrivers/trio_threads/core/capture.py +4 -3
  220. osn_selenium/webdrivers/trio_threads/core/comonents.py +1 -1
  221. osn_selenium/webdrivers/trio_threads/core/devtools.py +1 -1
  222. osn_selenium/webdrivers/trio_threads/core/element.py +1 -1
  223. osn_selenium/webdrivers/trio_threads/core/file.py +5 -4
  224. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +45 -11
  225. osn_selenium/webdrivers/trio_threads/core/navigation.py +1 -1
  226. osn_selenium/webdrivers/trio_threads/core/script.py +4 -3
  227. osn_selenium/webdrivers/trio_threads/core/settings.py +1 -1
  228. osn_selenium/webdrivers/trio_threads/core/storage.py +1 -1
  229. osn_selenium/webdrivers/trio_threads/core/timeouts.py +1 -1
  230. osn_selenium/webdrivers/trio_threads/core/window.py +6 -6
  231. osn_selenium/webdrivers/trio_threads/edge/__init__.py +34 -1
  232. osn_selenium/webdrivers/trio_threads/edge/base.py +14 -2
  233. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +23 -5
  234. osn_selenium/webdrivers/trio_threads/edge/settings.py +1 -1
  235. osn_selenium/webdrivers/trio_threads/yandex/__init__.py +34 -1
  236. osn_selenium/webdrivers/trio_threads/yandex/base.py +14 -2
  237. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +23 -5
  238. osn_selenium/webdrivers/trio_threads/yandex/settings.py +1 -1
  239. osn_selenium/webdrivers/unified/blink/base.py +9 -1
  240. osn_selenium/webdrivers/unified/blink/lifecycle.py +4 -2
  241. osn_selenium/webdrivers/unified/chrome/base.py +9 -1
  242. osn_selenium/webdrivers/unified/core/auth.py +4 -2
  243. osn_selenium/webdrivers/unified/core/base.py +19 -6
  244. osn_selenium/webdrivers/unified/core/capture.py +3 -2
  245. osn_selenium/webdrivers/unified/core/components.py +12 -7
  246. osn_selenium/webdrivers/unified/core/devtools.py +2 -1
  247. osn_selenium/webdrivers/unified/core/file.py +3 -2
  248. osn_selenium/webdrivers/unified/core/lifecycle.py +5 -3
  249. osn_selenium/webdrivers/unified/core/script.py +5 -3
  250. osn_selenium/webdrivers/unified/core/storage.py +2 -1
  251. osn_selenium/webdrivers/unified/core/window.py +9 -8
  252. osn_selenium/webdrivers/unified/edge/base.py +9 -1
  253. osn_selenium/webdrivers/unified/yandex/base.py +9 -1
  254. {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/METADATA +24 -10
  255. osn_selenium-1.2.0.dist-info/RECORD +480 -0
  256. {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/WHEEL +1 -1
  257. osn_selenium/abstract/executors/cdp/__init__.py +0 -435
  258. osn_selenium/abstract/executors/cdp/accessibility.py +0 -62
  259. osn_selenium/abstract/executors/cdp/animation.py +0 -47
  260. osn_selenium/abstract/executors/cdp/audits.py +0 -39
  261. osn_selenium/abstract/executors/cdp/autofill.py +0 -34
  262. osn_selenium/abstract/executors/cdp/background_service.py +0 -22
  263. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +0 -95
  264. osn_selenium/abstract/executors/cdp/browser.py +0 -122
  265. osn_selenium/abstract/executors/cdp/cache_storage.py +0 -49
  266. osn_selenium/abstract/executors/cdp/cast.py +0 -31
  267. osn_selenium/abstract/executors/cdp/console.py +0 -18
  268. osn_selenium/abstract/executors/cdp/css.py +0 -197
  269. osn_selenium/abstract/executors/cdp/debugger.py +0 -198
  270. osn_selenium/abstract/executors/cdp/device_access.py +0 -22
  271. osn_selenium/abstract/executors/cdp/device_orientation.py +0 -14
  272. osn_selenium/abstract/executors/cdp/dom.py +0 -305
  273. osn_selenium/abstract/executors/cdp/dom_debugger.py +0 -57
  274. osn_selenium/abstract/executors/cdp/dom_snapshot.py +0 -42
  275. osn_selenium/abstract/executors/cdp/dom_storage.py +0 -31
  276. osn_selenium/abstract/executors/cdp/emulation.py +0 -259
  277. osn_selenium/abstract/executors/cdp/event_breakpoints.py +0 -18
  278. osn_selenium/abstract/executors/cdp/extensions.py +0 -31
  279. osn_selenium/abstract/executors/cdp/fed_cm.py +0 -35
  280. osn_selenium/abstract/executors/cdp/fetch.py +0 -76
  281. osn_selenium/abstract/executors/cdp/file_system.py +0 -11
  282. osn_selenium/abstract/executors/cdp/headless_experimental.py +0 -30
  283. osn_selenium/abstract/executors/cdp/heap_profiler.py +0 -73
  284. osn_selenium/abstract/executors/cdp/indexed_db.py +0 -99
  285. osn_selenium/abstract/executors/cdp/input.py +0 -158
  286. osn_selenium/abstract/executors/cdp/inspector.py +0 -14
  287. osn_selenium/abstract/executors/cdp/io.py +0 -24
  288. osn_selenium/abstract/executors/cdp/layer_tree.py +0 -61
  289. osn_selenium/abstract/executors/cdp/log.py +0 -27
  290. osn_selenium/abstract/executors/cdp/media.py +0 -14
  291. osn_selenium/abstract/executors/cdp/memory.py +0 -61
  292. osn_selenium/abstract/executors/cdp/network.py +0 -252
  293. osn_selenium/abstract/executors/cdp/overlay.py +0 -166
  294. osn_selenium/abstract/executors/cdp/page.py +0 -347
  295. osn_selenium/abstract/executors/cdp/performance.py +0 -28
  296. osn_selenium/abstract/executors/cdp/performance_timeline.py +0 -11
  297. osn_selenium/abstract/executors/cdp/preload.py +0 -14
  298. osn_selenium/abstract/executors/cdp/profiler.py +0 -54
  299. osn_selenium/abstract/executors/cdp/pwa.py +0 -46
  300. osn_selenium/abstract/executors/cdp/runtime.py +0 -176
  301. osn_selenium/abstract/executors/cdp/schema.py +0 -11
  302. osn_selenium/abstract/executors/cdp/security.py +0 -26
  303. osn_selenium/abstract/executors/cdp/service_worker.py +0 -54
  304. osn_selenium/abstract/executors/cdp/storage.py +0 -175
  305. osn_selenium/abstract/executors/cdp/system_info.py +0 -24
  306. osn_selenium/abstract/executors/cdp/target.py +0 -125
  307. osn_selenium/abstract/executors/cdp/tethering.py +0 -14
  308. osn_selenium/abstract/executors/cdp/tracing.py +0 -48
  309. osn_selenium/abstract/executors/cdp/web_audio.py +0 -19
  310. osn_selenium/abstract/executors/cdp/web_authn.py +0 -76
  311. osn_selenium/executors/sync/cdp/__init__.py +0 -550
  312. osn_selenium/executors/sync/cdp/accessibility.py +0 -74
  313. osn_selenium/executors/sync/cdp/animation.py +0 -50
  314. osn_selenium/executors/sync/cdp/audits.py +0 -48
  315. osn_selenium/executors/sync/cdp/autofill.py +0 -39
  316. osn_selenium/executors/sync/cdp/background_service.py +0 -30
  317. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +0 -101
  318. osn_selenium/executors/sync/cdp/browser.py +0 -131
  319. osn_selenium/executors/sync/cdp/cache_storage.py +0 -66
  320. osn_selenium/executors/sync/cdp/cast.py +0 -38
  321. osn_selenium/executors/sync/cdp/console.py +0 -24
  322. osn_selenium/executors/sync/cdp/css.py +0 -187
  323. osn_selenium/executors/sync/cdp/debugger.py +0 -206
  324. osn_selenium/executors/sync/cdp/device_access.py +0 -27
  325. osn_selenium/executors/sync/cdp/device_orientation.py +0 -24
  326. osn_selenium/executors/sync/cdp/dom.py +0 -310
  327. osn_selenium/executors/sync/cdp/dom_debugger.py +0 -56
  328. osn_selenium/executors/sync/cdp/dom_snapshot.py +0 -58
  329. osn_selenium/executors/sync/cdp/dom_storage.py +0 -38
  330. osn_selenium/executors/sync/cdp/emulation.py +0 -270
  331. osn_selenium/executors/sync/cdp/event_breakpoints.py +0 -27
  332. osn_selenium/executors/sync/cdp/extensions.py +0 -39
  333. osn_selenium/executors/sync/cdp/fed_cm.py +0 -45
  334. osn_selenium/executors/sync/cdp/fetch.py +0 -96
  335. osn_selenium/executors/sync/cdp/file_system.py +0 -18
  336. osn_selenium/executors/sync/cdp/headless_experimental.py +0 -44
  337. osn_selenium/executors/sync/cdp/heap_profiler.py +0 -89
  338. osn_selenium/executors/sync/cdp/indexed_db.py +0 -142
  339. osn_selenium/executors/sync/cdp/input.py +0 -233
  340. osn_selenium/executors/sync/cdp/inspector.py +0 -21
  341. osn_selenium/executors/sync/cdp/io.py +0 -33
  342. osn_selenium/executors/sync/cdp/layer_tree.py +0 -71
  343. osn_selenium/executors/sync/cdp/log.py +0 -35
  344. osn_selenium/executors/sync/cdp/media.py +0 -21
  345. osn_selenium/executors/sync/cdp/memory.py +0 -62
  346. osn_selenium/executors/sync/cdp/network.py +0 -287
  347. osn_selenium/executors/sync/cdp/overlay.py +0 -174
  348. osn_selenium/executors/sync/cdp/page.py +0 -365
  349. osn_selenium/executors/sync/cdp/performance.py +0 -33
  350. osn_selenium/executors/sync/cdp/performance_timeline.py +0 -26
  351. osn_selenium/executors/sync/cdp/preload.py +0 -21
  352. osn_selenium/executors/sync/cdp/profiler.py +0 -58
  353. osn_selenium/executors/sync/cdp/pwa.py +0 -55
  354. osn_selenium/executors/sync/cdp/runtime.py +0 -221
  355. osn_selenium/executors/sync/cdp/schema.py +0 -23
  356. osn_selenium/executors/sync/cdp/security.py +0 -30
  357. osn_selenium/executors/sync/cdp/service_worker.py +0 -56
  358. osn_selenium/executors/sync/cdp/storage.py +0 -151
  359. osn_selenium/executors/sync/cdp/system_info.py +0 -30
  360. osn_selenium/executors/sync/cdp/target.py +0 -147
  361. osn_selenium/executors/sync/cdp/tethering.py +0 -21
  362. osn_selenium/executors/sync/cdp/tracing.py +0 -62
  363. osn_selenium/executors/sync/cdp/web_audio.py +0 -24
  364. osn_selenium/executors/sync/cdp/web_authn.py +0 -82
  365. osn_selenium/executors/trio_threads/cdp/__init__.py +0 -771
  366. osn_selenium/executors/trio_threads/cdp/accessibility.py +0 -87
  367. osn_selenium/executors/trio_threads/cdp/animation.py +0 -63
  368. osn_selenium/executors/trio_threads/cdp/audits.py +0 -57
  369. osn_selenium/executors/trio_threads/cdp/autofill.py +0 -52
  370. osn_selenium/executors/trio_threads/cdp/background_service.py +0 -40
  371. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +0 -111
  372. osn_selenium/executors/trio_threads/cdp/browser.py +0 -140
  373. osn_selenium/executors/trio_threads/cdp/cache_storage.py +0 -79
  374. osn_selenium/executors/trio_threads/cdp/cast.py +0 -47
  375. osn_selenium/executors/trio_threads/cdp/console.py +0 -33
  376. osn_selenium/executors/trio_threads/cdp/css.py +0 -196
  377. osn_selenium/executors/trio_threads/cdp/debugger.py +0 -219
  378. osn_selenium/executors/trio_threads/cdp/device_access.py +0 -40
  379. osn_selenium/executors/trio_threads/cdp/device_orientation.py +0 -34
  380. osn_selenium/executors/trio_threads/cdp/dom.py +0 -319
  381. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +0 -69
  382. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +0 -71
  383. osn_selenium/executors/trio_threads/cdp/dom_storage.py +0 -51
  384. osn_selenium/executors/trio_threads/cdp/emulation.py +0 -283
  385. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +0 -37
  386. osn_selenium/executors/trio_threads/cdp/extensions.py +0 -52
  387. osn_selenium/executors/trio_threads/cdp/fed_cm.py +0 -54
  388. osn_selenium/executors/trio_threads/cdp/fetch.py +0 -105
  389. osn_selenium/executors/trio_threads/cdp/file_system.py +0 -31
  390. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +0 -54
  391. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +0 -102
  392. osn_selenium/executors/trio_threads/cdp/indexed_db.py +0 -155
  393. osn_selenium/executors/trio_threads/cdp/input.py +0 -242
  394. osn_selenium/executors/trio_threads/cdp/inspector.py +0 -34
  395. osn_selenium/executors/trio_threads/cdp/io.py +0 -42
  396. osn_selenium/executors/trio_threads/cdp/layer_tree.py +0 -84
  397. osn_selenium/executors/trio_threads/cdp/log.py +0 -44
  398. osn_selenium/executors/trio_threads/cdp/media.py +0 -30
  399. osn_selenium/executors/trio_threads/cdp/memory.py +0 -71
  400. osn_selenium/executors/trio_threads/cdp/network.py +0 -296
  401. osn_selenium/executors/trio_threads/cdp/overlay.py +0 -183
  402. osn_selenium/executors/trio_threads/cdp/page.py +0 -374
  403. osn_selenium/executors/trio_threads/cdp/performance.py +0 -46
  404. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +0 -36
  405. osn_selenium/executors/trio_threads/cdp/preload.py +0 -30
  406. osn_selenium/executors/trio_threads/cdp/profiler.py +0 -71
  407. osn_selenium/executors/trio_threads/cdp/pwa.py +0 -64
  408. osn_selenium/executors/trio_threads/cdp/runtime.py +0 -230
  409. osn_selenium/executors/trio_threads/cdp/schema.py +0 -32
  410. osn_selenium/executors/trio_threads/cdp/security.py +0 -43
  411. osn_selenium/executors/trio_threads/cdp/service_worker.py +0 -69
  412. osn_selenium/executors/trio_threads/cdp/storage.py +0 -162
  413. osn_selenium/executors/trio_threads/cdp/system_info.py +0 -43
  414. osn_selenium/executors/trio_threads/cdp/target.py +0 -156
  415. osn_selenium/executors/trio_threads/cdp/tethering.py +0 -34
  416. osn_selenium/executors/trio_threads/cdp/tracing.py +0 -71
  417. osn_selenium/executors/trio_threads/cdp/web_audio.py +0 -37
  418. osn_selenium/executors/trio_threads/cdp/web_authn.py +0 -95
  419. osn_selenium/executors/unified/cdp/accessibility.py +0 -81
  420. osn_selenium/executors/unified/cdp/animation.py +0 -50
  421. osn_selenium/executors/unified/cdp/audits.py +0 -45
  422. osn_selenium/executors/unified/cdp/autofill.py +0 -41
  423. osn_selenium/executors/unified/cdp/background_service.py +0 -24
  424. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +0 -132
  425. osn_selenium/executors/unified/cdp/browser.py +0 -143
  426. osn_selenium/executors/unified/cdp/cache_storage.py +0 -69
  427. osn_selenium/executors/unified/cdp/cast.py +0 -32
  428. osn_selenium/executors/unified/cdp/console.py +0 -18
  429. osn_selenium/executors/unified/cdp/css.py +0 -237
  430. osn_selenium/executors/unified/cdp/debugger.py +0 -243
  431. osn_selenium/executors/unified/cdp/device_access.py +0 -21
  432. osn_selenium/executors/unified/cdp/device_orientation.py +0 -18
  433. osn_selenium/executors/unified/cdp/dom.py +0 -380
  434. osn_selenium/executors/unified/cdp/dom_debugger.py +0 -65
  435. osn_selenium/executors/unified/cdp/dom_snapshot.py +0 -58
  436. osn_selenium/executors/unified/cdp/dom_storage.py +0 -38
  437. osn_selenium/executors/unified/cdp/emulation.py +0 -312
  438. osn_selenium/executors/unified/cdp/event_breakpoints.py +0 -24
  439. osn_selenium/executors/unified/cdp/extensions.py +0 -45
  440. osn_selenium/executors/unified/cdp/fed_cm.py +0 -51
  441. osn_selenium/executors/unified/cdp/fetch.py +0 -111
  442. osn_selenium/executors/unified/cdp/file_system.py +0 -15
  443. osn_selenium/executors/unified/cdp/headless_experimental.py +0 -38
  444. osn_selenium/executors/unified/cdp/heap_profiler.py +0 -101
  445. osn_selenium/executors/unified/cdp/indexed_db.py +0 -157
  446. osn_selenium/executors/unified/cdp/input.py +0 -254
  447. osn_selenium/executors/unified/cdp/inspector.py +0 -15
  448. osn_selenium/executors/unified/cdp/io.py +0 -29
  449. osn_selenium/executors/unified/cdp/layer_tree.py +0 -71
  450. osn_selenium/executors/unified/cdp/log.py +0 -29
  451. osn_selenium/executors/unified/cdp/media.py +0 -15
  452. osn_selenium/executors/unified/cdp/memory.py +0 -59
  453. osn_selenium/executors/unified/cdp/network.py +0 -323
  454. osn_selenium/executors/unified/cdp/overlay.py +0 -209
  455. osn_selenium/executors/unified/cdp/page.py +0 -410
  456. osn_selenium/executors/unified/cdp/performance.py +0 -27
  457. osn_selenium/executors/unified/cdp/performance_timeline.py +0 -17
  458. osn_selenium/executors/unified/cdp/preload.py +0 -15
  459. osn_selenium/executors/unified/cdp/profiler.py +0 -55
  460. osn_selenium/executors/unified/cdp/pwa.py +0 -55
  461. osn_selenium/executors/unified/cdp/runtime.py +0 -245
  462. osn_selenium/executors/unified/cdp/schema.py +0 -17
  463. osn_selenium/executors/unified/cdp/security.py +0 -27
  464. osn_selenium/executors/unified/cdp/service_worker.py +0 -62
  465. osn_selenium/executors/unified/cdp/storage.py +0 -178
  466. osn_selenium/executors/unified/cdp/system_info.py +0 -24
  467. osn_selenium/executors/unified/cdp/target.py +0 -165
  468. osn_selenium/executors/unified/cdp/tethering.py +0 -15
  469. osn_selenium/executors/unified/cdp/tracing.py +0 -62
  470. osn_selenium/executors/unified/cdp/web_audio.py +0 -18
  471. osn_selenium/executors/unified/cdp/web_authn.py +0 -103
  472. osn_selenium-1.0.0.dist-info/RECORD +0 -608
  473. /osn_selenium/{dev_tools/_exception_helpers.py → _exception_helpers.py} +0 -0
  474. /osn_selenium/executors/{unified/cdp → trio_bidi}/__init__.py +0 -0
  475. {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,285 @@
1
+ __all__ = ["CAPTURE", "NAVIGATION", "WEB_ELEMENT", "WINDOW"]
2
+
3
+
4
+ class WINDOW:
5
+ """
6
+ JavaScript snippets for window-related operations.
7
+
8
+ Attributes:
9
+ SET_ORIENTATION (str): Snippet to lock screen orientation.
10
+ GET_ORIENTATION (str): Snippet to retrieve the current screen orientation type.
11
+ """
12
+
13
+ SET_ORIENTATION = "screen.orientation.lock('{orientation}')"
14
+ GET_ORIENTATION = "screen.orientation.type"
15
+
16
+
17
+ class WEB_ELEMENT:
18
+ """
19
+ JavaScript snippets for web element interactions with internal guards for W3C compatibility.
20
+
21
+ Attributes:
22
+ SEND_KEYS_TO (str): Snippet to focus and append text with input validation.
23
+ IS_SELECTED (str): Snippet to check if an element is selectable and selected.
24
+ IS_ENABLED (str): Snippet to check enablement state.
25
+ GET_TEXT (str): Snippet to retrieve inner text.
26
+ GET_TAG (str): Snippet to retrieve tag name.
27
+ GET_SHADOW_ROOT (str): Snippet to retrieve shadow root with existence check.
28
+ GET_RECT (str): Snippet to retrieve dimensions.
29
+ GET_PROPERTY (str): Snippet to retrieve element property.
30
+ GET_CSS (str): Snippet to retrieve CSS value.
31
+ GET_ATTRIBUTE (str): Snippet to retrieve attribute.
32
+ GET_ARIA_ROLE (str): Snippet to retrieve ARIA role.
33
+ GET_ARIA_LABEL (str): Snippet to retrieve accessible label.
34
+ CLICK (str): Snippet to perform click with interactability guards.
35
+ CLEAR (str): Snippet to clear value with state guards.
36
+ """
37
+
38
+ _GUARDS = """
39
+ const guards = {
40
+ stale: (el) => {
41
+ if (!el.isConnected) throw new Error('stale element reference');
42
+ },
43
+ interactable: (el) => {
44
+ const rects = el.getClientRects();
45
+ const style = window.getComputedStyle(el);
46
+
47
+ if (rects.length === 0 || style.visibility === 'hidden' || style.display === 'none') {
48
+ throw new Error('element not interactable');
49
+ }
50
+ },
51
+ state: (el) => {
52
+ if (el.disabled || el.readOnly) throw new Error('invalid element state');
53
+ },
54
+ selectable: (el) => {
55
+ const tag = el.tagName.toLowerCase();
56
+ const type = (el.getAttribute('type') || '').toLowerCase();
57
+ const canSelect = tag === 'option' || type === 'checkbox' || type === 'radio';
58
+
59
+ if (!canSelect) throw new Error('element not selectable');
60
+ },
61
+ intercepted: (el) => {
62
+ const rect = el.getBoundingClientRect();
63
+ const x = rect.left + rect.width / 2;
64
+ const y = rect.top + rect.height / 2;
65
+ const topEl = document.elementFromPoint(x, y);
66
+
67
+ if (topEl && topEl !== el && !el.contains(topEl)) {
68
+ throw new Error('element click intercepted: Element is obscured by ' + topEl.tagName);
69
+ }
70
+ }
71
+ };
72
+ """
73
+
74
+ CLICK = f"""
75
+ function(el){{
76
+ {_GUARDS}
77
+ guards.stale(el);
78
+ guards.interactable(el);
79
+ guards.state(el);
80
+ guards.intercepted(el);
81
+
82
+ el.click();
83
+ }}
84
+ """
85
+
86
+ CLEAR = f"""
87
+ function(el){{
88
+ {_GUARDS}
89
+ guards.stale(el);
90
+ guards.interactable(el);
91
+ guards.state(el);
92
+
93
+ el.value = '';
94
+
95
+ el.dispatchEvent(new InputEvent('input', {{bubbles: true}}));
96
+ el.dispatchEvent(new Event('change', {{bubbles: true}}));
97
+ }}
98
+ """
99
+
100
+ GET_ARIA_ROLE = f"""
101
+ function(el){{
102
+ {_GUARDS}
103
+ guards.stale(el);
104
+
105
+ try {{
106
+ return el.getAttribute && el.getAttribute('role');
107
+ }} catch(e) {{
108
+ return '';
109
+ }}
110
+ }}
111
+ """
112
+
113
+ GET_ARIA_LABEL = f"""
114
+ function(el){{
115
+ {_GUARDS}
116
+ guards.stale(el);
117
+
118
+ try {{
119
+ var v = null;
120
+
121
+ if (el.getAttribute) v = el.getAttribute('aria-label');
122
+ if (!v) v = el.getAttribute && el.getAttribute('alt');
123
+
124
+ if (!v) {{
125
+ var txt = (el.textContent || '').trim();
126
+ if (txt) v = txt;
127
+ }}
128
+
129
+ return v || '';
130
+ }} catch(e) {{
131
+ return '';
132
+ }}
133
+ }}
134
+ """
135
+
136
+ GET_TEXT = f"""
137
+ function(el){{
138
+ {_GUARDS}
139
+ guards.stale(el);
140
+
141
+ return el.innerText || '';
142
+ }}
143
+ """
144
+
145
+ GET_TAG = f"""
146
+ function(el){{
147
+ {_GUARDS}
148
+ guards.stale(el);
149
+
150
+ return (el.tagName || '').toLowerCase();
151
+ }}
152
+ """
153
+
154
+ GET_RECT = f"""
155
+ function(el){{
156
+ {_GUARDS}
157
+ guards.stale(el);
158
+
159
+ var r = el.getBoundingClientRect();
160
+
161
+ return {{
162
+ x: Number(r.x || r.left || 0),
163
+ y: Number(r.y || r.top || 0),
164
+ width: Number(r.width || 0),
165
+ height: Number(r.height || 0)
166
+ }};
167
+ }}
168
+ """
169
+
170
+ GET_SHADOW_ROOT = f"""
171
+ function(el){{
172
+ {_GUARDS}
173
+ guards.stale(el);
174
+
175
+ const sr = el.shadowRoot;
176
+
177
+ if (!sr) throw new Error('no such shadow root');
178
+
179
+ return sr;
180
+ }}
181
+ """
182
+
183
+ IS_SELECTED = f"""
184
+ function(el){{
185
+ {_GUARDS}
186
+ guards.stale(el);
187
+ guards.selectable(el);
188
+
189
+ return Boolean(el.selected || el.checked);
190
+ }}
191
+ """
192
+
193
+ IS_ENABLED = f"""
194
+ function(el){{
195
+ {_GUARDS}
196
+ guards.stale(el);
197
+
198
+ return !el.disabled;
199
+ }}
200
+ """
201
+
202
+ GET_PROPERTY = f"""
203
+ function(el, prop){{
204
+ {_GUARDS}
205
+ guards.stale(el);
206
+
207
+ try {{
208
+ return el[prop];
209
+ }} catch(e) {{
210
+ return null;
211
+ }}
212
+ }}
213
+ """
214
+
215
+ GET_ATTRIBUTE = f"""
216
+ function(el, attr){{
217
+ {_GUARDS}
218
+ guards.stale(el);
219
+
220
+ try {{
221
+ return el.getAttribute(attr);
222
+ }} catch(e) {{
223
+ return null;
224
+ }}
225
+ }}
226
+ """
227
+
228
+ GET_CSS = f"""
229
+ function(el, prop){{
230
+ {_GUARDS}
231
+ guards.stale(el);
232
+
233
+ try {{
234
+ return window.getComputedStyle(el).getPropertyValue(prop);
235
+ }} catch(e) {{
236
+ return null;
237
+ }}
238
+ }}
239
+ """
240
+
241
+ SEND_KEYS_TO = f"""
242
+ function(el, text){{
243
+ {_GUARDS}
244
+ guards.stale(el);
245
+ guards.interactable(el);
246
+ guards.state(el);
247
+
248
+ try {{
249
+ el.focus();
250
+ el.value = (el.value || '') + String(text || '');
251
+
252
+ try {{
253
+ el.dispatchEvent(new InputEvent('input', {{bubbles: true}}));
254
+ }} catch(e) {{
255
+ el.dispatchEvent(new Event('input', {{bubbles: true}}));
256
+ }}
257
+
258
+ try {{
259
+ el.dispatchEvent(new Event('change', {{bubbles: true}}));
260
+ }} catch(e) {{ }}
261
+ }} catch (e) {{ }}
262
+ }}
263
+ """
264
+
265
+
266
+ class NAVIGATION:
267
+ """
268
+ JavaScript snippets for navigation and page information.
269
+
270
+ Attributes:
271
+ GET_TITLE (str): Snippet to retrieve the document title.
272
+ """
273
+
274
+ GET_TITLE = "document.title"
275
+
276
+
277
+ class CAPTURE:
278
+ """
279
+ JavaScript snippets for capturing page state.
280
+
281
+ Attributes:
282
+ GET_PAGE_SOURCE (str): Snippet to retrieve the full outer HTML of the document.
283
+ """
284
+
285
+ GET_PAGE_SOURCE = "document.documentElement.outerHTML"
@@ -0,0 +1,4 @@
1
+ __all__ = ["ELEMENT_KEY", "SHADOW_ROOT_KEY"]
2
+
3
+ ELEMENT_KEY = "element-6066-11e4-a52e-4f735466cecf"
4
+ SHADOW_ROOT_KEY = "shadow-6066-11e4-a52e-4f735466cecf"
@@ -0,0 +1,87 @@
1
+ from typing import Any, Dict
2
+ from osn_selenium.exceptions.bidi_bridge import (
3
+ CommandNotMappedToBiDiError
4
+ )
5
+ from osn_selenium.trio_bidi.mapping.request_functions._cdp import (
6
+ MAPPED_REQUEST_CDP_COMMANDS
7
+ )
8
+ from osn_selenium.trio_bidi.mapping.request_functions._file import (
9
+ MAPPED_REQUEST_FILE_COMMANDS
10
+ )
11
+ from osn_selenium.trio_bidi.mapping.request_functions._alert import (
12
+ MAPPED_REQUEST_ALERT_COMMANDS
13
+ )
14
+ from osn_selenium.trio_bidi.mapping.request_functions._script import (
15
+ MAPPED_REQUEST_SCRIPT_COMMANDS
16
+ )
17
+ from osn_selenium.trio_bidi.mapping.request_functions._window import (
18
+ MAPPED_REQUEST_WINDOW_COMMANDS
19
+ )
20
+ from osn_selenium.trio_bidi.mapping.request_functions._capture import (
21
+ MAPPED_REQUEST_CAPTURE_COMMANDS
22
+ )
23
+ from osn_selenium.trio_bidi.mapping.request_functions._element import (
24
+ MAPPED_REQUEST_ELEMENT_COMMANDS
25
+ )
26
+ from osn_selenium.trio_bidi.mapping.request_functions._switch_to import (
27
+ MAPPED_REQUEST_SWITCH_TO_COMMANDS
28
+ )
29
+ from osn_selenium.trio_bidi.mapping.request_functions._navigation import (
30
+ MAPPED_REQUEST_NAVIGATION_COMMANDS
31
+ )
32
+ from osn_selenium.trio_bidi.mapping.request_functions._web_element import (
33
+ MAPPED_REQUEST_WEB_ELEMENT_COMMANDS
34
+ )
35
+ from osn_selenium.trio_bidi.mapping.request_functions._shadow_root import (
36
+ MAPPED_REQUEST_SHADOW_ROOT_COMMANDS
37
+ )
38
+ from osn_selenium.trio_bidi._typehints import (
39
+ CURRENT_BROWSING_CONTEXT_TYPEHINT,
40
+ MAP_REQUEST_FUNCTION_TYPEHINT,
41
+ REQUEST_PARAMS_TYPEHINT
42
+ )
43
+
44
+
45
+ __all__ = ["map_request"]
46
+
47
+ _MAPPED_REQUEST_COMMANDS: Dict[str, MAP_REQUEST_FUNCTION_TYPEHINT] = {
48
+ **MAPPED_REQUEST_ALERT_COMMANDS,
49
+ **MAPPED_REQUEST_CAPTURE_COMMANDS,
50
+ **MAPPED_REQUEST_CDP_COMMANDS,
51
+ **MAPPED_REQUEST_ELEMENT_COMMANDS,
52
+ **MAPPED_REQUEST_FILE_COMMANDS,
53
+ **MAPPED_REQUEST_NAVIGATION_COMMANDS,
54
+ **MAPPED_REQUEST_SCRIPT_COMMANDS,
55
+ **MAPPED_REQUEST_SHADOW_ROOT_COMMANDS,
56
+ **MAPPED_REQUEST_SWITCH_TO_COMMANDS,
57
+ **MAPPED_REQUEST_WEB_ELEMENT_COMMANDS,
58
+ **MAPPED_REQUEST_WINDOW_COMMANDS,
59
+ }
60
+
61
+
62
+ def map_request(
63
+ command: str,
64
+ params: REQUEST_PARAMS_TYPEHINT,
65
+ context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT
66
+ ) -> Dict[str, Any]:
67
+ """
68
+ Maps a W3C WebDriver command to its corresponding BiDi protocol request.
69
+
70
+ Args:
71
+ command (str): The W3C command name.
72
+ params (REQUEST_PARAMS_TYPEHINT): The parameters associated with the command.
73
+ context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID for the command.
74
+
75
+ Returns:
76
+ Dict[str, Any]: The mapped BiDi request dictionary.
77
+
78
+ Raises:
79
+ CommandNotMappedToBiDiError: If the command does not have a defined mapping.
80
+ """
81
+
82
+ function = _MAPPED_REQUEST_COMMANDS.get(command, None)
83
+
84
+ if function is not None:
85
+ return function(params, context_id)
86
+
87
+ raise CommandNotMappedToBiDiError(command=command)
@@ -0,0 +1,102 @@
1
+ from typing import Any, Dict
2
+ from selenium.webdriver.remote.command import Command
3
+ from osn_selenium.trio_bidi._internal_mappings import (
4
+ GET_INTERNAL_ALERT_TEXT
5
+ )
6
+ from osn_selenium.trio_bidi._typehints import (
7
+ CURRENT_BROWSING_CONTEXT_TYPEHINT,
8
+ MAP_REQUEST_FUNCTION_TYPEHINT,
9
+ REQUEST_PARAMS_TYPEHINT
10
+ )
11
+
12
+
13
+ __all__ = ["MAPPED_REQUEST_ALERT_COMMANDS"]
14
+
15
+
16
+ def _map_set_alert_value_request(
17
+ params: REQUEST_PARAMS_TYPEHINT,
18
+ context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT
19
+ ) -> Dict[str, Any]:
20
+ """
21
+ Maps the 'set alert value' command to BiDi 'handleUserPrompt'.
22
+
23
+ Args:
24
+ params (REQUEST_PARAMS_TYPEHINT): Request parameters containing 'text'.
25
+ context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID.
26
+
27
+ Returns:
28
+ Dict[str, Any]: The BiDi request.
29
+ """
30
+
31
+ return {
32
+ "method": "browsingContext.handleUserPrompt",
33
+ "params": {"context": context_id, "accept": True, "userText": params.get("text")}
34
+ }
35
+
36
+
37
+ def _map_get_alert_text_request(
38
+ params: REQUEST_PARAMS_TYPEHINT,
39
+ context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT
40
+ ) -> Dict[str, Any]:
41
+ """
42
+ Maps the 'get alert text' command to an internal bridge command.
43
+
44
+ Args:
45
+ params (REQUEST_PARAMS_TYPEHINT): Request parameters.
46
+ context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID.
47
+
48
+ Returns:
49
+ Dict[str, Any]: The internal BiDi request.
50
+ """
51
+
52
+ return {"method": GET_INTERNAL_ALERT_TEXT, "params": {}}
53
+
54
+
55
+ def _map_dismiss_alert_request(
56
+ params: REQUEST_PARAMS_TYPEHINT,
57
+ context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT
58
+ ) -> Dict[str, Any]:
59
+ """
60
+ Maps the 'dismiss alert' command to BiDi 'handleUserPrompt' with accept=False.
61
+
62
+ Args:
63
+ params (REQUEST_PARAMS_TYPEHINT): Request parameters.
64
+ context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID.
65
+
66
+ Returns:
67
+ Dict[str, Any]: The BiDi request.
68
+ """
69
+
70
+ return {
71
+ "method": "browsingContext.handleUserPrompt",
72
+ "params": {"context": context_id, "accept": False}
73
+ }
74
+
75
+
76
+ def _map_accept_alert_request(
77
+ params: REQUEST_PARAMS_TYPEHINT,
78
+ context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT
79
+ ) -> Dict[str, Any]:
80
+ """
81
+ Maps the 'accept alert' command to BiDi 'handleUserPrompt' with accept=True.
82
+
83
+ Args:
84
+ params (REQUEST_PARAMS_TYPEHINT): Request parameters.
85
+ context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID.
86
+
87
+ Returns:
88
+ Dict[str, Any]: The BiDi request.
89
+ """
90
+
91
+ return {
92
+ "method": "browsingContext.handleUserPrompt",
93
+ "params": {"context": context_id, "accept": True}
94
+ }
95
+
96
+
97
+ MAPPED_REQUEST_ALERT_COMMANDS: Dict[str, MAP_REQUEST_FUNCTION_TYPEHINT] = {
98
+ Command.W3C_GET_ALERT_TEXT: _map_get_alert_text_request,
99
+ Command.W3C_ACCEPT_ALERT: _map_accept_alert_request,
100
+ Command.W3C_DISMISS_ALERT: _map_dismiss_alert_request,
101
+ Command.W3C_SET_ALERT_VALUE: _map_set_alert_value_request,
102
+ }
@@ -0,0 +1,225 @@
1
+ from typing import (
2
+ Any,
3
+ Dict,
4
+ List,
5
+ Optional
6
+ )
7
+ from osn_selenium.instances.protocols import AnyInstanceWrapper
8
+ from osn_selenium.trio_bidi.mapping._constants import BY_MAPPING_DICT
9
+ from osn_selenium.trio_bidi.mapping._utils import (
10
+ ELEMENT_KEY,
11
+ SHADOW_ROOT_KEY
12
+ )
13
+ from selenium.webdriver.remote.webelement import (
14
+ WebElement as SeleniumWebElement
15
+ )
16
+ from osn_selenium.trio_bidi._typehints import (
17
+ CURRENT_BROWSING_CONTEXT_TYPEHINT,
18
+ REQUEST_PARAMS_TYPEHINT
19
+ )
20
+
21
+
22
+ __all__ = [
23
+ "build_bidi_element",
24
+ "build_locate_nodes_request",
25
+ "build_script_call_request",
26
+ "build_script_evaluate_request",
27
+ "convert_w3c_to_bidi_js",
28
+ "get_shadow_root_argument",
29
+ "get_web_element_argument"
30
+ ]
31
+
32
+
33
+ def build_bidi_element(id_: str) -> Dict[str, Any]:
34
+ """
35
+ Creates a BiDi element reference.
36
+
37
+ Args:
38
+ id_ (str): The shared ID of the element.
39
+
40
+ Returns:
41
+ Dict[str, Any]: The BiDi sharedId reference.
42
+ """
43
+
44
+ return {"sharedId": id_}
45
+
46
+
47
+ def get_web_element_argument(params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
48
+ """
49
+ Extracts the element ID from W3C parameters and creates a BiDi reference.
50
+
51
+ Args:
52
+ params (REQUEST_PARAMS_TYPEHINT): W3C parameters containing 'id'.
53
+
54
+ Returns:
55
+ Dict[str, Any]: The BiDi element reference.
56
+ """
57
+
58
+ return build_bidi_element(id_=params["id"])
59
+
60
+
61
+ def get_shadow_root_argument(params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
62
+ """
63
+ Extracts the shadow ID from W3C parameters and creates a BiDi reference.
64
+
65
+ Args:
66
+ params (REQUEST_PARAMS_TYPEHINT): W3C parameters containing 'shadowId'.
67
+
68
+ Returns:
69
+ Dict[str, Any]: The BiDi element reference.
70
+ """
71
+
72
+ return build_bidi_element(id_=params["shadowId"])
73
+
74
+
75
+ def convert_w3c_to_bidi_js(w3c_value: Any) -> Dict[str, Any]:
76
+ """
77
+ Converts a W3C-style JavaScript argument into a BiDi LocalValue.
78
+
79
+ Args:
80
+ w3c_value (Any): The value to convert.
81
+
82
+ Returns:
83
+ Dict[str, Any]: The BiDi LocalValue representation.
84
+
85
+ EXAMPLES
86
+ ________
87
+ >>> convert_w3c_to_bidi_js("hello")
88
+ ... {'type': 'string', 'value': 'hello'}
89
+ >>> convert_w3c_to_bidi_js(True)
90
+ ... {'type': 'boolean', 'value': True}
91
+ """
92
+
93
+ if isinstance(w3c_value, AnyInstanceWrapper):
94
+ w3c_value = w3c_value.legacy
95
+
96
+ if isinstance(w3c_value, SeleniumWebElement):
97
+ return {"sharedId": w3c_value.id}
98
+
99
+ if isinstance(w3c_value, dict):
100
+ if ELEMENT_KEY in w3c_value:
101
+ return {"sharedId": w3c_value[ELEMENT_KEY]}
102
+
103
+ if SHADOW_ROOT_KEY in w3c_value:
104
+ return {"sharedId": w3c_value[SHADOW_ROOT_KEY]}
105
+
106
+ if w3c_value is None:
107
+ return {"type": "null"}
108
+
109
+ if isinstance(w3c_value, bool):
110
+ return {"type": "boolean", "value": w3c_value}
111
+
112
+ if isinstance(w3c_value, (int, float)):
113
+ return {"type": "number", "value": w3c_value}
114
+
115
+ if isinstance(w3c_value, str):
116
+ return {"type": "string", "value": w3c_value}
117
+
118
+ if isinstance(w3c_value, (list, tuple, set)):
119
+ return {
120
+ "type": "array",
121
+ "value": [convert_w3c_to_bidi_js(w3c_value=item) for item in w3c_value]
122
+ }
123
+
124
+ if isinstance(w3c_value, dict):
125
+ return {
126
+ "type": "object",
127
+ "value": [
128
+ [
129
+ convert_w3c_to_bidi_js(w3c_value=key),
130
+ convert_w3c_to_bidi_js(w3c_value=value)
131
+ ]
132
+ for key, value in w3c_value.items()
133
+ ]
134
+ }
135
+
136
+ return {"type": "undefined"}
137
+
138
+
139
+ def build_script_evaluate_request(context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT, expression: str) -> Dict[str, Any]:
140
+ """
141
+ Builds a BiDi 'script.evaluate' request.
142
+
143
+ Args:
144
+ context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID.
145
+ expression (str): The JS expression to evaluate.
146
+
147
+ Returns:
148
+ Dict[str, Any]: The BiDi request.
149
+ """
150
+
151
+ return {
152
+ "method": "script.evaluate",
153
+ "params": {
154
+ "expression": expression,
155
+ "target": {"context": context_id},
156
+ "awaitPromise": True,
157
+ "resultOwnership": "none",
158
+ }
159
+ }
160
+
161
+
162
+ def build_script_call_request(
163
+ context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT,
164
+ function: str,
165
+ args: Optional[List[Any]],
166
+ ownership: str
167
+ ) -> Dict[str, Any]:
168
+ """
169
+ Builds a BiDi 'script.callFunction' request.
170
+
171
+ Args:
172
+ context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID.
173
+ function (str): The function declaration.
174
+ args (Optional[List[Any]]): List of BiDi LocalValue arguments.
175
+ ownership (str): Result ownership type ('none', 'root').
176
+
177
+ Returns:
178
+ Dict[str, Any]: The BiDi request.
179
+ """
180
+
181
+ return {
182
+ "method": "script.callFunction",
183
+ "params": {
184
+ "functionDeclaration": function,
185
+ "arguments": args or [],
186
+ "target": {"context": context_id},
187
+ "awaitPromise": True,
188
+ "resultOwnership": ownership,
189
+ }
190
+ }
191
+
192
+
193
+ def build_locate_nodes_request(
194
+ context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT,
195
+ params: REQUEST_PARAMS_TYPEHINT,
196
+ max_nodes: Optional[int] = None,
197
+ start_nodes: Optional[List[Dict[str, Any]]] = None,
198
+ ) -> Dict[str, Any]:
199
+ """
200
+ Builds a BiDi 'browsingContext.locateNodes' request.
201
+
202
+ Args:
203
+ context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The browsing context ID.
204
+ params (REQUEST_PARAMS_TYPEHINT): W3C search parameters ('using', 'value').
205
+ max_nodes (Optional[int]): Maximum number of nodes to return.
206
+ start_nodes (Optional[List[Dict[str, Any]]]): BiDi element references to start search from.
207
+
208
+ Returns:
209
+ Dict[str, Any]: The BiDi request.
210
+ """
211
+
212
+ strategy = BY_MAPPING_DICT.get(params["using"], params["using"])
213
+
214
+ bidi_params: Dict[str, Any] = {
215
+ "context": context_id,
216
+ "locator": {"type": strategy, "value": params["value"]}
217
+ }
218
+
219
+ if max_nodes:
220
+ bidi_params["maxNodeCount"] = max_nodes
221
+
222
+ if start_nodes:
223
+ bidi_params["startNodes"] = start_nodes
224
+
225
+ return {"method": "browsingContext.locateNodes", "params": bidi_params}