@browserbasehq/orca 3.1.0-patch.0 → 3.1.0-patch.1

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 (387) hide show
  1. package/dist/cjs/cli.js +183 -0
  2. package/dist/cjs/cli.js.map +7 -0
  3. package/dist/cjs/index.d.ts +1 -0
  4. package/dist/cjs/index.js +24956 -0
  5. package/dist/cjs/index.js.map +7 -0
  6. package/dist/cjs/lib/inference.d.ts +65 -0
  7. package/dist/cjs/lib/inferenceLogUtils.d.ts +12 -0
  8. package/dist/cjs/lib/logger.d.ts +69 -0
  9. package/dist/cjs/lib/modelUtils.d.ts +11 -0
  10. package/dist/cjs/lib/prompt.d.ts +14 -0
  11. package/dist/cjs/lib/utils.d.ts +68 -0
  12. package/dist/cjs/lib/v3/agent/AgentClient.d.ts +19 -0
  13. package/dist/cjs/lib/v3/agent/AgentProvider.d.ts +20 -0
  14. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.d.ts +57 -0
  15. package/dist/cjs/lib/v3/agent/GoogleCUAClient.d.ts +74 -0
  16. package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.d.ts +71 -0
  17. package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +69 -0
  18. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +12 -0
  19. package/dist/cjs/lib/v3/agent/tools/act.d.ts +12 -0
  20. package/dist/cjs/lib/v3/agent/tools/ariaTree.d.ts +5 -0
  21. package/dist/cjs/lib/v3/agent/tools/click.d.ts +6 -0
  22. package/dist/cjs/lib/v3/agent/tools/clickAndHold.d.ts +14 -0
  23. package/dist/cjs/lib/v3/agent/tools/dragAndDrop.d.ts +7 -0
  24. package/dist/cjs/lib/v3/agent/tools/extract.d.ts +20 -0
  25. package/dist/cjs/lib/v3/agent/tools/fillFormVision.d.ts +12 -0
  26. package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +12 -0
  27. package/dist/cjs/lib/v3/agent/tools/goto.d.ts +12 -0
  28. package/dist/cjs/lib/v3/agent/tools/index.d.ts +92 -0
  29. package/dist/cjs/lib/v3/agent/tools/keys.d.ts +24 -0
  30. package/dist/cjs/lib/v3/agent/tools/navback.d.ts +6 -0
  31. package/dist/cjs/lib/v3/agent/tools/screenshot.d.ts +6 -0
  32. package/dist/cjs/lib/v3/agent/tools/scroll.d.ts +19 -0
  33. package/dist/cjs/lib/v3/agent/tools/search.d.ts +15 -0
  34. package/dist/cjs/lib/v3/agent/tools/think.d.ts +6 -0
  35. package/dist/cjs/lib/v3/agent/tools/type.d.ts +7 -0
  36. package/dist/cjs/lib/v3/agent/tools/wait.d.ts +5 -0
  37. package/dist/cjs/lib/v3/agent/utils/actionMapping.d.ts +3 -0
  38. package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.d.ts +13 -0
  39. package/dist/cjs/lib/v3/agent/utils/cuaKeyMapping.d.ts +10 -0
  40. package/dist/cjs/lib/v3/agent/utils/googleCustomToolHandler.d.ts +25 -0
  41. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.d.ts +22 -0
  42. package/dist/cjs/lib/v3/agent/utils/imageCompression.d.ts +53 -0
  43. package/dist/cjs/lib/v3/agent/utils/messageProcessing.d.ts +12 -0
  44. package/dist/cjs/lib/v3/agent/utils/screenshotHandler.d.ts +10 -0
  45. package/dist/cjs/lib/v3/agent/utils/validateExperimentalFeatures.d.ts +26 -0
  46. package/dist/cjs/lib/v3/agent/utils/xpath.d.ts +11 -0
  47. package/dist/cjs/lib/v3/api.d.ts +86 -0
  48. package/dist/cjs/lib/v3/cache/ActCache.d.ts +23 -0
  49. package/dist/cjs/lib/v3/cache/AgentCache.d.ts +109 -0
  50. package/dist/cjs/lib/v3/cache/CacheStorage.d.ts +17 -0
  51. package/dist/cjs/lib/v3/cache/serverAgentCache.d.ts +7 -0
  52. package/dist/cjs/lib/v3/cache/utils.d.ts +15 -0
  53. package/dist/cjs/lib/v3/cli.d.ts +2 -0
  54. package/dist/cjs/lib/v3/dom/a11yScripts/index.d.ts +11 -0
  55. package/dist/cjs/lib/v3/dom/build/a11yScripts.generated.d.ts +16 -0
  56. package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.d.ts +52 -0
  57. package/dist/cjs/lib/v3/dom/build/reRenderScriptContent.d.ts +1 -0
  58. package/dist/cjs/lib/v3/dom/build/rerender-index.d.ts +0 -0
  59. package/dist/cjs/lib/v3/dom/build/rerender-index.js +1 -0
  60. package/dist/cjs/lib/v3/dom/build/screenshotScripts.generated.d.ts +4 -0
  61. package/dist/cjs/lib/v3/dom/build/scriptV3Content.d.ts +1 -0
  62. package/dist/cjs/lib/v3/dom/build/v3-index.d.ts +0 -0
  63. package/dist/cjs/lib/v3/dom/build/v3-index.js +1 -0
  64. package/dist/cjs/lib/v3/dom/genA11yScripts.d.ts +1 -0
  65. package/dist/cjs/lib/v3/dom/genDomScripts.d.ts +1 -0
  66. package/dist/cjs/lib/v3/dom/genLocatorScripts.d.ts +1 -0
  67. package/dist/cjs/lib/v3/dom/genScreenshotScripts.d.ts +1 -0
  68. package/dist/cjs/lib/v3/dom/index.d.ts +1 -0
  69. package/dist/cjs/lib/v3/dom/locatorScripts/counts.d.ts +15 -0
  70. package/dist/cjs/lib/v3/dom/locatorScripts/index.d.ts +4 -0
  71. package/dist/cjs/lib/v3/dom/locatorScripts/scripts.d.ts +37 -0
  72. package/dist/cjs/lib/v3/dom/locatorScripts/selectors.d.ts +4 -0
  73. package/dist/cjs/lib/v3/dom/locatorScripts/waitForSelector.d.ts +19 -0
  74. package/dist/cjs/lib/v3/dom/locatorScripts/xpathParser.d.ts +76 -0
  75. package/dist/cjs/lib/v3/dom/locatorScripts/xpathResolver.d.ts +9 -0
  76. package/dist/cjs/lib/v3/dom/piercer.entry.d.ts +1 -0
  77. package/dist/cjs/lib/v3/dom/piercer.runtime.d.ts +23 -0
  78. package/dist/cjs/lib/v3/dom/rerenderMissingShadows.entry.d.ts +1 -0
  79. package/dist/cjs/lib/v3/dom/rerenderMissingShadows.runtime.d.ts +1 -0
  80. package/dist/cjs/lib/v3/dom/screenshotScripts/index.d.ts +1 -0
  81. package/dist/cjs/lib/v3/dom/screenshotScripts/resolveMaskRect.d.ts +8 -0
  82. package/dist/cjs/lib/v3/external_clients/aisdk.d.ts +11 -0
  83. package/dist/cjs/lib/v3/external_clients/customOpenAI.d.ts +18 -0
  84. package/dist/cjs/lib/v3/flowLogger.d.ts +139 -0
  85. package/dist/cjs/lib/v3/handlers/actHandler.d.ts +21 -0
  86. package/dist/cjs/lib/v3/handlers/extractHandler.d.ts +31 -0
  87. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +24 -0
  88. package/dist/cjs/lib/v3/handlers/handlerUtils/timeoutGuard.d.ts +2 -0
  89. package/dist/cjs/lib/v3/handlers/observeHandler.d.ts +17 -0
  90. package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +32 -0
  91. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +33 -0
  92. package/dist/cjs/lib/v3/index.d.ts +18 -0
  93. package/dist/cjs/lib/v3/launch/browserbase.d.ts +7 -0
  94. package/dist/cjs/lib/v3/launch/local.d.ts +15 -0
  95. package/dist/cjs/lib/v3/llm/AnthropicClient.d.ts +16 -0
  96. package/dist/cjs/lib/v3/llm/CerebrasClient.d.ts +17 -0
  97. package/dist/cjs/lib/v3/llm/GoogleClient.d.ts +19 -0
  98. package/dist/cjs/lib/v3/llm/GroqClient.d.ts +17 -0
  99. package/dist/cjs/lib/v3/llm/LLMClient.d.ts +121 -0
  100. package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +13 -0
  101. package/dist/cjs/lib/v3/llm/OpenAIClient.d.ts +15 -0
  102. package/dist/cjs/lib/v3/llm/aisdk.d.ts +15 -0
  103. package/dist/cjs/lib/v3/logger.d.ts +9 -0
  104. package/dist/cjs/lib/v3/mcp/connection.d.ts +11 -0
  105. package/dist/cjs/lib/v3/mcp/utils.d.ts +3 -0
  106. package/dist/cjs/lib/v3/shutdown/cleanupLocal.d.ts +14 -0
  107. package/dist/cjs/lib/v3/shutdown/supervisor.d.ts +11 -0
  108. package/dist/cjs/lib/v3/shutdown/supervisorClient.d.ts +15 -0
  109. package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js +113 -0
  110. package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js.map +7 -0
  111. package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js +102 -0
  112. package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js.map +7 -0
  113. package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js +374 -0
  114. package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js.map +7 -0
  115. package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js +354 -0
  116. package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js.map +7 -0
  117. package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js +247 -0
  118. package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js.map +7 -0
  119. package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js +105 -0
  120. package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js.map +7 -0
  121. package/dist/cjs/lib/v3/tests/agent-streaming.spec.js +126 -0
  122. package/dist/cjs/lib/v3/tests/agent-streaming.spec.js.map +7 -0
  123. package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js +44 -0
  124. package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js.map +7 -0
  125. package/dist/cjs/lib/v3/tests/click-count.spec.js +147 -0
  126. package/dist/cjs/lib/v3/tests/click-count.spec.js.map +7 -0
  127. package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js +54 -0
  128. package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js.map +7 -0
  129. package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js +176 -0
  130. package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js.map +7 -0
  131. package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js +53 -0
  132. package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js.map +7 -0
  133. package/dist/cjs/lib/v3/tests/downloads.spec.js +80 -0
  134. package/dist/cjs/lib/v3/tests/downloads.spec.js.map +7 -0
  135. package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js +53 -0
  136. package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js.map +7 -0
  137. package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js +493 -0
  138. package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +7 -0
  139. package/dist/cjs/lib/v3/tests/keep-alive.child.js +92 -0
  140. package/dist/cjs/lib/v3/tests/keep-alive.child.js.map +7 -0
  141. package/dist/cjs/lib/v3/tests/keep-alive.helpers.js +568 -0
  142. package/dist/cjs/lib/v3/tests/keep-alive.helpers.js.map +7 -0
  143. package/dist/cjs/lib/v3/tests/keep-alive.spec.js +15 -0
  144. package/dist/cjs/lib/v3/tests/keep-alive.spec.js.map +7 -0
  145. package/dist/cjs/lib/v3/tests/keyboard.spec.js +296 -0
  146. package/dist/cjs/lib/v3/tests/keyboard.spec.js.map +7 -0
  147. package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js +159 -0
  148. package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js.map +7 -0
  149. package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js +191 -0
  150. package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js.map +7 -0
  151. package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js +108 -0
  152. package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js.map +7 -0
  153. package/dist/cjs/lib/v3/tests/locator-count.spec.js +71 -0
  154. package/dist/cjs/lib/v3/tests/locator-count.spec.js.map +7 -0
  155. package/dist/cjs/lib/v3/tests/locator-fill.spec.js +118 -0
  156. package/dist/cjs/lib/v3/tests/locator-fill.spec.js.map +7 -0
  157. package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js +136 -0
  158. package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js.map +7 -0
  159. package/dist/cjs/lib/v3/tests/locator-nth.spec.js +157 -0
  160. package/dist/cjs/lib/v3/tests/locator-nth.spec.js.map +7 -0
  161. package/dist/cjs/lib/v3/tests/locator-select-option.spec.js +242 -0
  162. package/dist/cjs/lib/v3/tests/locator-select-option.spec.js.map +7 -0
  163. package/dist/cjs/lib/v3/tests/logger-initialization.spec.js +547 -0
  164. package/dist/cjs/lib/v3/tests/logger-initialization.spec.js.map +7 -0
  165. package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js +269 -0
  166. package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js.map +7 -0
  167. package/dist/cjs/lib/v3/tests/nested-div.spec.js +23 -0
  168. package/dist/cjs/lib/v3/tests/nested-div.spec.js.map +7 -0
  169. package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js +90 -0
  170. package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js.map +7 -0
  171. package/dist/cjs/lib/v3/tests/page-console.spec.js +56 -0
  172. package/dist/cjs/lib/v3/tests/page-console.spec.js.map +7 -0
  173. package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js +418 -0
  174. package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js.map +7 -0
  175. package/dist/cjs/lib/v3/tests/page-goto-response.spec.js +35 -0
  176. package/dist/cjs/lib/v3/tests/page-goto-response.spec.js.map +7 -0
  177. package/dist/cjs/lib/v3/tests/page-hover.spec.js +167 -0
  178. package/dist/cjs/lib/v3/tests/page-hover.spec.js.map +7 -0
  179. package/dist/cjs/lib/v3/tests/page-screenshot.spec.js +295 -0
  180. package/dist/cjs/lib/v3/tests/page-screenshot.spec.js.map +7 -0
  181. package/dist/cjs/lib/v3/tests/page-scroll.spec.js +182 -0
  182. package/dist/cjs/lib/v3/tests/page-scroll.spec.js.map +7 -0
  183. package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js +46 -0
  184. package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js.map +7 -0
  185. package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js +98 -0
  186. package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js.map +7 -0
  187. package/dist/cjs/lib/v3/tests/setinputfiles.spec.js +148 -0
  188. package/dist/cjs/lib/v3/tests/setinputfiles.spec.js.map +7 -0
  189. package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js +156 -0
  190. package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js.map +7 -0
  191. package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js +156 -0
  192. package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js.map +7 -0
  193. package/dist/cjs/lib/v3/tests/testUtils.js +54 -0
  194. package/dist/cjs/lib/v3/tests/testUtils.js.map +7 -0
  195. package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js +100 -0
  196. package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js.map +7 -0
  197. package/dist/cjs/lib/v3/tests/timeouts.spec.js +32 -0
  198. package/dist/cjs/lib/v3/tests/timeouts.spec.js.map +7 -0
  199. package/dist/cjs/lib/v3/tests/user-data-dir.spec.js +65 -0
  200. package/dist/cjs/lib/v3/tests/user-data-dir.spec.js.map +7 -0
  201. package/dist/cjs/lib/v3/tests/v3.config.js +36 -0
  202. package/dist/cjs/lib/v3/tests/v3.config.js.map +7 -0
  203. package/dist/cjs/lib/v3/tests/v3.dynamic.config.js +67 -0
  204. package/dist/cjs/lib/v3/tests/v3.dynamic.config.js.map +7 -0
  205. package/dist/cjs/lib/v3/tests/v3.playwright.config.js +61 -0
  206. package/dist/cjs/lib/v3/tests/v3.playwright.config.js.map +7 -0
  207. package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js +593 -0
  208. package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js.map +7 -0
  209. package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js +97 -0
  210. package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js.map +7 -0
  211. package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js +77 -0
  212. package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js.map +7 -0
  213. package/dist/cjs/lib/v3/timeoutConfig.d.ts +2 -0
  214. package/dist/cjs/lib/v3/types/private/agent.d.ts +6 -0
  215. package/dist/cjs/lib/v3/types/private/api.d.ts +11 -0
  216. package/dist/cjs/lib/v3/types/private/cache.d.ts +128 -0
  217. package/dist/cjs/lib/v3/types/private/evaluator.d.ts +40 -0
  218. package/dist/cjs/lib/v3/types/private/handlers.d.ts +38 -0
  219. package/dist/cjs/lib/v3/types/private/index.d.ts +7 -0
  220. package/dist/cjs/lib/v3/types/private/internal.d.ts +39 -0
  221. package/dist/cjs/lib/v3/types/private/locator.d.ts +9 -0
  222. package/dist/cjs/lib/v3/types/private/network.d.ts +34 -0
  223. package/dist/cjs/lib/v3/types/private/shutdown.d.ts +19 -0
  224. package/dist/cjs/lib/v3/types/private/shutdownErrors.d.ts +12 -0
  225. package/dist/cjs/lib/v3/types/private/snapshot.d.ts +117 -0
  226. package/dist/cjs/lib/v3/types/public/agent.d.ts +595 -0
  227. package/dist/cjs/lib/v3/types/public/api.d.ts +1211 -0
  228. package/dist/cjs/lib/v3/types/public/apiErrors.d.ts +18 -0
  229. package/dist/cjs/lib/v3/types/public/index.d.ts +12 -0
  230. package/dist/cjs/lib/v3/types/public/locator.d.ts +9 -0
  231. package/dist/cjs/lib/v3/types/public/logs.d.ts +23 -0
  232. package/dist/cjs/lib/v3/types/public/methods.d.ts +56 -0
  233. package/dist/cjs/lib/v3/types/public/metrics.d.ts +27 -0
  234. package/dist/cjs/lib/v3/types/public/model.d.ts +65 -0
  235. package/dist/cjs/lib/v3/types/public/options.d.ts +70 -0
  236. package/dist/cjs/lib/v3/types/public/page.d.ts +18 -0
  237. package/dist/cjs/lib/v3/types/public/screenshotTypes.d.ts +25 -0
  238. package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +152 -0
  239. package/dist/cjs/lib/v3/understudy/a11y/snapshot/a11yTree.d.ts +15 -0
  240. package/dist/cjs/lib/v3/understudy/a11y/snapshot/activeElement.d.ts +8 -0
  241. package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.d.ts +77 -0
  242. package/dist/cjs/lib/v3/understudy/a11y/snapshot/coordinateResolver.d.ts +7 -0
  243. package/dist/cjs/lib/v3/understudy/a11y/snapshot/domTree.d.ts +46 -0
  244. package/dist/cjs/lib/v3/understudy/a11y/snapshot/focusSelectors.d.ts +24 -0
  245. package/dist/cjs/lib/v3/understudy/a11y/snapshot/index.d.ts +4 -0
  246. package/dist/cjs/lib/v3/understudy/a11y/snapshot/sessions.d.ts +16 -0
  247. package/dist/cjs/lib/v3/understudy/a11y/snapshot/treeFormatUtils.d.ts +28 -0
  248. package/dist/cjs/lib/v3/understudy/a11y/snapshot/xpathUtils.d.ts +26 -0
  249. package/dist/cjs/lib/v3/understudy/a11yInvocation.d.ts +8 -0
  250. package/dist/cjs/lib/v3/understudy/cdp.d.ts +69 -0
  251. package/dist/cjs/lib/v3/understudy/consoleMessage.d.ts +22 -0
  252. package/dist/cjs/lib/v3/understudy/context.d.ts +132 -0
  253. package/dist/cjs/lib/v3/understudy/deepLocator.d.ts +87 -0
  254. package/dist/cjs/lib/v3/understudy/executionContextRegistry.d.ts +15 -0
  255. package/dist/cjs/lib/v3/understudy/fileUploadUtils.d.ts +13 -0
  256. package/dist/cjs/lib/v3/understudy/frame.d.ts +69 -0
  257. package/dist/cjs/lib/v3/understudy/frameLocator.d.ts +50 -0
  258. package/dist/cjs/lib/v3/understudy/frameRegistry.d.ts +101 -0
  259. package/dist/cjs/lib/v3/understudy/initScripts.d.ts +2 -0
  260. package/dist/cjs/lib/v3/understudy/lifecycleWatcher.d.ts +64 -0
  261. package/dist/cjs/lib/v3/understudy/locator.d.ts +194 -0
  262. package/dist/cjs/lib/v3/understudy/locatorInvocation.d.ts +8 -0
  263. package/dist/cjs/lib/v3/understudy/navigationResponseTracker.d.ts +84 -0
  264. package/dist/cjs/lib/v3/understudy/networkManager.d.ts +53 -0
  265. package/dist/cjs/lib/v3/understudy/page.d.ts +354 -0
  266. package/dist/cjs/lib/v3/understudy/piercer.d.ts +4 -0
  267. package/dist/cjs/lib/v3/understudy/response.d.ts +137 -0
  268. package/dist/cjs/lib/v3/understudy/screenshotUtils.d.ts +16 -0
  269. package/dist/cjs/lib/v3/understudy/selectorResolver.d.ts +38 -0
  270. package/dist/cjs/lib/v3/v3.d.ts +191 -0
  271. package/dist/cjs/lib/v3/zodCompat.d.ts +12 -0
  272. package/dist/cjs/lib/v3Evaluator.d.ts +19 -0
  273. package/dist/cjs/lib/version.d.ts +5 -0
  274. package/dist/cjs/package.json +3 -0
  275. package/dist/cjs/tests/browserbase-session-accessors.test.js +101 -0
  276. package/dist/cjs/tests/browserbase-session-accessors.test.js.map +7 -0
  277. package/dist/cjs/tests/cache-llm-resolution.test.js +187 -0
  278. package/dist/cjs/tests/cache-llm-resolution.test.js.map +7 -0
  279. package/dist/cjs/tests/helpers/mockCDPSession.js +50 -0
  280. package/dist/cjs/tests/helpers/mockCDPSession.js.map +7 -0
  281. package/dist/cjs/tests/llm-provider.test.js +57 -0
  282. package/dist/cjs/tests/llm-provider.test.js.map +7 -0
  283. package/dist/cjs/tests/model-deprecation.test.js +132 -0
  284. package/dist/cjs/tests/model-deprecation.test.js.map +7 -0
  285. package/dist/cjs/tests/page-snapshot.test.js +58 -0
  286. package/dist/cjs/tests/page-snapshot.test.js.map +7 -0
  287. package/dist/cjs/tests/public-api/export-surface.test.js +76 -0
  288. package/dist/cjs/tests/public-api/export-surface.test.js.map +7 -0
  289. package/dist/cjs/tests/public-api/llm-and-agents.test.js +150 -0
  290. package/dist/cjs/tests/public-api/llm-and-agents.test.js.map +7 -0
  291. package/dist/cjs/tests/public-api/public-error-types.test.js +104 -0
  292. package/dist/cjs/tests/public-api/public-error-types.test.js.map +7 -0
  293. package/dist/cjs/tests/public-api/public-types.test.js +74 -0
  294. package/dist/cjs/tests/public-api/public-types.test.js.map +7 -0
  295. package/dist/cjs/tests/public-api/runtime-utils.test.js +53 -0
  296. package/dist/cjs/tests/public-api/runtime-utils.test.js.map +7 -0
  297. package/dist/cjs/tests/public-api/schema-utils.test.js +100 -0
  298. package/dist/cjs/tests/public-api/schema-utils.test.js.map +7 -0
  299. package/dist/cjs/tests/public-api/timeout-error-types.test.js +103 -0
  300. package/dist/cjs/tests/public-api/timeout-error-types.test.js.map +7 -0
  301. package/dist/cjs/tests/public-api/tool-type-export.test.js +47 -0
  302. package/dist/cjs/tests/public-api/tool-type-export.test.js.map +7 -0
  303. package/dist/cjs/tests/public-api/v3-core.test.js +104 -0
  304. package/dist/cjs/tests/public-api/v3-core.test.js.map +7 -0
  305. package/dist/cjs/tests/safety-confirmation.test.js +134 -0
  306. package/dist/cjs/tests/safety-confirmation.test.js.map +7 -0
  307. package/dist/cjs/tests/snapshot-a11y-resolvers.test.js +370 -0
  308. package/dist/cjs/tests/snapshot-a11y-resolvers.test.js.map +7 -0
  309. package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js +294 -0
  310. package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js.map +7 -0
  311. package/dist/cjs/tests/snapshot-capture-orchestration.test.js +403 -0
  312. package/dist/cjs/tests/snapshot-capture-orchestration.test.js.map +7 -0
  313. package/dist/cjs/tests/snapshot-cbor.test.js +197 -0
  314. package/dist/cjs/tests/snapshot-cbor.test.js.map +7 -0
  315. package/dist/cjs/tests/snapshot-dom-session-builders.test.js +246 -0
  316. package/dist/cjs/tests/snapshot-dom-session-builders.test.js.map +7 -0
  317. package/dist/cjs/tests/snapshot-dom-tree-utils.test.js +104 -0
  318. package/dist/cjs/tests/snapshot-dom-tree-utils.test.js.map +7 -0
  319. package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js +45 -0
  320. package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js.map +7 -0
  321. package/dist/cjs/tests/snapshot-frame-merge.test.js +388 -0
  322. package/dist/cjs/tests/snapshot-frame-merge.test.js.map +7 -0
  323. package/dist/cjs/tests/snapshot-tree-format-utils.test.js +106 -0
  324. package/dist/cjs/tests/snapshot-tree-format-utils.test.js.map +7 -0
  325. package/dist/cjs/tests/snapshot-xpath-utils.test.js +74 -0
  326. package/dist/cjs/tests/snapshot-xpath-utils.test.js.map +7 -0
  327. package/dist/cjs/tests/timeout-handlers.test.js +864 -0
  328. package/dist/cjs/tests/timeout-handlers.test.js.map +7 -0
  329. package/dist/cjs/tests/xpath-parser.test.js +314 -0
  330. package/dist/cjs/tests/xpath-parser.test.js.map +7 -0
  331. package/dist/cjs/tests/xpath-resolver.test.js +70 -0
  332. package/dist/cjs/tests/xpath-resolver.test.js.map +7 -0
  333. package/dist/cjs/tests/zod-enum-compatibility.test.js +119 -0
  334. package/dist/cjs/tests/zod-enum-compatibility.test.js.map +7 -0
  335. package/dist/esm/lib/modelUtils.d.ts +0 -3
  336. package/dist/esm/lib/modelUtils.js +2 -7
  337. package/dist/esm/lib/modelUtils.js.map +1 -1
  338. package/dist/esm/lib/v3/agent/tools/act.d.ts +1 -2
  339. package/dist/esm/lib/v3/agent/tools/act.js.map +1 -1
  340. package/dist/esm/lib/v3/agent/tools/extract.d.ts +1 -2
  341. package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -1
  342. package/dist/esm/lib/v3/agent/tools/fillform.d.ts +1 -2
  343. package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
  344. package/dist/esm/lib/v3/agent/tools/index.d.ts +2 -2
  345. package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
  346. package/dist/esm/lib/v3/cli.d.ts +2 -0
  347. package/dist/esm/lib/v3/cli.js +10 -0
  348. package/dist/esm/lib/v3/cli.js.map +1 -0
  349. package/dist/esm/lib/v3/dom/build/rerender-index.d.ts +0 -0
  350. package/dist/esm/lib/v3/dom/build/rerender-index.js.map +1 -0
  351. package/dist/esm/lib/v3/dom/build/v3-index.d.ts +0 -0
  352. package/dist/esm/lib/v3/dom/build/v3-index.js.map +1 -0
  353. package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +2 -2
  354. package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  355. package/dist/esm/lib/v3/index.d.ts +1 -0
  356. package/dist/esm/lib/v3/index.js +1 -0
  357. package/dist/esm/lib/v3/index.js.map +1 -1
  358. package/dist/esm/lib/v3/shutdown/supervisor.d.ts +7 -5
  359. package/dist/esm/lib/v3/shutdown/supervisor.js +62 -52
  360. package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
  361. package/dist/esm/lib/v3/shutdown/supervisorClient.js +48 -52
  362. package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -1
  363. package/dist/esm/lib/v3/tests/click-count.spec.js +47 -12
  364. package/dist/esm/lib/v3/tests/click-count.spec.js.map +2 -2
  365. package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js +67 -21
  366. package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +2 -2
  367. package/dist/esm/lib/v3/tests/v3.playwright.config.js +3 -60
  368. package/dist/esm/lib/v3/tests/v3.playwright.config.js.map +2 -2
  369. package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -13
  370. package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
  371. package/dist/esm/lib/v3/understudy/context.js +10 -1
  372. package/dist/esm/lib/v3/understudy/context.js.map +1 -1
  373. package/dist/esm/lib/v3/understudy/locator.js +2 -2
  374. package/dist/esm/lib/v3/understudy/locator.js.map +1 -1
  375. package/dist/esm/lib/v3/understudy/page.js +2 -1
  376. package/dist/esm/lib/v3/understudy/page.js.map +1 -1
  377. package/dist/esm/lib/v3/v3.js +10 -13
  378. package/dist/esm/lib/v3/v3.js.map +1 -1
  379. package/dist/esm/tests/public-api/export-surface.test.js +1 -0
  380. package/dist/esm/tests/public-api/export-surface.test.js.map +2 -2
  381. package/package.json +13 -9
  382. package/dist/esm/lib/v3/tests/envReporter.js +0 -57
  383. package/dist/esm/lib/v3/tests/envReporter.js.map +0 -7
  384. package/dist/esm/tests/agent-execution-model.test.js +0 -139
  385. package/dist/esm/tests/agent-execution-model.test.js.map +0 -7
  386. package/dist/esm/tests/model-utils.test.js +0 -43
  387. package/dist/esm/tests/model-utils.test.js.map +0 -7
@@ -0,0 +1,136 @@
1
+ var import_test = require("@playwright/test");
2
+ var import_v3 = require("../v3.js");
3
+ var import_v3_config = require("./v3.config.js");
4
+ import_test.test.describe("Locator input methods (fill, type, hover, isVisible, isChecked)", () => {
5
+ let v3;
6
+ import_test.test.beforeEach(async () => {
7
+ v3 = new import_v3.V3(import_v3_config.v3TestConfig);
8
+ await v3.init();
9
+ });
10
+ import_test.test.afterEach(async () => {
11
+ await v3?.close?.().catch((e) => {
12
+ });
13
+ });
14
+ (0, import_test.test)("Locator.fill() sets input value directly", async () => {
15
+ const page = v3.context.pages()[0];
16
+ await page.goto(
17
+ "data:text/html," + encodeURIComponent(
18
+ `<!doctype html><html><body>
19
+ <input id="name" type="text" />
20
+ <div id="out"></div>
21
+ </body></html>`
22
+ )
23
+ );
24
+ const input = page.mainFrame().locator("#name");
25
+ await input.fill("Hello World");
26
+ const value = await input.inputValue();
27
+ (0, import_test.expect)(value).toBe("Hello World");
28
+ });
29
+ (0, import_test.test)("Locator.type() types text character by character", async () => {
30
+ const page = v3.context.pages()[0];
31
+ await page.goto(
32
+ "data:text/html," + encodeURIComponent(
33
+ `<!doctype html><html><body>
34
+ <input id="search" type="text" />
35
+ </body></html>`
36
+ )
37
+ );
38
+ const input = page.mainFrame().locator("#search");
39
+ await input.type("test123", { delay: 10 });
40
+ const value = await input.inputValue();
41
+ (0, import_test.expect)(value).toBe("test123");
42
+ });
43
+ (0, import_test.test)("Locator.hover() moves mouse to element center", async () => {
44
+ const page = v3.context.pages()[0];
45
+ await page.goto(
46
+ "data:text/html," + encodeURIComponent(
47
+ `<!doctype html><html><body>
48
+ <button id="btn" onmouseover="this.dataset.hovered='true'" onmouseout="this.dataset.hovered='false'">Hover Me</button>
49
+ </body></html>`
50
+ )
51
+ );
52
+ const btn = page.mainFrame().locator("#btn");
53
+ await btn.hover();
54
+ const hovered = await page.mainFrame().evaluate(() => {
55
+ const b = document.getElementById("btn");
56
+ return b?.dataset.hovered === "true";
57
+ });
58
+ (0, import_test.expect)(hovered).toBe(true);
59
+ });
60
+ (0, import_test.test)("Locator.isVisible() returns true for visible elements", async () => {
61
+ const page = v3.context.pages()[0];
62
+ await page.goto(
63
+ "data:text/html," + encodeURIComponent(
64
+ `<!doctype html><html><body>
65
+ <div id="visible">I am visible</div>
66
+ <div id="hidden" style="display:none">I am hidden</div>
67
+ <div id="invisible" style="visibility:hidden">I am invisible</div>
68
+ <div id="transparent" style="opacity:0">I am transparent</div>
69
+ <div id="zero-size" style="width:0;height:0">Zero size</div>
70
+ </body></html>`
71
+ )
72
+ );
73
+ const visible = await page.mainFrame().locator("#visible").isVisible();
74
+ (0, import_test.expect)(visible).toBe(true);
75
+ const hidden = await page.mainFrame().locator("#hidden").isVisible();
76
+ (0, import_test.expect)(hidden).toBe(false);
77
+ const invisible = await page.mainFrame().locator("#invisible").isVisible();
78
+ (0, import_test.expect)(invisible).toBe(false);
79
+ const transparent = await page.mainFrame().locator("#transparent").isVisible();
80
+ (0, import_test.expect)(transparent).toBe(false);
81
+ const zeroSize = await page.mainFrame().locator("#zero-size").isVisible();
82
+ (0, import_test.expect)(zeroSize).toBe(false);
83
+ });
84
+ (0, import_test.test)("Locator.isChecked() detects checkbox state", async () => {
85
+ const page = v3.context.pages()[0];
86
+ await page.goto(
87
+ "data:text/html," + encodeURIComponent(
88
+ `<!doctype html><html><body>
89
+ <input id="checked" type="checkbox" checked />
90
+ <input id="unchecked" type="checkbox" />
91
+ <input id="radio-selected" type="radio" name="opt" checked />
92
+ <input id="radio-unselected" type="radio" name="opt" />
93
+ </body></html>`
94
+ )
95
+ );
96
+ const checked = await page.mainFrame().locator("#checked").isChecked();
97
+ (0, import_test.expect)(checked).toBe(true);
98
+ const unchecked = await page.mainFrame().locator("#unchecked").isChecked();
99
+ (0, import_test.expect)(unchecked).toBe(false);
100
+ const radioSelected = await page.mainFrame().locator("#radio-selected").isChecked();
101
+ (0, import_test.expect)(radioSelected).toBe(true);
102
+ const radioUnselected = await page.mainFrame().locator("#radio-unselected").isChecked();
103
+ (0, import_test.expect)(radioUnselected).toBe(false);
104
+ });
105
+ (0, import_test.test)("Locator.fill() on textarea", async () => {
106
+ const page = v3.context.pages()[0];
107
+ await page.goto(
108
+ "data:text/html," + encodeURIComponent(
109
+ `<!doctype html><html><body>
110
+ <textarea id="ta"></textarea>
111
+ </body></html>`
112
+ )
113
+ );
114
+ const ta = page.mainFrame().locator("#ta");
115
+ await ta.fill("Multi\nline\ntext");
116
+ const value = await ta.inputValue();
117
+ (0, import_test.expect)(value).toBe("Multi\nline\ntext");
118
+ });
119
+ (0, import_test.test)("Locator.fill() clears and sets new value", async () => {
120
+ const page = v3.context.pages()[0];
121
+ await page.goto(
122
+ "data:text/html," + encodeURIComponent(
123
+ `<!doctype html><html><body>
124
+ <input id="inp" type="text" value="initial" />
125
+ </body></html>`
126
+ )
127
+ );
128
+ const inp = page.mainFrame().locator("#inp");
129
+ let value = await inp.inputValue();
130
+ (0, import_test.expect)(value).toBe("initial");
131
+ await inp.fill("replaced");
132
+ value = await inp.inputValue();
133
+ (0, import_test.expect)(value).toBe("replaced");
134
+ });
135
+ });
136
+ //# sourceMappingURL=locator-input-methods.spec.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../lib/v3/tests/locator-input-methods.spec.ts"],
4
+ "sourcesContent": ["import { expect, test } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\n\ntest.describe(\"Locator input methods (fill, type, hover, isVisible, isChecked)\", () => {\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((e) => {\n void e;\n });\n });\n\n test(\"Locator.fill() sets input value directly\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <input id=\"name\" type=\"text\" />\n <div id=\"out\"></div>\n </body></html>`,\n ),\n );\n\n const input = page.mainFrame().locator(\"#name\");\n await input.fill(\"Hello World\");\n\n const value = await input.inputValue();\n expect(value).toBe(\"Hello World\");\n });\n\n test(\"Locator.type() types text character by character\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <input id=\"search\" type=\"text\" />\n </body></html>`,\n ),\n );\n\n const input = page.mainFrame().locator(\"#search\");\n await input.type(\"test123\", { delay: 10 });\n\n const value = await input.inputValue();\n expect(value).toBe(\"test123\");\n });\n\n test(\"Locator.hover() moves mouse to element center\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <button id=\"btn\" onmouseover=\"this.dataset.hovered='true'\" onmouseout=\"this.dataset.hovered='false'\">Hover Me</button>\n </body></html>`,\n ),\n );\n\n const btn = page.mainFrame().locator(\"#btn\");\n await btn.hover();\n\n const hovered = await page.mainFrame().evaluate(() => {\n const b = document.getElementById(\"btn\") as HTMLButtonElement | null;\n return b?.dataset.hovered === \"true\";\n });\n\n expect(hovered).toBe(true);\n });\n\n test(\"Locator.isVisible() returns true for visible elements\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <div id=\"visible\">I am visible</div>\n <div id=\"hidden\" style=\"display:none\">I am hidden</div>\n <div id=\"invisible\" style=\"visibility:hidden\">I am invisible</div>\n <div id=\"transparent\" style=\"opacity:0\">I am transparent</div>\n <div id=\"zero-size\" style=\"width:0;height:0\">Zero size</div>\n </body></html>`,\n ),\n );\n\n const visible = await page.mainFrame().locator(\"#visible\").isVisible();\n expect(visible).toBe(true);\n\n const hidden = await page.mainFrame().locator(\"#hidden\").isVisible();\n expect(hidden).toBe(false);\n\n const invisible = await page.mainFrame().locator(\"#invisible\").isVisible();\n expect(invisible).toBe(false);\n\n const transparent = await page\n .mainFrame()\n .locator(\"#transparent\")\n .isVisible();\n expect(transparent).toBe(false);\n\n const zeroSize = await page.mainFrame().locator(\"#zero-size\").isVisible();\n expect(zeroSize).toBe(false);\n });\n\n test(\"Locator.isChecked() detects checkbox state\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <input id=\"checked\" type=\"checkbox\" checked />\n <input id=\"unchecked\" type=\"checkbox\" />\n <input id=\"radio-selected\" type=\"radio\" name=\"opt\" checked />\n <input id=\"radio-unselected\" type=\"radio\" name=\"opt\" />\n </body></html>`,\n ),\n );\n\n const checked = await page.mainFrame().locator(\"#checked\").isChecked();\n expect(checked).toBe(true);\n\n const unchecked = await page.mainFrame().locator(\"#unchecked\").isChecked();\n expect(unchecked).toBe(false);\n\n const radioSelected = await page\n .mainFrame()\n .locator(\"#radio-selected\")\n .isChecked();\n expect(radioSelected).toBe(true);\n\n const radioUnselected = await page\n .mainFrame()\n .locator(\"#radio-unselected\")\n .isChecked();\n expect(radioUnselected).toBe(false);\n });\n\n test(\"Locator.fill() on textarea\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <textarea id=\"ta\"></textarea>\n </body></html>`,\n ),\n );\n\n const ta = page.mainFrame().locator(\"#ta\");\n await ta.fill(\"Multi\\nline\\ntext\");\n\n const value = await ta.inputValue();\n expect(value).toBe(\"Multi\\nline\\ntext\");\n });\n\n test(\"Locator.fill() clears and sets new value\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <input id=\"inp\" type=\"text\" value=\"initial\" />\n </body></html>`,\n ),\n );\n\n const inp = page.mainFrame().locator(\"#inp\");\n\n let value = await inp.inputValue();\n expect(value).toBe(\"initial\");\n\n await inp.fill(\"replaced\");\n value = await inp.inputValue();\n expect(value).toBe(\"replaced\");\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,157 @@
1
+ var import_test = require("@playwright/test");
2
+ var import_v3 = require("../v3.js");
3
+ var import_v3_dynamic_config = require("./v3.dynamic.config.js");
4
+ var import_testUtils = require("./testUtils.js");
5
+ import_test.test.describe("Locator nth() method tests", () => {
6
+ let v3;
7
+ import_test.test.beforeEach(async () => {
8
+ v3 = new import_v3.V3(import_v3_dynamic_config.v3DynamicTestConfig);
9
+ await v3.init();
10
+ });
11
+ import_test.test.afterEach(async () => {
12
+ await (0, import_testUtils.closeV3)(v3);
13
+ });
14
+ (0, import_test.test)("nth() returns correct element for CSS selectors", async () => {
15
+ const page = v3.context.pages()[0];
16
+ await page.goto(
17
+ "data:text/html," + encodeURIComponent(
18
+ '<div class="test" id="first">1</div><div class="test" id="second">2</div><div class="test" id="third">3</div><span id="other">4</span>'
19
+ )
20
+ );
21
+ const locator0 = page.mainFrame().locator(".test").nth(0);
22
+ const text0 = await locator0.textContent();
23
+ (0, import_test.expect)(text0).toBe("1");
24
+ const locator1 = page.mainFrame().locator(".test").nth(1);
25
+ const text1 = await locator1.textContent();
26
+ (0, import_test.expect)(text1).toBe("2");
27
+ const locator2 = page.mainFrame().locator(".test").nth(2);
28
+ const text2 = await locator2.textContent();
29
+ (0, import_test.expect)(text2).toBe("3");
30
+ });
31
+ (0, import_test.test)("nth() returns correct element for XPath selectors", async () => {
32
+ const page = v3.context.pages()[0];
33
+ await page.goto(
34
+ "data:text/html," + encodeURIComponent(
35
+ '<button id="btn1">Button 1</button><button id="btn2">Button 2</button><button id="btn3">Button 3</button>'
36
+ )
37
+ );
38
+ const locator0 = page.mainFrame().locator("//button").nth(0);
39
+ const text0 = await locator0.textContent();
40
+ (0, import_test.expect)(text0).toBe("Button 1");
41
+ const locator1 = page.mainFrame().locator("//button").nth(1);
42
+ const text1 = await locator1.textContent();
43
+ (0, import_test.expect)(text1).toBe("Button 2");
44
+ const locator2 = page.mainFrame().locator("//button").nth(2);
45
+ const text2 = await locator2.textContent();
46
+ (0, import_test.expect)(text2).toBe("Button 3");
47
+ });
48
+ (0, import_test.test)("nth() returns correct element for text selectors", async () => {
49
+ const page = v3.context.pages()[0];
50
+ await page.goto(
51
+ "data:text/html," + encodeURIComponent(
52
+ '<div id="d1">Click me</div><button id="b1">Click me</button><span id="s1">Click me</span>'
53
+ )
54
+ );
55
+ const locator0 = page.mainFrame().locator("text=Click me").nth(0);
56
+ const text0 = await locator0.textContent();
57
+ (0, import_test.expect)(text0).toBe("Click me");
58
+ const locator1 = page.mainFrame().locator("text=Click me").nth(1);
59
+ const text1 = await locator1.textContent();
60
+ (0, import_test.expect)(text1).toBe("Click me");
61
+ const locator2 = page.mainFrame().locator("text=Click me").nth(2);
62
+ const text2 = await locator2.textContent();
63
+ (0, import_test.expect)(text2).toBe("Click me");
64
+ });
65
+ (0, import_test.test)("nth() with shadow DOM", async () => {
66
+ const page = v3.context.pages()[0];
67
+ await page.goto(
68
+ "data:text/html," + encodeURIComponent(
69
+ '<div id="host"></div><script>const host = document.getElementById("host");const shadow = host.attachShadow({mode: "open"});shadow.innerHTML = "<button>Shadow Button 1</button><button>Shadow Button 2</button><button>Shadow Button 3</button>";</script>'
70
+ ),
71
+ { waitUntil: "load", timeoutMs: 3e4 }
72
+ );
73
+ await new Promise((resolve) => setTimeout(resolve, 100));
74
+ const locator0 = page.mainFrame().locator("button").nth(0);
75
+ const text0 = await locator0.textContent();
76
+ (0, import_test.expect)(text0).toBe("Shadow Button 1");
77
+ const locator1 = page.mainFrame().locator("button").nth(1);
78
+ const text1 = await locator1.textContent();
79
+ (0, import_test.expect)(text1).toBe("Shadow Button 2");
80
+ const locator2 = page.mainFrame().locator("button").nth(2);
81
+ const text2 = await locator2.textContent();
82
+ (0, import_test.expect)(text2).toBe("Shadow Button 3");
83
+ });
84
+ (0, import_test.test)("nth() with out of bounds index throws error", async () => {
85
+ const page = v3.context.pages()[0];
86
+ await page.goto(
87
+ "data:text/html," + encodeURIComponent(
88
+ '<div class="test">1</div><div class="test">2</div>'
89
+ )
90
+ );
91
+ const locator = page.mainFrame().locator(".test").nth(5);
92
+ let error = null;
93
+ try {
94
+ await locator.textContent();
95
+ } catch (e) {
96
+ error = e;
97
+ }
98
+ (0, import_test.expect)(error).not.toBeNull();
99
+ });
100
+ (0, import_test.test)("nth() works with complex CSS selectors", async () => {
101
+ const page = v3.context.pages()[0];
102
+ await page.goto(
103
+ "data:text/html," + encodeURIComponent(
104
+ '<div class="container"><span class="item">1</span><span class="item">2</span></div><div><span class="item">3</span></div>'
105
+ )
106
+ );
107
+ const locator0 = page.mainFrame().locator(".container .item").nth(0);
108
+ const text0 = await locator0.textContent();
109
+ (0, import_test.expect)(text0).toBe("1");
110
+ const locator1 = page.mainFrame().locator(".container .item").nth(1);
111
+ const text1 = await locator1.textContent();
112
+ (0, import_test.expect)(text1).toBe("2");
113
+ });
114
+ (0, import_test.test)("nth() can be chained with other locator methods", async () => {
115
+ const page = v3.context.pages()[0];
116
+ await page.goto(
117
+ "data:text/html," + encodeURIComponent(
118
+ '<div class="test">First</div><div class="test">Second</div><div class="test">Third</div>'
119
+ )
120
+ );
121
+ const locator = page.mainFrame().locator(".test").nth(1);
122
+ const text = await locator.textContent();
123
+ (0, import_test.expect)(text).toBe("Second");
124
+ const isVisible = await locator.isVisible();
125
+ (0, import_test.expect)(isVisible).toBe(true);
126
+ });
127
+ (0, import_test.test)("nth(0) is equivalent to first()", async () => {
128
+ const page = v3.context.pages()[0];
129
+ await page.goto(
130
+ "data:text/html," + encodeURIComponent(
131
+ '<div class="test">First</div><div class="test">Second</div><div class="test">Third</div>'
132
+ )
133
+ );
134
+ const nthLocator = page.mainFrame().locator(".test").nth(0);
135
+ const nthText = await nthLocator.textContent();
136
+ const firstLocator = page.mainFrame().locator(".test").first();
137
+ const firstText = await firstLocator.textContent();
138
+ (0, import_test.expect)(nthText).toBe(firstText);
139
+ (0, import_test.expect)(nthText).toBe("First");
140
+ });
141
+ (0, import_test.test)("nth() works correctly with iframe selectors", async () => {
142
+ const page = v3.context.pages()[0];
143
+ await page.goto(
144
+ "data:text/html," + encodeURIComponent(
145
+ '<button id="main1">Main Button 1</button><button id="main2">Main Button 2</button><iframe id="frame1"></iframe><script>const frame = document.getElementById("frame1");const doc = frame.contentDocument;doc.open();doc.write("<button>Frame Button 1</button><button>Frame Button 2</button>");doc.close();</script>'
146
+ )
147
+ );
148
+ await new Promise((resolve) => setTimeout(resolve, 100));
149
+ const mainLocator0 = page.mainFrame().locator("button").nth(0);
150
+ const mainText0 = await mainLocator0.textContent();
151
+ (0, import_test.expect)(mainText0).toBe("Main Button 1");
152
+ const mainLocator1 = page.mainFrame().locator("button").nth(1);
153
+ const mainText1 = await mainLocator1.textContent();
154
+ (0, import_test.expect)(mainText1).toBe("Main Button 2");
155
+ });
156
+ });
157
+ //# sourceMappingURL=locator-nth.spec.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../lib/v3/tests/locator-nth.spec.ts"],
4
+ "sourcesContent": ["import { expect, test } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3DynamicTestConfig } from \"./v3.dynamic.config.js\";\nimport { closeV3 } from \"./testUtils.js\";\n\ntest.describe(\"Locator nth() method tests\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3DynamicTestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await closeV3(v3);\n });\n\n test(\"nth() returns correct element for CSS selectors\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div class=\"test\" id=\"first\">1</div>' +\n '<div class=\"test\" id=\"second\">2</div>' +\n '<div class=\"test\" id=\"third\">3</div>' +\n '<span id=\"other\">4</span>',\n ),\n );\n\n // Test nth() with CSS selectors\n const locator0 = page.mainFrame().locator(\".test\").nth(0);\n const text0 = await locator0.textContent();\n expect(text0).toBe(\"1\");\n\n const locator1 = page.mainFrame().locator(\".test\").nth(1);\n const text1 = await locator1.textContent();\n expect(text1).toBe(\"2\");\n\n const locator2 = page.mainFrame().locator(\".test\").nth(2);\n const text2 = await locator2.textContent();\n expect(text2).toBe(\"3\");\n });\n\n test(\"nth() returns correct element for XPath selectors\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<button id=\"btn1\">Button 1</button>' +\n '<button id=\"btn2\">Button 2</button>' +\n '<button id=\"btn3\">Button 3</button>',\n ),\n );\n\n // Test nth() with XPath selectors\n const locator0 = page.mainFrame().locator(\"//button\").nth(0);\n const text0 = await locator0.textContent();\n expect(text0).toBe(\"Button 1\");\n\n const locator1 = page.mainFrame().locator(\"//button\").nth(1);\n const text1 = await locator1.textContent();\n expect(text1).toBe(\"Button 2\");\n\n const locator2 = page.mainFrame().locator(\"//button\").nth(2);\n const text2 = await locator2.textContent();\n expect(text2).toBe(\"Button 3\");\n });\n\n test(\"nth() returns correct element for text selectors\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"d1\">Click me</div>' +\n '<button id=\"b1\">Click me</button>' +\n '<span id=\"s1\">Click me</span>',\n ),\n );\n\n // Test nth() with text selectors\n const locator0 = page.mainFrame().locator(\"text=Click me\").nth(0);\n const text0 = await locator0.textContent();\n expect(text0).toBe(\"Click me\");\n\n const locator1 = page.mainFrame().locator(\"text=Click me\").nth(1);\n const text1 = await locator1.textContent();\n expect(text1).toBe(\"Click me\");\n\n const locator2 = page.mainFrame().locator(\"text=Click me\").nth(2);\n const text2 = await locator2.textContent();\n expect(text2).toBe(\"Click me\");\n });\n\n test(\"nth() with shadow DOM\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"host\"></div>' +\n \"<script>\" +\n 'const host = document.getElementById(\"host\");' +\n 'const shadow = host.attachShadow({mode: \"open\"});' +\n 'shadow.innerHTML = \"<button>Shadow Button 1</button><button>Shadow Button 2</button><button>Shadow Button 3</button>\";' +\n \"</script>\",\n ),\n { waitUntil: \"load\", timeoutMs: 30000 },\n );\n\n // Wait a bit for shadow DOM to be attached\n await new Promise((resolve) => setTimeout(resolve, 100));\n\n // Test nth() with shadow DOM elements\n const locator0 = page.mainFrame().locator(\"button\").nth(0);\n const text0 = await locator0.textContent();\n expect(text0).toBe(\"Shadow Button 1\");\n\n const locator1 = page.mainFrame().locator(\"button\").nth(1);\n const text1 = await locator1.textContent();\n expect(text1).toBe(\"Shadow Button 2\");\n\n const locator2 = page.mainFrame().locator(\"button\").nth(2);\n const text2 = await locator2.textContent();\n expect(text2).toBe(\"Shadow Button 3\");\n });\n\n test(\"nth() with out of bounds index throws error\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div class=\"test\">1</div>' + '<div class=\"test\">2</div>',\n ),\n );\n\n // Test with out of bounds index - should throw an error\n const locator = page.mainFrame().locator(\".test\").nth(5);\n let error = null;\n try {\n await locator.textContent();\n } catch (e) {\n error = e;\n }\n\n expect(error).not.toBeNull();\n });\n\n test(\"nth() works with complex CSS selectors\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div class=\"container\">' +\n '<span class=\"item\">1</span>' +\n '<span class=\"item\">2</span>' +\n \"</div>\" +\n \"<div>\" +\n '<span class=\"item\">3</span>' +\n \"</div>\",\n ),\n );\n\n // Test nth() with complex CSS selectors\n const locator0 = page.mainFrame().locator(\".container .item\").nth(0);\n const text0 = await locator0.textContent();\n expect(text0).toBe(\"1\");\n\n const locator1 = page.mainFrame().locator(\".container .item\").nth(1);\n const text1 = await locator1.textContent();\n expect(text1).toBe(\"2\");\n });\n\n test(\"nth() can be chained with other locator methods\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div class=\"test\">First</div>' +\n '<div class=\"test\">Second</div>' +\n '<div class=\"test\">Third</div>',\n ),\n );\n\n // Test that nth() returns a Locator that can be used for other actions\n const locator = page.mainFrame().locator(\".test\").nth(1);\n const text = await locator.textContent();\n expect(text).toBe(\"Second\");\n\n // Verify it's visible\n const isVisible = await locator.isVisible();\n expect(isVisible).toBe(true);\n });\n\n test(\"nth(0) is equivalent to first()\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div class=\"test\">First</div>' +\n '<div class=\"test\">Second</div>' +\n '<div class=\"test\">Third</div>',\n ),\n );\n\n // Verify nth(0) returns the same element as first()\n const nthLocator = page.mainFrame().locator(\".test\").nth(0);\n const nthText = await nthLocator.textContent();\n\n const firstLocator = page.mainFrame().locator(\".test\").first();\n const firstText = await firstLocator.textContent();\n\n expect(nthText).toBe(firstText);\n expect(nthText).toBe(\"First\");\n });\n\n test(\"nth() works correctly with iframe selectors\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<button id=\"main1\">Main Button 1</button>' +\n '<button id=\"main2\">Main Button 2</button>' +\n '<iframe id=\"frame1\"></iframe>' +\n \"<script>\" +\n 'const frame = document.getElementById(\"frame1\");' +\n \"const doc = frame.contentDocument;\" +\n \"doc.open();\" +\n 'doc.write(\"<button>Frame Button 1</button><button>Frame Button 2</button>\");' +\n \"doc.close();\" +\n \"</script>\",\n ),\n );\n\n // Wait for iframe to load\n await new Promise((resolve) => setTimeout(resolve, 100));\n\n // Test that nth() works correctly with buttons in the main frame\n const mainLocator0 = page.mainFrame().locator(\"button\").nth(0);\n const mainText0 = await mainLocator0.textContent();\n expect(mainText0).toBe(\"Main Button 1\");\n\n const mainLocator1 = page.mainFrame().locator(\"button\").nth(1);\n const mainText1 = await mainLocator1.textContent();\n expect(mainText1).toBe(\"Main Button 2\");\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,242 @@
1
+ var import_test = require("@playwright/test");
2
+ var import_v3 = require("../v3.js");
3
+ var import_v3_config = require("./v3.config.js");
4
+ import_test.test.describe("Locator.selectOption() method", () => {
5
+ let v3;
6
+ import_test.test.beforeEach(async () => {
7
+ v3 = new import_v3.V3(import_v3_config.v3TestConfig);
8
+ await v3.init();
9
+ });
10
+ import_test.test.afterEach(async () => {
11
+ await v3?.close?.().catch((e) => {
12
+ });
13
+ });
14
+ (0, import_test.test)("selectOption() selects single option by value", async () => {
15
+ const page = v3.context.pages()[0];
16
+ await page.goto(
17
+ "data:text/html," + encodeURIComponent(
18
+ `<!doctype html><html><body>
19
+ <select id="fruit">
20
+ <option value="">-- Choose --</option>
21
+ <option value="apple">Apple</option>
22
+ <option value="banana">Banana</option>
23
+ <option value="cherry">Cherry</option>
24
+ </select>
25
+ </body></html>`
26
+ )
27
+ );
28
+ const select = page.mainFrame().locator("#fruit");
29
+ const selected = await select.selectOption("banana");
30
+ (0, import_test.expect)(selected).toEqual(["banana"]);
31
+ const value = await page.mainFrame().evaluate(() => {
32
+ const s = document.getElementById("fruit");
33
+ return s?.value;
34
+ });
35
+ (0, import_test.expect)(value).toBe("banana");
36
+ });
37
+ (0, import_test.test)("selectOption() selects option by label/text", async () => {
38
+ const page = v3.context.pages()[0];
39
+ await page.goto(
40
+ "data:text/html," + encodeURIComponent(
41
+ `<!doctype html><html><body>
42
+ <select id="country">
43
+ <option value="us">United States</option>
44
+ <option value="uk">United Kingdom</option>
45
+ <option value="ca">Canada</option>
46
+ </select>
47
+ </body></html>`
48
+ )
49
+ );
50
+ const select = page.mainFrame().locator("#country");
51
+ const selected = await select.selectOption("United Kingdom");
52
+ (0, import_test.expect)(selected).toEqual(["uk"]);
53
+ });
54
+ (0, import_test.test)("selectOption() selects multiple options in multiple select", async () => {
55
+ const page = v3.context.pages()[0];
56
+ await page.goto(
57
+ "data:text/html," + encodeURIComponent(
58
+ `<!doctype html><html><body>
59
+ <select id="colors" multiple>
60
+ <option value="red">Red</option>
61
+ <option value="green">Green</option>
62
+ <option value="blue">Blue</option>
63
+ <option value="yellow">Yellow</option>
64
+ </select>
65
+ </body></html>`
66
+ )
67
+ );
68
+ const select = page.mainFrame().locator("#colors");
69
+ const selected = await select.selectOption(["red", "blue"]);
70
+ (0, import_test.expect)(selected.sort()).toEqual(["blue", "red"]);
71
+ const values = await page.mainFrame().evaluate(() => {
72
+ const s = document.getElementById("colors");
73
+ return Array.from(s?.selectedOptions ?? []).map((o) => o.value);
74
+ });
75
+ (0, import_test.expect)(values.sort()).toEqual(["blue", "red"]);
76
+ });
77
+ (0, import_test.test)("selectOption() deselects previous option on single select", async () => {
78
+ const page = v3.context.pages()[0];
79
+ await page.goto(
80
+ "data:text/html," + encodeURIComponent(
81
+ `<!doctype html><html><body>
82
+ <select id="size">
83
+ <option value="s">Small</option>
84
+ <option value="m" selected>Medium</option>
85
+ <option value="l">Large</option>
86
+ </select>
87
+ </body></html>`
88
+ )
89
+ );
90
+ const select = page.mainFrame().locator("#size");
91
+ let value = await page.mainFrame().evaluate(() => {
92
+ const s = document.getElementById("size");
93
+ return s?.value;
94
+ });
95
+ (0, import_test.expect)(value).toBe("m");
96
+ await select.selectOption("l");
97
+ value = await page.mainFrame().evaluate(() => {
98
+ const s = document.getElementById("size");
99
+ return s?.value;
100
+ });
101
+ (0, import_test.expect)(value).toBe("l");
102
+ });
103
+ (0, import_test.test)("selectOption() triggers change event", async () => {
104
+ const page = v3.context.pages()[0];
105
+ await page.goto(
106
+ "data:text/html," + encodeURIComponent(
107
+ `<!doctype html><html><body>
108
+ <select id="opt">
109
+ <option value="a">Option A</option>
110
+ <option value="b">Option B</option>
111
+ </select>
112
+ <div id="out"></div>
113
+ <script>
114
+ const select = document.getElementById('opt');
115
+ const out = document.getElementById('out');
116
+ select.addEventListener('change', () => {
117
+ out.textContent = 'changed-' + select.value;
118
+ });
119
+ </script>
120
+ </body></html>`
121
+ )
122
+ );
123
+ const select = page.mainFrame().locator("#opt");
124
+ await select.selectOption("b");
125
+ const output = await page.mainFrame().evaluate(() => {
126
+ const out = document.getElementById("out");
127
+ return out?.textContent;
128
+ });
129
+ (0, import_test.expect)(output).toBe("changed-b");
130
+ });
131
+ (0, import_test.test)("selectOption() with optgroup structure", async () => {
132
+ const page = v3.context.pages()[0];
133
+ await page.goto(
134
+ "data:text/html," + encodeURIComponent(
135
+ `<!doctype html><html><body>
136
+ <select id="grouped">
137
+ <optgroup label="Fruits">
138
+ <option value="apple">Apple</option>
139
+ <option value="orange">Orange</option>
140
+ </optgroup>
141
+ <optgroup label="Vegetables">
142
+ <option value="carrot">Carrot</option>
143
+ <option value="celery">Celery</option>
144
+ </optgroup>
145
+ </select>
146
+ </body></html>`
147
+ )
148
+ );
149
+ const select = page.mainFrame().locator("#grouped");
150
+ await select.selectOption("celery");
151
+ const value = await page.mainFrame().evaluate(() => {
152
+ const s = document.getElementById("grouped");
153
+ return s?.value;
154
+ });
155
+ (0, import_test.expect)(value).toBe("celery");
156
+ });
157
+ (0, import_test.test)("selectOption() returns array of selected values", async () => {
158
+ const page = v3.context.pages()[0];
159
+ await page.goto(
160
+ "data:text/html," + encodeURIComponent(
161
+ `<!doctype html><html><body>
162
+ <select id="multi" multiple>
163
+ <option value="1">One</option>
164
+ <option value="2">Two</option>
165
+ <option value="3">Three</option>
166
+ </select>
167
+ </body></html>`
168
+ )
169
+ );
170
+ const select = page.mainFrame().locator("#multi");
171
+ const selected = await select.selectOption(["1", "3"]);
172
+ (0, import_test.expect)(selected).toContain("1");
173
+ (0, import_test.expect)(selected).toContain("3");
174
+ (0, import_test.expect)(selected.length).toBe(2);
175
+ });
176
+ (0, import_test.test)("selectOption() with empty string value", async () => {
177
+ const page = v3.context.pages()[0];
178
+ await page.goto(
179
+ "data:text/html," + encodeURIComponent(
180
+ `<!doctype html><html><body>
181
+ <select id="opt">
182
+ <option value="">None</option>
183
+ <option value="yes">Yes</option>
184
+ <option value="no">No</option>
185
+ </select>
186
+ </body></html>`
187
+ )
188
+ );
189
+ const select = page.mainFrame().locator("#opt");
190
+ const selected = await select.selectOption("");
191
+ (0, import_test.expect)(selected).toEqual([""]);
192
+ const value = await page.mainFrame().evaluate(() => {
193
+ const s = document.getElementById("opt");
194
+ return s?.value;
195
+ });
196
+ (0, import_test.expect)(value).toBe("");
197
+ });
198
+ (0, import_test.test)("selectOption() with numeric values", async () => {
199
+ const page = v3.context.pages()[0];
200
+ await page.goto(
201
+ "data:text/html," + encodeURIComponent(
202
+ `<!doctype html><html><body>
203
+ <select id="nums">
204
+ <option value="1">One</option>
205
+ <option value="2">Two</option>
206
+ <option value="10">Ten</option>
207
+ <option value="100">Hundred</option>
208
+ </select>
209
+ </body></html>`
210
+ )
211
+ );
212
+ const select = page.mainFrame().locator("#nums");
213
+ await select.selectOption("10");
214
+ const value = await page.mainFrame().evaluate(() => {
215
+ const s = document.getElementById("nums");
216
+ return s?.value;
217
+ });
218
+ (0, import_test.expect)(value).toBe("10");
219
+ });
220
+ (0, import_test.test)("selectOption() with disabled option", async () => {
221
+ const page = v3.context.pages()[0];
222
+ await page.goto(
223
+ "data:text/html," + encodeURIComponent(
224
+ `<!doctype html><html><body>
225
+ <select id="mixed">
226
+ <option value="a">Available</option>
227
+ <option value="b" disabled>Unavailable</option>
228
+ <option value="c">Available</option>
229
+ </select>
230
+ </body></html>`
231
+ )
232
+ );
233
+ const select = page.mainFrame().locator("#mixed");
234
+ await select.selectOption("b");
235
+ const value = await page.mainFrame().evaluate(() => {
236
+ const s = document.getElementById("mixed");
237
+ return s?.value;
238
+ });
239
+ (0, import_test.expect)(value).toBe("b");
240
+ });
241
+ });
242
+ //# sourceMappingURL=locator-select-option.spec.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../lib/v3/tests/locator-select-option.spec.ts"],
4
+ "sourcesContent": ["import { expect, test } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\n\ntest.describe(\"Locator.selectOption() 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((e) => {\n void e; // ignore cleanup errors\n });\n });\n\n test(\"selectOption() selects single option by value\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"fruit\">\n <option value=\"\">-- Choose --</option>\n <option value=\"apple\">Apple</option>\n <option value=\"banana\">Banana</option>\n <option value=\"cherry\">Cherry</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#fruit\");\n const selected = await select.selectOption(\"banana\");\n\n expect(selected).toEqual([\"banana\"]);\n\n const value = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"fruit\") as HTMLSelectElement | null;\n return s?.value;\n });\n expect(value).toBe(\"banana\");\n });\n\n test(\"selectOption() selects option by label/text\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"country\">\n <option value=\"us\">United States</option>\n <option value=\"uk\">United Kingdom</option>\n <option value=\"ca\">Canada</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#country\");\n const selected = await select.selectOption(\"United Kingdom\");\n\n expect(selected).toEqual([\"uk\"]);\n });\n\n test(\"selectOption() selects multiple options in multiple select\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"colors\" multiple>\n <option value=\"red\">Red</option>\n <option value=\"green\">Green</option>\n <option value=\"blue\">Blue</option>\n <option value=\"yellow\">Yellow</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#colors\");\n const selected = await select.selectOption([\"red\", \"blue\"]);\n\n expect(selected.sort()).toEqual([\"blue\", \"red\"]);\n\n const values = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"colors\") as HTMLSelectElement | null;\n return Array.from(s?.selectedOptions ?? []).map((o) => o.value);\n });\n expect(values.sort()).toEqual([\"blue\", \"red\"]);\n });\n\n test(\"selectOption() deselects previous option on single select\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"size\">\n <option value=\"s\">Small</option>\n <option value=\"m\" selected>Medium</option>\n <option value=\"l\">Large</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#size\");\n\n let value = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"size\") as HTMLSelectElement | null;\n return s?.value;\n });\n expect(value).toBe(\"m\");\n\n await select.selectOption(\"l\");\n\n value = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"size\") as HTMLSelectElement | null;\n return s?.value;\n });\n expect(value).toBe(\"l\");\n });\n\n test(\"selectOption() triggers change event\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"opt\">\n <option value=\"a\">Option A</option>\n <option value=\"b\">Option B</option>\n </select>\n <div id=\"out\"></div>\n <script>\n const select = document.getElementById('opt');\n const out = document.getElementById('out');\n select.addEventListener('change', () => {\n out.textContent = 'changed-' + select.value;\n });\n </script>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#opt\");\n await select.selectOption(\"b\");\n\n const output = await page.mainFrame().evaluate(() => {\n const out = document.getElementById(\"out\");\n return out?.textContent;\n });\n expect(output).toBe(\"changed-b\");\n });\n\n test(\"selectOption() with optgroup structure\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"grouped\">\n <optgroup label=\"Fruits\">\n <option value=\"apple\">Apple</option>\n <option value=\"orange\">Orange</option>\n </optgroup>\n <optgroup label=\"Vegetables\">\n <option value=\"carrot\">Carrot</option>\n <option value=\"celery\">Celery</option>\n </optgroup>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#grouped\");\n await select.selectOption(\"celery\");\n\n const value = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"grouped\") as HTMLSelectElement | null;\n return s?.value;\n });\n expect(value).toBe(\"celery\");\n });\n\n test(\"selectOption() returns array of selected 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>\n <select id=\"multi\" multiple>\n <option value=\"1\">One</option>\n <option value=\"2\">Two</option>\n <option value=\"3\">Three</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#multi\");\n const selected = await select.selectOption([\"1\", \"3\"]);\n\n expect(selected).toContain(\"1\");\n expect(selected).toContain(\"3\");\n expect(selected.length).toBe(2);\n });\n\n test(\"selectOption() with empty string value\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"opt\">\n <option value=\"\">None</option>\n <option value=\"yes\">Yes</option>\n <option value=\"no\">No</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#opt\");\n const selected = await select.selectOption(\"\");\n\n expect(selected).toEqual([\"\"]);\n\n const value = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"opt\") as HTMLSelectElement | null;\n return s?.value;\n });\n expect(value).toBe(\"\");\n });\n\n test(\"selectOption() with numeric 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>\n <select id=\"nums\">\n <option value=\"1\">One</option>\n <option value=\"2\">Two</option>\n <option value=\"10\">Ten</option>\n <option value=\"100\">Hundred</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#nums\");\n await select.selectOption(\"10\");\n\n const value = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"nums\") as HTMLSelectElement | null;\n return s?.value;\n });\n expect(value).toBe(\"10\");\n });\n\n test(\"selectOption() with disabled option\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <select id=\"mixed\">\n <option value=\"a\">Available</option>\n <option value=\"b\" disabled>Unavailable</option>\n <option value=\"c\">Available</option>\n </select>\n </body></html>`,\n ),\n );\n\n const select = page.mainFrame().locator(\"#mixed\");\n // Should still select disabled option if explicitly requested\n await select.selectOption(\"b\");\n\n const value = await page.mainFrame().evaluate(() => {\n const s = document.getElementById(\"mixed\") as HTMLSelectElement | null;\n return s?.value;\n });\n expect(value).toBe(\"b\");\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }