osn-selenium 0.0.0__py3-none-any.whl → 1.0.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 (628) hide show
  1. osn_selenium/_functions.py +84 -0
  2. osn_selenium/_typehints.py +19 -0
  3. osn_selenium/abstract/executors/cdp/__init__.py +435 -0
  4. osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
  5. osn_selenium/abstract/executors/cdp/animation.py +47 -0
  6. osn_selenium/abstract/executors/cdp/audits.py +39 -0
  7. osn_selenium/abstract/executors/cdp/autofill.py +34 -0
  8. osn_selenium/abstract/executors/cdp/background_service.py +22 -0
  9. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
  10. osn_selenium/abstract/executors/cdp/browser.py +122 -0
  11. osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
  12. osn_selenium/abstract/executors/cdp/cast.py +31 -0
  13. osn_selenium/abstract/executors/cdp/console.py +18 -0
  14. osn_selenium/abstract/executors/cdp/css.py +197 -0
  15. osn_selenium/abstract/executors/cdp/debugger.py +198 -0
  16. osn_selenium/abstract/executors/cdp/device_access.py +22 -0
  17. osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
  18. osn_selenium/abstract/executors/cdp/dom.py +305 -0
  19. osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
  20. osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
  21. osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
  22. osn_selenium/abstract/executors/cdp/emulation.py +259 -0
  23. osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
  24. osn_selenium/abstract/executors/cdp/extensions.py +31 -0
  25. osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
  26. osn_selenium/abstract/executors/cdp/fetch.py +76 -0
  27. osn_selenium/abstract/executors/cdp/file_system.py +11 -0
  28. osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
  29. osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
  30. osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
  31. osn_selenium/abstract/executors/cdp/input.py +158 -0
  32. osn_selenium/abstract/executors/cdp/inspector.py +14 -0
  33. osn_selenium/abstract/executors/cdp/io.py +24 -0
  34. osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
  35. osn_selenium/abstract/executors/cdp/log.py +27 -0
  36. osn_selenium/abstract/executors/cdp/media.py +14 -0
  37. osn_selenium/abstract/executors/cdp/memory.py +61 -0
  38. osn_selenium/abstract/executors/cdp/network.py +252 -0
  39. osn_selenium/abstract/executors/cdp/overlay.py +166 -0
  40. osn_selenium/abstract/executors/cdp/page.py +347 -0
  41. osn_selenium/abstract/executors/cdp/performance.py +28 -0
  42. osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
  43. osn_selenium/abstract/executors/cdp/preload.py +14 -0
  44. osn_selenium/abstract/executors/cdp/profiler.py +54 -0
  45. osn_selenium/abstract/executors/cdp/pwa.py +46 -0
  46. osn_selenium/abstract/executors/cdp/runtime.py +176 -0
  47. osn_selenium/abstract/executors/cdp/schema.py +11 -0
  48. osn_selenium/abstract/executors/cdp/security.py +26 -0
  49. osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
  50. osn_selenium/abstract/executors/cdp/storage.py +175 -0
  51. osn_selenium/abstract/executors/cdp/system_info.py +24 -0
  52. osn_selenium/abstract/executors/cdp/target.py +125 -0
  53. osn_selenium/abstract/executors/cdp/tethering.py +14 -0
  54. osn_selenium/abstract/executors/cdp/tracing.py +48 -0
  55. osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
  56. osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
  57. osn_selenium/abstract/executors/javascript.py +203 -0
  58. osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
  59. osn_selenium/abstract/instances/action_chains/base.py +25 -0
  60. osn_selenium/abstract/instances/action_chains/click.py +93 -0
  61. osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
  62. osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
  63. osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
  64. osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
  65. osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
  66. osn_selenium/abstract/instances/action_chains/move.py +60 -0
  67. osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
  68. osn_selenium/abstract/instances/action_chains/utils.py +44 -0
  69. osn_selenium/abstract/instances/alert.py +67 -0
  70. osn_selenium/abstract/instances/browser.py +76 -0
  71. osn_selenium/abstract/instances/browsing_context.py +310 -0
  72. osn_selenium/abstract/instances/dialog.py +107 -0
  73. osn_selenium/abstract/instances/fedcm.py +133 -0
  74. osn_selenium/abstract/instances/mobile.py +79 -0
  75. osn_selenium/abstract/instances/network.py +100 -0
  76. osn_selenium/abstract/instances/permissions.py +52 -0
  77. osn_selenium/abstract/instances/script.py +109 -0
  78. osn_selenium/abstract/instances/shadow_root.py +81 -0
  79. osn_selenium/abstract/instances/storage.py +98 -0
  80. osn_selenium/abstract/instances/switch_to.py +104 -0
  81. osn_selenium/abstract/instances/web_driver_wait.py +57 -0
  82. osn_selenium/abstract/instances/web_element.py +395 -0
  83. osn_selenium/abstract/instances/web_extension.py +70 -0
  84. osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
  85. osn_selenium/abstract/webdriver/blink/base.py +80 -0
  86. osn_selenium/abstract/webdriver/blink/casting.py +82 -0
  87. osn_selenium/abstract/webdriver/blink/features.py +51 -0
  88. osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
  89. osn_selenium/abstract/webdriver/blink/logging.py +40 -0
  90. osn_selenium/abstract/webdriver/blink/network.py +45 -0
  91. osn_selenium/abstract/webdriver/blink/settings.py +68 -0
  92. osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
  93. osn_selenium/abstract/webdriver/chrome/base.py +36 -0
  94. osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
  95. osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
  96. osn_selenium/abstract/webdriver/core/__init__.py +16 -0
  97. osn_selenium/abstract/webdriver/core/actions.py +58 -0
  98. osn_selenium/abstract/webdriver/core/auth.py +145 -0
  99. osn_selenium/abstract/webdriver/core/base.py +298 -0
  100. osn_selenium/abstract/webdriver/core/capture.py +84 -0
  101. osn_selenium/abstract/webdriver/core/components.py +82 -0
  102. osn_selenium/abstract/webdriver/core/devtools.py +69 -0
  103. osn_selenium/abstract/webdriver/core/element.py +55 -0
  104. osn_selenium/abstract/webdriver/core/file.py +82 -0
  105. osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
  106. osn_selenium/abstract/webdriver/core/navigation.py +65 -0
  107. osn_selenium/abstract/webdriver/core/script.py +88 -0
  108. osn_selenium/abstract/webdriver/core/settings.py +43 -0
  109. osn_selenium/abstract/webdriver/core/storage.py +81 -0
  110. osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
  111. osn_selenium/abstract/webdriver/core/window.py +237 -0
  112. osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
  113. osn_selenium/abstract/webdriver/edge/base.py +36 -0
  114. osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
  115. osn_selenium/abstract/webdriver/edge/settings.py +110 -0
  116. osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
  117. osn_selenium/abstract/webdriver/yandex/base.py +18 -0
  118. osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
  119. osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
  120. osn_selenium/base_mixin.py +122 -0
  121. osn_selenium/browsers_handler/__init__.py +47 -17
  122. osn_selenium/browsers_handler/_linux.py +226 -0
  123. osn_selenium/browsers_handler/_windows.py +21 -14
  124. osn_selenium/browsers_handler/{types.py → models.py} +5 -2
  125. osn_selenium/dev_tools/_decorators.py +140 -0
  126. osn_selenium/dev_tools/_exception_helpers.py +116 -0
  127. osn_selenium/dev_tools/_functions.py +174 -0
  128. osn_selenium/dev_tools/_system_utils.py +35 -0
  129. osn_selenium/dev_tools/_typehints.py +32 -0
  130. osn_selenium/dev_tools/_validators.py +227 -0
  131. osn_selenium/dev_tools/_wrappers.py +95 -0
  132. osn_selenium/dev_tools/domains/__init__.py +7 -40
  133. osn_selenium/dev_tools/domains/abstract.py +98 -254
  134. osn_selenium/dev_tools/domains/fetch.py +229 -906
  135. osn_selenium/dev_tools/domains_default/fetch.py +40 -28
  136. osn_selenium/dev_tools/filters.py +40 -0
  137. osn_selenium/dev_tools/logger/main.py +226 -0
  138. osn_selenium/dev_tools/logger/models.py +232 -0
  139. osn_selenium/dev_tools/logger/target.py +258 -0
  140. osn_selenium/dev_tools/manager/__init__.py +16 -0
  141. osn_selenium/dev_tools/manager/base.py +147 -0
  142. osn_selenium/dev_tools/manager/lifecycle.py +236 -0
  143. osn_selenium/dev_tools/manager/logging.py +153 -0
  144. osn_selenium/dev_tools/manager/settings.py +89 -0
  145. osn_selenium/dev_tools/manager/targets.py +175 -0
  146. osn_selenium/dev_tools/models.py +49 -0
  147. osn_selenium/dev_tools/settings.py +135 -0
  148. osn_selenium/dev_tools/target/__init__.py +16 -0
  149. osn_selenium/dev_tools/target/base.py +438 -0
  150. osn_selenium/dev_tools/target/detach.py +54 -0
  151. osn_selenium/dev_tools/target/discovery.py +112 -0
  152. osn_selenium/dev_tools/target/events.py +120 -0
  153. osn_selenium/dev_tools/target/fingerprint.py +126 -0
  154. osn_selenium/dev_tools/target/lifecycle.py +179 -0
  155. osn_selenium/dev_tools/target/logging.py +155 -0
  156. osn_selenium/exceptions/__init__.py +1 -0
  157. osn_selenium/exceptions/base.py +9 -0
  158. osn_selenium/exceptions/configuration.py +84 -0
  159. osn_selenium/exceptions/devtools.py +114 -0
  160. osn_selenium/exceptions/flags.py +45 -0
  161. osn_selenium/exceptions/instance.py +92 -0
  162. osn_selenium/exceptions/javascript.py +31 -0
  163. osn_selenium/exceptions/logic.py +31 -0
  164. osn_selenium/exceptions/path.py +77 -0
  165. osn_selenium/exceptions/platform.py +33 -0
  166. osn_selenium/exceptions/protocol.py +86 -0
  167. osn_selenium/exceptions/webdriver.py +44 -0
  168. osn_selenium/exceptions/window.py +63 -0
  169. osn_selenium/executors/__init__.py +1 -0
  170. osn_selenium/executors/sync/__init__.py +1 -0
  171. osn_selenium/executors/sync/cdp/__init__.py +550 -0
  172. osn_selenium/executors/sync/cdp/accessibility.py +74 -0
  173. osn_selenium/executors/sync/cdp/animation.py +50 -0
  174. osn_selenium/executors/sync/cdp/audits.py +48 -0
  175. osn_selenium/executors/sync/cdp/autofill.py +39 -0
  176. osn_selenium/executors/sync/cdp/background_service.py +30 -0
  177. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
  178. osn_selenium/executors/sync/cdp/browser.py +131 -0
  179. osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
  180. osn_selenium/executors/sync/cdp/cast.py +38 -0
  181. osn_selenium/executors/sync/cdp/console.py +24 -0
  182. osn_selenium/executors/sync/cdp/css.py +187 -0
  183. osn_selenium/executors/sync/cdp/debugger.py +206 -0
  184. osn_selenium/executors/sync/cdp/device_access.py +27 -0
  185. osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
  186. osn_selenium/executors/sync/cdp/dom.py +310 -0
  187. osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
  188. osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
  189. osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
  190. osn_selenium/executors/sync/cdp/emulation.py +270 -0
  191. osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
  192. osn_selenium/executors/sync/cdp/extensions.py +39 -0
  193. osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
  194. osn_selenium/executors/sync/cdp/fetch.py +96 -0
  195. osn_selenium/executors/sync/cdp/file_system.py +18 -0
  196. osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
  197. osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
  198. osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
  199. osn_selenium/executors/sync/cdp/input.py +233 -0
  200. osn_selenium/executors/sync/cdp/inspector.py +21 -0
  201. osn_selenium/executors/sync/cdp/io.py +33 -0
  202. osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
  203. osn_selenium/executors/sync/cdp/log.py +35 -0
  204. osn_selenium/executors/sync/cdp/media.py +21 -0
  205. osn_selenium/executors/sync/cdp/memory.py +62 -0
  206. osn_selenium/executors/sync/cdp/network.py +287 -0
  207. osn_selenium/executors/sync/cdp/overlay.py +174 -0
  208. osn_selenium/executors/sync/cdp/page.py +365 -0
  209. osn_selenium/executors/sync/cdp/performance.py +33 -0
  210. osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
  211. osn_selenium/executors/sync/cdp/preload.py +21 -0
  212. osn_selenium/executors/sync/cdp/profiler.py +58 -0
  213. osn_selenium/executors/sync/cdp/pwa.py +55 -0
  214. osn_selenium/executors/sync/cdp/runtime.py +221 -0
  215. osn_selenium/executors/sync/cdp/schema.py +23 -0
  216. osn_selenium/executors/sync/cdp/security.py +30 -0
  217. osn_selenium/executors/sync/cdp/service_worker.py +56 -0
  218. osn_selenium/executors/sync/cdp/storage.py +151 -0
  219. osn_selenium/executors/sync/cdp/system_info.py +30 -0
  220. osn_selenium/executors/sync/cdp/target.py +147 -0
  221. osn_selenium/executors/sync/cdp/tethering.py +21 -0
  222. osn_selenium/executors/sync/cdp/tracing.py +62 -0
  223. osn_selenium/executors/sync/cdp/web_audio.py +24 -0
  224. osn_selenium/executors/sync/cdp/web_authn.py +82 -0
  225. osn_selenium/executors/sync/javascript.py +79 -0
  226. osn_selenium/executors/trio_threads/__init__.py +1 -0
  227. osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
  228. osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
  229. osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
  230. osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
  231. osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
  232. osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
  233. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
  234. osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
  235. osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
  236. osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
  237. osn_selenium/executors/trio_threads/cdp/console.py +33 -0
  238. osn_selenium/executors/trio_threads/cdp/css.py +196 -0
  239. osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
  240. osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
  241. osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
  242. osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
  243. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
  244. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
  245. osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
  246. osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
  247. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
  248. osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
  249. osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
  250. osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
  251. osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
  252. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
  253. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
  254. osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
  255. osn_selenium/executors/trio_threads/cdp/input.py +242 -0
  256. osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
  257. osn_selenium/executors/trio_threads/cdp/io.py +42 -0
  258. osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
  259. osn_selenium/executors/trio_threads/cdp/log.py +44 -0
  260. osn_selenium/executors/trio_threads/cdp/media.py +30 -0
  261. osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
  262. osn_selenium/executors/trio_threads/cdp/network.py +296 -0
  263. osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
  264. osn_selenium/executors/trio_threads/cdp/page.py +374 -0
  265. osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
  266. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
  267. osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
  268. osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
  269. osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
  270. osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
  271. osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
  272. osn_selenium/executors/trio_threads/cdp/security.py +43 -0
  273. osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
  274. osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
  275. osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
  276. osn_selenium/executors/trio_threads/cdp/target.py +156 -0
  277. osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
  278. osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
  279. osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
  280. osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
  281. osn_selenium/executors/trio_threads/javascript.py +90 -0
  282. osn_selenium/executors/unified/__init__.py +1 -0
  283. osn_selenium/executors/unified/cdp/__init__.py +1 -0
  284. osn_selenium/executors/unified/cdp/accessibility.py +81 -0
  285. osn_selenium/executors/unified/cdp/animation.py +50 -0
  286. osn_selenium/executors/unified/cdp/audits.py +45 -0
  287. osn_selenium/executors/unified/cdp/autofill.py +41 -0
  288. osn_selenium/executors/unified/cdp/background_service.py +24 -0
  289. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
  290. osn_selenium/executors/unified/cdp/browser.py +143 -0
  291. osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
  292. osn_selenium/executors/unified/cdp/cast.py +32 -0
  293. osn_selenium/executors/unified/cdp/console.py +18 -0
  294. osn_selenium/executors/unified/cdp/css.py +237 -0
  295. osn_selenium/executors/unified/cdp/debugger.py +243 -0
  296. osn_selenium/executors/unified/cdp/device_access.py +21 -0
  297. osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
  298. osn_selenium/executors/unified/cdp/dom.py +380 -0
  299. osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
  300. osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
  301. osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
  302. osn_selenium/executors/unified/cdp/emulation.py +312 -0
  303. osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
  304. osn_selenium/executors/unified/cdp/extensions.py +45 -0
  305. osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
  306. osn_selenium/executors/unified/cdp/fetch.py +111 -0
  307. osn_selenium/executors/unified/cdp/file_system.py +15 -0
  308. osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
  309. osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
  310. osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
  311. osn_selenium/executors/unified/cdp/input.py +254 -0
  312. osn_selenium/executors/unified/cdp/inspector.py +15 -0
  313. osn_selenium/executors/unified/cdp/io.py +29 -0
  314. osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
  315. osn_selenium/executors/unified/cdp/log.py +29 -0
  316. osn_selenium/executors/unified/cdp/media.py +15 -0
  317. osn_selenium/executors/unified/cdp/memory.py +59 -0
  318. osn_selenium/executors/unified/cdp/network.py +323 -0
  319. osn_selenium/executors/unified/cdp/overlay.py +209 -0
  320. osn_selenium/executors/unified/cdp/page.py +410 -0
  321. osn_selenium/executors/unified/cdp/performance.py +27 -0
  322. osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
  323. osn_selenium/executors/unified/cdp/preload.py +15 -0
  324. osn_selenium/executors/unified/cdp/profiler.py +55 -0
  325. osn_selenium/executors/unified/cdp/pwa.py +55 -0
  326. osn_selenium/executors/unified/cdp/runtime.py +245 -0
  327. osn_selenium/executors/unified/cdp/schema.py +17 -0
  328. osn_selenium/executors/unified/cdp/security.py +27 -0
  329. osn_selenium/executors/unified/cdp/service_worker.py +62 -0
  330. osn_selenium/executors/unified/cdp/storage.py +178 -0
  331. osn_selenium/executors/unified/cdp/system_info.py +24 -0
  332. osn_selenium/executors/unified/cdp/target.py +165 -0
  333. osn_selenium/executors/unified/cdp/tethering.py +15 -0
  334. osn_selenium/executors/unified/cdp/tracing.py +62 -0
  335. osn_selenium/executors/unified/cdp/web_audio.py +18 -0
  336. osn_selenium/executors/unified/cdp/web_authn.py +103 -0
  337. osn_selenium/executors/unified/javascript.py +108 -0
  338. osn_selenium/flags/__init__.py +1 -0
  339. osn_selenium/flags/_functions.py +45 -0
  340. osn_selenium/flags/_typehints.py +34 -0
  341. osn_selenium/flags/_validators.py +101 -0
  342. osn_selenium/{webdrivers/BaseDriver/flags.py → flags/base.py} +165 -243
  343. osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +133 -371
  344. osn_selenium/flags/chrome.py +259 -0
  345. osn_selenium/flags/edge.py +259 -0
  346. osn_selenium/flags/models/__init__.py +1 -0
  347. osn_selenium/flags/models/base.py +130 -0
  348. osn_selenium/flags/models/blink.py +263 -0
  349. osn_selenium/{webdrivers/Chrome/flags.py → flags/models/chrome.py} +25 -75
  350. osn_selenium/{webdrivers/Edge/flags.py → flags/models/edge.py} +25 -75
  351. osn_selenium/flags/models/values.py +44 -0
  352. osn_selenium/{webdrivers/Yandex/flags.py → flags/models/yandex.py} +26 -76
  353. osn_selenium/flags/yandex.py +259 -0
  354. osn_selenium/instances/__init__.py +1 -0
  355. osn_selenium/instances/_functions.py +242 -0
  356. osn_selenium/instances/_typehints.py +148 -0
  357. osn_selenium/instances/_utils.py +143 -0
  358. osn_selenium/instances/convert.py +287 -0
  359. osn_selenium/instances/protocols.py +105 -0
  360. osn_selenium/instances/sync/__init__.py +1 -0
  361. osn_selenium/instances/sync/action_chains/__init__.py +26 -0
  362. osn_selenium/instances/sync/action_chains/base.py +74 -0
  363. osn_selenium/instances/sync/action_chains/click.py +61 -0
  364. osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
  365. osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
  366. osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
  367. osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
  368. osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
  369. osn_selenium/instances/sync/action_chains/move.py +46 -0
  370. osn_selenium/instances/sync/action_chains/scroll.py +43 -0
  371. osn_selenium/instances/sync/action_chains/utils.py +30 -0
  372. osn_selenium/instances/sync/alert.py +69 -0
  373. osn_selenium/instances/sync/browser.py +72 -0
  374. osn_selenium/instances/sync/browsing_context.py +193 -0
  375. osn_selenium/instances/sync/dialog.py +81 -0
  376. osn_selenium/instances/sync/fedcm.py +92 -0
  377. osn_selenium/instances/sync/mobile.py +75 -0
  378. osn_selenium/instances/sync/network.py +90 -0
  379. osn_selenium/instances/sync/permissions.py +80 -0
  380. osn_selenium/instances/sync/script.py +77 -0
  381. osn_selenium/instances/sync/shadow_root.py +91 -0
  382. osn_selenium/instances/sync/storage.py +91 -0
  383. osn_selenium/instances/sync/switch_to.py +92 -0
  384. osn_selenium/instances/sync/web_driver_wait.py +83 -0
  385. osn_selenium/instances/sync/web_element.py +179 -0
  386. osn_selenium/instances/sync/web_extension.py +77 -0
  387. osn_selenium/instances/trio_threads/__init__.py +1 -0
  388. osn_selenium/instances/trio_threads/action_chains/__init__.py +26 -0
  389. osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
  390. osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
  391. osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
  392. osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
  393. osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
  394. osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
  395. osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
  396. osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
  397. osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
  398. osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
  399. osn_selenium/instances/trio_threads/alert.py +87 -0
  400. osn_selenium/instances/trio_threads/browser.py +90 -0
  401. osn_selenium/instances/trio_threads/browsing_context.py +216 -0
  402. osn_selenium/instances/trio_threads/dialog.py +99 -0
  403. osn_selenium/instances/trio_threads/fedcm.py +110 -0
  404. osn_selenium/instances/trio_threads/mobile.py +93 -0
  405. osn_selenium/instances/trio_threads/network.py +108 -0
  406. osn_selenium/instances/trio_threads/permissions.py +102 -0
  407. osn_selenium/instances/trio_threads/script.py +95 -0
  408. osn_selenium/instances/trio_threads/shadow_root.py +123 -0
  409. osn_selenium/instances/trio_threads/storage.py +109 -0
  410. osn_selenium/instances/trio_threads/switch_to.py +124 -0
  411. osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
  412. osn_selenium/instances/trio_threads/web_element.py +217 -0
  413. osn_selenium/instances/trio_threads/web_extension.py +99 -0
  414. osn_selenium/instances/unified/__init__.py +1 -0
  415. osn_selenium/instances/unified/action_chains/__init__.py +22 -0
  416. osn_selenium/instances/unified/action_chains/base.py +31 -0
  417. osn_selenium/instances/unified/action_chains/click.py +27 -0
  418. osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
  419. osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
  420. osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
  421. osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
  422. osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
  423. osn_selenium/instances/unified/action_chains/move.py +24 -0
  424. osn_selenium/instances/unified/action_chains/scroll.py +21 -0
  425. osn_selenium/instances/unified/action_chains/utils.py +19 -0
  426. osn_selenium/instances/unified/alert.py +29 -0
  427. osn_selenium/instances/unified/browser.py +33 -0
  428. osn_selenium/instances/unified/browsing_context.py +151 -0
  429. osn_selenium/instances/unified/dialog.py +42 -0
  430. osn_selenium/instances/unified/fedcm.py +48 -0
  431. osn_selenium/instances/unified/mobile.py +36 -0
  432. osn_selenium/instances/unified/network.py +50 -0
  433. osn_selenium/instances/unified/permissions.py +43 -0
  434. osn_selenium/instances/unified/script.py +38 -0
  435. osn_selenium/instances/unified/shadow_root.py +46 -0
  436. osn_selenium/instances/unified/storage.py +48 -0
  437. osn_selenium/instances/unified/switch_to.py +49 -0
  438. osn_selenium/instances/unified/web_driver_wait.py +45 -0
  439. osn_selenium/instances/unified/web_element.py +145 -0
  440. osn_selenium/instances/unified/web_extension.py +38 -0
  441. osn_selenium/javascript/__init__.py +1 -0
  442. osn_selenium/javascript/_functions.py +63 -0
  443. osn_selenium/javascript/fingerprint/__init__.py +120 -0
  444. osn_selenium/javascript/fingerprint/_decorators.py +41 -0
  445. osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
  446. osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
  447. osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
  448. osn_selenium/javascript/fingerprint/_functions.py +35 -0
  449. osn_selenium/javascript/fingerprint/_typehints.py +27 -0
  450. osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
  451. osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
  452. osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
  453. osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
  454. osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
  455. osn_selenium/javascript/fingerprint/registry/models.py +41 -0
  456. osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
  457. osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
  458. osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
  459. osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
  460. osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
  461. osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
  462. osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
  463. osn_selenium/javascript/functions.py +44 -0
  464. osn_selenium/javascript/models.py +35 -0
  465. osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
  466. osn_selenium/models.py +139 -0
  467. osn_selenium/webdrivers/_args_helpers.py +181 -0
  468. osn_selenium/webdrivers/_bridges.py +57 -0
  469. osn_selenium/webdrivers/_decorators.py +83 -0
  470. osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
  471. osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
  472. osn_selenium/webdrivers/_executable_tables/models.py +19 -0
  473. osn_selenium/webdrivers/_typehints.py +10 -0
  474. osn_selenium/webdrivers/protocols.py +50 -0
  475. osn_selenium/webdrivers/sync/__init__.py +1 -0
  476. osn_selenium/webdrivers/sync/blink/__init__.py +114 -0
  477. osn_selenium/webdrivers/sync/blink/base.py +128 -0
  478. osn_selenium/webdrivers/sync/blink/casting.py +34 -0
  479. osn_selenium/webdrivers/sync/blink/features.py +28 -0
  480. osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
  481. osn_selenium/webdrivers/sync/blink/logging.py +25 -0
  482. osn_selenium/webdrivers/sync/blink/network.py +28 -0
  483. osn_selenium/webdrivers/sync/blink/settings.py +63 -0
  484. osn_selenium/webdrivers/sync/chrome/__init__.py +67 -0
  485. osn_selenium/webdrivers/sync/chrome/base.py +106 -0
  486. osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
  487. osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
  488. osn_selenium/webdrivers/sync/core/__init__.py +91 -0
  489. osn_selenium/webdrivers/sync/core/actions.py +59 -0
  490. osn_selenium/webdrivers/sync/core/auth.py +77 -0
  491. osn_selenium/webdrivers/sync/core/base.py +167 -0
  492. osn_selenium/webdrivers/sync/core/capture.py +37 -0
  493. osn_selenium/webdrivers/sync/core/comonents.py +57 -0
  494. osn_selenium/webdrivers/sync/core/devtools.py +47 -0
  495. osn_selenium/webdrivers/sync/core/element.py +42 -0
  496. osn_selenium/webdrivers/sync/core/file.py +40 -0
  497. osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
  498. osn_selenium/webdrivers/sync/core/navigation.py +36 -0
  499. osn_selenium/webdrivers/sync/core/script.py +53 -0
  500. osn_selenium/webdrivers/sync/core/settings.py +35 -0
  501. osn_selenium/webdrivers/sync/core/storage.py +48 -0
  502. osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
  503. osn_selenium/webdrivers/sync/core/window.py +99 -0
  504. osn_selenium/webdrivers/sync/edge/__init__.py +67 -0
  505. osn_selenium/webdrivers/sync/edge/base.py +102 -0
  506. osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
  507. osn_selenium/webdrivers/sync/edge/settings.py +58 -0
  508. osn_selenium/webdrivers/sync/yandex/__init__.py +67 -0
  509. osn_selenium/webdrivers/sync/yandex/base.py +99 -0
  510. osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
  511. osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
  512. osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
  513. osn_selenium/webdrivers/trio_threads/blink/__init__.py +124 -0
  514. osn_selenium/webdrivers/trio_threads/blink/base.py +133 -0
  515. osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
  516. osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
  517. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
  518. osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
  519. osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
  520. osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
  521. osn_selenium/webdrivers/trio_threads/chrome/__init__.py +81 -0
  522. osn_selenium/webdrivers/trio_threads/chrome/base.py +107 -0
  523. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
  524. osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
  525. osn_selenium/webdrivers/trio_threads/core/__init__.py +109 -0
  526. osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
  527. osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
  528. osn_selenium/webdrivers/trio_threads/core/base.py +191 -0
  529. osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
  530. osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
  531. osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
  532. osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
  533. osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
  534. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
  535. osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
  536. osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
  537. osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
  538. osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
  539. osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
  540. osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
  541. osn_selenium/webdrivers/trio_threads/edge/__init__.py +81 -0
  542. osn_selenium/webdrivers/trio_threads/edge/base.py +103 -0
  543. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
  544. osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
  545. osn_selenium/webdrivers/trio_threads/yandex/__init__.py +81 -0
  546. osn_selenium/webdrivers/trio_threads/yandex/base.py +100 -0
  547. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
  548. osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
  549. osn_selenium/webdrivers/unified/__init__.py +1 -0
  550. osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
  551. osn_selenium/webdrivers/unified/blink/base.py +131 -0
  552. osn_selenium/webdrivers/unified/blink/casting.py +30 -0
  553. osn_selenium/webdrivers/unified/blink/features.py +22 -0
  554. osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
  555. osn_selenium/webdrivers/unified/blink/logging.py +18 -0
  556. osn_selenium/webdrivers/unified/blink/network.py +22 -0
  557. osn_selenium/webdrivers/unified/blink/settings.py +86 -0
  558. osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
  559. osn_selenium/webdrivers/unified/chrome/base.py +54 -0
  560. osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
  561. osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
  562. osn_selenium/webdrivers/unified/core/__init__.py +1 -0
  563. osn_selenium/webdrivers/unified/core/actions.py +43 -0
  564. osn_selenium/webdrivers/unified/core/auth.py +70 -0
  565. osn_selenium/webdrivers/unified/core/base.py +132 -0
  566. osn_selenium/webdrivers/unified/core/capture.py +32 -0
  567. osn_selenium/webdrivers/unified/core/components.py +32 -0
  568. osn_selenium/webdrivers/unified/core/devtools.py +35 -0
  569. osn_selenium/webdrivers/unified/core/element.py +24 -0
  570. osn_selenium/webdrivers/unified/core/file.py +35 -0
  571. osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
  572. osn_selenium/webdrivers/unified/core/navigation.py +31 -0
  573. osn_selenium/webdrivers/unified/core/script.py +32 -0
  574. osn_selenium/webdrivers/unified/core/settings.py +44 -0
  575. osn_selenium/webdrivers/unified/core/storage.py +37 -0
  576. osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
  577. osn_selenium/webdrivers/unified/core/window.py +135 -0
  578. osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
  579. osn_selenium/webdrivers/unified/edge/base.py +52 -0
  580. osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
  581. osn_selenium/webdrivers/unified/edge/settings.py +48 -0
  582. osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
  583. osn_selenium/webdrivers/unified/yandex/base.py +54 -0
  584. osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
  585. osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
  586. osn_selenium-1.0.0.dist-info/METADATA +239 -0
  587. osn_selenium-1.0.0.dist-info/RECORD +608 -0
  588. {osn_selenium-0.0.0.dist-info → osn_selenium-1.0.0.dist-info}/WHEEL +1 -1
  589. osn_selenium/captcha_workers/__init__.py +0 -26
  590. osn_selenium/dev_tools/_types.py +0 -22
  591. osn_selenium/dev_tools/errors.py +0 -89
  592. osn_selenium/dev_tools/logger.py +0 -558
  593. osn_selenium/dev_tools/manager.py +0 -1551
  594. osn_selenium/dev_tools/utils.py +0 -509
  595. osn_selenium/errors.py +0 -16
  596. osn_selenium/types.py +0 -118
  597. osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
  598. osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
  599. osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
  600. osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
  601. osn_selenium/webdrivers/Blink/protocols.py +0 -330
  602. osn_selenium/webdrivers/Blink/webdriver.py +0 -637
  603. osn_selenium/webdrivers/Chrome/protocols.py +0 -228
  604. osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
  605. osn_selenium/webdrivers/Edge/protocols.py +0 -228
  606. osn_selenium/webdrivers/Edge/webdriver.py +0 -394
  607. osn_selenium/webdrivers/Yandex/protocols.py +0 -211
  608. osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
  609. osn_selenium/webdrivers/_functions.py +0 -504
  610. osn_selenium/webdrivers/types.py +0 -390
  611. osn_selenium-0.0.0.dist-info/METADATA +0 -710
  612. osn_selenium-0.0.0.dist-info/RECORD +0 -57
  613. /osn_selenium/{webdrivers/BaseDriver → abstract}/__init__.py +0 -0
  614. /osn_selenium/{webdrivers/Blink → abstract/executors}/__init__.py +0 -0
  615. /osn_selenium/{webdrivers/Chrome → abstract/instances}/__init__.py +0 -0
  616. /osn_selenium/{webdrivers/Edge → abstract/webdriver}/__init__.py +0 -0
  617. /osn_selenium/{webdrivers/Yandex → dev_tools/logger}/__init__.py +0 -0
  618. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/check_element_in_viewport.js +0 -0
  619. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_document_scroll_size.js +0 -0
  620. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_css.js +0 -0
  621. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_rect_in_viewport.js +0 -0
  622. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
  623. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_position.js +0 -0
  624. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_rect.js +0 -0
  625. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_size.js +0 -0
  626. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/open_new_tab.js +0 -0
  627. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/stop_window_loading.js +0 -0
  628. {osn_selenium-0.0.0.dist-info → osn_selenium-1.0.0.dist-info}/top_level.txt +0 -0
@@ -1,132 +1,44 @@
1
+ from copy import deepcopy
2
+ from osn_selenium.models import DictModel
1
3
  from typing import (
2
4
  Any,
3
- Optional,
4
- TypedDict,
5
- Union
5
+ Dict,
6
+ List,
7
+ Optional
6
8
  )
7
- from osn_selenium.webdrivers.types import (
8
- FlagDefinition,
9
- FlagNotDefined,
10
- FlagType,
11
- _any_webdriver_option_type
9
+ from osn_selenium.flags._functions import argument_to_flag
10
+ from osn_selenium.exceptions.logic import (
11
+ AbstractImplementationError
12
+ )
13
+ from osn_selenium.flags._typehints import (
14
+ ANY_WEBDRIVER_OPTION_TYPEHINT
15
+ )
16
+ from osn_selenium.exceptions.flags import (
17
+ FlagNotDefinedError,
18
+ FlagTypeNotDefinedError
19
+ )
20
+ from osn_selenium.flags.models.values import (
21
+ ArgumentValue,
22
+ AttributeValue,
23
+ ExperimentalOptionValue
12
24
  )
13
- from osn_selenium.webdrivers._functions import (
25
+ from osn_selenium.flags._validators import (
14
26
  bool_adding_validation_function,
15
27
  optional_bool_adding_validation_function
16
28
  )
29
+ from osn_selenium.flags.models.base import (
30
+ BrowserArguments,
31
+ BrowserAttributes,
32
+ BrowserExperimentalOptions,
33
+ BrowserFlags,
34
+ FlagDefinition,
35
+ FlagNotDefined,
36
+ FlagType,
37
+ FlagTypeNotDefined
38
+ )
17
39
 
18
40
 
19
- class ArgumentValue(TypedDict):
20
- """
21
- Typed dictionary representing a single command-line argument and its value.
22
-
23
- Attributes:
24
- command_line (str): The command-line string for the argument.
25
- value (Any): The value associated with the argument.
26
- """
27
-
28
- command_line: str
29
- value: Any
30
-
31
-
32
- def _argument_to_flag(argument: ArgumentValue) -> str:
33
- """
34
- Formats a command-line argument from an ArgumentValue dictionary.
35
-
36
- If the command string contains '{value}', it will be replaced by the argument's value.
37
- Otherwise, the command string is returned as is.
38
-
39
- Args:
40
- argument (ArgumentValue): A dictionary containing the command-line string and its value.
41
-
42
- Returns:
43
- str: The formatted command-line argument string.
44
- """
45
-
46
- argument_command = argument["command_line"]
47
- argument_value = argument["value"]
48
-
49
- if "{value}" in argument_command:
50
- return argument_command.format(value=argument_value)
51
- else:
52
- return argument_command
53
-
54
-
55
- class ExperimentalOptionValue(TypedDict):
56
- """
57
- Typed dictionary representing a single experimental option and its value.
58
-
59
- Attributes:
60
- option_name (str): The name of the experimental option.
61
- value (Any): The value of the experimental option.
62
- """
63
-
64
- option_name: str
65
- value: Any
66
-
67
-
68
- class AttributeValue(TypedDict):
69
- """
70
- Typed dictionary representing a single WebDriver attribute and its value.
71
-
72
- Attributes:
73
- attribute_name (str): The name of the attribute.
74
- value (Any): The value of the attribute.
75
- """
76
-
77
- attribute_name: str
78
- value: Any
79
-
80
-
81
- class FlagTypeNotDefined:
82
- """A sentinel class to indicate that a flag type definition was not found."""
83
-
84
- pass
85
-
86
-
87
- class BrowserExperimentalOptions(TypedDict, total=False):
88
- """
89
- Typed dictionary for browser-agnostic experimental options.
90
- """
91
-
92
- pass
93
-
94
-
95
- class BrowserAttributes(TypedDict, total=False):
96
- """
97
- Typed dictionary for browser-agnostic WebDriver attributes.
98
-
99
- Attributes:
100
- enable_bidi (Optional[bool]): Enables/disables BiDi (Bidirectional) protocol mapper.
101
- """
102
-
103
- enable_bidi: Optional[bool]
104
-
105
-
106
- class BrowserArguments(TypedDict, total=False):
107
- """
108
- Typed dictionary for browser-agnostic command-line arguments.
109
-
110
- Attributes:
111
- se_downloads_enabled (bool): Enables/disables Selenium downloads.
112
- """
113
-
114
- se_downloads_enabled: bool
115
-
116
-
117
- class BrowserFlags(TypedDict, total=False):
118
- """
119
- Typed dictionary representing a collection of all flag types.
120
-
121
- Attributes:
122
- argument (BrowserArguments): Command-line arguments for the browser.
123
- experimental_option (BrowserExperimentalOptions): Experimental options for WebDriver.
124
- attribute (BrowserAttributes): WebDriver attributes.
125
- """
126
-
127
- argument: BrowserArguments
128
- experimental_option: BrowserExperimentalOptions
129
- attribute: BrowserAttributes
41
+ __all__ = ["BrowserFlagsManager"]
130
42
 
131
43
 
132
44
  class BrowserFlagsManager:
@@ -137,25 +49,25 @@ class BrowserFlagsManager:
137
49
  for various Selenium WebDriver instances.
138
50
 
139
51
  Attributes:
140
- _flags_types (dict[str, FlagType]): A dictionary mapping flag types to their handler functions.
141
- _flags_definitions (dict[str, FlagDefinition]): A dictionary of all available flag definitions.
142
- _flags_definitions_by_types (dict[str, dict[str, FlagDefinition]]): Flags definitions grouped by type.
143
- _arguments (dict[str, ArgumentValue]): Stores the configured command-line arguments.
144
- _experimental_options (dict[str, ExperimentalOptionValue]): Stores the configured experimental options.
145
- _attributes (dict[str, AttributeValue]): Stores the configured WebDriver attributes.
52
+ _flags_types (Dict[str, FlagType]): A dictionary mapping flag types to their handler functions.
53
+ _flags_definitions (Dict[str, FlagDefinition]): A dictionary of all available flag definitions.
54
+ _flags_definitions_by_types (Dict[str, Dict[str, FlagDefinition]]): Flags definitions grouped by type.
55
+ _arguments (Dict[str, ArgumentValue]): Stores the configured command-line arguments.
56
+ _experimental_options (Dict[str, ExperimentalOptionValue]): Stores the configured experimental options.
57
+ _attributes (Dict[str, AttributeValue]): Stores the configured WebDriver attributes.
146
58
  """
147
59
 
148
60
  def __init__(
149
61
  self,
150
- flags_types: Optional[dict[str, FlagType]] = None,
151
- flags_definitions: Optional[dict[str, FlagDefinition]] = None
62
+ flags_types: Optional[Dict[str, FlagType]] = None,
63
+ flags_definitions: Optional[Dict[str, FlagDefinition]] = None
152
64
  ):
153
65
  """
154
66
  Initializes the BrowserFlagsManager.
155
67
 
156
68
  Args:
157
- flags_types (Optional[dict[str, FlagType]]): Custom flag types and their corresponding functions.
158
- flags_definitions (Optional[dict[str, FlagDefinition]]): Custom flag definitions to add or override.
69
+ flags_types (Optional[Dict[str, FlagType]]): Custom flag types and their corresponding functions.
70
+ flags_definitions (Optional[Dict[str, FlagDefinition]]): Custom flag definitions to add or override.
159
71
  """
160
72
 
161
73
  inner_flags_types = {
@@ -165,8 +77,8 @@ class BrowserFlagsManager:
165
77
  set_flags_function=self.set_arguments,
166
78
  update_flags_function=self.update_arguments,
167
79
  clear_flags_function=self.clear_arguments,
168
- build_options_function=self.build_options_arguments,
169
- build_start_args_function=self.build_start_args_arguments
80
+ build_options_function=self._build_options_arguments,
81
+ build_start_args_function=self._build_start_args_arguments
170
82
  ),
171
83
  "experimental_option": FlagType(
172
84
  set_flag_function=self.set_experimental_option,
@@ -174,8 +86,8 @@ class BrowserFlagsManager:
174
86
  set_flags_function=self.set_experimental_options,
175
87
  update_flags_function=self.update_experimental_options,
176
88
  clear_flags_function=self.clear_experimental_options,
177
- build_options_function=self.build_options_experimental_options,
178
- build_start_args_function=lambda: []
89
+ build_options_function=self._build_options_experimental_options,
90
+ build_start_args_function=lambda: [],
179
91
  ),
180
92
  "attribute": FlagType(
181
93
  set_flag_function=self.set_attribute,
@@ -183,8 +95,8 @@ class BrowserFlagsManager:
183
95
  set_flags_function=self.set_attributes,
184
96
  update_flags_function=self.update_attributes,
185
97
  clear_flags_function=self.clear_attributes,
186
- build_options_function=self.build_options_attributes,
187
- build_start_args_function=lambda: []
98
+ build_options_function=self._build_options_attributes,
99
+ build_start_args_function=lambda: [],
188
100
  ),
189
101
  }
190
102
 
@@ -214,33 +126,33 @@ class BrowserFlagsManager:
214
126
  self._flags_types = inner_flags_types
215
127
  self._flags_definitions = inner_flags_definitions
216
128
 
217
- self._flags_definitions_by_types: dict[str, dict[str, FlagDefinition]] = {
129
+ self._flags_definitions_by_types: Dict[str, Dict[str, FlagDefinition]] = {
218
130
  option_type: dict(
219
- filter(lambda di: di[1]["type"] == option_type, self._flags_definitions.items())
131
+ filter(lambda di: di[1].type == option_type, self._flags_definitions.items())
220
132
  )
221
133
  for option_type in self._flags_types.keys()
222
134
  }
223
135
 
224
- self._arguments: dict[str, ArgumentValue] = {}
225
- self._experimental_options: dict[str, ExperimentalOptionValue] = {}
226
- self._attributes: dict[str, AttributeValue] = {}
136
+ self._arguments: Dict[str, ArgumentValue] = {}
137
+ self._experimental_options: Dict[str, ExperimentalOptionValue] = {}
138
+ self._attributes: Dict[str, AttributeValue] = {}
227
139
 
228
- def build_options_attributes(self, options: _any_webdriver_option_type) -> _any_webdriver_option_type:
140
+ def _build_options_attributes(self, options: ANY_WEBDRIVER_OPTION_TYPEHINT) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
229
141
  """
230
142
  Applies configured attributes to the WebDriver options object.
231
143
 
232
144
  Only attributes with `mode` set to 'webdriver_option' or 'both' are applied.
233
145
 
234
146
  Args:
235
- options (_any_webdriver_option_type): The WebDriver options object to modify.
147
+ options (any_webdriver_option_type): The WebDriver options object to modify.
236
148
 
237
149
  Returns:
238
- _any_webdriver_option_type: The modified WebDriver options object.
150
+ any_webdriver_option_type: The modified WebDriver options object.
239
151
  """
240
152
 
241
153
  for name, value in self._attributes.items():
242
- if self._flags_definitions_by_types["attribute"][name]["mode"] in ["webdriver_option", "both"]:
243
- setattr(options, value["attribute_name"], value["value"])
154
+ if self._flags_definitions_by_types["attribute"][name].mode in ["webdriver_option", "both"]:
155
+ setattr(options, value.attribute_name, value.value)
244
156
 
245
157
  return options
246
158
 
@@ -262,73 +174,70 @@ class BrowserFlagsManager:
262
174
 
263
175
  self._attributes.pop(attribute_name, None)
264
176
 
265
- def set_attribute(self, attribute: FlagDefinition, value: Any):
177
+ def set_attribute(self, attribute: FlagDefinition, value: DictModel):
266
178
  """
267
179
  Sets a browser attribute. If the attribute already exists, it is overwritten.
268
180
 
269
181
  Args:
270
182
  attribute (FlagDefinition): The definition of the attribute to set.
271
- value (Any): The value to assign to the attribute.
183
+ value (DictModel): The value to assign to the attribute.
272
184
  """
273
185
 
274
- attribute_name = attribute["name"]
275
- attribute_command = attribute["command"]
276
- adding_validation_function = attribute["adding_validation_function"]
186
+ attribute_name = attribute.name
187
+ attribute_command = attribute.command
188
+ adding_validation_function = attribute.adding_validation_function
277
189
 
278
190
  self.remove_attribute(attribute_name)
279
191
 
280
192
  if adding_validation_function(value):
281
193
  self._attributes[attribute_name] = AttributeValue(attribute_name=attribute_command, value=value)
282
194
 
283
- def update_attributes(self, attributes: Union[BrowserAttributes, dict[str, Any]]):
195
+ def update_attributes(self, attributes: BrowserAttributes):
284
196
  """
285
197
  Updates browser attributes from a dictionary without clearing existing ones.
286
198
 
287
199
  Args:
288
- attributes (Union[BrowserAttributes, dict[str, Any]]): A dictionary of attributes to set or update.
200
+ attributes (BrowserAttributes): A dictionary of attributes to set or update.
289
201
 
290
202
  Raises:
291
- ValueError: If an unknown attribute key is provided.
203
+ FlagNotDefinedError: If an unknown attribute key is provided.
292
204
  """
293
205
 
294
- for key, value in attributes.items():
206
+ for key, value in attributes.model_dump(exclude_none=True).items():
295
207
  flag_definition = self._flags_definitions_by_types["attribute"].get(key, FlagNotDefined())
296
208
 
297
209
  if isinstance(flag_definition, FlagNotDefined):
298
- raise ValueError(f"Unknown attribute: {key}.")
210
+ raise FlagNotDefinedError(flag_name=key, flag_type="attributes")
299
211
 
300
- self.set_attribute(flag_definition, value)
212
+ self.set_attribute(flag_definition, getattr(attributes, key))
301
213
 
302
- def set_attributes(self, attributes: Union[BrowserAttributes, dict[str, Any]]):
214
+ def set_attributes(self, attributes: BrowserAttributes):
303
215
  """
304
216
  Clears existing and sets new browser attributes from a dictionary.
305
217
 
306
218
  Args:
307
- attributes (Union[BrowserAttributes, dict[str, Any]]): A dictionary of attributes to set.
308
-
309
- Raises:
310
- ValueError: If an unknown attribute key is provided.
219
+ attributes (BrowserAttributes): A dictionary of attributes to set.
311
220
  """
312
221
 
313
222
  self.clear_attributes()
314
223
  self.update_attributes(attributes)
315
224
 
316
- def build_options_experimental_options(self, options: _any_webdriver_option_type) -> _any_webdriver_option_type:
225
+ def _build_options_experimental_options(self, options: ANY_WEBDRIVER_OPTION_TYPEHINT) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
317
226
  """
318
227
  Adds configured experimental options to the WebDriver options object.
319
228
 
320
229
  Only options with `mode` set to 'webdriver_option' or 'both' are added.
321
230
 
322
231
  Args:
323
- options (_any_webdriver_option_type): The WebDriver options object to modify.
232
+ options (any_webdriver_option_type): The WebDriver options object to modify.
324
233
 
325
234
  Returns:
326
- _any_webdriver_option_type: The modified WebDriver options object.
235
+ any_webdriver_option_type: The modified WebDriver options object.
327
236
  """
328
237
 
329
238
  for name, value in self._experimental_options.items():
330
- if self._flags_definitions_by_types["experimental_option"][name]["mode"] in ["webdriver_option", "both"]:
331
- options.add_experimental_option(value["option_name"], value["value"])
239
+ if self._flags_definitions_by_types["experimental_option"][name].mode in ["webdriver_option", "both"]:
240
+ options.add_experimental_option(value.option_name, value.value)
332
241
 
333
242
  return options
334
243
 
@@ -351,95 +260,86 @@ class BrowserFlagsManager:
351
260
 
352
261
  self._experimental_options.pop(experimental_option_name, None)
353
262
 
354
- def set_experimental_option(self, experimental_option: FlagDefinition, value: Any):
263
+ def set_experimental_option(self, experimental_option: FlagDefinition, value: DictModel):
355
264
  """
356
265
  Sets an experimental browser option. If the option already exists, it is overwritten.
357
266
 
358
267
  Args:
359
268
  experimental_option (FlagDefinition): The definition of the experimental option to set.
360
- value (Any): The value to assign to the option.
269
+ value (DictModel): The value to assign to the option.
361
270
  """
362
271
 
363
- experimental_option_name = experimental_option["name"]
364
- experimental_option_command = experimental_option["command"]
365
- adding_validation_function = experimental_option["adding_validation_function"]
272
+ experimental_option_name = experimental_option.name
273
+ experimental_option_command = experimental_option.command
274
+ adding_validation_function = experimental_option.adding_validation_function
366
275
 
367
276
  self.remove_experimental_option(experimental_option_name)
368
277
 
369
278
  if adding_validation_function(value):
370
279
  self._experimental_options[experimental_option_name] = ExperimentalOptionValue(option_name=experimental_option_command, value=value)
371
280
 
372
- def update_experimental_options(
373
- self,
374
- experimental_options: Union[BrowserExperimentalOptions, dict[str, Any]]
375
- ):
281
+ def update_experimental_options(self, experimental_options: BrowserExperimentalOptions):
376
282
  """
377
283
  Updates experimental options from a dictionary without clearing existing ones.
378
284
 
379
285
  Args:
380
- experimental_options (Union[BrowserExperimentalOptions, dict[str, Any]]): A dictionary of experimental options to set or update.
286
+ experimental_options (BrowserExperimentalOptions): A dictionary of experimental options to set or update.
381
287
 
382
288
  Raises:
383
- ValueError: If an unknown experimental option key is provided.
289
+ FlagNotDefinedError: If an unknown experimental option key is provided.
384
290
  """
385
291
 
386
- for key, value in experimental_options.items():
292
+ for key, value in experimental_options.model_dump(exclude_none=True).items():
387
293
  flag_definition = self._flags_definitions_by_types["experimental_option"].get(key, FlagNotDefined())
388
294
 
389
295
  if isinstance(flag_definition, FlagNotDefined):
390
- raise ValueError(f"Unknown experimental option: {key}.")
296
+ raise FlagNotDefinedError(flag_name=key, flag_type="experimental options")
391
297
 
392
- self.set_experimental_option(flag_definition, value)
298
+ self.set_experimental_option(flag_definition, getattr(experimental_options, key))
393
299
 
394
- def set_experimental_options(
395
- self,
396
- experimental_options: Union[BrowserExperimentalOptions, dict[str, Any]]
397
- ):
300
+ def set_experimental_options(self, experimental_options: BrowserExperimentalOptions):
398
301
  """
399
302
  Clears existing and sets new experimental options from a dictionary.
400
303
 
401
304
  Args:
402
- experimental_options (Union[BrowserExperimentalOptions, dict[str, Any]]): A dictionary of experimental options to set.
403
-
404
- Raises:
405
- ValueError: If an unknown experimental option key is provided.
305
+ experimental_options (BrowserExperimentalOptions): A dictionary of experimental options to set.
406
306
  """
407
307
 
408
308
  self.clear_experimental_options()
409
309
  self.update_experimental_options(experimental_options)
410
310
 
411
- def build_start_args_arguments(self) -> list[str]:
311
+ def _build_start_args_arguments(self) -> List[str]:
412
312
  """
413
- Builds a list of command-line arguments intended for browser startup.
313
+ Builds a List of command-line arguments intended for browser startup.
414
314
 
415
315
  Only arguments with `mode` set to 'startup_argument' or 'both' are included.
416
316
 
417
317
  Returns:
418
- list[str]: A list of formatted command-line argument strings.
318
+ List[str]: A List of formatted command-line argument strings.
419
319
  """
420
320
 
421
321
  return [
422
- _argument_to_flag(value)
322
+ argument_to_flag(value)
423
323
  for name, value in self._arguments.items()
424
- if self._flags_definitions_by_types["argument"][name]["mode"] in ["startup_argument", "both"]
324
+ if self._flags_definitions_by_types["argument"][name].mode in ["startup_argument", "both"]
425
325
  ]
426
326
 
427
- def build_options_arguments(self, options: _any_webdriver_option_type) -> _any_webdriver_option_type:
327
+ def _build_options_arguments(self, options: ANY_WEBDRIVER_OPTION_TYPEHINT) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
428
328
  """
429
329
  Adds configured command-line arguments to the WebDriver options object.
430
330
 
431
331
  Only arguments with `mode` set to 'webdriver_option' or 'both' are added.
432
332
 
433
333
  Args:
434
- options (_any_webdriver_option_type): The WebDriver options object to modify.
334
+ options (any_webdriver_option_type): The WebDriver options object to modify.
435
335
 
436
336
  Returns:
437
- _any_webdriver_option_type: The modified WebDriver options object.
337
+ any_webdriver_option_type: The modified WebDriver options object.
438
338
  """
439
339
 
440
340
  for name, value in self._arguments.items():
441
- if self._flags_definitions_by_types["argument"][name]["mode"] in ["webdriver_option", "both"]:
442
- options.add_argument(_argument_to_flag(value))
341
+ if self._flags_definitions_by_types["argument"][name].mode in ["webdriver_option", "both"]:
342
+ options.add_argument(argument_to_flag(value))
443
343
 
444
344
  return options
445
345
 
@@ -470,55 +370,76 @@ class BrowserFlagsManager:
470
370
  value (Any): The value for the argument. This may be a boolean for a simple flag or a string/number for a valued flag.
471
371
  """
472
372
 
473
- argument_name = argument["name"]
474
- argument_command = argument["command"]
475
- adding_validation_function = argument["adding_validation_function"]
373
+ argument_name = argument.name
374
+ argument_command = argument.command
375
+ adding_validation_function = argument.adding_validation_function
476
376
 
477
377
  self.remove_argument(argument_name)
478
378
 
479
379
  if adding_validation_function(value):
480
380
  self._arguments[argument_name] = ArgumentValue(command_line=argument_command, value=value)
481
381
 
482
- def update_arguments(self, arguments: Union[BrowserArguments, dict[str, Any]]):
382
+ def update_arguments(self, arguments: BrowserArguments):
483
383
  """
484
384
  Updates command-line arguments from a dictionary without clearing existing ones.
485
385
 
486
386
  Args:
487
- arguments (Union[BrowserArguments, dict[str, Any]]): A dictionary of arguments to set or update.
387
+ arguments (BrowserArguments): A dictionary of arguments to set or update.
488
388
 
489
389
  Raises:
490
- ValueError: If an unknown argument key is provided.
390
+ FlagNotDefinedError: If an unknown argument key is provided.
491
391
  """
492
392
 
493
- for key, value in arguments.items():
393
+ for key, value in arguments.model_dump(exclude_none=True).items():
494
394
  flag_definition = self._flags_definitions_by_types["argument"].get(key, FlagNotDefined())
495
395
 
496
396
  if isinstance(flag_definition, FlagNotDefined):
497
- raise ValueError(f"Unknown argument: {key}.")
397
+ raise FlagNotDefinedError(flag_name=key, flag_type="arguments")
498
398
 
499
- self.set_argument(flag_definition, value)
399
+ self.set_argument(flag_definition, getattr(arguments, key))
500
400
 
501
- def set_arguments(self, arguments: Union[BrowserArguments, dict[str, Any]]):
401
+ def set_arguments(self, arguments: BrowserArguments):
502
402
  """
503
403
  Clears existing and sets new command-line arguments from a dictionary.
504
404
 
505
405
  Args:
506
- arguments (Union[BrowserArguments, dict[str, Any]]): A dictionary of arguments to set.
507
-
508
- Raises:
509
- ValueError: If an unknown argument key is provided.
406
+ arguments (BrowserArguments): A dictionary of arguments to set.
510
407
  """
511
408
 
512
409
  self.clear_arguments()
513
410
  self.update_arguments(arguments)
514
411
 
412
+ @property
413
+ def arguments(self) -> Dict[str, ArgumentValue]:
414
+ return deepcopy(self._arguments)
415
+
416
+ @property
417
+ def attributes(self) -> Dict[str, AttributeValue]:
418
+ return deepcopy(self._attributes)
419
+
515
420
  def clear_flags(self):
516
421
  """Clears all configured flags of all types (arguments, options, attributes)."""
517
422
 
518
423
  for type_name, type_functions in self._flags_types.items():
519
- type_functions["clear_flags_function"]()
424
+ type_functions.clear_flags_function()
425
+
426
+ @property
427
+ def experimental_options(self) -> Dict[str, ExperimentalOptionValue]:
428
+ return deepcopy(self._experimental_options)
520
429
 
521
- def _renew_webdriver_options(self) -> _any_webdriver_option_type:
430
+ @property
431
+ def flags_definitions(self) -> Dict[str, FlagDefinition]:
432
+ return deepcopy(self._flags_definitions)
433
+
434
+ @property
435
+ def flags_definitions_by_types(self) -> Dict[str, Dict[str, FlagDefinition]]:
436
+ return deepcopy(self._flags_definitions_by_types)
437
+
438
+ @property
439
+ def flags_types(self) -> Dict[str, FlagType]:
440
+ return deepcopy(self._flags_types)
441
+
442
+ def _renew_webdriver_options(self) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
522
443
  """
523
444
  Abstract method to renew WebDriver options. Must be implemented in child classes.
524
445
 
@@ -526,27 +447,30 @@ class BrowserFlagsManager:
526
447
  browser-specific WebDriver options instances (e.g., ChromeOptions, FirefoxOptions).
527
448
 
528
449
  Returns:
529
- _any_webdriver_option_type: A new instance of WebDriver options (e.g., ChromeOptions, FirefoxOptions).
450
+ any_webdriver_option_type: A new instance of WebDriver options (e.g., ChromeOptions, FirefoxOptions).
530
451
 
531
452
  Raises:
532
- NotImplementedError: If the method is not implemented in a subclass.
453
+ AbstractImplementationError: If the method is not implemented in a subclass.
533
454
  """
534
455
 
535
- raise NotImplementedError("This function must be implemented in child classes.")
456
+ raise AbstractImplementationError(
457
+ method_name="_renew_webdriver_options",
458
+ class_name=self.__class__.__name__
459
+ )
536
460
 
537
461
  @property
538
- def options(self) -> _any_webdriver_option_type:
462
+ def options(self) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
539
463
  """
540
464
  Builds and returns a WebDriver options object with all configured flags applied.
541
465
 
542
466
  Returns:
543
- _any_webdriver_option_type: A configured WebDriver options object.
467
+ any_webdriver_option_type: A configured WebDriver options object.
544
468
  """
545
469
 
546
470
  options = self._renew_webdriver_options()
547
471
 
548
472
  for type_name, type_functions in self._flags_types.items():
549
- options = type_functions["build_options_function"](options)
473
+ options = type_functions.build_options_function(options)
550
474
 
551
475
  return options
552
476
 
@@ -562,16 +486,16 @@ class BrowserFlagsManager:
562
486
  option (WebdriverOption): The configuration object defining the option to be removed.
563
487
 
564
488
  Raises:
565
- ValueError: If the option type is not recognized.
489
+ FlagTypeNotDefinedError: If the option type is not recognized.
566
490
  """
567
491
 
568
492
  for type_name, type_functions in self._flags_types.items():
569
- if option["type"] == type_name:
570
- type_functions["remove_flag_function"](option["name"])
493
+ if option.type == type_name:
494
+ type_functions.remove_flag_function(option.name)
571
495
 
572
- raise ValueError(f"Unknown option type ({option}).")
496
+ raise FlagTypeNotDefinedError(flag_type=option.type)
573
497
 
574
- def set_flags(self, flags: Union[BrowserFlags, dict[str, dict[str, Any]]]):
498
+ def set_flags(self, flags: BrowserFlags):
575
499
  """
576
500
  Clears all existing flags and sets new ones from a comprehensive dictionary.
577
501
 
@@ -580,20 +504,20 @@ class BrowserFlagsManager:
580
504
  previously configured flags for that type.
581
505
 
582
506
  Args:
583
- flags (Union[BrowserFlags, dict[str, dict[str, Any]]]): A dictionary where keys are flag types
507
+ flags (BrowserFlags): A dictionary where keys are flag types
584
508
  and values are dictionaries of flags to set for that type.
585
509
 
586
510
  Raises:
587
- ValueError: If an unknown flag type is provided in the `flags` dictionary.
511
+ FlagTypeNotDefinedError: If an unknown flag type is provided in the `flags` dictionary.
588
512
  """
589
513
 
590
- for type_name, type_flags in flags.items():
514
+ for type_name, type_flags in flags.model_dump(exclude_none=True).items():
591
515
  flags_type_definition = self._flags_types.get(type_name, FlagTypeNotDefined())
592
516
 
593
517
  if isinstance(flags_type_definition, FlagTypeNotDefined):
594
- raise ValueError(f"Unknown flag type: {type_name}.")
518
+ raise FlagTypeNotDefinedError(flag_type=type_name)
595
519
 
596
- flags_type_definition["set_flags_function"](type_flags)
520
+ flags_type_definition.set_flags_function(getattr(flags, type_name))
597
521
 
598
522
  def set_option(self, option: FlagDefinition, value: Any):
599
523
  """
@@ -608,18 +532,16 @@ class BrowserFlagsManager:
608
532
  value (Any): The value to be set for the option. The type and acceptable values depend on the specific browser option being configured.
609
533
 
610
534
  Raises:
611
- ValueError: If the option type is not recognized.
535
+ FlagTypeNotDefinedError: If the option type is not recognized.
612
536
  """
613
537
 
614
538
  for type_name, type_functions in self._flags_types.items():
615
- if option["type"] == type_name:
616
- type_functions["set_flag_function"](option, value)
539
+ if option.type == type_name:
540
+ type_functions.set_flag_function(option, value)
617
541
 
618
- raise ValueError(
619
- f"Unknown option type ({option}). Acceptable types are: {', '.join(self._flags_types.keys())}."
620
- )
542
+ raise FlagTypeNotDefinedError(flag_type=option.type)
621
543
 
622
- def update_flags(self, flags: Union[BrowserFlags, dict[str, dict[str, Any]]]):
544
+ def update_flags(self, flags: BrowserFlags):
623
545
  """
624
546
  Updates all flags from a comprehensive dictionary without clearing existing ones.
625
547
 
@@ -628,17 +550,17 @@ class BrowserFlagsManager:
628
550
  flags without affecting other existing flags.
629
551
 
630
552
  Args:
631
- flags (Union[BrowserFlags, dict[str, dict[str, Any]]]): A dictionary where keys are flag types
553
+ flags (BrowserFlags): A dictionary where keys are flag types
632
554
  and values are dictionaries of flags to update for that type.
633
555
 
634
556
  Raises:
635
- ValueError: If an unknown flag type is provided in the `flags` dictionary.
557
+ FlagTypeNotDefinedError: If an unknown flag type is provided in the `flags` dictionary.
636
558
  """
637
559
 
638
- for type_name, type_flags in flags.items():
560
+ for type_name, type_flags in flags.model_dump(exclude_none=True).items():
639
561
  flags_type_definition = self._flags_types.get(type_name, FlagTypeNotDefined())
640
562
 
641
563
  if isinstance(flags_type_definition, FlagTypeNotDefined):
642
- raise ValueError(f"Unknown flag type: {type_name}.")
564
+ raise FlagTypeNotDefinedError(flag_type=type_name)
643
565
 
644
- flags_type_definition["update_flags_function"](type_flags)
566
+ flags_type_definition.update_flags_function(getattr(flags, type_name))