@browserbasehq/orca 3.4.0-preview-4 → 3.4.0-preview-5

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 (765) hide show
  1. package/dist/cjs/lib/v3/agent/AgentProvider.d.ts +1 -1
  2. package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
  3. package/dist/cjs/lib/v3/launch/local.d.ts +2 -7
  4. package/dist/cjs/lib/v3/launch/local.js +47 -7
  5. package/dist/cjs/lib/v3/launch/local.js.map +1 -1
  6. package/dist/cjs/lib/v3/llm/aisdk.js +5 -0
  7. package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
  8. package/dist/cjs/lib/v3/types/public/agent.d.ts +1 -1
  9. package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
  10. package/dist/cjs/lib/v3/types/public/api.d.ts +283 -0
  11. package/dist/cjs/lib/v3/types/public/api.js +50 -3
  12. package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
  13. package/dist/cjs/lib/v3/types/public/model.d.ts +11 -7
  14. package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
  15. package/dist/cjs/lib/v3/v3.js +2 -47
  16. package/dist/cjs/lib/v3/v3.js.map +1 -1
  17. package/dist/esm/lib/v3/agent/AgentProvider.d.ts +1 -1
  18. package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
  19. package/dist/esm/lib/v3/launch/local.d.ts +2 -7
  20. package/dist/esm/lib/v3/launch/local.js +48 -8
  21. package/dist/esm/lib/v3/launch/local.js.map +1 -1
  22. package/dist/esm/lib/v3/llm/aisdk.js +5 -0
  23. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
  24. package/dist/esm/lib/v3/types/public/agent.d.ts +1 -1
  25. package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
  26. package/dist/esm/lib/v3/types/public/api.d.ts +283 -0
  27. package/dist/esm/lib/v3/types/public/api.js +48 -1
  28. package/dist/esm/lib/v3/types/public/api.js.map +1 -1
  29. package/dist/esm/lib/v3/types/public/model.d.ts +11 -7
  30. package/dist/esm/lib/v3/types/public/model.js.map +1 -1
  31. package/dist/esm/lib/v3/v3.js +2 -47
  32. package/dist/esm/lib/v3/v3.js.map +1 -1
  33. package/package.json +4 -5
  34. package/dist/cjs/tests/cache-variables.test.d.ts +0 -1
  35. package/dist/cjs/tests/cache-variables.test.js +0 -221
  36. package/dist/cjs/tests/cache-variables.test.js.map +0 -1
  37. package/dist/cjs/tests/integration/agent-abort-signal.spec.d.ts +0 -1
  38. package/dist/cjs/tests/integration/agent-abort-signal.spec.js +0 -123
  39. package/dist/cjs/tests/integration/agent-abort-signal.spec.js.map +0 -1
  40. package/dist/cjs/tests/integration/agent-cache-self-heal.spec.d.ts +0 -1
  41. package/dist/cjs/tests/integration/agent-cache-self-heal.spec.js +0 -83
  42. package/dist/cjs/tests/integration/agent-cache-self-heal.spec.js.map +0 -1
  43. package/dist/cjs/tests/integration/agent-callbacks.spec.d.ts +0 -1
  44. package/dist/cjs/tests/integration/agent-callbacks.spec.js +0 -385
  45. package/dist/cjs/tests/integration/agent-callbacks.spec.js.map +0 -1
  46. package/dist/cjs/tests/integration/agent-experimental-validation.spec.d.ts +0 -1
  47. package/dist/cjs/tests/integration/agent-experimental-validation.spec.js +0 -362
  48. package/dist/cjs/tests/integration/agent-experimental-validation.spec.js.map +0 -1
  49. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.d.ts +0 -1
  50. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js +0 -262
  51. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js.map +0 -1
  52. package/dist/cjs/tests/integration/agent-message-continuation.spec.d.ts +0 -1
  53. package/dist/cjs/tests/integration/agent-message-continuation.spec.js +0 -112
  54. package/dist/cjs/tests/integration/agent-message-continuation.spec.js.map +0 -1
  55. package/dist/cjs/tests/integration/agent-streaming.spec.d.ts +0 -1
  56. package/dist/cjs/tests/integration/agent-streaming.spec.js +0 -140
  57. package/dist/cjs/tests/integration/agent-streaming.spec.js.map +0 -1
  58. package/dist/cjs/tests/integration/cdp-close-api-region.spec.d.ts +0 -1
  59. package/dist/cjs/tests/integration/cdp-close-api-region.spec.js +0 -41
  60. package/dist/cjs/tests/integration/cdp-close-api-region.spec.js.map +0 -1
  61. package/dist/cjs/tests/integration/cdp-connection-close.spec.d.ts +0 -1
  62. package/dist/cjs/tests/integration/cdp-connection-close.spec.js +0 -76
  63. package/dist/cjs/tests/integration/cdp-connection-close.spec.js.map +0 -1
  64. package/dist/cjs/tests/integration/cdp-session-detached.spec.d.ts +0 -1
  65. package/dist/cjs/tests/integration/cdp-session-detached.spec.js +0 -45
  66. package/dist/cjs/tests/integration/cdp-session-detached.spec.js.map +0 -1
  67. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.d.ts +0 -1
  68. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js +0 -56
  69. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js.map +0 -1
  70. package/dist/cjs/tests/integration/click-count.spec.d.ts +0 -1
  71. package/dist/cjs/tests/integration/click-count.spec.js +0 -163
  72. package/dist/cjs/tests/integration/click-count.spec.js.map +0 -1
  73. package/dist/cjs/tests/integration/connect-to-existing-browser.spec.d.ts +0 -1
  74. package/dist/cjs/tests/integration/connect-to-existing-browser.spec.js +0 -99
  75. package/dist/cjs/tests/integration/connect-to-existing-browser.spec.js.map +0 -1
  76. package/dist/cjs/tests/integration/context-addInitScript.spec.d.ts +0 -1
  77. package/dist/cjs/tests/integration/context-addInitScript.spec.js +0 -285
  78. package/dist/cjs/tests/integration/context-addInitScript.spec.js.map +0 -1
  79. package/dist/cjs/tests/integration/context-extra-http-headers.spec.d.ts +0 -1
  80. package/dist/cjs/tests/integration/context-extra-http-headers.spec.js +0 -49
  81. package/dist/cjs/tests/integration/context-extra-http-headers.spec.js.map +0 -1
  82. package/dist/cjs/tests/integration/cookies.spec.d.ts +0 -1
  83. package/dist/cjs/tests/integration/cookies.spec.js +0 -187
  84. package/dist/cjs/tests/integration/cookies.spec.js.map +0 -1
  85. package/dist/cjs/tests/integration/default-page-tracking.spec.d.ts +0 -1
  86. package/dist/cjs/tests/integration/default-page-tracking.spec.js +0 -52
  87. package/dist/cjs/tests/integration/default-page-tracking.spec.js.map +0 -1
  88. package/dist/cjs/tests/integration/downloads.spec.d.ts +0 -1
  89. package/dist/cjs/tests/integration/downloads.spec.js +0 -52
  90. package/dist/cjs/tests/integration/downloads.spec.js.map +0 -1
  91. package/dist/cjs/tests/integration/flowLogger.spec.d.ts +0 -1
  92. package/dist/cjs/tests/integration/flowLogger.spec.js +0 -718
  93. package/dist/cjs/tests/integration/flowLogger.spec.js.map +0 -1
  94. package/dist/cjs/tests/integration/frame-get-location-and-click.spec.d.ts +0 -1
  95. package/dist/cjs/tests/integration/frame-get-location-and-click.spec.js +0 -57
  96. package/dist/cjs/tests/integration/frame-get-location-and-click.spec.js.map +0 -1
  97. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +0 -1
  98. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js +0 -219
  99. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +0 -1
  100. package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.d.ts +0 -1
  101. package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.js +0 -474
  102. package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.js.map +0 -1
  103. package/dist/cjs/tests/integration/keep-alive.child.d.ts +0 -1
  104. package/dist/cjs/tests/integration/keep-alive.child.js +0 -85
  105. package/dist/cjs/tests/integration/keep-alive.child.js.map +0 -1
  106. package/dist/cjs/tests/integration/keep-alive.spec.d.ts +0 -22
  107. package/dist/cjs/tests/integration/keep-alive.spec.js +0 -490
  108. package/dist/cjs/tests/integration/keep-alive.spec.js.map +0 -1
  109. package/dist/cjs/tests/integration/keyboard.spec.d.ts +0 -1
  110. package/dist/cjs/tests/integration/keyboard.spec.js +0 -259
  111. package/dist/cjs/tests/integration/keyboard.spec.js.map +0 -1
  112. package/dist/cjs/tests/integration/locator-backend-node-id.spec.d.ts +0 -1
  113. package/dist/cjs/tests/integration/locator-backend-node-id.spec.js +0 -150
  114. package/dist/cjs/tests/integration/locator-backend-node-id.spec.js.map +0 -1
  115. package/dist/cjs/tests/integration/locator-content-methods.spec.d.ts +0 -1
  116. package/dist/cjs/tests/integration/locator-content-methods.spec.js +0 -180
  117. package/dist/cjs/tests/integration/locator-content-methods.spec.js.map +0 -1
  118. package/dist/cjs/tests/integration/locator-count-iframe.spec.d.ts +0 -1
  119. package/dist/cjs/tests/integration/locator-count-iframe.spec.js +0 -129
  120. package/dist/cjs/tests/integration/locator-count-iframe.spec.js.map +0 -1
  121. package/dist/cjs/tests/integration/locator-count.spec.d.ts +0 -1
  122. package/dist/cjs/tests/integration/locator-count.spec.js +0 -68
  123. package/dist/cjs/tests/integration/locator-count.spec.js.map +0 -1
  124. package/dist/cjs/tests/integration/locator-fill.spec.d.ts +0 -1
  125. package/dist/cjs/tests/integration/locator-fill.spec.js +0 -117
  126. package/dist/cjs/tests/integration/locator-fill.spec.js.map +0 -1
  127. package/dist/cjs/tests/integration/locator-input-methods.spec.d.ts +0 -1
  128. package/dist/cjs/tests/integration/locator-input-methods.spec.js +0 -127
  129. package/dist/cjs/tests/integration/locator-input-methods.spec.js.map +0 -1
  130. package/dist/cjs/tests/integration/locator-nth.spec.d.ts +0 -1
  131. package/dist/cjs/tests/integration/locator-nth.spec.js +0 -175
  132. package/dist/cjs/tests/integration/locator-nth.spec.js.map +0 -1
  133. package/dist/cjs/tests/integration/locator-select-option.spec.d.ts +0 -1
  134. package/dist/cjs/tests/integration/locator-select-option.spec.js +0 -216
  135. package/dist/cjs/tests/integration/locator-select-option.spec.js.map +0 -1
  136. package/dist/cjs/tests/integration/logger-initialization.spec.d.ts +0 -1
  137. package/dist/cjs/tests/integration/logger-initialization.spec.js +0 -597
  138. package/dist/cjs/tests/integration/logger-initialization.spec.js.map +0 -1
  139. package/dist/cjs/tests/integration/multi-instance-logger.spec.d.ts +0 -1
  140. package/dist/cjs/tests/integration/multi-instance-logger.spec.js +0 -293
  141. package/dist/cjs/tests/integration/multi-instance-logger.spec.js.map +0 -1
  142. package/dist/cjs/tests/integration/nested-div.spec.d.ts +0 -1
  143. package/dist/cjs/tests/integration/nested-div.spec.js +0 -22
  144. package/dist/cjs/tests/integration/nested-div.spec.js.map +0 -1
  145. package/dist/cjs/tests/integration/observe-element-id-format.spec.d.ts +0 -1
  146. package/dist/cjs/tests/integration/observe-element-id-format.spec.js +0 -130
  147. package/dist/cjs/tests/integration/observe-element-id-format.spec.js.map +0 -1
  148. package/dist/cjs/tests/integration/page-addInitScript.spec.d.ts +0 -1
  149. package/dist/cjs/tests/integration/page-addInitScript.spec.js +0 -94
  150. package/dist/cjs/tests/integration/page-addInitScript.spec.js.map +0 -1
  151. package/dist/cjs/tests/integration/page-console.spec.d.ts +0 -1
  152. package/dist/cjs/tests/integration/page-console.spec.js +0 -47
  153. package/dist/cjs/tests/integration/page-console.spec.js.map +0 -1
  154. package/dist/cjs/tests/integration/page-drag-and-drop.spec.d.ts +0 -1
  155. package/dist/cjs/tests/integration/page-drag-and-drop.spec.js +0 -437
  156. package/dist/cjs/tests/integration/page-drag-and-drop.spec.js.map +0 -1
  157. package/dist/cjs/tests/integration/page-extra-http-headers.spec.d.ts +0 -1
  158. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js +0 -85
  159. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js.map +0 -1
  160. package/dist/cjs/tests/integration/page-goto-response.spec.d.ts +0 -1
  161. package/dist/cjs/tests/integration/page-goto-response.spec.js +0 -34
  162. package/dist/cjs/tests/integration/page-goto-response.spec.js.map +0 -1
  163. package/dist/cjs/tests/integration/page-hover.spec.d.ts +0 -1
  164. package/dist/cjs/tests/integration/page-hover.spec.js +0 -165
  165. package/dist/cjs/tests/integration/page-hover.spec.js.map +0 -1
  166. package/dist/cjs/tests/integration/page-screenshot.spec.d.ts +0 -1
  167. package/dist/cjs/tests/integration/page-screenshot.spec.js +0 -292
  168. package/dist/cjs/tests/integration/page-screenshot.spec.js.map +0 -1
  169. package/dist/cjs/tests/integration/page-scroll.spec.d.ts +0 -1
  170. package/dist/cjs/tests/integration/page-scroll.spec.js +0 -183
  171. package/dist/cjs/tests/integration/page-scroll.spec.js.map +0 -1
  172. package/dist/cjs/tests/integration/page-send-cdp.spec.d.ts +0 -1
  173. package/dist/cjs/tests/integration/page-send-cdp.spec.js +0 -47
  174. package/dist/cjs/tests/integration/page-send-cdp.spec.js.map +0 -1
  175. package/dist/cjs/tests/integration/perform-understudy-method.spec.d.ts +0 -1
  176. package/dist/cjs/tests/integration/perform-understudy-method.spec.js +0 -63
  177. package/dist/cjs/tests/integration/perform-understudy-method.spec.js.map +0 -1
  178. package/dist/cjs/tests/integration/setinputfiles.spec.d.ts +0 -1
  179. package/dist/cjs/tests/integration/setinputfiles.spec.js +0 -133
  180. package/dist/cjs/tests/integration/setinputfiles.spec.js.map +0 -1
  181. package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.d.ts +0 -1
  182. package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.js +0 -161
  183. package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.js.map +0 -1
  184. package/dist/cjs/tests/integration/shadow-iframe-spif.spec.d.ts +0 -1
  185. package/dist/cjs/tests/integration/shadow-iframe-spif.spec.js +0 -160
  186. package/dist/cjs/tests/integration/shadow-iframe-spif.spec.js.map +0 -1
  187. package/dist/cjs/tests/integration/testUtils.d.ts +0 -40
  188. package/dist/cjs/tests/integration/testUtils.js +0 -188
  189. package/dist/cjs/tests/integration/testUtils.js.map +0 -1
  190. package/dist/cjs/tests/integration/text-selector-innermost.spec.d.ts +0 -1
  191. package/dist/cjs/tests/integration/text-selector-innermost.spec.js +0 -105
  192. package/dist/cjs/tests/integration/text-selector-innermost.spec.js.map +0 -1
  193. package/dist/cjs/tests/integration/timeouts.spec.d.ts +0 -1
  194. package/dist/cjs/tests/integration/timeouts.spec.js +0 -309
  195. package/dist/cjs/tests/integration/timeouts.spec.js.map +0 -1
  196. package/dist/cjs/tests/integration/user-data-dir.spec.d.ts +0 -1
  197. package/dist/cjs/tests/integration/user-data-dir.spec.js +0 -77
  198. package/dist/cjs/tests/integration/user-data-dir.spec.js.map +0 -1
  199. package/dist/cjs/tests/integration/v3.config.d.ts +0 -4
  200. package/dist/cjs/tests/integration/v3.config.js +0 -11
  201. package/dist/cjs/tests/integration/v3.config.js.map +0 -1
  202. package/dist/cjs/tests/integration/v3.dynamic.config.d.ts +0 -4
  203. package/dist/cjs/tests/integration/v3.dynamic.config.js +0 -48
  204. package/dist/cjs/tests/integration/v3.dynamic.config.js.map +0 -1
  205. package/dist/cjs/tests/integration/v3.playwright.config.d.ts +0 -2
  206. package/dist/cjs/tests/integration/v3.playwright.config.js +0 -48
  207. package/dist/cjs/tests/integration/v3.playwright.config.js.map +0 -1
  208. package/dist/cjs/tests/integration/wait-for-selector.spec.d.ts +0 -1
  209. package/dist/cjs/tests/integration/wait-for-selector.spec.js +0 -683
  210. package/dist/cjs/tests/integration/wait-for-selector.spec.js.map +0 -1
  211. package/dist/cjs/tests/integration/wait-for-timeout.spec.d.ts +0 -1
  212. package/dist/cjs/tests/integration/wait-for-timeout.spec.js +0 -118
  213. package/dist/cjs/tests/integration/wait-for-timeout.spec.js.map +0 -1
  214. package/dist/cjs/tests/integration/xpath-for-location-deep.spec.d.ts +0 -1
  215. package/dist/cjs/tests/integration/xpath-for-location-deep.spec.js +0 -87
  216. package/dist/cjs/tests/integration/xpath-for-location-deep.spec.js.map +0 -1
  217. package/dist/cjs/tests/unit/agent-captcha-hooks.test.d.ts +0 -1
  218. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js +0 -341
  219. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js.map +0 -1
  220. package/dist/cjs/tests/unit/agent-execution-model.test.d.ts +0 -1
  221. package/dist/cjs/tests/unit/agent-execution-model.test.js +0 -150
  222. package/dist/cjs/tests/unit/agent-execution-model.test.js.map +0 -1
  223. package/dist/cjs/tests/unit/agent-metrics.test.d.ts +0 -1
  224. package/dist/cjs/tests/unit/agent-metrics.test.js +0 -112
  225. package/dist/cjs/tests/unit/agent-metrics.test.js.map +0 -1
  226. package/dist/cjs/tests/unit/agent-mode-routing.test.d.ts +0 -1
  227. package/dist/cjs/tests/unit/agent-mode-routing.test.js +0 -88
  228. package/dist/cjs/tests/unit/agent-mode-routing.test.js.map +0 -1
  229. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.d.ts +0 -1
  230. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js +0 -23
  231. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js.map +0 -1
  232. package/dist/cjs/tests/unit/agent-temperature.test.d.ts +0 -1
  233. package/dist/cjs/tests/unit/agent-temperature.test.js +0 -191
  234. package/dist/cjs/tests/unit/agent-temperature.test.js.map +0 -1
  235. package/dist/cjs/tests/unit/agent-variables-validation.test.d.ts +0 -1
  236. package/dist/cjs/tests/unit/agent-variables-validation.test.js +0 -43
  237. package/dist/cjs/tests/unit/agent-variables-validation.test.js.map +0 -1
  238. package/dist/cjs/tests/unit/aisdk-clients.test.d.ts +0 -1
  239. package/dist/cjs/tests/unit/aisdk-clients.test.js +0 -86
  240. package/dist/cjs/tests/unit/aisdk-clients.test.js.map +0 -1
  241. package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +0 -1
  242. package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js +0 -250
  243. package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +0 -1
  244. package/dist/cjs/tests/unit/anthropic-cua-triple-click.test.d.ts +0 -1
  245. package/dist/cjs/tests/unit/anthropic-cua-triple-click.test.js +0 -87
  246. package/dist/cjs/tests/unit/anthropic-cua-triple-click.test.js.map +0 -1
  247. package/dist/cjs/tests/unit/api-client-observe-variables.test.d.ts +0 -1
  248. package/dist/cjs/tests/unit/api-client-observe-variables.test.js +0 -135
  249. package/dist/cjs/tests/unit/api-client-observe-variables.test.js.map +0 -1
  250. package/dist/cjs/tests/unit/api-multiregion.test.d.ts +0 -1
  251. package/dist/cjs/tests/unit/api-multiregion.test.js +0 -58
  252. package/dist/cjs/tests/unit/api-multiregion.test.js.map +0 -1
  253. package/dist/cjs/tests/unit/api-optional-model-api-key.test.d.ts +0 -1
  254. package/dist/cjs/tests/unit/api-optional-model-api-key.test.js +0 -155
  255. package/dist/cjs/tests/unit/api-optional-model-api-key.test.js.map +0 -1
  256. package/dist/cjs/tests/unit/api-variables-schema.test.d.ts +0 -1
  257. package/dist/cjs/tests/unit/api-variables-schema.test.js +0 -69
  258. package/dist/cjs/tests/unit/api-variables-schema.test.js.map +0 -1
  259. package/dist/cjs/tests/unit/browserbase-session-accessors.test.d.ts +0 -1
  260. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js +0 -142
  261. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js.map +0 -1
  262. package/dist/cjs/tests/unit/cache-llm-resolution.test.d.ts +0 -1
  263. package/dist/cjs/tests/unit/cache-llm-resolution.test.js +0 -186
  264. package/dist/cjs/tests/unit/cache-llm-resolution.test.js.map +0 -1
  265. package/dist/cjs/tests/unit/captcha-solver.test.d.ts +0 -1
  266. package/dist/cjs/tests/unit/captcha-solver.test.js +0 -154
  267. package/dist/cjs/tests/unit/captcha-solver.test.js.map +0 -1
  268. package/dist/cjs/tests/unit/cdp-connection-close.test.d.ts +0 -1
  269. package/dist/cjs/tests/unit/cdp-connection-close.test.js +0 -74
  270. package/dist/cjs/tests/unit/cdp-connection-close.test.js.map +0 -1
  271. package/dist/cjs/tests/unit/context-extra-http-headers.test.d.ts +0 -1
  272. package/dist/cjs/tests/unit/context-extra-http-headers.test.js +0 -58
  273. package/dist/cjs/tests/unit/context-extra-http-headers.test.js.map +0 -1
  274. package/dist/cjs/tests/unit/cookies.test.d.ts +0 -1
  275. package/dist/cjs/tests/unit/cookies.test.js +0 -944
  276. package/dist/cjs/tests/unit/cookies.test.js.map +0 -1
  277. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.d.ts +0 -1
  278. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js +0 -95
  279. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js.map +0 -1
  280. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.d.ts +0 -1
  281. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js +0 -43
  282. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js.map +0 -1
  283. package/dist/cjs/tests/unit/flowlogger-eventstore.test.d.ts +0 -1
  284. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js +0 -250
  285. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js.map +0 -1
  286. package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.d.ts +0 -1
  287. package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.js +0 -60
  288. package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.js.map +0 -1
  289. package/dist/cjs/tests/unit/helpers/mockCDPSession.d.ts +0 -19
  290. package/dist/cjs/tests/unit/helpers/mockCDPSession.js +0 -29
  291. package/dist/cjs/tests/unit/helpers/mockCDPSession.js.map +0 -1
  292. package/dist/cjs/tests/unit/inference-temperature.test.d.ts +0 -1
  293. package/dist/cjs/tests/unit/inference-temperature.test.js +0 -65
  294. package/dist/cjs/tests/unit/inference-temperature.test.js.map +0 -1
  295. package/dist/cjs/tests/unit/llm-middleware.test.d.ts +0 -1
  296. package/dist/cjs/tests/unit/llm-middleware.test.js +0 -495
  297. package/dist/cjs/tests/unit/llm-middleware.test.js.map +0 -1
  298. package/dist/cjs/tests/unit/llm-provider.test.d.ts +0 -1
  299. package/dist/cjs/tests/unit/llm-provider.test.js +0 -64
  300. package/dist/cjs/tests/unit/llm-provider.test.js.map +0 -1
  301. package/dist/cjs/tests/unit/microsoft-cua-client.test.d.ts +0 -1
  302. package/dist/cjs/tests/unit/microsoft-cua-client.test.js +0 -86
  303. package/dist/cjs/tests/unit/microsoft-cua-client.test.js.map +0 -1
  304. package/dist/cjs/tests/unit/model-deprecation.test.d.ts +0 -1
  305. package/dist/cjs/tests/unit/model-deprecation.test.js +0 -142
  306. package/dist/cjs/tests/unit/model-deprecation.test.js.map +0 -1
  307. package/dist/cjs/tests/unit/model-utils.test.d.ts +0 -1
  308. package/dist/cjs/tests/unit/model-utils.test.js +0 -42
  309. package/dist/cjs/tests/unit/model-utils.test.js.map +0 -1
  310. package/dist/cjs/tests/unit/openai-compatible-temperature.test.d.ts +0 -1
  311. package/dist/cjs/tests/unit/openai-compatible-temperature.test.js +0 -84
  312. package/dist/cjs/tests/unit/openai-compatible-temperature.test.js.map +0 -1
  313. package/dist/cjs/tests/unit/openai-cua-client.test.d.ts +0 -1
  314. package/dist/cjs/tests/unit/openai-cua-client.test.js +0 -71
  315. package/dist/cjs/tests/unit/openai-cua-client.test.js.map +0 -1
  316. package/dist/cjs/tests/unit/page-extra-http-headers.test.d.ts +0 -1
  317. package/dist/cjs/tests/unit/page-extra-http-headers.test.js +0 -92
  318. package/dist/cjs/tests/unit/page-extra-http-headers.test.js.map +0 -1
  319. package/dist/cjs/tests/unit/page-snapshot.test.d.ts +0 -1
  320. package/dist/cjs/tests/unit/page-snapshot.test.js +0 -75
  321. package/dist/cjs/tests/unit/page-snapshot.test.js.map +0 -1
  322. package/dist/cjs/tests/unit/prompt-observe-variables.test.d.ts +0 -1
  323. package/dist/cjs/tests/unit/prompt-observe-variables.test.js +0 -25
  324. package/dist/cjs/tests/unit/prompt-observe-variables.test.js.map +0 -1
  325. package/dist/cjs/tests/unit/public-api/export-surface.test.d.ts +0 -1
  326. package/dist/cjs/tests/unit/public-api/export-surface.test.js +0 -107
  327. package/dist/cjs/tests/unit/public-api/export-surface.test.js.map +0 -1
  328. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.d.ts +0 -1
  329. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +0 -179
  330. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js.map +0 -1
  331. package/dist/cjs/tests/unit/public-api/public-error-types.test.d.ts +0 -62
  332. package/dist/cjs/tests/unit/public-api/public-error-types.test.js +0 -110
  333. package/dist/cjs/tests/unit/public-api/public-error-types.test.js.map +0 -1
  334. package/dist/cjs/tests/unit/public-api/public-types.test.d.ts +0 -1
  335. package/dist/cjs/tests/unit/public-api/public-types.test.js +0 -99
  336. package/dist/cjs/tests/unit/public-api/public-types.test.js.map +0 -1
  337. package/dist/cjs/tests/unit/public-api/runtime-utils.test.d.ts +0 -1
  338. package/dist/cjs/tests/unit/public-api/runtime-utils.test.js +0 -60
  339. package/dist/cjs/tests/unit/public-api/runtime-utils.test.js.map +0 -1
  340. package/dist/cjs/tests/unit/public-api/schema-utils.test.d.ts +0 -1
  341. package/dist/cjs/tests/unit/public-api/schema-utils.test.js +0 -95
  342. package/dist/cjs/tests/unit/public-api/schema-utils.test.js.map +0 -1
  343. package/dist/cjs/tests/unit/public-api/timeout-error-types.test.d.ts +0 -1
  344. package/dist/cjs/tests/unit/public-api/timeout-error-types.test.js +0 -121
  345. package/dist/cjs/tests/unit/public-api/timeout-error-types.test.js.map +0 -1
  346. package/dist/cjs/tests/unit/public-api/tool-type-export.test.d.ts +0 -1
  347. package/dist/cjs/tests/unit/public-api/tool-type-export.test.js +0 -65
  348. package/dist/cjs/tests/unit/public-api/tool-type-export.test.js.map +0 -1
  349. package/dist/cjs/tests/unit/public-api/v3-core.test.d.ts +0 -1
  350. package/dist/cjs/tests/unit/public-api/v3-core.test.js +0 -108
  351. package/dist/cjs/tests/unit/public-api/v3-core.test.js.map +0 -1
  352. package/dist/cjs/tests/unit/safety-confirmation.test.d.ts +0 -1
  353. package/dist/cjs/tests/unit/safety-confirmation.test.js +0 -110
  354. package/dist/cjs/tests/unit/safety-confirmation.test.js.map +0 -1
  355. package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.d.ts +0 -1
  356. package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.js +0 -431
  357. package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.js.map +0 -1
  358. package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.d.ts +0 -1
  359. package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.js +0 -339
  360. package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.js.map +0 -1
  361. package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.d.ts +0 -1
  362. package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.js +0 -504
  363. package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.js.map +0 -1
  364. package/dist/cjs/tests/unit/snapshot-cbor.test.d.ts +0 -1
  365. package/dist/cjs/tests/unit/snapshot-cbor.test.js +0 -204
  366. package/dist/cjs/tests/unit/snapshot-cbor.test.js.map +0 -1
  367. package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.d.ts +0 -1
  368. package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.js +0 -220
  369. package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.js.map +0 -1
  370. package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.d.ts +0 -1
  371. package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.js +0 -107
  372. package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.js.map +0 -1
  373. package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.d.ts +0 -1
  374. package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.js +0 -89
  375. package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.js.map +0 -1
  376. package/dist/cjs/tests/unit/snapshot-frame-merge.test.d.ts +0 -1
  377. package/dist/cjs/tests/unit/snapshot-frame-merge.test.js +0 -335
  378. package/dist/cjs/tests/unit/snapshot-frame-merge.test.js.map +0 -1
  379. package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.d.ts +0 -1
  380. package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.js +0 -127
  381. package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.js.map +0 -1
  382. package/dist/cjs/tests/unit/snapshot-xpath-utils.test.d.ts +0 -1
  383. package/dist/cjs/tests/unit/snapshot-xpath-utils.test.js +0 -74
  384. package/dist/cjs/tests/unit/snapshot-xpath-utils.test.js.map +0 -1
  385. package/dist/cjs/tests/unit/timeout-handlers.test.d.ts +0 -1
  386. package/dist/cjs/tests/unit/timeout-handlers.test.js +0 -933
  387. package/dist/cjs/tests/unit/timeout-handlers.test.js.map +0 -1
  388. package/dist/cjs/tests/unit/understudy-command-exception.test.d.ts +0 -1
  389. package/dist/cjs/tests/unit/understudy-command-exception.test.js +0 -57
  390. package/dist/cjs/tests/unit/understudy-command-exception.test.js.map +0 -1
  391. package/dist/cjs/tests/unit/xpath-parser.test.d.ts +0 -1
  392. package/dist/cjs/tests/unit/xpath-parser.test.js +0 -311
  393. package/dist/cjs/tests/unit/xpath-parser.test.js.map +0 -1
  394. package/dist/cjs/tests/unit/xpath-resolver.test.d.ts +0 -1
  395. package/dist/cjs/tests/unit/xpath-resolver.test.js +0 -80
  396. package/dist/cjs/tests/unit/xpath-resolver.test.js.map +0 -1
  397. package/dist/cjs/tests/unit/zod-enum-compatibility.test.d.ts +0 -1
  398. package/dist/cjs/tests/unit/zod-enum-compatibility.test.js +0 -149
  399. package/dist/cjs/tests/unit/zod-enum-compatibility.test.js.map +0 -1
  400. package/dist/esm/tests/cache-variables.test.d.ts +0 -1
  401. package/dist/esm/tests/cache-variables.test.js +0 -219
  402. package/dist/esm/tests/cache-variables.test.js.map +0 -1
  403. package/dist/esm/tests/integration/agent-abort-signal.spec.d.ts +0 -1
  404. package/dist/esm/tests/integration/agent-abort-signal.spec.js +0 -121
  405. package/dist/esm/tests/integration/agent-abort-signal.spec.js.map +0 -1
  406. package/dist/esm/tests/integration/agent-cache-self-heal.spec.d.ts +0 -1
  407. package/dist/esm/tests/integration/agent-cache-self-heal.spec.js +0 -78
  408. package/dist/esm/tests/integration/agent-cache-self-heal.spec.js.map +0 -1
  409. package/dist/esm/tests/integration/agent-callbacks.spec.d.ts +0 -1
  410. package/dist/esm/tests/integration/agent-callbacks.spec.js +0 -383
  411. package/dist/esm/tests/integration/agent-callbacks.spec.js.map +0 -1
  412. package/dist/esm/tests/integration/agent-experimental-validation.spec.d.ts +0 -1
  413. package/dist/esm/tests/integration/agent-experimental-validation.spec.js +0 -360
  414. package/dist/esm/tests/integration/agent-experimental-validation.spec.js.map +0 -1
  415. package/dist/esm/tests/integration/agent-hybrid-mode.spec.d.ts +0 -1
  416. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js +0 -260
  417. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js.map +0 -1
  418. package/dist/esm/tests/integration/agent-message-continuation.spec.d.ts +0 -1
  419. package/dist/esm/tests/integration/agent-message-continuation.spec.js +0 -110
  420. package/dist/esm/tests/integration/agent-message-continuation.spec.js.map +0 -1
  421. package/dist/esm/tests/integration/agent-streaming.spec.d.ts +0 -1
  422. package/dist/esm/tests/integration/agent-streaming.spec.js +0 -138
  423. package/dist/esm/tests/integration/agent-streaming.spec.js.map +0 -1
  424. package/dist/esm/tests/integration/cdp-close-api-region.spec.d.ts +0 -1
  425. package/dist/esm/tests/integration/cdp-close-api-region.spec.js +0 -39
  426. package/dist/esm/tests/integration/cdp-close-api-region.spec.js.map +0 -1
  427. package/dist/esm/tests/integration/cdp-connection-close.spec.d.ts +0 -1
  428. package/dist/esm/tests/integration/cdp-connection-close.spec.js +0 -74
  429. package/dist/esm/tests/integration/cdp-connection-close.spec.js.map +0 -1
  430. package/dist/esm/tests/integration/cdp-session-detached.spec.d.ts +0 -1
  431. package/dist/esm/tests/integration/cdp-session-detached.spec.js +0 -43
  432. package/dist/esm/tests/integration/cdp-session-detached.spec.js.map +0 -1
  433. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.d.ts +0 -1
  434. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js +0 -54
  435. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js.map +0 -1
  436. package/dist/esm/tests/integration/click-count.spec.d.ts +0 -1
  437. package/dist/esm/tests/integration/click-count.spec.js +0 -161
  438. package/dist/esm/tests/integration/click-count.spec.js.map +0 -1
  439. package/dist/esm/tests/integration/connect-to-existing-browser.spec.d.ts +0 -1
  440. package/dist/esm/tests/integration/connect-to-existing-browser.spec.js +0 -97
  441. package/dist/esm/tests/integration/connect-to-existing-browser.spec.js.map +0 -1
  442. package/dist/esm/tests/integration/context-addInitScript.spec.d.ts +0 -1
  443. package/dist/esm/tests/integration/context-addInitScript.spec.js +0 -283
  444. package/dist/esm/tests/integration/context-addInitScript.spec.js.map +0 -1
  445. package/dist/esm/tests/integration/context-extra-http-headers.spec.d.ts +0 -1
  446. package/dist/esm/tests/integration/context-extra-http-headers.spec.js +0 -47
  447. package/dist/esm/tests/integration/context-extra-http-headers.spec.js.map +0 -1
  448. package/dist/esm/tests/integration/cookies.spec.d.ts +0 -1
  449. package/dist/esm/tests/integration/cookies.spec.js +0 -185
  450. package/dist/esm/tests/integration/cookies.spec.js.map +0 -1
  451. package/dist/esm/tests/integration/default-page-tracking.spec.d.ts +0 -1
  452. package/dist/esm/tests/integration/default-page-tracking.spec.js +0 -50
  453. package/dist/esm/tests/integration/default-page-tracking.spec.js.map +0 -1
  454. package/dist/esm/tests/integration/downloads.spec.d.ts +0 -1
  455. package/dist/esm/tests/integration/downloads.spec.js +0 -47
  456. package/dist/esm/tests/integration/downloads.spec.js.map +0 -1
  457. package/dist/esm/tests/integration/flowLogger.spec.d.ts +0 -1
  458. package/dist/esm/tests/integration/flowLogger.spec.js +0 -716
  459. package/dist/esm/tests/integration/flowLogger.spec.js.map +0 -1
  460. package/dist/esm/tests/integration/frame-get-location-and-click.spec.d.ts +0 -1
  461. package/dist/esm/tests/integration/frame-get-location-and-click.spec.js +0 -55
  462. package/dist/esm/tests/integration/frame-get-location-and-click.spec.js.map +0 -1
  463. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +0 -1
  464. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js +0 -217
  465. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +0 -1
  466. package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.d.ts +0 -1
  467. package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.js +0 -472
  468. package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.js.map +0 -1
  469. package/dist/esm/tests/integration/keep-alive.child.d.ts +0 -1
  470. package/dist/esm/tests/integration/keep-alive.child.js +0 -83
  471. package/dist/esm/tests/integration/keep-alive.child.js.map +0 -1
  472. package/dist/esm/tests/integration/keep-alive.spec.d.ts +0 -22
  473. package/dist/esm/tests/integration/keep-alive.spec.js +0 -482
  474. package/dist/esm/tests/integration/keep-alive.spec.js.map +0 -1
  475. package/dist/esm/tests/integration/keyboard.spec.d.ts +0 -1
  476. package/dist/esm/tests/integration/keyboard.spec.js +0 -257
  477. package/dist/esm/tests/integration/keyboard.spec.js.map +0 -1
  478. package/dist/esm/tests/integration/locator-backend-node-id.spec.d.ts +0 -1
  479. package/dist/esm/tests/integration/locator-backend-node-id.spec.js +0 -148
  480. package/dist/esm/tests/integration/locator-backend-node-id.spec.js.map +0 -1
  481. package/dist/esm/tests/integration/locator-content-methods.spec.d.ts +0 -1
  482. package/dist/esm/tests/integration/locator-content-methods.spec.js +0 -178
  483. package/dist/esm/tests/integration/locator-content-methods.spec.js.map +0 -1
  484. package/dist/esm/tests/integration/locator-count-iframe.spec.d.ts +0 -1
  485. package/dist/esm/tests/integration/locator-count-iframe.spec.js +0 -127
  486. package/dist/esm/tests/integration/locator-count-iframe.spec.js.map +0 -1
  487. package/dist/esm/tests/integration/locator-count.spec.d.ts +0 -1
  488. package/dist/esm/tests/integration/locator-count.spec.js +0 -66
  489. package/dist/esm/tests/integration/locator-count.spec.js.map +0 -1
  490. package/dist/esm/tests/integration/locator-fill.spec.d.ts +0 -1
  491. package/dist/esm/tests/integration/locator-fill.spec.js +0 -115
  492. package/dist/esm/tests/integration/locator-fill.spec.js.map +0 -1
  493. package/dist/esm/tests/integration/locator-input-methods.spec.d.ts +0 -1
  494. package/dist/esm/tests/integration/locator-input-methods.spec.js +0 -125
  495. package/dist/esm/tests/integration/locator-input-methods.spec.js.map +0 -1
  496. package/dist/esm/tests/integration/locator-nth.spec.d.ts +0 -1
  497. package/dist/esm/tests/integration/locator-nth.spec.js +0 -173
  498. package/dist/esm/tests/integration/locator-nth.spec.js.map +0 -1
  499. package/dist/esm/tests/integration/locator-select-option.spec.d.ts +0 -1
  500. package/dist/esm/tests/integration/locator-select-option.spec.js +0 -214
  501. package/dist/esm/tests/integration/locator-select-option.spec.js.map +0 -1
  502. package/dist/esm/tests/integration/logger-initialization.spec.d.ts +0 -1
  503. package/dist/esm/tests/integration/logger-initialization.spec.js +0 -595
  504. package/dist/esm/tests/integration/logger-initialization.spec.js.map +0 -1
  505. package/dist/esm/tests/integration/multi-instance-logger.spec.d.ts +0 -1
  506. package/dist/esm/tests/integration/multi-instance-logger.spec.js +0 -291
  507. package/dist/esm/tests/integration/multi-instance-logger.spec.js.map +0 -1
  508. package/dist/esm/tests/integration/nested-div.spec.d.ts +0 -1
  509. package/dist/esm/tests/integration/nested-div.spec.js +0 -20
  510. package/dist/esm/tests/integration/nested-div.spec.js.map +0 -1
  511. package/dist/esm/tests/integration/observe-element-id-format.spec.d.ts +0 -1
  512. package/dist/esm/tests/integration/observe-element-id-format.spec.js +0 -128
  513. package/dist/esm/tests/integration/observe-element-id-format.spec.js.map +0 -1
  514. package/dist/esm/tests/integration/page-addInitScript.spec.d.ts +0 -1
  515. package/dist/esm/tests/integration/page-addInitScript.spec.js +0 -92
  516. package/dist/esm/tests/integration/page-addInitScript.spec.js.map +0 -1
  517. package/dist/esm/tests/integration/page-console.spec.d.ts +0 -1
  518. package/dist/esm/tests/integration/page-console.spec.js +0 -45
  519. package/dist/esm/tests/integration/page-console.spec.js.map +0 -1
  520. package/dist/esm/tests/integration/page-drag-and-drop.spec.d.ts +0 -1
  521. package/dist/esm/tests/integration/page-drag-and-drop.spec.js +0 -435
  522. package/dist/esm/tests/integration/page-drag-and-drop.spec.js.map +0 -1
  523. package/dist/esm/tests/integration/page-extra-http-headers.spec.d.ts +0 -1
  524. package/dist/esm/tests/integration/page-extra-http-headers.spec.js +0 -83
  525. package/dist/esm/tests/integration/page-extra-http-headers.spec.js.map +0 -1
  526. package/dist/esm/tests/integration/page-goto-response.spec.d.ts +0 -1
  527. package/dist/esm/tests/integration/page-goto-response.spec.js +0 -32
  528. package/dist/esm/tests/integration/page-goto-response.spec.js.map +0 -1
  529. package/dist/esm/tests/integration/page-hover.spec.d.ts +0 -1
  530. package/dist/esm/tests/integration/page-hover.spec.js +0 -163
  531. package/dist/esm/tests/integration/page-hover.spec.js.map +0 -1
  532. package/dist/esm/tests/integration/page-screenshot.spec.d.ts +0 -1
  533. package/dist/esm/tests/integration/page-screenshot.spec.js +0 -257
  534. package/dist/esm/tests/integration/page-screenshot.spec.js.map +0 -1
  535. package/dist/esm/tests/integration/page-scroll.spec.d.ts +0 -1
  536. package/dist/esm/tests/integration/page-scroll.spec.js +0 -181
  537. package/dist/esm/tests/integration/page-scroll.spec.js.map +0 -1
  538. package/dist/esm/tests/integration/page-send-cdp.spec.d.ts +0 -1
  539. package/dist/esm/tests/integration/page-send-cdp.spec.js +0 -45
  540. package/dist/esm/tests/integration/page-send-cdp.spec.js.map +0 -1
  541. package/dist/esm/tests/integration/perform-understudy-method.spec.d.ts +0 -1
  542. package/dist/esm/tests/integration/perform-understudy-method.spec.js +0 -61
  543. package/dist/esm/tests/integration/perform-understudy-method.spec.js.map +0 -1
  544. package/dist/esm/tests/integration/setinputfiles.spec.d.ts +0 -1
  545. package/dist/esm/tests/integration/setinputfiles.spec.js +0 -128
  546. package/dist/esm/tests/integration/setinputfiles.spec.js.map +0 -1
  547. package/dist/esm/tests/integration/shadow-iframe-oopif.spec.d.ts +0 -1
  548. package/dist/esm/tests/integration/shadow-iframe-oopif.spec.js +0 -156
  549. package/dist/esm/tests/integration/shadow-iframe-oopif.spec.js.map +0 -1
  550. package/dist/esm/tests/integration/shadow-iframe-spif.spec.d.ts +0 -1
  551. package/dist/esm/tests/integration/shadow-iframe-spif.spec.js +0 -155
  552. package/dist/esm/tests/integration/shadow-iframe-spif.spec.js.map +0 -1
  553. package/dist/esm/tests/integration/testUtils.d.ts +0 -40
  554. package/dist/esm/tests/integration/testUtils.js +0 -178
  555. package/dist/esm/tests/integration/testUtils.js.map +0 -1
  556. package/dist/esm/tests/integration/text-selector-innermost.spec.d.ts +0 -1
  557. package/dist/esm/tests/integration/text-selector-innermost.spec.js +0 -103
  558. package/dist/esm/tests/integration/text-selector-innermost.spec.js.map +0 -1
  559. package/dist/esm/tests/integration/timeouts.spec.d.ts +0 -1
  560. package/dist/esm/tests/integration/timeouts.spec.js +0 -307
  561. package/dist/esm/tests/integration/timeouts.spec.js.map +0 -1
  562. package/dist/esm/tests/integration/user-data-dir.spec.d.ts +0 -1
  563. package/dist/esm/tests/integration/user-data-dir.spec.js +0 -42
  564. package/dist/esm/tests/integration/user-data-dir.spec.js.map +0 -1
  565. package/dist/esm/tests/integration/v3.config.d.ts +0 -4
  566. package/dist/esm/tests/integration/v3.config.js +0 -7
  567. package/dist/esm/tests/integration/v3.config.js.map +0 -1
  568. package/dist/esm/tests/integration/v3.dynamic.config.d.ts +0 -4
  569. package/dist/esm/tests/integration/v3.dynamic.config.js +0 -44
  570. package/dist/esm/tests/integration/v3.dynamic.config.js.map +0 -1
  571. package/dist/esm/tests/integration/v3.playwright.config.d.ts +0 -2
  572. package/dist/esm/tests/integration/v3.playwright.config.js +0 -46
  573. package/dist/esm/tests/integration/v3.playwright.config.js.map +0 -1
  574. package/dist/esm/tests/integration/wait-for-selector.spec.d.ts +0 -1
  575. package/dist/esm/tests/integration/wait-for-selector.spec.js +0 -681
  576. package/dist/esm/tests/integration/wait-for-selector.spec.js.map +0 -1
  577. package/dist/esm/tests/integration/wait-for-timeout.spec.d.ts +0 -1
  578. package/dist/esm/tests/integration/wait-for-timeout.spec.js +0 -116
  579. package/dist/esm/tests/integration/wait-for-timeout.spec.js.map +0 -1
  580. package/dist/esm/tests/integration/xpath-for-location-deep.spec.d.ts +0 -1
  581. package/dist/esm/tests/integration/xpath-for-location-deep.spec.js +0 -85
  582. package/dist/esm/tests/integration/xpath-for-location-deep.spec.js.map +0 -1
  583. package/dist/esm/tests/unit/agent-captcha-hooks.test.d.ts +0 -1
  584. package/dist/esm/tests/unit/agent-captcha-hooks.test.js +0 -339
  585. package/dist/esm/tests/unit/agent-captcha-hooks.test.js.map +0 -1
  586. package/dist/esm/tests/unit/agent-execution-model.test.d.ts +0 -1
  587. package/dist/esm/tests/unit/agent-execution-model.test.js +0 -148
  588. package/dist/esm/tests/unit/agent-execution-model.test.js.map +0 -1
  589. package/dist/esm/tests/unit/agent-metrics.test.d.ts +0 -1
  590. package/dist/esm/tests/unit/agent-metrics.test.js +0 -110
  591. package/dist/esm/tests/unit/agent-metrics.test.js.map +0 -1
  592. package/dist/esm/tests/unit/agent-mode-routing.test.d.ts +0 -1
  593. package/dist/esm/tests/unit/agent-mode-routing.test.js +0 -86
  594. package/dist/esm/tests/unit/agent-mode-routing.test.js.map +0 -1
  595. package/dist/esm/tests/unit/agent-system-prompt-variables.test.d.ts +0 -1
  596. package/dist/esm/tests/unit/agent-system-prompt-variables.test.js +0 -21
  597. package/dist/esm/tests/unit/agent-system-prompt-variables.test.js.map +0 -1
  598. package/dist/esm/tests/unit/agent-temperature.test.d.ts +0 -1
  599. package/dist/esm/tests/unit/agent-temperature.test.js +0 -189
  600. package/dist/esm/tests/unit/agent-temperature.test.js.map +0 -1
  601. package/dist/esm/tests/unit/agent-variables-validation.test.d.ts +0 -1
  602. package/dist/esm/tests/unit/agent-variables-validation.test.js +0 -41
  603. package/dist/esm/tests/unit/agent-variables-validation.test.js.map +0 -1
  604. package/dist/esm/tests/unit/aisdk-clients.test.d.ts +0 -1
  605. package/dist/esm/tests/unit/aisdk-clients.test.js +0 -84
  606. package/dist/esm/tests/unit/aisdk-clients.test.js.map +0 -1
  607. package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +0 -1
  608. package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js +0 -245
  609. package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +0 -1
  610. package/dist/esm/tests/unit/anthropic-cua-triple-click.test.d.ts +0 -1
  611. package/dist/esm/tests/unit/anthropic-cua-triple-click.test.js +0 -82
  612. package/dist/esm/tests/unit/anthropic-cua-triple-click.test.js.map +0 -1
  613. package/dist/esm/tests/unit/api-client-observe-variables.test.d.ts +0 -1
  614. package/dist/esm/tests/unit/api-client-observe-variables.test.js +0 -133
  615. package/dist/esm/tests/unit/api-client-observe-variables.test.js.map +0 -1
  616. package/dist/esm/tests/unit/api-multiregion.test.d.ts +0 -1
  617. package/dist/esm/tests/unit/api-multiregion.test.js +0 -56
  618. package/dist/esm/tests/unit/api-multiregion.test.js.map +0 -1
  619. package/dist/esm/tests/unit/api-optional-model-api-key.test.d.ts +0 -1
  620. package/dist/esm/tests/unit/api-optional-model-api-key.test.js +0 -153
  621. package/dist/esm/tests/unit/api-optional-model-api-key.test.js.map +0 -1
  622. package/dist/esm/tests/unit/api-variables-schema.test.d.ts +0 -1
  623. package/dist/esm/tests/unit/api-variables-schema.test.js +0 -67
  624. package/dist/esm/tests/unit/api-variables-schema.test.js.map +0 -1
  625. package/dist/esm/tests/unit/browserbase-session-accessors.test.d.ts +0 -1
  626. package/dist/esm/tests/unit/browserbase-session-accessors.test.js +0 -140
  627. package/dist/esm/tests/unit/browserbase-session-accessors.test.js.map +0 -1
  628. package/dist/esm/tests/unit/cache-llm-resolution.test.d.ts +0 -1
  629. package/dist/esm/tests/unit/cache-llm-resolution.test.js +0 -184
  630. package/dist/esm/tests/unit/cache-llm-resolution.test.js.map +0 -1
  631. package/dist/esm/tests/unit/captcha-solver.test.d.ts +0 -1
  632. package/dist/esm/tests/unit/captcha-solver.test.js +0 -152
  633. package/dist/esm/tests/unit/captcha-solver.test.js.map +0 -1
  634. package/dist/esm/tests/unit/cdp-connection-close.test.d.ts +0 -1
  635. package/dist/esm/tests/unit/cdp-connection-close.test.js +0 -72
  636. package/dist/esm/tests/unit/cdp-connection-close.test.js.map +0 -1
  637. package/dist/esm/tests/unit/context-extra-http-headers.test.d.ts +0 -1
  638. package/dist/esm/tests/unit/context-extra-http-headers.test.js +0 -56
  639. package/dist/esm/tests/unit/context-extra-http-headers.test.js.map +0 -1
  640. package/dist/esm/tests/unit/cookies.test.d.ts +0 -1
  641. package/dist/esm/tests/unit/cookies.test.js +0 -909
  642. package/dist/esm/tests/unit/cookies.test.js.map +0 -1
  643. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.d.ts +0 -1
  644. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js +0 -93
  645. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js.map +0 -1
  646. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.d.ts +0 -1
  647. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js +0 -41
  648. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js.map +0 -1
  649. package/dist/esm/tests/unit/flowlogger-eventstore.test.d.ts +0 -1
  650. package/dist/esm/tests/unit/flowlogger-eventstore.test.js +0 -248
  651. package/dist/esm/tests/unit/flowlogger-eventstore.test.js.map +0 -1
  652. package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.d.ts +0 -1
  653. package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.js +0 -58
  654. package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.js.map +0 -1
  655. package/dist/esm/tests/unit/helpers/mockCDPSession.d.ts +0 -19
  656. package/dist/esm/tests/unit/helpers/mockCDPSession.js +0 -25
  657. package/dist/esm/tests/unit/helpers/mockCDPSession.js.map +0 -1
  658. package/dist/esm/tests/unit/inference-temperature.test.d.ts +0 -1
  659. package/dist/esm/tests/unit/inference-temperature.test.js +0 -63
  660. package/dist/esm/tests/unit/inference-temperature.test.js.map +0 -1
  661. package/dist/esm/tests/unit/llm-middleware.test.d.ts +0 -1
  662. package/dist/esm/tests/unit/llm-middleware.test.js +0 -460
  663. package/dist/esm/tests/unit/llm-middleware.test.js.map +0 -1
  664. package/dist/esm/tests/unit/llm-provider.test.d.ts +0 -1
  665. package/dist/esm/tests/unit/llm-provider.test.js +0 -62
  666. package/dist/esm/tests/unit/llm-provider.test.js.map +0 -1
  667. package/dist/esm/tests/unit/microsoft-cua-client.test.d.ts +0 -1
  668. package/dist/esm/tests/unit/microsoft-cua-client.test.js +0 -84
  669. package/dist/esm/tests/unit/microsoft-cua-client.test.js.map +0 -1
  670. package/dist/esm/tests/unit/model-deprecation.test.d.ts +0 -1
  671. package/dist/esm/tests/unit/model-deprecation.test.js +0 -140
  672. package/dist/esm/tests/unit/model-deprecation.test.js.map +0 -1
  673. package/dist/esm/tests/unit/model-utils.test.d.ts +0 -1
  674. package/dist/esm/tests/unit/model-utils.test.js +0 -40
  675. package/dist/esm/tests/unit/model-utils.test.js.map +0 -1
  676. package/dist/esm/tests/unit/openai-compatible-temperature.test.d.ts +0 -1
  677. package/dist/esm/tests/unit/openai-compatible-temperature.test.js +0 -82
  678. package/dist/esm/tests/unit/openai-compatible-temperature.test.js.map +0 -1
  679. package/dist/esm/tests/unit/openai-cua-client.test.d.ts +0 -1
  680. package/dist/esm/tests/unit/openai-cua-client.test.js +0 -69
  681. package/dist/esm/tests/unit/openai-cua-client.test.js.map +0 -1
  682. package/dist/esm/tests/unit/page-extra-http-headers.test.d.ts +0 -1
  683. package/dist/esm/tests/unit/page-extra-http-headers.test.js +0 -90
  684. package/dist/esm/tests/unit/page-extra-http-headers.test.js.map +0 -1
  685. package/dist/esm/tests/unit/page-snapshot.test.d.ts +0 -1
  686. package/dist/esm/tests/unit/page-snapshot.test.js +0 -40
  687. package/dist/esm/tests/unit/page-snapshot.test.js.map +0 -1
  688. package/dist/esm/tests/unit/prompt-observe-variables.test.d.ts +0 -1
  689. package/dist/esm/tests/unit/prompt-observe-variables.test.js +0 -23
  690. package/dist/esm/tests/unit/prompt-observe-variables.test.js.map +0 -1
  691. package/dist/esm/tests/unit/public-api/export-surface.test.d.ts +0 -1
  692. package/dist/esm/tests/unit/public-api/export-surface.test.js +0 -72
  693. package/dist/esm/tests/unit/public-api/export-surface.test.js.map +0 -1
  694. package/dist/esm/tests/unit/public-api/llm-and-agents.test.d.ts +0 -1
  695. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +0 -144
  696. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js.map +0 -1
  697. package/dist/esm/tests/unit/public-api/public-error-types.test.d.ts +0 -62
  698. package/dist/esm/tests/unit/public-api/public-error-types.test.js +0 -74
  699. package/dist/esm/tests/unit/public-api/public-error-types.test.js.map +0 -1
  700. package/dist/esm/tests/unit/public-api/public-types.test.d.ts +0 -1
  701. package/dist/esm/tests/unit/public-api/public-types.test.js +0 -97
  702. package/dist/esm/tests/unit/public-api/public-types.test.js.map +0 -1
  703. package/dist/esm/tests/unit/public-api/runtime-utils.test.d.ts +0 -1
  704. package/dist/esm/tests/unit/public-api/runtime-utils.test.js +0 -25
  705. package/dist/esm/tests/unit/public-api/runtime-utils.test.js.map +0 -1
  706. package/dist/esm/tests/unit/public-api/schema-utils.test.d.ts +0 -1
  707. package/dist/esm/tests/unit/public-api/schema-utils.test.js +0 -60
  708. package/dist/esm/tests/unit/public-api/schema-utils.test.js.map +0 -1
  709. package/dist/esm/tests/unit/public-api/timeout-error-types.test.d.ts +0 -1
  710. package/dist/esm/tests/unit/public-api/timeout-error-types.test.js +0 -86
  711. package/dist/esm/tests/unit/public-api/timeout-error-types.test.js.map +0 -1
  712. package/dist/esm/tests/unit/public-api/tool-type-export.test.d.ts +0 -1
  713. package/dist/esm/tests/unit/public-api/tool-type-export.test.js +0 -30
  714. package/dist/esm/tests/unit/public-api/tool-type-export.test.js.map +0 -1
  715. package/dist/esm/tests/unit/public-api/v3-core.test.d.ts +0 -1
  716. package/dist/esm/tests/unit/public-api/v3-core.test.js +0 -73
  717. package/dist/esm/tests/unit/public-api/v3-core.test.js.map +0 -1
  718. package/dist/esm/tests/unit/safety-confirmation.test.d.ts +0 -1
  719. package/dist/esm/tests/unit/safety-confirmation.test.js +0 -108
  720. package/dist/esm/tests/unit/safety-confirmation.test.js.map +0 -1
  721. package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.d.ts +0 -1
  722. package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.js +0 -396
  723. package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.js.map +0 -1
  724. package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.d.ts +0 -1
  725. package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.js +0 -337
  726. package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.js.map +0 -1
  727. package/dist/esm/tests/unit/snapshot-capture-orchestration.test.d.ts +0 -1
  728. package/dist/esm/tests/unit/snapshot-capture-orchestration.test.js +0 -469
  729. package/dist/esm/tests/unit/snapshot-capture-orchestration.test.js.map +0 -1
  730. package/dist/esm/tests/unit/snapshot-cbor.test.d.ts +0 -1
  731. package/dist/esm/tests/unit/snapshot-cbor.test.js +0 -202
  732. package/dist/esm/tests/unit/snapshot-cbor.test.js.map +0 -1
  733. package/dist/esm/tests/unit/snapshot-dom-session-builders.test.d.ts +0 -1
  734. package/dist/esm/tests/unit/snapshot-dom-session-builders.test.js +0 -218
  735. package/dist/esm/tests/unit/snapshot-dom-session-builders.test.js.map +0 -1
  736. package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.d.ts +0 -1
  737. package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.js +0 -105
  738. package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.js.map +0 -1
  739. package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.d.ts +0 -1
  740. package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.js +0 -87
  741. package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.js.map +0 -1
  742. package/dist/esm/tests/unit/snapshot-frame-merge.test.d.ts +0 -1
  743. package/dist/esm/tests/unit/snapshot-frame-merge.test.js +0 -333
  744. package/dist/esm/tests/unit/snapshot-frame-merge.test.js.map +0 -1
  745. package/dist/esm/tests/unit/snapshot-tree-format-utils.test.d.ts +0 -1
  746. package/dist/esm/tests/unit/snapshot-tree-format-utils.test.js +0 -125
  747. package/dist/esm/tests/unit/snapshot-tree-format-utils.test.js.map +0 -1
  748. package/dist/esm/tests/unit/snapshot-xpath-utils.test.d.ts +0 -1
  749. package/dist/esm/tests/unit/snapshot-xpath-utils.test.js +0 -72
  750. package/dist/esm/tests/unit/snapshot-xpath-utils.test.js.map +0 -1
  751. package/dist/esm/tests/unit/timeout-handlers.test.d.ts +0 -1
  752. package/dist/esm/tests/unit/timeout-handlers.test.js +0 -898
  753. package/dist/esm/tests/unit/timeout-handlers.test.js.map +0 -1
  754. package/dist/esm/tests/unit/understudy-command-exception.test.d.ts +0 -1
  755. package/dist/esm/tests/unit/understudy-command-exception.test.js +0 -55
  756. package/dist/esm/tests/unit/understudy-command-exception.test.js.map +0 -1
  757. package/dist/esm/tests/unit/xpath-parser.test.d.ts +0 -1
  758. package/dist/esm/tests/unit/xpath-parser.test.js +0 -309
  759. package/dist/esm/tests/unit/xpath-parser.test.js.map +0 -1
  760. package/dist/esm/tests/unit/xpath-resolver.test.d.ts +0 -1
  761. package/dist/esm/tests/unit/xpath-resolver.test.js +0 -78
  762. package/dist/esm/tests/unit/xpath-resolver.test.js.map +0 -1
  763. package/dist/esm/tests/unit/zod-enum-compatibility.test.d.ts +0 -1
  764. package/dist/esm/tests/unit/zod-enum-compatibility.test.js +0 -114
  765. package/dist/esm/tests/unit/zod-enum-compatibility.test.js.map +0 -1
@@ -1,257 +0,0 @@
1
- import { test, expect } from "@playwright/test";
2
- import { promises as fs } from "fs";
3
- import * as os from "os";
4
- import * as path from "path";
5
- import { V3 } from "../../lib/v3/v3.js";
6
- import { v3TestConfig } from "./v3.config.js";
7
- import { Frame } from "../../lib/v3/understudy/frame.js";
8
- const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
9
- test.describe("Page.screenshot options", () => {
10
- let v3;
11
- test.beforeEach(async () => {
12
- v3 = new V3(v3TestConfig);
13
- await v3.init();
14
- });
15
- test.afterEach(async () => {
16
- await v3?.close?.().catch(() => { });
17
- });
18
- test("rejects clip combined with fullPage", async () => {
19
- const page = v3.context.pages()[0];
20
- await page.goto("data:text/html,<html><body>test</body></html>");
21
- await expect(page.screenshot({
22
- fullPage: true,
23
- clip: { x: 0, y: 0, width: 100, height: 100 },
24
- })).rejects.toThrow(/clip and fullPage/);
25
- });
26
- test("rejects unsupported image type", async () => {
27
- const page = v3.context.pages()[0];
28
- await page.goto("data:text/html,<html><body>noop</body></html>");
29
- await expect(page.screenshot({
30
- // @ts-expect-error intentional invalid type for runtime validation
31
- type: "webp",
32
- })).rejects.toThrow(/unsupported image type/);
33
- });
34
- test("rejects jpeg quality for png screenshots", async () => {
35
- const page = v3.context.pages()[0];
36
- await page.goto("data:text/html,<html><body>noop</body></html>");
37
- await expect(page.screenshot({ type: "png", quality: 50 })).rejects.toThrow(/quality option is only valid/);
38
- });
39
- test("honours timeout option", async () => {
40
- const page = v3.context.pages()[0];
41
- await page.goto("data:text/html,<html><body>noop</body></html>");
42
- const mainFrame = page.mainFrame();
43
- const originalScreenshot = mainFrame.screenshot.bind(mainFrame);
44
- mainFrame.screenshot = async () => {
45
- await wait(50);
46
- return Buffer.from("late");
47
- };
48
- try {
49
- await expect(page.screenshot({ timeout: 10 })).rejects.toThrow(/timed out|timeout/i);
50
- }
51
- finally {
52
- mainFrame.screenshot = originalScreenshot;
53
- }
54
- });
55
- test("applies advanced options and cleans up overlays", async () => {
56
- const page = v3.context.pages()[0];
57
- const screenshotTimeout = process.env.CI ? 15000 : 5000;
58
- const testStart = Date.now();
59
- console.log(`[screenshot-test] start ${new Date(testStart).toISOString()} timeout=${screenshotTimeout}`);
60
- const html = `
61
- <!doctype html>
62
- <html>
63
- <head>
64
- <meta charset="utf-8" />
65
- <style>
66
- body { background: #aaccee; margin: 0; height: 100vh; display: flex; flex-direction: column; align-items: flex-start; }
67
- .mask-target { width: 80px; height: 80px; margin: 40px; background: rgb(0, 180, 60); animation: pulse 1s infinite alternate; }
68
- @keyframes pulse { from { transform: scale(1); } to { transform: scale(1.2); } }
69
- </style>
70
- </head>
71
- <body>
72
- <div class="mask-target"></div>
73
- <div class="mask-target"></div>
74
- <input id="focus-me" value="focus" />
75
- <script>document.getElementById('focus-me').focus();</script>
76
- </body>
77
- </html>
78
- `;
79
- await page.goto("data:text/html," + encodeURIComponent(html));
80
- console.log(`[screenshot-test] page loaded in ${Date.now() - testStart}ms`);
81
- const maskLocator = page.locator(".mask-target");
82
- const tempPath = path.join(os.tmpdir(), `stagehand-screenshot-${Date.now()}-${Math.random().toString(36).slice(2)}.jpeg`);
83
- console.log(`[screenshot-test] tempPath=${tempPath}`);
84
- const targetId = page.targetId();
85
- const screenshotCalls = [];
86
- const evaluateCalls = [];
87
- const originalScreenshot = Frame.prototype.screenshot;
88
- const originalEvaluate = Frame.prototype.evaluate;
89
- // Hook Frame.screenshot so we can assert which options reach CDP without writing real data.
90
- Frame.prototype.screenshot = async function screenshotSpy(options) {
91
- const frame = this;
92
- if (frame.pageId === targetId) {
93
- screenshotCalls.push({ frameId: frame.frameId, options });
94
- return Buffer.from("stub-image");
95
- }
96
- return originalScreenshot.call(this, options);
97
- };
98
- // Spy on Frame.evaluate to capture the arguments used to inject CSS/masks.
99
- Frame.prototype.evaluate = async function evaluateSpy(expression, arg) {
100
- const frame = this;
101
- if (frame.pageId === targetId) {
102
- evaluateCalls.push({ frameId: frame.frameId, arg });
103
- }
104
- return originalEvaluate.call(this, expression, arg);
105
- };
106
- const internalPage = page;
107
- const sendCalls = [];
108
- const originalSend = internalPage.mainSession.send.bind(internalPage.mainSession);
109
- // Capture background overrides so we can confirm omitBackground toggles on/off.
110
- internalPage.mainSession.send = async (method, params) => {
111
- sendCalls.push({ method, params });
112
- return originalSend(method, params);
113
- };
114
- try {
115
- const maskCount = await maskLocator.count();
116
- console.log(`[screenshot-test] maskLocator.count=${maskCount}`);
117
- const buffer = await page.screenshot({
118
- animations: "disabled",
119
- caret: "hide",
120
- clip: { x: 0, y: 0, width: 200, height: 200 },
121
- mask: [maskLocator],
122
- maskColor: "rgba(255, 0, 0, 0.4)",
123
- omitBackground: true,
124
- path: tempPath,
125
- quality: 80,
126
- scale: "css",
127
- style: "body { border: 3px solid black; }",
128
- timeout: screenshotTimeout,
129
- type: "jpeg",
130
- });
131
- console.log(`[screenshot-test] screenshot returned bytes=${buffer.length} elapsed=${Date.now() - testStart}ms`);
132
- expect(Buffer.isBuffer(buffer)).toBeTruthy();
133
- expect(screenshotCalls.length).toBeGreaterThanOrEqual(1);
134
- console.log(`[screenshot-test] screenshotCalls=${screenshotCalls.length} evaluateCalls=${evaluateCalls.length} sendCalls=${sendCalls.length}`);
135
- const recorded = screenshotCalls[0]?.options ?? {};
136
- expect(recorded).toMatchObject({ type: "jpeg", quality: 80 });
137
- expect(recorded?.clip).toMatchObject({
138
- x: 0,
139
- y: 0,
140
- width: 200,
141
- height: 200,
142
- });
143
- if (typeof recorded?.scale === "number") {
144
- expect(recorded.scale).toBeGreaterThan(0);
145
- expect(recorded.scale).toBeLessThanOrEqual(2);
146
- }
147
- await fs.stat(tempPath);
148
- const maskNodes = await page.evaluate(() => document.querySelectorAll("[data-stagehand-mask]").length);
149
- expect(maskNodes).toBe(0);
150
- const styleNodes = await page.evaluate(() => document.querySelectorAll("[data-stagehand-style]").length);
151
- expect(styleNodes).toBe(0);
152
- const backgroundCalls = sendCalls.filter((call) => call.method === "Emulation.setDefaultBackgroundColorOverride");
153
- expect(backgroundCalls.length).toBeGreaterThan(1);
154
- expect(backgroundCalls.some((call) => call.params &&
155
- typeof call.params === "object" &&
156
- "color" in call.params)).toBeTruthy();
157
- expect(backgroundCalls.some((call) => !call.params ||
158
- Object.keys(call.params).length === 0)).toBeTruthy();
159
- const cssArgs = evaluateCalls
160
- .map((entry) => {
161
- const value = entry.arg;
162
- return value?.css ?? null;
163
- })
164
- .filter((css) => typeof css === "string");
165
- const tokens = evaluateCalls
166
- .map((entry) => {
167
- const arg = entry.arg;
168
- return arg?.token ?? null;
169
- })
170
- .filter((token) => typeof token === "string");
171
- // Tokens include which helper injected the style (animations/caret/custom).
172
- expect(tokens.some((token) => token.includes("animations"))).toBeTruthy();
173
- expect(tokens.some((token) => token.includes("caret"))).toBeTruthy();
174
- expect(tokens.some((token) => token.includes("custom"))).toBeTruthy();
175
- // Custom style should bubble through so we check the actual CSS text.
176
- expect(cssArgs.some((css) => css.includes("border: 3px solid black"))).toBeTruthy();
177
- const maskCalls = evaluateCalls.filter((entry) => {
178
- const arg = entry.arg;
179
- return (arg &&
180
- typeof arg === "object" &&
181
- "rects" in arg);
182
- });
183
- expect(maskCalls.length).toBeGreaterThan(0);
184
- const rects = maskCalls[0]?.arg
185
- ?.rects;
186
- expect(Array.isArray(rects)).toBeTruthy();
187
- expect(rects.length).toBe(2);
188
- }
189
- finally {
190
- Frame.prototype.screenshot = originalScreenshot;
191
- Frame.prototype.evaluate = originalEvaluate;
192
- internalPage.mainSession.send = originalSend;
193
- await fs.unlink(tempPath).catch(() => { });
194
- }
195
- });
196
- test("masks elements inside dialog top layer", async () => {
197
- const page = v3.context.pages()[0];
198
- const html = `
199
- <!doctype html>
200
- <html>
201
- <head>
202
- <meta charset="utf-8" />
203
- <style>
204
- dialog { padding: 16px; border: 2px solid #444; }
205
- #dialog-input { display: block; width: 160px; height: 32px; }
206
- </style>
207
- </head>
208
- <body>
209
- <dialog id="dialog">
210
- <label>Secret <input id="dialog-input" value="top-layer" /></label>
211
- </dialog>
212
- <script>
213
- const dialog = document.getElementById("dialog");
214
- if (dialog) {
215
- if (typeof dialog.showModal === "function") {
216
- try {
217
- dialog.showModal();
218
- } catch {
219
- dialog.setAttribute("open", "");
220
- }
221
- } else {
222
- dialog.setAttribute("open", "");
223
- }
224
- }
225
- </script>
226
- </body>
227
- </html>
228
- `;
229
- await page.goto("data:text/html," + encodeURIComponent(html));
230
- const targetId = page.targetId();
231
- const originalScreenshot = Frame.prototype.screenshot;
232
- let dialogMaskCount = 0;
233
- Frame.prototype.screenshot = async function screenshotSpy(options) {
234
- const frame = this;
235
- if (frame.pageId === targetId) {
236
- dialogMaskCount = await frame.evaluate(() => {
237
- const dialog = document.querySelector("dialog[open]");
238
- if (!dialog)
239
- return 0;
240
- return dialog.querySelectorAll("[data-stagehand-mask]").length;
241
- });
242
- return Buffer.from("stub-image");
243
- }
244
- return originalScreenshot.call(this, options);
245
- };
246
- try {
247
- await page.screenshot({
248
- mask: [page.locator("#dialog-input")],
249
- });
250
- expect(dialogMaskCount).toBeGreaterThan(0);
251
- }
252
- finally {
253
- Frame.prototype.screenshot = originalScreenshot;
254
- }
255
- });
256
- });
257
- //# sourceMappingURL=page-screenshot.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-screenshot.spec.js","sourceRoot":"","sources":["../../../../tests/integration/page-screenshot.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { test, expect } from \"@playwright/test\";\nimport { promises as fs } from \"fs\";\nimport * as os from \"os\";\nimport * as path from \"path\";\nimport { V3 } from \"../../lib/v3/v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\nimport { Frame } from \"../../lib/v3/understudy/frame.js\";\n\nconst wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\ntest.describe(\"Page.screenshot options\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch(() => {});\n });\n\n test(\"rejects clip combined with fullPage\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\"data:text/html,<html><body>test</body></html>\");\n\n await expect(\n page.screenshot({\n fullPage: true,\n clip: { x: 0, y: 0, width: 100, height: 100 },\n }),\n ).rejects.toThrow(/clip and fullPage/);\n });\n\n test(\"rejects unsupported image type\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\"data:text/html,<html><body>noop</body></html>\");\n\n await expect(\n page.screenshot({\n // @ts-expect-error intentional invalid type for runtime validation\n type: \"webp\",\n }),\n ).rejects.toThrow(/unsupported image type/);\n });\n\n test(\"rejects jpeg quality for png screenshots\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\"data:text/html,<html><body>noop</body></html>\");\n\n await expect(page.screenshot({ type: \"png\", quality: 50 })).rejects.toThrow(\n /quality option is only valid/,\n );\n });\n\n test(\"honours timeout option\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\"data:text/html,<html><body>noop</body></html>\");\n\n const mainFrame = page.mainFrame();\n const originalScreenshot = mainFrame.screenshot.bind(mainFrame);\n\n (\n mainFrame as typeof mainFrame & {\n screenshot: typeof mainFrame.screenshot;\n }\n ).screenshot = async () => {\n await wait(50);\n return Buffer.from(\"late\");\n };\n\n try {\n await expect(page.screenshot({ timeout: 10 })).rejects.toThrow(\n /timed out|timeout/i,\n );\n } finally {\n (\n mainFrame as typeof mainFrame & {\n screenshot: typeof mainFrame.screenshot;\n }\n ).screenshot = originalScreenshot;\n }\n });\n\n test(\"applies advanced options and cleans up overlays\", async () => {\n const page = v3.context.pages()[0];\n const screenshotTimeout = process.env.CI ? 15000 : 5000;\n const testStart = Date.now();\n console.log(\n `[screenshot-test] start ${new Date(testStart).toISOString()} timeout=${screenshotTimeout}`,\n );\n\n const html = `\n <!doctype html>\n <html>\n <head>\n <meta charset=\"utf-8\" />\n <style>\n body { background: #aaccee; margin: 0; height: 100vh; display: flex; flex-direction: column; align-items: flex-start; }\n .mask-target { width: 80px; height: 80px; margin: 40px; background: rgb(0, 180, 60); animation: pulse 1s infinite alternate; }\n @keyframes pulse { from { transform: scale(1); } to { transform: scale(1.2); } }\n </style>\n </head>\n <body>\n <div class=\"mask-target\"></div>\n <div class=\"mask-target\"></div>\n <input id=\"focus-me\" value=\"focus\" />\n <script>document.getElementById('focus-me').focus();</script>\n </body>\n </html>\n `;\n\n await page.goto(\"data:text/html,\" + encodeURIComponent(html));\n console.log(`[screenshot-test] page loaded in ${Date.now() - testStart}ms`);\n\n const maskLocator = page.locator(\".mask-target\");\n const tempPath = path.join(\n os.tmpdir(),\n `stagehand-screenshot-${Date.now()}-${Math.random().toString(36).slice(2)}.jpeg`,\n );\n console.log(`[screenshot-test] tempPath=${tempPath}`);\n\n const targetId = page.targetId();\n const screenshotCalls: Array<{\n frameId: string;\n options: Parameters<Frame[\"screenshot\"]>[0];\n }> = [];\n const evaluateCalls: Array<{ frameId: string; arg: unknown }> = [];\n const originalScreenshot = Frame.prototype.screenshot;\n const originalEvaluate = Frame.prototype.evaluate;\n\n // Hook Frame.screenshot so we can assert which options reach CDP without writing real data.\n Frame.prototype.screenshot = async function screenshotSpy(options) {\n const frame = this as Frame;\n if (frame.pageId === targetId) {\n screenshotCalls.push({ frameId: frame.frameId, options });\n return Buffer.from(\"stub-image\");\n }\n return originalScreenshot.call(this, options);\n };\n\n // Spy on Frame.evaluate to capture the arguments used to inject CSS/masks.\n Frame.prototype.evaluate = async function evaluateSpy(expression, arg?) {\n const frame = this as Frame;\n if (frame.pageId === targetId) {\n evaluateCalls.push({ frameId: frame.frameId, arg });\n }\n return originalEvaluate.call(this, expression as never, arg);\n } as Frame[\"evaluate\"];\n\n const internalPage = page as unknown as {\n mainSession: {\n send: (method: string, params?: unknown) => Promise<unknown>;\n };\n };\n const sendCalls: Array<{ method: string; params: unknown }> = [];\n const originalSend = internalPage.mainSession.send.bind(\n internalPage.mainSession,\n ) as (method: string, params?: unknown) => Promise<unknown>;\n // Capture background overrides so we can confirm omitBackground toggles on/off.\n internalPage.mainSession.send = async (\n method: string,\n params?: unknown,\n ) => {\n sendCalls.push({ method, params });\n return originalSend(method, params);\n };\n\n try {\n const maskCount = await maskLocator.count();\n console.log(`[screenshot-test] maskLocator.count=${maskCount}`);\n\n const buffer = await page.screenshot({\n animations: \"disabled\",\n caret: \"hide\",\n clip: { x: 0, y: 0, width: 200, height: 200 },\n mask: [maskLocator],\n maskColor: \"rgba(255, 0, 0, 0.4)\",\n omitBackground: true,\n path: tempPath,\n quality: 80,\n scale: \"css\",\n style: \"body { border: 3px solid black; }\",\n timeout: screenshotTimeout,\n type: \"jpeg\",\n });\n console.log(\n `[screenshot-test] screenshot returned bytes=${buffer.length} elapsed=${Date.now() - testStart}ms`,\n );\n\n expect(Buffer.isBuffer(buffer)).toBeTruthy();\n expect(screenshotCalls.length).toBeGreaterThanOrEqual(1);\n console.log(\n `[screenshot-test] screenshotCalls=${screenshotCalls.length} evaluateCalls=${evaluateCalls.length} sendCalls=${sendCalls.length}`,\n );\n const recorded = screenshotCalls[0]?.options ?? {};\n expect(recorded).toMatchObject({ type: \"jpeg\", quality: 80 });\n expect(recorded?.clip).toMatchObject({\n x: 0,\n y: 0,\n width: 200,\n height: 200,\n });\n if (typeof recorded?.scale === \"number\") {\n expect(recorded.scale).toBeGreaterThan(0);\n expect(recorded.scale).toBeLessThanOrEqual(2);\n }\n\n await fs.stat(tempPath);\n\n const maskNodes = await page.evaluate(\n () => document.querySelectorAll(\"[data-stagehand-mask]\").length,\n );\n expect(maskNodes).toBe(0);\n\n const styleNodes = await page.evaluate(\n () => document.querySelectorAll(\"[data-stagehand-style]\").length,\n );\n expect(styleNodes).toBe(0);\n\n const backgroundCalls = sendCalls.filter(\n (call) => call.method === \"Emulation.setDefaultBackgroundColorOverride\",\n );\n expect(backgroundCalls.length).toBeGreaterThan(1);\n expect(\n backgroundCalls.some(\n (call) =>\n call.params &&\n typeof call.params === \"object\" &&\n \"color\" in (call.params as Record<string, unknown>),\n ),\n ).toBeTruthy();\n expect(\n backgroundCalls.some(\n (call) =>\n !call.params ||\n Object.keys(call.params as Record<string, unknown>).length === 0,\n ),\n ).toBeTruthy();\n\n const cssArgs = evaluateCalls\n .map((entry) => {\n const value = entry.arg as { css?: string } | undefined;\n return value?.css ?? null;\n })\n .filter((css): css is string => typeof css === \"string\");\n\n const tokens = evaluateCalls\n .map((entry) => {\n const arg = entry.arg as { token?: string } | undefined;\n return arg?.token ?? null;\n })\n .filter((token): token is string => typeof token === \"string\");\n\n // Tokens include which helper injected the style (animations/caret/custom).\n expect(tokens.some((token) => token.includes(\"animations\"))).toBeTruthy();\n expect(tokens.some((token) => token.includes(\"caret\"))).toBeTruthy();\n expect(tokens.some((token) => token.includes(\"custom\"))).toBeTruthy();\n // Custom style should bubble through so we check the actual CSS text.\n expect(\n cssArgs.some((css) => css.includes(\"border: 3px solid black\")),\n ).toBeTruthy();\n\n const maskCalls = evaluateCalls.filter((entry) => {\n const arg = entry.arg;\n return (\n arg &&\n typeof arg === \"object\" &&\n \"rects\" in (arg as Record<string, unknown>)\n );\n });\n expect(maskCalls.length).toBeGreaterThan(0);\n const rects = (maskCalls[0]?.arg as { rects?: unknown } | undefined)\n ?.rects;\n expect(Array.isArray(rects)).toBeTruthy();\n expect((rects as unknown[]).length).toBe(2);\n } finally {\n Frame.prototype.screenshot = originalScreenshot;\n Frame.prototype.evaluate = originalEvaluate;\n internalPage.mainSession.send = originalSend;\n await fs.unlink(tempPath).catch(() => {});\n }\n });\n\n test(\"masks elements inside dialog top layer\", async () => {\n const page = v3.context.pages()[0];\n\n const html = `\n <!doctype html>\n <html>\n <head>\n <meta charset=\"utf-8\" />\n <style>\n dialog { padding: 16px; border: 2px solid #444; }\n #dialog-input { display: block; width: 160px; height: 32px; }\n </style>\n </head>\n <body>\n <dialog id=\"dialog\">\n <label>Secret <input id=\"dialog-input\" value=\"top-layer\" /></label>\n </dialog>\n <script>\n const dialog = document.getElementById(\"dialog\");\n if (dialog) {\n if (typeof dialog.showModal === \"function\") {\n try {\n dialog.showModal();\n } catch {\n dialog.setAttribute(\"open\", \"\");\n }\n } else {\n dialog.setAttribute(\"open\", \"\");\n }\n }\n </script>\n </body>\n </html>\n `;\n\n await page.goto(\"data:text/html,\" + encodeURIComponent(html));\n\n const targetId = page.targetId();\n const originalScreenshot = Frame.prototype.screenshot;\n let dialogMaskCount = 0;\n\n Frame.prototype.screenshot = async function screenshotSpy(options) {\n const frame = this as Frame;\n if (frame.pageId === targetId) {\n dialogMaskCount = await frame.evaluate(() => {\n const dialog = document.querySelector(\"dialog[open]\");\n if (!dialog) return 0;\n return dialog.querySelectorAll(\"[data-stagehand-mask]\").length;\n });\n return Buffer.from(\"stub-image\");\n }\n return originalScreenshot.call(this, options);\n };\n\n try {\n await page.screenshot({\n mask: [page.locator(\"#dialog-input\")],\n });\n expect(dialogMaskCount).toBeGreaterThan(0);\n } finally {\n Frame.prototype.screenshot = originalScreenshot;\n }\n });\n});\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,181 +0,0 @@
1
- import { test, expect } from "@playwright/test";
2
- import { V3 } from "../../lib/v3/v3.js";
3
- import { v3TestConfig } from "./v3.config.js";
4
- test.describe("Page.scroll() - mouse wheel scrolling", () => {
5
- let v3;
6
- test.beforeEach(async () => {
7
- v3 = new V3(v3TestConfig);
8
- await v3.init();
9
- });
10
- test.afterEach(async () => {
11
- await v3?.close?.().catch(() => { });
12
- });
13
- test("scrolls page vertically with positive deltaY", async () => {
14
- const page = v3.context.pages()[0];
15
- await page.goto("data:text/html," +
16
- encodeURIComponent(`<!doctype html><html><body style="height: 2000px;">
17
- <div style="height: 400px; background: lightblue;">Section 1</div>
18
- <div style="height: 400px; background: lightgreen;">Section 2</div>
19
- <div style="height: 400px; background: lightyellow;">Section 3</div>
20
- <div style="height: 400px; background: lightcoral;">Section 4</div>
21
- <div style="height: 400px; background: lightgray;">Section 5</div>
22
- </body></html>`));
23
- // Get initial scroll position
24
- let scrollY = await page.evaluate(() => window.scrollY);
25
- expect(scrollY).toBe(0);
26
- // Scroll down (positive deltaY)
27
- await page.scroll(640, 400, 0, 300);
28
- // Wait for scroll to complete
29
- await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));
30
- // Check that we've scrolled down
31
- scrollY = await page.evaluate(() => window.scrollY);
32
- expect(scrollY).toBeGreaterThan(0);
33
- });
34
- test("scrolls page horizontally with positive deltaX", async () => {
35
- const page = v3.context.pages()[0];
36
- await page.goto("data:text/html," +
37
- encodeURIComponent(`<!doctype html><html><body style="width: 2000px; height: 600px;">
38
- <div style="display: inline-block; width: 400px; height: 100%; background: lightblue;">Section 1</div>
39
- <div style="display: inline-block; width: 400px; height: 100%; background: lightgreen;">Section 2</div>
40
- <div style="display: inline-block; width: 400px; height: 100%; background: lightyellow;">Section 3</div>
41
- <div style="display: inline-block; width: 400px; height: 100%; background: lightcoral;">Section 4</div>
42
- <div style="display: inline-block; width: 400px; height: 100%; background: lightgray;">Section 5</div>
43
- </body></html>`));
44
- let scrollX = await page.evaluate(() => window.scrollX);
45
- expect(scrollX).toBe(0);
46
- // Scroll right (positive deltaX)
47
- await page.scroll(640, 400, 300, 0);
48
- // Wait for scroll to complete
49
- await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));
50
- // Check that we've scrolled right
51
- scrollX = await page.evaluate(() => window.scrollX);
52
- expect(scrollX).toBeGreaterThan(0);
53
- });
54
- test("scrolls in both directions simultaneously", async () => {
55
- const page = v3.context.pages()[0];
56
- await page.goto("data:text/html," +
57
- encodeURIComponent(`<!doctype html><html><body style="width: 2000px; height: 2000px;">
58
- <div style="width: 100%; height: 100%; background: linear-gradient(135deg, lightblue, lightcoral);">
59
- Diagonal content
60
- </div>
61
- </body></html>`));
62
- // Scroll both horizontally and vertically
63
- await page.scroll(640, 400, 200, 200);
64
- // Wait for scroll to complete
65
- await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));
66
- // Check both directions changed
67
- const scrollPos = await page.evaluate(() => ({
68
- x: window.scrollX,
69
- y: window.scrollY,
70
- }));
71
- expect(scrollPos.x).toBeGreaterThan(0);
72
- expect(scrollPos.y).toBeGreaterThan(0);
73
- });
74
- test("scrolls at specific coordinate on page", async () => {
75
- const page = v3.context.pages()[0];
76
- await page.goto("data:text/html," +
77
- encodeURIComponent(`<!doctype html><html><body style="height: 2000px;">
78
- <div id="marker" style="position: fixed; top: 400px; left: 640px; width: 2px; height: 2px; background: red;"></div>
79
- <div style="height: 500px; background: lightblue;">Top</div>
80
- <div style="height: 500px; background: lightgreen;">Middle</div>
81
- <div style="height: 500px; background: lightyellow;">Bottom</div>
82
- </body></html>`));
83
- // Scroll from specific coordinates
84
- await page.scroll(640, 400, 0, 400);
85
- // Wait for scroll to complete
86
- await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));
87
- // Verify scroll happened
88
- const scrollY = await page.evaluate(() => window.scrollY);
89
- expect(scrollY).toBeGreaterThan(0);
90
- });
91
- test("scrolls with large deltaY values", async () => {
92
- const page = v3.context.pages()[0];
93
- await page.goto("data:text/html," +
94
- encodeURIComponent(`<!doctype html><html><body style="height: 5000px;">
95
- <div style="height: 1000px; background: lightblue;">Section 1</div>
96
- <div style="height: 1000px; background: lightgreen;">Section 2</div>
97
- <div style="height: 1000px; background: lightyellow;">Section 3</div>
98
- <div style="height: 1000px; background: lightcoral;">Section 4</div>
99
- <div style="height: 1000px; background: lightgray;">Section 5</div>
100
- </body></html>`));
101
- // Scroll with large delta
102
- await page.scroll(640, 400, 0, 1000);
103
- // Wait for scroll to complete
104
- await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));
105
- // Should scroll significantly
106
- const scrollY = await page.evaluate(() => window.scrollY);
107
- expect(scrollY).toBeGreaterThan(500);
108
- });
109
- test("negative deltaY scrolls up", async () => {
110
- const page = v3.context.pages()[0];
111
- await page.goto("data:text/html," +
112
- encodeURIComponent(`<!doctype html><html><body style="height: 2000px;">
113
- <div style="height: 500px; background: lightblue;">Top</div>
114
- <div style="height: 500px; background: lightgreen;">Middle 1</div>
115
- <div style="height: 500px; background: lightyellow;">Middle 2</div>
116
- <div style="height: 500px; background: lightcoral;">Bottom</div>
117
- </body></html>`));
118
- // First scroll down
119
- await page.scroll(640, 400, 0, 500);
120
- await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));
121
- let scrollY = await page.evaluate(() => window.scrollY);
122
- const scrolledDown = scrollY;
123
- expect(scrolledDown).toBeGreaterThan(0);
124
- // Now scroll up (negative delta)
125
- await page.scroll(640, 400, 0, -300);
126
- await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));
127
- scrollY = await page.evaluate(() => window.scrollY);
128
- expect(scrollY).toBeLessThan(scrolledDown);
129
- });
130
- test("scroll returns xpath when requested", async () => {
131
- const page = v3.context.pages()[0];
132
- await page.goto("data:text/html," +
133
- encodeURIComponent(`<!doctype html><html><body style="height: 2000px; margin: 0; padding: 0;">
134
- <div id="target" style="position: absolute; top: 0px; left: 400px; width: 300px; height: 100px; background: blue;">
135
- Target element
136
- </div>
137
- <p style="position: absolute; top: 200px; left: 0px;">Content below</p>
138
- </body></html>`));
139
- // Scroll at coordinate (550, 50) which should be directly over the target div
140
- // div spans: left 400-700px, top 0-100px
141
- // coordinate 550,50 is within that range
142
- const xpath = await page.scroll(550, 50, 0, 200, { returnXpath: true });
143
- // Should return a non-empty xpath string for the element at that coordinate
144
- expect(typeof xpath).toBe("string");
145
- expect(xpath.length).toBeGreaterThan(0);
146
- // Xpath should reference the div or contain "target"
147
- expect(xpath.toLowerCase()).toMatch(/div|target/);
148
- });
149
- test("scroll without returnXpath returns empty string", async () => {
150
- const page = v3.context.pages()[0];
151
- await page.goto("data:text/html," +
152
- encodeURIComponent(`<!doctype html><html><body style="height: 2000px;">
153
- <div style="height: 500px; background: lightblue;">Content</div>
154
- </body></html>`));
155
- // Scroll without returnXpath
156
- const result = await page.scroll(640, 400, 0, 200);
157
- // Should return empty string
158
- expect(result).toBe("");
159
- });
160
- test("multiple sequential scrolls accumulate", async () => {
161
- const page = v3.context.pages()[0];
162
- await page.goto("data:text/html," +
163
- encodeURIComponent(`<!doctype html><html><body style="height: 3000px;">
164
- <div style="height: 750px; background: lightblue;">Section 1</div>
165
- <div style="height: 750px; background: lightgreen;">Section 2</div>
166
- <div style="height: 750px; background: lightyellow;">Section 3</div>
167
- <div style="height: 750px; background: lightcoral;">Section 4</div>
168
- </body></html>`));
169
- // First scroll
170
- await page.scroll(640, 400, 0, 200);
171
- await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));
172
- const after1 = await page.evaluate(() => window.scrollY);
173
- expect(after1).toBeGreaterThan(0);
174
- // Second scroll
175
- await page.scroll(640, 400, 0, 200);
176
- await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));
177
- const after2 = await page.evaluate(() => window.scrollY);
178
- expect(after2).toBeGreaterThan(after1);
179
- });
180
- });
181
- //# sourceMappingURL=page-scroll.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-scroll.spec.js","sourceRoot":"","sources":["../../../../tests/integration/page-scroll.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../../lib/v3/v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\n\ntest.describe(\"Page.scroll() - mouse wheel scrolling\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch(() => {});\n });\n\n test(\"scrolls page vertically with positive deltaY\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body style=\"height: 2000px;\">\n <div style=\"height: 400px; background: lightblue;\">Section 1</div>\n <div style=\"height: 400px; background: lightgreen;\">Section 2</div>\n <div style=\"height: 400px; background: lightyellow;\">Section 3</div>\n <div style=\"height: 400px; background: lightcoral;\">Section 4</div>\n <div style=\"height: 400px; background: lightgray;\">Section 5</div>\n </body></html>`,\n ),\n );\n\n // Get initial scroll position\n let scrollY = await page.evaluate(() => window.scrollY);\n expect(scrollY).toBe(0);\n\n // Scroll down (positive deltaY)\n await page.scroll(640, 400, 0, 300);\n\n // Wait for scroll to complete\n await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));\n\n // Check that we've scrolled down\n scrollY = await page.evaluate(() => window.scrollY);\n expect(scrollY).toBeGreaterThan(0);\n });\n\n test(\"scrolls page horizontally with positive deltaX\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body style=\"width: 2000px; height: 600px;\">\n <div style=\"display: inline-block; width: 400px; height: 100%; background: lightblue;\">Section 1</div>\n <div style=\"display: inline-block; width: 400px; height: 100%; background: lightgreen;\">Section 2</div>\n <div style=\"display: inline-block; width: 400px; height: 100%; background: lightyellow;\">Section 3</div>\n <div style=\"display: inline-block; width: 400px; height: 100%; background: lightcoral;\">Section 4</div>\n <div style=\"display: inline-block; width: 400px; height: 100%; background: lightgray;\">Section 5</div>\n </body></html>`,\n ),\n );\n\n let scrollX = await page.evaluate(() => window.scrollX);\n expect(scrollX).toBe(0);\n\n // Scroll right (positive deltaX)\n await page.scroll(640, 400, 300, 0);\n\n // Wait for scroll to complete\n await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));\n\n // Check that we've scrolled right\n scrollX = await page.evaluate(() => window.scrollX);\n expect(scrollX).toBeGreaterThan(0);\n });\n\n test(\"scrolls in both directions simultaneously\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body style=\"width: 2000px; height: 2000px;\">\n <div style=\"width: 100%; height: 100%; background: linear-gradient(135deg, lightblue, lightcoral);\">\n Diagonal content\n </div>\n </body></html>`,\n ),\n );\n\n // Scroll both horizontally and vertically\n await page.scroll(640, 400, 200, 200);\n\n // Wait for scroll to complete\n await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));\n\n // Check both directions changed\n const scrollPos = await page.evaluate(() => ({\n x: window.scrollX,\n y: window.scrollY,\n }));\n\n expect(scrollPos.x).toBeGreaterThan(0);\n expect(scrollPos.y).toBeGreaterThan(0);\n });\n\n test(\"scrolls at specific coordinate on page\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body style=\"height: 2000px;\">\n <div id=\"marker\" style=\"position: fixed; top: 400px; left: 640px; width: 2px; height: 2px; background: red;\"></div>\n <div style=\"height: 500px; background: lightblue;\">Top</div>\n <div style=\"height: 500px; background: lightgreen;\">Middle</div>\n <div style=\"height: 500px; background: lightyellow;\">Bottom</div>\n </body></html>`,\n ),\n );\n\n // Scroll from specific coordinates\n await page.scroll(640, 400, 0, 400);\n\n // Wait for scroll to complete\n await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));\n\n // Verify scroll happened\n const scrollY = await page.evaluate(() => window.scrollY);\n expect(scrollY).toBeGreaterThan(0);\n });\n\n test(\"scrolls with large deltaY values\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body style=\"height: 5000px;\">\n <div style=\"height: 1000px; background: lightblue;\">Section 1</div>\n <div style=\"height: 1000px; background: lightgreen;\">Section 2</div>\n <div style=\"height: 1000px; background: lightyellow;\">Section 3</div>\n <div style=\"height: 1000px; background: lightcoral;\">Section 4</div>\n <div style=\"height: 1000px; background: lightgray;\">Section 5</div>\n </body></html>`,\n ),\n );\n\n // Scroll with large delta\n await page.scroll(640, 400, 0, 1000);\n\n // Wait for scroll to complete\n await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));\n\n // Should scroll significantly\n const scrollY = await page.evaluate(() => window.scrollY);\n expect(scrollY).toBeGreaterThan(500);\n });\n\n test(\"negative deltaY scrolls up\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body style=\"height: 2000px;\">\n <div style=\"height: 500px; background: lightblue;\">Top</div>\n <div style=\"height: 500px; background: lightgreen;\">Middle 1</div>\n <div style=\"height: 500px; background: lightyellow;\">Middle 2</div>\n <div style=\"height: 500px; background: lightcoral;\">Bottom</div>\n </body></html>`,\n ),\n );\n\n // First scroll down\n await page.scroll(640, 400, 0, 500);\n await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));\n\n let scrollY = await page.evaluate(() => window.scrollY);\n const scrolledDown = scrollY;\n expect(scrolledDown).toBeGreaterThan(0);\n\n // Now scroll up (negative delta)\n await page.scroll(640, 400, 0, -300);\n await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));\n\n scrollY = await page.evaluate(() => window.scrollY);\n expect(scrollY).toBeLessThan(scrolledDown);\n });\n\n test(\"scroll returns xpath when requested\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body style=\"height: 2000px; margin: 0; padding: 0;\">\n <div id=\"target\" style=\"position: absolute; top: 0px; left: 400px; width: 300px; height: 100px; background: blue;\">\n Target element\n </div>\n <p style=\"position: absolute; top: 200px; left: 0px;\">Content below</p>\n </body></html>`,\n ),\n );\n\n // Scroll at coordinate (550, 50) which should be directly over the target div\n // div spans: left 400-700px, top 0-100px\n // coordinate 550,50 is within that range\n const xpath = await page.scroll(550, 50, 0, 200, { returnXpath: true });\n\n // Should return a non-empty xpath string for the element at that coordinate\n expect(typeof xpath).toBe(\"string\");\n expect(xpath.length).toBeGreaterThan(0);\n // Xpath should reference the div or contain \"target\"\n expect(xpath.toLowerCase()).toMatch(/div|target/);\n });\n\n test(\"scroll without returnXpath returns empty string\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body style=\"height: 2000px;\">\n <div style=\"height: 500px; background: lightblue;\">Content</div>\n </body></html>`,\n ),\n );\n\n // Scroll without returnXpath\n const result = await page.scroll(640, 400, 0, 200);\n\n // Should return empty string\n expect(result).toBe(\"\");\n });\n\n test(\"multiple sequential scrolls accumulate\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body style=\"height: 3000px;\">\n <div style=\"height: 750px; background: lightblue;\">Section 1</div>\n <div style=\"height: 750px; background: lightgreen;\">Section 2</div>\n <div style=\"height: 750px; background: lightyellow;\">Section 3</div>\n <div style=\"height: 750px; background: lightcoral;\">Section 4</div>\n </body></html>`,\n ),\n );\n\n // First scroll\n await page.scroll(640, 400, 0, 200);\n await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));\n\n const after1 = await page.evaluate(() => window.scrollY);\n expect(after1).toBeGreaterThan(0);\n\n // Second scroll\n await page.scroll(640, 400, 0, 200);\n await page.evaluate(() => new Promise((r) => setTimeout(r, 200)));\n\n const after2 = await page.evaluate(() => window.scrollY);\n\n expect(after2).toBeGreaterThan(after1);\n });\n});\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,45 +0,0 @@
1
- import { test, expect } from "@playwright/test";
2
- import { V3 } from "../../lib/v3/v3.js";
3
- import { v3TestConfig } from "./v3.config.js";
4
- test.describe("Page sendCDP method", () => {
5
- let v3;
6
- test.beforeEach(async () => {
7
- v3 = new V3(v3TestConfig);
8
- await v3.init();
9
- });
10
- test.afterEach(async () => {
11
- await v3?.close?.().catch(() => { });
12
- });
13
- test("sends CDP commands and requires domain to be enabled first", async () => {
14
- const page = v3.context.pages()[0];
15
- await page.goto("https://example.com");
16
- // Try to add a virtual authenticator without enabling WebAuthn first
17
- // This should fail because the domain needs to be enabled
18
- await expect(page.sendCDP("WebAuthn.addVirtualAuthenticator", {
19
- options: {
20
- protocol: "ctap2",
21
- transport: "usb",
22
- hasResidentKey: false,
23
- hasUserVerification: false,
24
- isUserVerified: false,
25
- },
26
- })).rejects.toThrow();
27
- // Enable the WebAuthn domain
28
- await page.sendCDP("WebAuthn.enable");
29
- // Now adding a virtual authenticator should succeed
30
- const result = await page.sendCDP("WebAuthn.addVirtualAuthenticator", {
31
- options: {
32
- protocol: "ctap2",
33
- transport: "usb",
34
- hasResidentKey: false,
35
- hasUserVerification: false,
36
- isUserVerified: false,
37
- },
38
- });
39
- // Verify we got an authenticator ID back
40
- expect(result).toHaveProperty("authenticatorId");
41
- expect(typeof result.authenticatorId).toBe("string");
42
- expect(result.authenticatorId.length).toBeGreaterThan(0);
43
- });
44
- });
45
- //# sourceMappingURL=page-send-cdp.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-send-cdp.spec.js","sourceRoot":"","sources":["../../../../tests/integration/page-send-cdp.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACxC,IAAI,EAAM,CAAC;IAEX,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;QACzB,EAAE,GAAG,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC;QAC1B,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAEvC,qEAAqE;QACrE,0DAA0D;QAC1D,MAAM,MAAM,CACV,IAAI,CAAC,OAAO,CAAC,kCAAkC,EAAE;YAC/C,OAAO,EAAE;gBACP,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,KAAK;gBAChB,cAAc,EAAE,KAAK;gBACrB,mBAAmB,EAAE,KAAK;gBAC1B,cAAc,EAAE,KAAK;aACtB;SACF,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAEpB,6BAA6B;QAC7B,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAEtC,oDAAoD;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,kCAAkC,EAClC;YACE,OAAO,EAAE;gBACP,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,KAAK;gBAChB,cAAc,EAAE,KAAK;gBACrB,mBAAmB,EAAE,KAAK;gBAC1B,cAAc,EAAE,KAAK;aACtB;SACF,CACF,CAAC;QAEF,yCAAyC;QACzC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../../lib/v3/v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\n\ntest.describe(\"Page sendCDP method\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch(() => {});\n });\n\n test(\"sends CDP commands and requires domain to be enabled first\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n // Try to add a virtual authenticator without enabling WebAuthn first\n // This should fail because the domain needs to be enabled\n await expect(\n page.sendCDP(\"WebAuthn.addVirtualAuthenticator\", {\n options: {\n protocol: \"ctap2\",\n transport: \"usb\",\n hasResidentKey: false,\n hasUserVerification: false,\n isUserVerified: false,\n },\n }),\n ).rejects.toThrow();\n\n // Enable the WebAuthn domain\n await page.sendCDP(\"WebAuthn.enable\");\n\n // Now adding a virtual authenticator should succeed\n const result = await page.sendCDP<{ authenticatorId: string }>(\n \"WebAuthn.addVirtualAuthenticator\",\n {\n options: {\n protocol: \"ctap2\",\n transport: \"usb\",\n hasResidentKey: false,\n hasUserVerification: false,\n isUserVerified: false,\n },\n },\n );\n\n // Verify we got an authenticator ID back\n expect(result).toHaveProperty(\"authenticatorId\");\n expect(typeof result.authenticatorId).toBe(\"string\");\n expect(result.authenticatorId.length).toBeGreaterThan(0);\n });\n});\n"]}