@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.
- package/dist/cjs/cli.js +183 -0
- package/dist/cjs/cli.js.map +7 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +24956 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/lib/inference.d.ts +65 -0
- package/dist/cjs/lib/inferenceLogUtils.d.ts +12 -0
- package/dist/cjs/lib/logger.d.ts +69 -0
- package/dist/cjs/lib/modelUtils.d.ts +11 -0
- package/dist/cjs/lib/prompt.d.ts +14 -0
- package/dist/cjs/lib/utils.d.ts +68 -0
- package/dist/cjs/lib/v3/agent/AgentClient.d.ts +19 -0
- package/dist/cjs/lib/v3/agent/AgentProvider.d.ts +20 -0
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.d.ts +57 -0
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.d.ts +74 -0
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.d.ts +71 -0
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +69 -0
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/act.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/ariaTree.d.ts +5 -0
- package/dist/cjs/lib/v3/agent/tools/click.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/clickAndHold.d.ts +14 -0
- package/dist/cjs/lib/v3/agent/tools/dragAndDrop.d.ts +7 -0
- package/dist/cjs/lib/v3/agent/tools/extract.d.ts +20 -0
- package/dist/cjs/lib/v3/agent/tools/fillFormVision.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/goto.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/index.d.ts +92 -0
- package/dist/cjs/lib/v3/agent/tools/keys.d.ts +24 -0
- package/dist/cjs/lib/v3/agent/tools/navback.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/screenshot.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/scroll.d.ts +19 -0
- package/dist/cjs/lib/v3/agent/tools/search.d.ts +15 -0
- package/dist/cjs/lib/v3/agent/tools/think.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/type.d.ts +7 -0
- package/dist/cjs/lib/v3/agent/tools/wait.d.ts +5 -0
- package/dist/cjs/lib/v3/agent/utils/actionMapping.d.ts +3 -0
- package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.d.ts +13 -0
- package/dist/cjs/lib/v3/agent/utils/cuaKeyMapping.d.ts +10 -0
- package/dist/cjs/lib/v3/agent/utils/googleCustomToolHandler.d.ts +25 -0
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.d.ts +22 -0
- package/dist/cjs/lib/v3/agent/utils/imageCompression.d.ts +53 -0
- package/dist/cjs/lib/v3/agent/utils/messageProcessing.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/utils/screenshotHandler.d.ts +10 -0
- package/dist/cjs/lib/v3/agent/utils/validateExperimentalFeatures.d.ts +26 -0
- package/dist/cjs/lib/v3/agent/utils/xpath.d.ts +11 -0
- package/dist/cjs/lib/v3/api.d.ts +86 -0
- package/dist/cjs/lib/v3/cache/ActCache.d.ts +23 -0
- package/dist/cjs/lib/v3/cache/AgentCache.d.ts +109 -0
- package/dist/cjs/lib/v3/cache/CacheStorage.d.ts +17 -0
- package/dist/cjs/lib/v3/cache/serverAgentCache.d.ts +7 -0
- package/dist/cjs/lib/v3/cache/utils.d.ts +15 -0
- package/dist/cjs/lib/v3/cli.d.ts +2 -0
- package/dist/cjs/lib/v3/dom/a11yScripts/index.d.ts +11 -0
- package/dist/cjs/lib/v3/dom/build/a11yScripts.generated.d.ts +16 -0
- package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.d.ts +52 -0
- package/dist/cjs/lib/v3/dom/build/reRenderScriptContent.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/build/rerender-index.d.ts +0 -0
- package/dist/cjs/lib/v3/dom/build/rerender-index.js +1 -0
- package/dist/cjs/lib/v3/dom/build/screenshotScripts.generated.d.ts +4 -0
- package/dist/cjs/lib/v3/dom/build/scriptV3Content.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/build/v3-index.d.ts +0 -0
- package/dist/cjs/lib/v3/dom/build/v3-index.js +1 -0
- package/dist/cjs/lib/v3/dom/genA11yScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/genDomScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/genLocatorScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/genScreenshotScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/index.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/counts.d.ts +15 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/index.d.ts +4 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/scripts.d.ts +37 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/selectors.d.ts +4 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/waitForSelector.d.ts +19 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathParser.d.ts +76 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathResolver.d.ts +9 -0
- package/dist/cjs/lib/v3/dom/piercer.entry.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/piercer.runtime.d.ts +23 -0
- package/dist/cjs/lib/v3/dom/rerenderMissingShadows.entry.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/rerenderMissingShadows.runtime.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/screenshotScripts/index.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/screenshotScripts/resolveMaskRect.d.ts +8 -0
- package/dist/cjs/lib/v3/external_clients/aisdk.d.ts +11 -0
- package/dist/cjs/lib/v3/external_clients/customOpenAI.d.ts +18 -0
- package/dist/cjs/lib/v3/flowLogger.d.ts +139 -0
- package/dist/cjs/lib/v3/handlers/actHandler.d.ts +21 -0
- package/dist/cjs/lib/v3/handlers/extractHandler.d.ts +31 -0
- package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +24 -0
- package/dist/cjs/lib/v3/handlers/handlerUtils/timeoutGuard.d.ts +2 -0
- package/dist/cjs/lib/v3/handlers/observeHandler.d.ts +17 -0
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +32 -0
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +33 -0
- package/dist/cjs/lib/v3/index.d.ts +18 -0
- package/dist/cjs/lib/v3/launch/browserbase.d.ts +7 -0
- package/dist/cjs/lib/v3/launch/local.d.ts +15 -0
- package/dist/cjs/lib/v3/llm/AnthropicClient.d.ts +16 -0
- package/dist/cjs/lib/v3/llm/CerebrasClient.d.ts +17 -0
- package/dist/cjs/lib/v3/llm/GoogleClient.d.ts +19 -0
- package/dist/cjs/lib/v3/llm/GroqClient.d.ts +17 -0
- package/dist/cjs/lib/v3/llm/LLMClient.d.ts +121 -0
- package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +13 -0
- package/dist/cjs/lib/v3/llm/OpenAIClient.d.ts +15 -0
- package/dist/cjs/lib/v3/llm/aisdk.d.ts +15 -0
- package/dist/cjs/lib/v3/logger.d.ts +9 -0
- package/dist/cjs/lib/v3/mcp/connection.d.ts +11 -0
- package/dist/cjs/lib/v3/mcp/utils.d.ts +3 -0
- package/dist/cjs/lib/v3/shutdown/cleanupLocal.d.ts +14 -0
- package/dist/cjs/lib/v3/shutdown/supervisor.d.ts +11 -0
- package/dist/cjs/lib/v3/shutdown/supervisorClient.d.ts +15 -0
- package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js +113 -0
- package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js +102 -0
- package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js +374 -0
- package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js +354 -0
- package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js +247 -0
- package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js +105 -0
- package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-streaming.spec.js +126 -0
- package/dist/cjs/lib/v3/tests/agent-streaming.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js +44 -0
- package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/click-count.spec.js +147 -0
- package/dist/cjs/lib/v3/tests/click-count.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js +54 -0
- package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js +176 -0
- package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js +53 -0
- package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/downloads.spec.js +80 -0
- package/dist/cjs/lib/v3/tests/downloads.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js +53 -0
- package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js +493 -0
- package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keep-alive.child.js +92 -0
- package/dist/cjs/lib/v3/tests/keep-alive.child.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keep-alive.helpers.js +568 -0
- package/dist/cjs/lib/v3/tests/keep-alive.helpers.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keep-alive.spec.js +15 -0
- package/dist/cjs/lib/v3/tests/keep-alive.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keyboard.spec.js +296 -0
- package/dist/cjs/lib/v3/tests/keyboard.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js +159 -0
- package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js +191 -0
- package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js +108 -0
- package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-count.spec.js +71 -0
- package/dist/cjs/lib/v3/tests/locator-count.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-fill.spec.js +118 -0
- package/dist/cjs/lib/v3/tests/locator-fill.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js +136 -0
- package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-nth.spec.js +157 -0
- package/dist/cjs/lib/v3/tests/locator-nth.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-select-option.spec.js +242 -0
- package/dist/cjs/lib/v3/tests/locator-select-option.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/logger-initialization.spec.js +547 -0
- package/dist/cjs/lib/v3/tests/logger-initialization.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js +269 -0
- package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/nested-div.spec.js +23 -0
- package/dist/cjs/lib/v3/tests/nested-div.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js +90 -0
- package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-console.spec.js +56 -0
- package/dist/cjs/lib/v3/tests/page-console.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js +418 -0
- package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-goto-response.spec.js +35 -0
- package/dist/cjs/lib/v3/tests/page-goto-response.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-hover.spec.js +167 -0
- package/dist/cjs/lib/v3/tests/page-hover.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-screenshot.spec.js +295 -0
- package/dist/cjs/lib/v3/tests/page-screenshot.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-scroll.spec.js +182 -0
- package/dist/cjs/lib/v3/tests/page-scroll.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js +46 -0
- package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js +98 -0
- package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/setinputfiles.spec.js +148 -0
- package/dist/cjs/lib/v3/tests/setinputfiles.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js +156 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js +156 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/testUtils.js +54 -0
- package/dist/cjs/lib/v3/tests/testUtils.js.map +7 -0
- package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js +100 -0
- package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/timeouts.spec.js +32 -0
- package/dist/cjs/lib/v3/tests/timeouts.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/user-data-dir.spec.js +65 -0
- package/dist/cjs/lib/v3/tests/user-data-dir.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/v3.config.js +36 -0
- package/dist/cjs/lib/v3/tests/v3.config.js.map +7 -0
- package/dist/cjs/lib/v3/tests/v3.dynamic.config.js +67 -0
- package/dist/cjs/lib/v3/tests/v3.dynamic.config.js.map +7 -0
- package/dist/cjs/lib/v3/tests/v3.playwright.config.js +61 -0
- package/dist/cjs/lib/v3/tests/v3.playwright.config.js.map +7 -0
- package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js +593 -0
- package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js +97 -0
- package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js +77 -0
- package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js.map +7 -0
- package/dist/cjs/lib/v3/timeoutConfig.d.ts +2 -0
- package/dist/cjs/lib/v3/types/private/agent.d.ts +6 -0
- package/dist/cjs/lib/v3/types/private/api.d.ts +11 -0
- package/dist/cjs/lib/v3/types/private/cache.d.ts +128 -0
- package/dist/cjs/lib/v3/types/private/evaluator.d.ts +40 -0
- package/dist/cjs/lib/v3/types/private/handlers.d.ts +38 -0
- package/dist/cjs/lib/v3/types/private/index.d.ts +7 -0
- package/dist/cjs/lib/v3/types/private/internal.d.ts +39 -0
- package/dist/cjs/lib/v3/types/private/locator.d.ts +9 -0
- package/dist/cjs/lib/v3/types/private/network.d.ts +34 -0
- package/dist/cjs/lib/v3/types/private/shutdown.d.ts +19 -0
- package/dist/cjs/lib/v3/types/private/shutdownErrors.d.ts +12 -0
- package/dist/cjs/lib/v3/types/private/snapshot.d.ts +117 -0
- package/dist/cjs/lib/v3/types/public/agent.d.ts +595 -0
- package/dist/cjs/lib/v3/types/public/api.d.ts +1211 -0
- package/dist/cjs/lib/v3/types/public/apiErrors.d.ts +18 -0
- package/dist/cjs/lib/v3/types/public/index.d.ts +12 -0
- package/dist/cjs/lib/v3/types/public/locator.d.ts +9 -0
- package/dist/cjs/lib/v3/types/public/logs.d.ts +23 -0
- package/dist/cjs/lib/v3/types/public/methods.d.ts +56 -0
- package/dist/cjs/lib/v3/types/public/metrics.d.ts +27 -0
- package/dist/cjs/lib/v3/types/public/model.d.ts +65 -0
- package/dist/cjs/lib/v3/types/public/options.d.ts +70 -0
- package/dist/cjs/lib/v3/types/public/page.d.ts +18 -0
- package/dist/cjs/lib/v3/types/public/screenshotTypes.d.ts +25 -0
- package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +152 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/a11yTree.d.ts +15 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/activeElement.d.ts +8 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.d.ts +77 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/coordinateResolver.d.ts +7 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/domTree.d.ts +46 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/focusSelectors.d.ts +24 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/index.d.ts +4 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/sessions.d.ts +16 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/treeFormatUtils.d.ts +28 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/xpathUtils.d.ts +26 -0
- package/dist/cjs/lib/v3/understudy/a11yInvocation.d.ts +8 -0
- package/dist/cjs/lib/v3/understudy/cdp.d.ts +69 -0
- package/dist/cjs/lib/v3/understudy/consoleMessage.d.ts +22 -0
- package/dist/cjs/lib/v3/understudy/context.d.ts +132 -0
- package/dist/cjs/lib/v3/understudy/deepLocator.d.ts +87 -0
- package/dist/cjs/lib/v3/understudy/executionContextRegistry.d.ts +15 -0
- package/dist/cjs/lib/v3/understudy/fileUploadUtils.d.ts +13 -0
- package/dist/cjs/lib/v3/understudy/frame.d.ts +69 -0
- package/dist/cjs/lib/v3/understudy/frameLocator.d.ts +50 -0
- package/dist/cjs/lib/v3/understudy/frameRegistry.d.ts +101 -0
- package/dist/cjs/lib/v3/understudy/initScripts.d.ts +2 -0
- package/dist/cjs/lib/v3/understudy/lifecycleWatcher.d.ts +64 -0
- package/dist/cjs/lib/v3/understudy/locator.d.ts +194 -0
- package/dist/cjs/lib/v3/understudy/locatorInvocation.d.ts +8 -0
- package/dist/cjs/lib/v3/understudy/navigationResponseTracker.d.ts +84 -0
- package/dist/cjs/lib/v3/understudy/networkManager.d.ts +53 -0
- package/dist/cjs/lib/v3/understudy/page.d.ts +354 -0
- package/dist/cjs/lib/v3/understudy/piercer.d.ts +4 -0
- package/dist/cjs/lib/v3/understudy/response.d.ts +137 -0
- package/dist/cjs/lib/v3/understudy/screenshotUtils.d.ts +16 -0
- package/dist/cjs/lib/v3/understudy/selectorResolver.d.ts +38 -0
- package/dist/cjs/lib/v3/v3.d.ts +191 -0
- package/dist/cjs/lib/v3/zodCompat.d.ts +12 -0
- package/dist/cjs/lib/v3Evaluator.d.ts +19 -0
- package/dist/cjs/lib/version.d.ts +5 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/tests/browserbase-session-accessors.test.js +101 -0
- package/dist/cjs/tests/browserbase-session-accessors.test.js.map +7 -0
- package/dist/cjs/tests/cache-llm-resolution.test.js +187 -0
- package/dist/cjs/tests/cache-llm-resolution.test.js.map +7 -0
- package/dist/cjs/tests/helpers/mockCDPSession.js +50 -0
- package/dist/cjs/tests/helpers/mockCDPSession.js.map +7 -0
- package/dist/cjs/tests/llm-provider.test.js +57 -0
- package/dist/cjs/tests/llm-provider.test.js.map +7 -0
- package/dist/cjs/tests/model-deprecation.test.js +132 -0
- package/dist/cjs/tests/model-deprecation.test.js.map +7 -0
- package/dist/cjs/tests/page-snapshot.test.js +58 -0
- package/dist/cjs/tests/page-snapshot.test.js.map +7 -0
- package/dist/cjs/tests/public-api/export-surface.test.js +76 -0
- package/dist/cjs/tests/public-api/export-surface.test.js.map +7 -0
- package/dist/cjs/tests/public-api/llm-and-agents.test.js +150 -0
- package/dist/cjs/tests/public-api/llm-and-agents.test.js.map +7 -0
- package/dist/cjs/tests/public-api/public-error-types.test.js +104 -0
- package/dist/cjs/tests/public-api/public-error-types.test.js.map +7 -0
- package/dist/cjs/tests/public-api/public-types.test.js +74 -0
- package/dist/cjs/tests/public-api/public-types.test.js.map +7 -0
- package/dist/cjs/tests/public-api/runtime-utils.test.js +53 -0
- package/dist/cjs/tests/public-api/runtime-utils.test.js.map +7 -0
- package/dist/cjs/tests/public-api/schema-utils.test.js +100 -0
- package/dist/cjs/tests/public-api/schema-utils.test.js.map +7 -0
- package/dist/cjs/tests/public-api/timeout-error-types.test.js +103 -0
- package/dist/cjs/tests/public-api/timeout-error-types.test.js.map +7 -0
- package/dist/cjs/tests/public-api/tool-type-export.test.js +47 -0
- package/dist/cjs/tests/public-api/tool-type-export.test.js.map +7 -0
- package/dist/cjs/tests/public-api/v3-core.test.js +104 -0
- package/dist/cjs/tests/public-api/v3-core.test.js.map +7 -0
- package/dist/cjs/tests/safety-confirmation.test.js +134 -0
- package/dist/cjs/tests/safety-confirmation.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-a11y-resolvers.test.js +370 -0
- package/dist/cjs/tests/snapshot-a11y-resolvers.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js +294 -0
- package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-capture-orchestration.test.js +403 -0
- package/dist/cjs/tests/snapshot-capture-orchestration.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-cbor.test.js +197 -0
- package/dist/cjs/tests/snapshot-cbor.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-dom-session-builders.test.js +246 -0
- package/dist/cjs/tests/snapshot-dom-session-builders.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-dom-tree-utils.test.js +104 -0
- package/dist/cjs/tests/snapshot-dom-tree-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js +45 -0
- package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-frame-merge.test.js +388 -0
- package/dist/cjs/tests/snapshot-frame-merge.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-tree-format-utils.test.js +106 -0
- package/dist/cjs/tests/snapshot-tree-format-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-xpath-utils.test.js +74 -0
- package/dist/cjs/tests/snapshot-xpath-utils.test.js.map +7 -0
- package/dist/cjs/tests/timeout-handlers.test.js +864 -0
- package/dist/cjs/tests/timeout-handlers.test.js.map +7 -0
- package/dist/cjs/tests/xpath-parser.test.js +314 -0
- package/dist/cjs/tests/xpath-parser.test.js.map +7 -0
- package/dist/cjs/tests/xpath-resolver.test.js +70 -0
- package/dist/cjs/tests/xpath-resolver.test.js.map +7 -0
- package/dist/cjs/tests/zod-enum-compatibility.test.js +119 -0
- package/dist/cjs/tests/zod-enum-compatibility.test.js.map +7 -0
- package/dist/esm/lib/modelUtils.d.ts +0 -3
- package/dist/esm/lib/modelUtils.js +2 -7
- package/dist/esm/lib/modelUtils.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/act.d.ts +1 -2
- package/dist/esm/lib/v3/agent/tools/act.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/extract.d.ts +1 -2
- package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/fillform.d.ts +1 -2
- package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/index.d.ts +2 -2
- package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
- package/dist/esm/lib/v3/cli.d.ts +2 -0
- package/dist/esm/lib/v3/cli.js +10 -0
- package/dist/esm/lib/v3/cli.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/rerender-index.d.ts +0 -0
- package/dist/esm/lib/v3/dom/build/rerender-index.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/v3-index.d.ts +0 -0
- package/dist/esm/lib/v3/dom/build/v3-index.js.map +1 -0
- package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +2 -2
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
- package/dist/esm/lib/v3/index.d.ts +1 -0
- package/dist/esm/lib/v3/index.js +1 -0
- package/dist/esm/lib/v3/index.js.map +1 -1
- package/dist/esm/lib/v3/shutdown/supervisor.d.ts +7 -5
- package/dist/esm/lib/v3/shutdown/supervisor.js +62 -52
- package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
- package/dist/esm/lib/v3/shutdown/supervisorClient.js +48 -52
- package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -1
- package/dist/esm/lib/v3/tests/click-count.spec.js +47 -12
- package/dist/esm/lib/v3/tests/click-count.spec.js.map +2 -2
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js +67 -21
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +2 -2
- package/dist/esm/lib/v3/tests/v3.playwright.config.js +3 -60
- package/dist/esm/lib/v3/tests/v3.playwright.config.js.map +2 -2
- package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -13
- package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
- package/dist/esm/lib/v3/understudy/context.js +10 -1
- package/dist/esm/lib/v3/understudy/context.js.map +1 -1
- package/dist/esm/lib/v3/understudy/locator.js +2 -2
- package/dist/esm/lib/v3/understudy/locator.js.map +1 -1
- package/dist/esm/lib/v3/understudy/page.js +2 -1
- package/dist/esm/lib/v3/understudy/page.js.map +1 -1
- package/dist/esm/lib/v3/v3.js +10 -13
- package/dist/esm/lib/v3/v3.js.map +1 -1
- package/dist/esm/tests/public-api/export-surface.test.js +1 -0
- package/dist/esm/tests/public-api/export-surface.test.js.map +2 -2
- package/package.json +13 -9
- package/dist/esm/lib/v3/tests/envReporter.js +0 -57
- package/dist/esm/lib/v3/tests/envReporter.js.map +0 -7
- package/dist/esm/tests/agent-execution-model.test.js +0 -139
- package/dist/esm/tests/agent-execution-model.test.js.map +0 -7
- package/dist/esm/tests/model-utils.test.js +0 -43
- package/dist/esm/tests/model-utils.test.js.map +0 -7
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __copyProps = (to, from, except, desc) => {
|
|
8
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
9
|
+
for (let key of __getOwnPropNames(from))
|
|
10
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
11
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
+
}
|
|
13
|
+
return to;
|
|
14
|
+
};
|
|
15
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
16
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
17
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
18
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
19
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
23
|
+
var import_test = require("@playwright/test");
|
|
24
|
+
var import_v3 = require("../v3.js");
|
|
25
|
+
var import_puppeteer_core = __toESM(require("puppeteer-core"), 1);
|
|
26
|
+
var import_playwright = require("playwright");
|
|
27
|
+
var import_patchright_core = require("patchright-core");
|
|
28
|
+
var import_v3_dynamic_config = require("./v3.dynamic.config.js");
|
|
29
|
+
var import_testUtils = require("./testUtils.js");
|
|
30
|
+
async function runCase(v3, c, framework) {
|
|
31
|
+
let cleanup = null;
|
|
32
|
+
let page;
|
|
33
|
+
if (framework === "v3") {
|
|
34
|
+
page = v3.context.pages()[0];
|
|
35
|
+
await page.goto(c.url, { waitUntil: "networkidle" });
|
|
36
|
+
} else if (framework === "puppeteer") {
|
|
37
|
+
const browser = await import_puppeteer_core.default.connect({
|
|
38
|
+
browserWSEndpoint: v3.connectURL(),
|
|
39
|
+
defaultViewport: null
|
|
40
|
+
});
|
|
41
|
+
const pages = await browser.pages();
|
|
42
|
+
page = pages[0];
|
|
43
|
+
await page.goto(c.url, { waitUntil: "networkidle0" });
|
|
44
|
+
cleanup = async () => {
|
|
45
|
+
try {
|
|
46
|
+
await browser.close();
|
|
47
|
+
} catch {
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
} else if (framework === "playwright") {
|
|
51
|
+
const pwBrowser = await import_playwright.chromium.connectOverCDP(v3.connectURL());
|
|
52
|
+
const pwContext = pwBrowser.contexts()[0];
|
|
53
|
+
page = pwContext.pages()[0];
|
|
54
|
+
await page.goto(c.url, { waitUntil: "networkidle" });
|
|
55
|
+
cleanup = async () => {
|
|
56
|
+
try {
|
|
57
|
+
await pwBrowser.close();
|
|
58
|
+
} catch {
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
} else if (framework === "patchright") {
|
|
62
|
+
const prBrowser = await import_patchright_core.chromium.connectOverCDP(v3.connectURL());
|
|
63
|
+
const prContext = prBrowser.contexts()[0];
|
|
64
|
+
page = prContext.pages()[0];
|
|
65
|
+
await page.goto(c.url, { waitUntil: "networkidle" });
|
|
66
|
+
cleanup = async () => {
|
|
67
|
+
try {
|
|
68
|
+
await prBrowser.close();
|
|
69
|
+
} catch {
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
await v3.act(c.action, { page });
|
|
75
|
+
const extraction = await v3.extract({ page });
|
|
76
|
+
const text = extraction.pageText ?? "";
|
|
77
|
+
for (const s of c.expectedSubstrings) {
|
|
78
|
+
(0, import_test.expect)(
|
|
79
|
+
text.includes(s),
|
|
80
|
+
`expected pageText to include substring: ${s}`
|
|
81
|
+
).toBeTruthy();
|
|
82
|
+
}
|
|
83
|
+
} finally {
|
|
84
|
+
await cleanup?.();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const cases = [
|
|
88
|
+
{
|
|
89
|
+
title: "Closed shadow root inside OOPIF",
|
|
90
|
+
url: "https://browserbase.github.io/stagehand-eval-sites/sites/closed-shadow-root-in-oopif/",
|
|
91
|
+
action: {
|
|
92
|
+
selector: "xpath=/html/body/main/section/iframe/html/body/shadow-demo//div/button",
|
|
93
|
+
method: "click",
|
|
94
|
+
arguments: [""],
|
|
95
|
+
description: "click button inside closed shadow root in OOPIF"
|
|
96
|
+
},
|
|
97
|
+
expectedSubstrings: ["button successfully clicked"]
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
title: "Open shadow root inside OOPIF",
|
|
101
|
+
url: "https://browserbase.github.io/stagehand-eval-sites/sites/open-shadow-root-in-oopif/",
|
|
102
|
+
action: {
|
|
103
|
+
selector: "xpath=/html/body/main/section/iframe/html/body/shadow-demo//div/button",
|
|
104
|
+
method: "click",
|
|
105
|
+
arguments: [""],
|
|
106
|
+
description: ""
|
|
107
|
+
},
|
|
108
|
+
expectedSubstrings: ["button successfully clicked"]
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
title: "OOPIF inside open shadow root",
|
|
112
|
+
url: "https://browserbase.github.io/stagehand-eval-sites/sites/oopif-in-open-shadow-dom/",
|
|
113
|
+
action: {
|
|
114
|
+
selector: "xpath=/html/body/shadow-host//section/iframe/html/body/main/section[1]/form/div/div[1]/input",
|
|
115
|
+
method: "fill",
|
|
116
|
+
arguments: ["nunya"],
|
|
117
|
+
description: ""
|
|
118
|
+
},
|
|
119
|
+
expectedSubstrings: ["nunya"]
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
title: "OOPIF inside closed shadow root",
|
|
123
|
+
url: "https://browserbase.github.io/stagehand-eval-sites/sites/oopif-in-closed-shadow-dom/",
|
|
124
|
+
action: {
|
|
125
|
+
selector: "xpath=/html/body/shadow-host//section/iframe/html/body/main/section[1]/form/div/div[1]/input",
|
|
126
|
+
method: "fill",
|
|
127
|
+
arguments: ["nunya"],
|
|
128
|
+
description: "fill input inside OOPIF"
|
|
129
|
+
},
|
|
130
|
+
expectedSubstrings: ["nunya"]
|
|
131
|
+
}
|
|
132
|
+
];
|
|
133
|
+
import_test.test.describe.parallel("Stagehand v3: shadow <-> iframe OOPIF scenarios", () => {
|
|
134
|
+
let v3;
|
|
135
|
+
import_test.test.beforeEach(async () => {
|
|
136
|
+
v3 = new import_v3.V3(import_v3_dynamic_config.v3DynamicTestConfig);
|
|
137
|
+
await v3.init();
|
|
138
|
+
});
|
|
139
|
+
import_test.test.afterEach(async () => {
|
|
140
|
+
await (0, import_testUtils.closeV3)(v3);
|
|
141
|
+
});
|
|
142
|
+
const frameworks = [
|
|
143
|
+
"v3",
|
|
144
|
+
"playwright",
|
|
145
|
+
"puppeteer",
|
|
146
|
+
"patchright"
|
|
147
|
+
];
|
|
148
|
+
for (const fw of frameworks) {
|
|
149
|
+
for (const c of cases) {
|
|
150
|
+
(0, import_test.test)(`[${fw}] ${c.title}`, async () => {
|
|
151
|
+
await runCase(v3, c, fw);
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
//# sourceMappingURL=shadow-iframe-oopif.spec.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../lib/v3/tests/shadow-iframe-oopif.spec.ts"],
|
|
4
|
+
"sourcesContent": ["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport puppeteer from \"puppeteer-core\";\nimport { chromium as playwrightChromium } from \"playwright\";\nimport { chromium as patchrightChromium } from \"patchright-core\";\nimport { Action } from \"../types/public/methods.js\";\nimport { AnyPage } from \"../types/public/page.js\";\nimport { v3DynamicTestConfig } from \"./v3.dynamic.config.js\";\nimport { closeV3 } from \"./testUtils.js\";\n\n/**\n * IMPORTANT:\n * - We create a single V3 instance/test to avoid cross-test state. Increase parallelism later if needed.\n * - We assert an *effect* when feasible (e.g. input value). For pure clicks we assert no thrown error.\n */\n\ntype Case = {\n title: string;\n url: string;\n action: Action;\n expectedSubstrings?: string[]; // check v3.extract().pageText contains these\n};\n\ntype Framework = \"v3\" | \"puppeteer\" | \"playwright\" | \"patchright\";\n\nasync function runCase(v3: V3, c: Case, framework: Framework): Promise<void> {\n let cleanup: (() => Promise<void> | void) | null = null;\n\n // Acquire the correct page for the requested framework\n let page: AnyPage;\n if (framework === \"v3\") {\n page = v3.context.pages()[0];\n await page.goto(c.url, { waitUntil: \"networkidle\" });\n } else if (framework === \"puppeteer\") {\n const browser = await puppeteer.connect({\n browserWSEndpoint: v3.connectURL(),\n defaultViewport: null,\n });\n const pages = await browser.pages();\n page = pages[0];\n await page.goto(c.url, { waitUntil: \"networkidle0\" });\n cleanup = async () => {\n try {\n await browser.close();\n } catch {\n //\n }\n };\n } else if (framework === \"playwright\") {\n const pwBrowser = await playwrightChromium.connectOverCDP(v3.connectURL());\n const pwContext = pwBrowser.contexts()[0];\n page = pwContext.pages()[0];\n await page.goto(c.url, { waitUntil: \"networkidle\" });\n cleanup = async () => {\n try {\n await pwBrowser.close();\n } catch {\n // ignore\n }\n };\n } else if (framework === \"patchright\") {\n const prBrowser = await patchrightChromium.connectOverCDP(v3.connectURL());\n const prContext = prBrowser.contexts()[0];\n page = prContext.pages()[0];\n await page.goto(c.url, { waitUntil: \"networkidle\" });\n cleanup = async () => {\n try {\n await prBrowser.close();\n } catch {\n // ignore\n }\n };\n }\n\n try {\n await v3.act(c.action, { page });\n // Post-action extraction; verify expected text appears\n const extraction = await v3.extract({ page });\n const text = extraction.pageText ?? \"\";\n for (const s of c.expectedSubstrings) {\n expect(\n text.includes(s),\n `expected pageText to include substring: ${s}`,\n ).toBeTruthy();\n }\n } finally {\n await cleanup?.();\n }\n}\n\nconst cases: Case[] = [\n {\n title: \"Closed shadow root inside OOPIF\",\n url: \"https://browserbase.github.io/stagehand-eval-sites/sites/closed-shadow-root-in-oopif/\",\n action: {\n selector:\n \"xpath=/html/body/main/section/iframe/html/body/shadow-demo//div/button\",\n method: \"click\",\n arguments: [\"\"],\n description: \"click button inside closed shadow root in OOPIF\",\n },\n expectedSubstrings: [\"button successfully clicked\"],\n },\n {\n title: \"Open shadow root inside OOPIF\",\n url: \"https://browserbase.github.io/stagehand-eval-sites/sites/open-shadow-root-in-oopif/\",\n action: {\n selector:\n \"xpath=/html/body/main/section/iframe/html/body/shadow-demo//div/button\",\n method: \"click\",\n arguments: [\"\"],\n description: \"\",\n },\n expectedSubstrings: [\"button successfully clicked\"],\n },\n {\n title: \"OOPIF inside open shadow root\",\n url: \"https://browserbase.github.io/stagehand-eval-sites/sites/oopif-in-open-shadow-dom/\",\n action: {\n selector:\n \"xpath=/html/body/shadow-host//section/iframe/html/body/main/section[1]/form/div/div[1]/input\",\n method: \"fill\",\n arguments: [\"nunya\"],\n description: \"\",\n },\n expectedSubstrings: [\"nunya\"],\n },\n {\n title: \"OOPIF inside closed shadow root\",\n url: \"https://browserbase.github.io/stagehand-eval-sites/sites/oopif-in-closed-shadow-dom/\",\n action: {\n selector:\n \"xpath=/html/body/shadow-host//section/iframe/html/body/main/section[1]/form/div/div[1]/input\",\n method: \"fill\",\n arguments: [\"nunya\"],\n description: \"fill input inside OOPIF\",\n },\n expectedSubstrings: [\"nunya\"],\n },\n];\n\ntest.describe\n .parallel(\"Stagehand v3: shadow <-> iframe OOPIF scenarios\", () => {\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 const frameworks: Framework[] = [\n \"v3\",\n \"playwright\",\n \"puppeteer\",\n \"patchright\",\n ];\n for (const fw of frameworks) {\n for (const c of cases) {\n test(`[${fw}] ${c.title}`, async () => {\n await runCase(v3, c, fw);\n });\n }\n }\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["puppeteer", "playwrightChromium", "patchrightChromium"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __copyProps = (to, from, except, desc) => {
|
|
8
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
9
|
+
for (let key of __getOwnPropNames(from))
|
|
10
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
11
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
+
}
|
|
13
|
+
return to;
|
|
14
|
+
};
|
|
15
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
16
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
17
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
18
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
19
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
23
|
+
var import_test = require("@playwright/test");
|
|
24
|
+
var import_v3 = require("../v3.js");
|
|
25
|
+
var import_puppeteer_core = __toESM(require("puppeteer-core"), 1);
|
|
26
|
+
var import_playwright = require("playwright");
|
|
27
|
+
var import_patchright_core = require("patchright-core");
|
|
28
|
+
var import_v3_dynamic_config = require("./v3.dynamic.config.js");
|
|
29
|
+
var import_testUtils = require("./testUtils.js");
|
|
30
|
+
async function runCase(v3, c, framework) {
|
|
31
|
+
let cleanup = null;
|
|
32
|
+
let page;
|
|
33
|
+
if (framework === "v3") {
|
|
34
|
+
page = v3.context.pages()[0];
|
|
35
|
+
await page.goto(c.url, { waitUntil: "networkidle" });
|
|
36
|
+
} else if (framework === "puppeteer") {
|
|
37
|
+
const browser = await import_puppeteer_core.default.connect({
|
|
38
|
+
browserWSEndpoint: v3.connectURL(),
|
|
39
|
+
defaultViewport: null
|
|
40
|
+
});
|
|
41
|
+
const pages = await browser.pages();
|
|
42
|
+
page = pages[0];
|
|
43
|
+
await page.goto(c.url, { waitUntil: "networkidle0" });
|
|
44
|
+
cleanup = async () => {
|
|
45
|
+
try {
|
|
46
|
+
await browser.close();
|
|
47
|
+
} catch {
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
} else if (framework === "playwright") {
|
|
51
|
+
const pwBrowser = await import_playwright.chromium.connectOverCDP(v3.connectURL());
|
|
52
|
+
const pwContext = pwBrowser.contexts()[0];
|
|
53
|
+
page = pwContext.pages()[0];
|
|
54
|
+
await page.goto(c.url, { waitUntil: "networkidle" });
|
|
55
|
+
cleanup = async () => {
|
|
56
|
+
try {
|
|
57
|
+
await pwBrowser.close();
|
|
58
|
+
} catch {
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
} else if (framework === "patchright") {
|
|
62
|
+
const prBrowser = await import_patchright_core.chromium.connectOverCDP(v3.connectURL());
|
|
63
|
+
const prContext = prBrowser.contexts()[0];
|
|
64
|
+
page = prContext.pages()[0];
|
|
65
|
+
await page.goto(c.url, { waitUntil: "networkidle" });
|
|
66
|
+
cleanup = async () => {
|
|
67
|
+
try {
|
|
68
|
+
await prBrowser.close();
|
|
69
|
+
} catch {
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
await v3.act(c.action, { page });
|
|
75
|
+
const extraction = await v3.extract({ page });
|
|
76
|
+
const text = extraction.pageText ?? "";
|
|
77
|
+
for (const s of c.expectedSubstrings) {
|
|
78
|
+
(0, import_test.expect)(
|
|
79
|
+
text.includes(s),
|
|
80
|
+
`expected pageText to include substring: ${s}`
|
|
81
|
+
).toBeTruthy();
|
|
82
|
+
}
|
|
83
|
+
} finally {
|
|
84
|
+
await cleanup?.();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const cases = [
|
|
88
|
+
{
|
|
89
|
+
title: "Open shadow root inside SPIF",
|
|
90
|
+
url: "https://browserbase.github.io/stagehand-eval-sites/sites/open-shadow-root-in-spif/",
|
|
91
|
+
action: {
|
|
92
|
+
selector: "xpath=/html/body/main/section/iframe/html/body/shadow-demo//div/button",
|
|
93
|
+
method: "click",
|
|
94
|
+
arguments: [""],
|
|
95
|
+
description: ""
|
|
96
|
+
},
|
|
97
|
+
expectedSubstrings: ["button successfully clicked"]
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
title: "Closed shadow root inside SPIF",
|
|
101
|
+
url: "https://browserbase.github.io/stagehand-eval-sites/sites/closed-shadow-dom-in-spif/",
|
|
102
|
+
action: {
|
|
103
|
+
selector: "xpath=/html/body/div/iframe/html/body/shadow-demo//div/button",
|
|
104
|
+
method: "click",
|
|
105
|
+
arguments: [""],
|
|
106
|
+
description: ""
|
|
107
|
+
},
|
|
108
|
+
expectedSubstrings: ["button successfully clicked"]
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
title: "SPIF inside closed shadow root",
|
|
112
|
+
url: "https://browserbase.github.io/stagehand-eval-sites/sites/spif-in-closed-shadow-dom/",
|
|
113
|
+
action: {
|
|
114
|
+
selector: "xpath=/html/body/shadow-host//div/iframe/html/body/button",
|
|
115
|
+
method: "click",
|
|
116
|
+
arguments: [""],
|
|
117
|
+
description: ""
|
|
118
|
+
},
|
|
119
|
+
expectedSubstrings: ["button successfully clicked"]
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
title: "SPIF inside open shadow root",
|
|
123
|
+
url: "https://browserbase.github.io/stagehand-eval-sites/sites/spif-in-open-shadow-dom/",
|
|
124
|
+
action: {
|
|
125
|
+
selector: "xpath=/html/body/shadow-host//div/iframe/html/body/button",
|
|
126
|
+
method: "click",
|
|
127
|
+
arguments: [""],
|
|
128
|
+
description: "click button inside SPIF under open shadow"
|
|
129
|
+
},
|
|
130
|
+
expectedSubstrings: ["button successfully clicked"]
|
|
131
|
+
}
|
|
132
|
+
];
|
|
133
|
+
import_test.test.describe.parallel("Stagehand v3: shadow <-> iframe SPIF scenarios", () => {
|
|
134
|
+
let v3;
|
|
135
|
+
import_test.test.beforeEach(async () => {
|
|
136
|
+
v3 = new import_v3.V3(import_v3_dynamic_config.v3DynamicTestConfig);
|
|
137
|
+
await v3.init();
|
|
138
|
+
});
|
|
139
|
+
import_test.test.afterEach(async () => {
|
|
140
|
+
await (0, import_testUtils.closeV3)(v3);
|
|
141
|
+
});
|
|
142
|
+
const frameworks = [
|
|
143
|
+
"v3",
|
|
144
|
+
"playwright",
|
|
145
|
+
"puppeteer",
|
|
146
|
+
"patchright"
|
|
147
|
+
];
|
|
148
|
+
for (const fw of frameworks) {
|
|
149
|
+
for (const c of cases) {
|
|
150
|
+
(0, import_test.test)(`[${fw}] ${c.title}`, async () => {
|
|
151
|
+
await runCase(v3, c, fw);
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
//# sourceMappingURL=shadow-iframe-spif.spec.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../lib/v3/tests/shadow-iframe-spif.spec.ts"],
|
|
4
|
+
"sourcesContent": ["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport puppeteer from \"puppeteer-core\";\nimport { chromium as playwrightChromium } from \"playwright\";\nimport { chromium as patchrightChromium } from \"patchright-core\";\nimport { Action } from \"../types/public/methods.js\";\nimport { AnyPage } from \"../types/public/page.js\";\nimport { v3DynamicTestConfig } from \"./v3.dynamic.config.js\";\nimport { closeV3 } from \"./testUtils.js\";\n\n/**\n * IMPORTANT:\n * - We create a single V3 instance/test to avoid cross-test state. Increase parallelism later if needed.\n * - We assert an *effect* when feasible (e.g. input value). For pure clicks we assert no thrown error.\n */\n\ntype Case = {\n title: string;\n url: string;\n action: Action;\n expectedSubstrings?: string[]; // check v3.extract().pageText contains these\n};\n\ntype Framework = \"v3\" | \"puppeteer\" | \"playwright\" | \"patchright\";\n\nasync function runCase(v3: V3, c: Case, framework: Framework): Promise<void> {\n let cleanup: (() => Promise<void> | void) | null = null;\n\n // Acquire the correct page for the requested framework\n let page: AnyPage;\n if (framework === \"v3\") {\n page = v3.context.pages()[0];\n await page.goto(c.url, { waitUntil: \"networkidle\" });\n } else if (framework === \"puppeteer\") {\n const browser = await puppeteer.connect({\n browserWSEndpoint: v3.connectURL(),\n defaultViewport: null,\n });\n const pages = await browser.pages();\n page = pages[0];\n await page.goto(c.url, { waitUntil: \"networkidle0\" });\n cleanup = async () => {\n try {\n await browser.close();\n } catch {\n //\n }\n };\n } else if (framework === \"playwright\") {\n const pwBrowser = await playwrightChromium.connectOverCDP(v3.connectURL());\n const pwContext = pwBrowser.contexts()[0];\n page = pwContext.pages()[0];\n await page.goto(c.url, { waitUntil: \"networkidle\" });\n cleanup = async () => {\n try {\n await pwBrowser.close();\n } catch {\n // ignore\n }\n };\n } else if (framework === \"patchright\") {\n const prBrowser = await patchrightChromium.connectOverCDP(v3.connectURL());\n const prContext = prBrowser.contexts()[0];\n page = prContext.pages()[0];\n await page.goto(c.url, { waitUntil: \"networkidle\" });\n cleanup = async () => {\n try {\n await prBrowser.close();\n } catch {\n // ignore\n }\n };\n }\n\n try {\n await v3.act(c.action, { page });\n // Post-action extraction; verify expected text appears\n const extraction = await v3.extract({ page });\n const text = extraction.pageText ?? \"\";\n for (const s of c.expectedSubstrings) {\n expect(\n text.includes(s),\n `expected pageText to include substring: ${s}`,\n ).toBeTruthy();\n }\n } finally {\n await cleanup?.();\n }\n}\n\nconst cases: Case[] = [\n {\n title: \"Open shadow root inside SPIF\",\n url: \"https://browserbase.github.io/stagehand-eval-sites/sites/open-shadow-root-in-spif/\",\n action: {\n selector:\n \"xpath=/html/body/main/section/iframe/html/body/shadow-demo//div/button\",\n method: \"click\",\n arguments: [\"\"],\n description: \"\",\n },\n expectedSubstrings: [\"button successfully clicked\"],\n },\n {\n title: \"Closed shadow root inside SPIF\",\n url: \"https://browserbase.github.io/stagehand-eval-sites/sites/closed-shadow-dom-in-spif/\",\n action: {\n selector: \"xpath=/html/body/div/iframe/html/body/shadow-demo//div/button\",\n method: \"click\",\n arguments: [\"\"],\n description: \"\",\n },\n expectedSubstrings: [\"button successfully clicked\"],\n },\n {\n title: \"SPIF inside closed shadow root\",\n url: \"https://browserbase.github.io/stagehand-eval-sites/sites/spif-in-closed-shadow-dom/\",\n action: {\n selector: \"xpath=/html/body/shadow-host//div/iframe/html/body/button\",\n method: \"click\",\n arguments: [\"\"],\n description: \"\",\n },\n expectedSubstrings: [\"button successfully clicked\"],\n },\n {\n title: \"SPIF inside open shadow root\",\n url: \"https://browserbase.github.io/stagehand-eval-sites/sites/spif-in-open-shadow-dom/\",\n action: {\n selector: \"xpath=/html/body/shadow-host//div/iframe/html/body/button\",\n method: \"click\",\n arguments: [\"\"],\n description: \"click button inside SPIF under open shadow\",\n },\n expectedSubstrings: [\"button successfully clicked\"],\n },\n];\n\ntest.describe.parallel(\"Stagehand v3: shadow <-> iframe SPIF scenarios\", () => {\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 const frameworks: Framework[] = [\n \"v3\",\n \"playwright\",\n \"puppeteer\",\n \"patchright\",\n ];\n for (const fw of frameworks) {\n for (const c of cases) {\n test(`[${fw}] ${c.title}`, async () => {\n await runCase(v3, c, fw);\n });\n }\n }\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["puppeteer", "playwrightChromium", "patchrightChromium"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var testUtils_exports = {};
|
|
19
|
+
__export(testUtils_exports, {
|
|
20
|
+
closeV3: () => closeV3
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(testUtils_exports);
|
|
23
|
+
const CLOSE_TIMEOUT_MS = 5e3;
|
|
24
|
+
async function settleWithTimeout(promise, timeoutMs) {
|
|
25
|
+
let timeoutId;
|
|
26
|
+
const timeout = new Promise((resolve) => {
|
|
27
|
+
timeoutId = setTimeout(resolve, timeoutMs);
|
|
28
|
+
});
|
|
29
|
+
try {
|
|
30
|
+
await Promise.race([promise.catch(() => {
|
|
31
|
+
}), timeout]);
|
|
32
|
+
} finally {
|
|
33
|
+
if (timeoutId) clearTimeout(timeoutId);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function closeV3(v3) {
|
|
37
|
+
if (!v3) return;
|
|
38
|
+
const isBrowserbase = v3.isBrowserbase;
|
|
39
|
+
if (isBrowserbase) {
|
|
40
|
+
try {
|
|
41
|
+
await settleWithTimeout(
|
|
42
|
+
v3.context.conn.send("Browser.close"),
|
|
43
|
+
CLOSE_TIMEOUT_MS
|
|
44
|
+
);
|
|
45
|
+
} catch {
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
await settleWithTimeout(v3.close(), CLOSE_TIMEOUT_MS);
|
|
49
|
+
}
|
|
50
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
51
|
+
0 && (module.exports = {
|
|
52
|
+
closeV3
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=testUtils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../lib/v3/tests/testUtils.ts"],
|
|
4
|
+
"sourcesContent": ["import type { V3 } from \"../v3.js\";\n\nconst CLOSE_TIMEOUT_MS = 5_000;\n\nasync function settleWithTimeout(\n promise: Promise<unknown>,\n timeoutMs: number,\n): Promise<void> {\n let timeoutId: NodeJS.Timeout | undefined;\n const timeout = new Promise<void>((resolve) => {\n timeoutId = setTimeout(resolve, timeoutMs);\n });\n try {\n await Promise.race([promise.catch(() => {}), timeout]);\n } finally {\n if (timeoutId) clearTimeout(timeoutId);\n }\n}\n\nexport async function closeV3(v3?: V3 | null): Promise<void> {\n if (!v3) return;\n const isBrowserbase = v3.isBrowserbase;\n if (isBrowserbase) {\n try {\n await settleWithTimeout(\n v3.context.conn.send(\"Browser.close\"),\n CLOSE_TIMEOUT_MS,\n );\n } catch {\n // best-effort cleanup\n }\n }\n\n await settleWithTimeout(v3.close(), CLOSE_TIMEOUT_MS);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,MAAM,mBAAmB;AAEzB,eAAe,kBACb,SACA,WACe;AACf,MAAI;AACJ,QAAM,UAAU,IAAI,QAAc,CAAC,YAAY;AAC7C,gBAAY,WAAW,SAAS,SAAS;AAAA,EAC3C,CAAC;AACD,MAAI;AACF,UAAM,QAAQ,KAAK,CAAC,QAAQ,MAAM,MAAM;AAAA,IAAC,CAAC,GAAG,OAAO,CAAC;AAAA,EACvD,UAAE;AACA,QAAI,UAAW,cAAa,SAAS;AAAA,EACvC;AACF;AAEA,eAAsB,QAAQ,IAA+B;AAC3D,MAAI,CAAC,GAAI;AACT,QAAM,gBAAgB,GAAG;AACzB,MAAI,eAAe;AACjB,QAAI;AACF,YAAM;AAAA,QACJ,GAAG,QAAQ,KAAK,KAAK,eAAe;AAAA,QACpC;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,QAAM,kBAAkB,GAAG,MAAM,GAAG,gBAAgB;AACtD;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
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("Text selector innermost element matching", () => {
|
|
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)("text selector matches only innermost elements", async () => {
|
|
15
|
+
const page = v3.context.pages()[0];
|
|
16
|
+
await page.goto(
|
|
17
|
+
"data:text/html," + encodeURIComponent(`
|
|
18
|
+
<div id="outer">
|
|
19
|
+
<span id="middle">
|
|
20
|
+
<button id="inner">Click me</button>
|
|
21
|
+
</span>
|
|
22
|
+
</div>
|
|
23
|
+
`)
|
|
24
|
+
);
|
|
25
|
+
const count = await page.mainFrame().locator("text=Click me").count();
|
|
26
|
+
(0, import_test.expect)(count).toBe(1);
|
|
27
|
+
const session = page.mainFrame().session;
|
|
28
|
+
const { executionContextId } = await session.send("Page.createIsolatedWorld", {
|
|
29
|
+
frameId: page.mainFrame().frameId,
|
|
30
|
+
worldName: "test-world"
|
|
31
|
+
});
|
|
32
|
+
const evalRes = await session.send(
|
|
33
|
+
"Runtime.evaluate",
|
|
34
|
+
{
|
|
35
|
+
expression: `(() => {
|
|
36
|
+
const candidates = [];
|
|
37
|
+
const iter = document.createNodeIterator(document.documentElement, NodeFilter.SHOW_ELEMENT);
|
|
38
|
+
let n;
|
|
39
|
+
while ((n = iter.nextNode())) {
|
|
40
|
+
const el = n;
|
|
41
|
+
const t = (el.innerText ?? el.textContent ?? '').trim();
|
|
42
|
+
if (t && t.includes("Click me")) {
|
|
43
|
+
candidates.push(el);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Find innermost
|
|
48
|
+
for (const candidate of candidates) {
|
|
49
|
+
let isInnermost = true;
|
|
50
|
+
for (const other of candidates) {
|
|
51
|
+
if (candidate !== other && candidate.contains(other)) {
|
|
52
|
+
isInnermost = false;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (isInnermost) return candidate.id;
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
})()`,
|
|
60
|
+
contextId: executionContextId,
|
|
61
|
+
returnByValue: true
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
(0, import_test.expect)(evalRes.result.value).toBe("inner");
|
|
65
|
+
});
|
|
66
|
+
(0, import_test.test)("multiple innermost elements with same text", async () => {
|
|
67
|
+
const page = v3.context.pages()[0];
|
|
68
|
+
await page.goto(
|
|
69
|
+
"data:text/html," + encodeURIComponent(`
|
|
70
|
+
<div>
|
|
71
|
+
<button>Submit</button>
|
|
72
|
+
<span>Some other content</span>
|
|
73
|
+
<button>Submit</button>
|
|
74
|
+
</div>
|
|
75
|
+
<div>
|
|
76
|
+
<a href="#">Submit</a>
|
|
77
|
+
</div>
|
|
78
|
+
`)
|
|
79
|
+
);
|
|
80
|
+
const count = await page.mainFrame().locator("text=Submit").count();
|
|
81
|
+
(0, import_test.expect)(count).toBe(3);
|
|
82
|
+
});
|
|
83
|
+
(0, import_test.test)("nested text with different innermost elements", async () => {
|
|
84
|
+
const page = v3.context.pages()[0];
|
|
85
|
+
await page.goto(
|
|
86
|
+
"data:text/html," + encodeURIComponent(`
|
|
87
|
+
<div id="parent">
|
|
88
|
+
Hello <span id="child">World</span>
|
|
89
|
+
</div>
|
|
90
|
+
`)
|
|
91
|
+
);
|
|
92
|
+
const helloCount = await page.mainFrame().locator("text=Hello").count();
|
|
93
|
+
(0, import_test.expect)(helloCount).toBe(1);
|
|
94
|
+
const worldCount = await page.mainFrame().locator("text=World").count();
|
|
95
|
+
(0, import_test.expect)(worldCount).toBe(1);
|
|
96
|
+
const bothCount = await page.mainFrame().locator("text=Hello World").count();
|
|
97
|
+
(0, import_test.expect)(bothCount).toBe(1);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
//# sourceMappingURL=text-selector-innermost.spec.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../lib/v3/tests/text-selector-innermost.spec.ts"],
|
|
4
|
+
"sourcesContent": ["import { expect, test } from \"@playwright/test\";\nimport { Protocol } from \"devtools-protocol\";\nimport { V3 } from \"../v3.js\";\nimport { v3DynamicTestConfig } from \"./v3.dynamic.config.js\";\nimport { closeV3 } from \"./testUtils.js\";\n\ntest.describe(\"Text selector innermost element matching\", () => {\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(\"text selector matches only innermost elements\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(`\n <div id=\"outer\">\n <span id=\"middle\">\n <button id=\"inner\">Click me</button>\n </span>\n </div>\n `),\n );\n\n // Only the button should be counted, not the parent elements\n const count = await page.mainFrame().locator(\"text=Click me\").count();\n expect(count).toBe(1);\n\n // Verify it finds the button element specifically\n const session = page.mainFrame().session;\n const { executionContextId } = await session.send<{\n executionContextId: number;\n }>(\"Page.createIsolatedWorld\", {\n frameId: page.mainFrame().frameId,\n worldName: \"test-world\",\n });\n\n const evalRes = await session.send<Protocol.Runtime.EvaluateResponse>(\n \"Runtime.evaluate\",\n {\n expression: `(() => {\n const candidates = [];\n const iter = document.createNodeIterator(document.documentElement, NodeFilter.SHOW_ELEMENT);\n let n;\n while ((n = iter.nextNode())) {\n const el = n;\n const t = (el.innerText ?? el.textContent ?? '').trim();\n if (t && t.includes(\"Click me\")) {\n candidates.push(el);\n }\n }\n \n // Find innermost\n for (const candidate of candidates) {\n let isInnermost = true;\n for (const other of candidates) {\n if (candidate !== other && candidate.contains(other)) {\n isInnermost = false;\n break;\n }\n }\n if (isInnermost) return candidate.id;\n }\n return null;\n })()`,\n contextId: executionContextId,\n returnByValue: true,\n },\n );\n\n expect(evalRes.result.value).toBe(\"inner\");\n });\n\n test(\"multiple innermost elements with same text\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(`\n <div>\n <button>Submit</button>\n <span>Some other content</span>\n <button>Submit</button>\n </div>\n <div>\n <a href=\"#\">Submit</a>\n </div>\n `),\n );\n\n // Should find all three innermost elements (2 buttons + 1 link)\n const count = await page.mainFrame().locator(\"text=Submit\").count();\n expect(count).toBe(3);\n });\n\n test(\"nested text with different innermost elements\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(`\n <div id=\"parent\">\n Hello <span id=\"child\">World</span>\n </div>\n `),\n );\n\n // \"Hello\" is only in the parent div\n const helloCount = await page.mainFrame().locator(\"text=Hello\").count();\n expect(helloCount).toBe(1); // Only the div\n\n // \"World\" is only in the span\n const worldCount = await page.mainFrame().locator(\"text=World\").count();\n expect(worldCount).toBe(1); // Only the span\n\n // \"Hello World\" matches only the parent div (as it's the innermost containing both words)\n const bothCount = await page\n .mainFrame()\n .locator(\"text=Hello World\")\n .count();\n expect(bothCount).toBe(1); // Only the div\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,kBAA6B;AAE7B,gBAAmB;AACnB,+BAAoC;AACpC,uBAAwB;AAExB,iBAAK,SAAS,4CAA4C,MAAM;AAC9D,MAAI;AAEJ,mBAAK,WAAW,YAAY;AAC1B,SAAK,IAAI,aAAG,4CAAmB;AAC/B,UAAM,GAAG,KAAK;AAAA,EAChB,CAAC;AAED,mBAAK,UAAU,YAAY;AACzB,cAAM,0BAAQ,EAAE;AAAA,EAClB,CAAC;AAED,wBAAK,iDAAiD,YAAY;AAChE,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAMpB;AAAA,IACH;AAGA,UAAM,QAAQ,MAAM,KAAK,UAAU,EAAE,QAAQ,eAAe,EAAE,MAAM;AACpE,4BAAO,KAAK,EAAE,KAAK,CAAC;AAGpB,UAAM,UAAU,KAAK,UAAU,EAAE;AACjC,UAAM,EAAE,mBAAmB,IAAI,MAAM,QAAQ,KAE1C,4BAA4B;AAAA,MAC7B,SAAS,KAAK,UAAU,EAAE;AAAA,MAC1B,WAAW;AAAA,IACb,CAAC;AAED,UAAM,UAAU,MAAM,QAAQ;AAAA,MAC5B;AAAA,MACA;AAAA,QACE,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAyBZ,WAAW;AAAA,QACX,eAAe;AAAA,MACjB;AAAA,IACF;AAEA,4BAAO,QAAQ,OAAO,KAAK,EAAE,KAAK,OAAO;AAAA,EAC3C,CAAC;AAED,wBAAK,8CAA8C,YAAY;AAC7D,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OASpB;AAAA,IACH;AAGA,UAAM,QAAQ,MAAM,KAAK,UAAU,EAAE,QAAQ,aAAa,EAAE,MAAM;AAClE,4BAAO,KAAK,EAAE,KAAK,CAAC;AAAA,EACtB,CAAC;AAED,wBAAK,iDAAiD,YAAY;AAChE,UAAM,OAAO,GAAG,QAAQ,MAAM,EAAE,CAAC;AAEjC,UAAM,KAAK;AAAA,MACT,oBACE,mBAAmB;AAAA;AAAA;AAAA;AAAA,OAIpB;AAAA,IACH;AAGA,UAAM,aAAa,MAAM,KAAK,UAAU,EAAE,QAAQ,YAAY,EAAE,MAAM;AACtE,4BAAO,UAAU,EAAE,KAAK,CAAC;AAGzB,UAAM,aAAa,MAAM,KAAK,UAAU,EAAE,QAAQ,YAAY,EAAE,MAAM;AACtE,4BAAO,UAAU,EAAE,KAAK,CAAC;AAGzB,UAAM,YAAY,MAAM,KACrB,UAAU,EACV,QAAQ,kBAAkB,EAC1B,MAAM;AACT,4BAAO,SAAS,EAAE,KAAK,CAAC;AAAA,EAC1B,CAAC;AACH,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
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_zod = require("zod");
|
|
5
|
+
var import_testUtils = require("./testUtils.js");
|
|
6
|
+
import_test.test.describe("V3 hard timeouts", () => {
|
|
7
|
+
let v3;
|
|
8
|
+
import_test.test.beforeEach(async () => {
|
|
9
|
+
v3 = new import_v3.V3(import_v3_dynamic_config.v3DynamicTestConfig);
|
|
10
|
+
await v3.init();
|
|
11
|
+
});
|
|
12
|
+
import_test.test.afterEach(async () => {
|
|
13
|
+
await (0, import_testUtils.closeV3)(v3);
|
|
14
|
+
});
|
|
15
|
+
(0, import_test.test)("observe() enforces timeoutMs", async () => {
|
|
16
|
+
await (0, import_test.expect)(v3.observe("find something", { timeout: 5 })).rejects.toThrow(
|
|
17
|
+
/timed out/i
|
|
18
|
+
);
|
|
19
|
+
});
|
|
20
|
+
(0, import_test.test)("extract() enforces timeoutMs", async () => {
|
|
21
|
+
const schema = import_zod.z.object({ title: import_zod.z.string().optional() });
|
|
22
|
+
await (0, import_test.expect)(
|
|
23
|
+
v3.extract("Extract title", schema, { timeout: 5 })
|
|
24
|
+
).rejects.toThrow(/timed out/i);
|
|
25
|
+
});
|
|
26
|
+
(0, import_test.test)("act() enforces timeoutMs", async () => {
|
|
27
|
+
await (0, import_test.expect)(v3.act("do nothing", { timeout: 5 })).rejects.toThrow(
|
|
28
|
+
/timed out/i
|
|
29
|
+
);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=timeouts.spec.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../lib/v3/tests/timeouts.spec.ts"],
|
|
4
|
+
"sourcesContent": ["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3DynamicTestConfig } from \"./v3.dynamic.config.js\";\nimport { z } from \"zod\";\nimport { closeV3 } from \"./testUtils.js\";\n\ntest.describe(\"V3 hard timeouts\", () => {\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(\"observe() enforces timeoutMs\", async () => {\n // Tiny timeout to force the race to hit the timeout branch\n await expect(v3.observe(\"find something\", { timeout: 5 })).rejects.toThrow(\n /timed out/i,\n );\n });\n\n test(\"extract() enforces timeoutMs\", async () => {\n const schema = z.object({ title: z.string().optional() });\n await expect(\n v3.extract(\"Extract title\", schema, { timeout: 5 }),\n ).rejects.toThrow(/timed out/i);\n });\n\n test(\"act() enforces timeoutMs\", async () => {\n await expect(v3.act(\"do nothing\", { timeout: 5 })).rejects.toThrow(\n /timed out/i,\n );\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,kBAA6B;AAC7B,gBAAmB;AACnB,+BAAoC;AACpC,iBAAkB;AAClB,uBAAwB;AAExB,iBAAK,SAAS,oBAAoB,MAAM;AACtC,MAAI;AAEJ,mBAAK,WAAW,YAAY;AAC1B,SAAK,IAAI,aAAG,4CAAmB;AAC/B,UAAM,GAAG,KAAK;AAAA,EAChB,CAAC;AAED,mBAAK,UAAU,YAAY;AACzB,cAAM,0BAAQ,EAAE;AAAA,EAClB,CAAC;AAED,wBAAK,gCAAgC,YAAY;AAE/C,cAAM,oBAAO,GAAG,QAAQ,kBAAkB,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,QAAQ;AAAA,MACjE;AAAA,IACF;AAAA,EACF,CAAC;AAED,wBAAK,gCAAgC,YAAY;AAC/C,UAAM,SAAS,aAAE,OAAO,EAAE,OAAO,aAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACxD,cAAM;AAAA,MACJ,GAAG,QAAQ,iBAAiB,QAAQ,EAAE,SAAS,EAAE,CAAC;AAAA,IACpD,EAAE,QAAQ,QAAQ,YAAY;AAAA,EAChC,CAAC;AAED,wBAAK,4BAA4B,YAAY;AAC3C,cAAM,oBAAO,GAAG,IAAI,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,QAAQ;AAAA,MACzD;AAAA,IACF;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __copyProps = (to, from, except, desc) => {
|
|
8
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
9
|
+
for (let key of __getOwnPropNames(from))
|
|
10
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
11
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
+
}
|
|
13
|
+
return to;
|
|
14
|
+
};
|
|
15
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
16
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
17
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
18
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
19
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
23
|
+
var import_test = require("@playwright/test");
|
|
24
|
+
var import_v3 = require("../v3.js");
|
|
25
|
+
var import_v3_config = require("./v3.config.js");
|
|
26
|
+
var fs = __toESM(require("fs"), 1);
|
|
27
|
+
var path = __toESM(require("path"), 1);
|
|
28
|
+
var os = __toESM(require("os"), 1);
|
|
29
|
+
import_test.test.describe("userDataDir persistence", () => {
|
|
30
|
+
let v3;
|
|
31
|
+
let testDir;
|
|
32
|
+
import_test.test.beforeEach(() => {
|
|
33
|
+
testDir = fs.mkdtempSync(
|
|
34
|
+
path.join(os.tmpdir(), "stagehand-userdata-test-")
|
|
35
|
+
);
|
|
36
|
+
});
|
|
37
|
+
import_test.test.afterEach(async () => {
|
|
38
|
+
await v3?.close?.().catch(() => {
|
|
39
|
+
});
|
|
40
|
+
if (testDir && fs.existsSync(testDir)) {
|
|
41
|
+
fs.rmSync(testDir, { recursive: true, force: true });
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
(0, import_test.test)("Chrome uses the specified userDataDir", async () => {
|
|
45
|
+
const browserTarget = (process.env.STAGEHAND_BROWSER_TARGET ?? "local").toLowerCase();
|
|
46
|
+
const isBrowserbase = browserTarget === "browserbase";
|
|
47
|
+
import_test.test.skip(isBrowserbase, "Requires local Chromium for userDataDir checks");
|
|
48
|
+
v3 = new import_v3.V3({
|
|
49
|
+
...import_v3_config.v3TestConfig,
|
|
50
|
+
localBrowserLaunchOptions: {
|
|
51
|
+
...import_v3_config.v3TestConfig.localBrowserLaunchOptions ?? {},
|
|
52
|
+
userDataDir: testDir,
|
|
53
|
+
preserveUserDataDir: true
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
await v3.init();
|
|
57
|
+
const page = v3.context.pages()[0];
|
|
58
|
+
await page.goto("about:blank");
|
|
59
|
+
await import_test.expect.poll(() => fs.existsSync(path.join(testDir, "Default")), {
|
|
60
|
+
timeout: 1e4
|
|
61
|
+
}).toBe(true);
|
|
62
|
+
(0, import_test.expect)(fs.existsSync(path.join(testDir, "Local State"))).toBe(true);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=user-data-dir.spec.js.map
|