@browserbasehq/orca 3.4.0-preview-4 → 3.4.0-preview-5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/lib/v3/agent/AgentProvider.d.ts +1 -1
- package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
- package/dist/cjs/lib/v3/launch/local.d.ts +2 -7
- package/dist/cjs/lib/v3/launch/local.js +47 -7
- package/dist/cjs/lib/v3/launch/local.js.map +1 -1
- package/dist/cjs/lib/v3/llm/aisdk.js +5 -0
- package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/agent.d.ts +1 -1
- package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/api.d.ts +283 -0
- package/dist/cjs/lib/v3/types/public/api.js +50 -3
- package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/model.d.ts +11 -7
- package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
- package/dist/cjs/lib/v3/v3.js +2 -47
- package/dist/cjs/lib/v3/v3.js.map +1 -1
- package/dist/esm/lib/v3/agent/AgentProvider.d.ts +1 -1
- package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
- package/dist/esm/lib/v3/launch/local.d.ts +2 -7
- package/dist/esm/lib/v3/launch/local.js +48 -8
- package/dist/esm/lib/v3/launch/local.js.map +1 -1
- package/dist/esm/lib/v3/llm/aisdk.js +5 -0
- package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
- package/dist/esm/lib/v3/types/public/agent.d.ts +1 -1
- package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
- package/dist/esm/lib/v3/types/public/api.d.ts +283 -0
- package/dist/esm/lib/v3/types/public/api.js +48 -1
- package/dist/esm/lib/v3/types/public/api.js.map +1 -1
- package/dist/esm/lib/v3/types/public/model.d.ts +11 -7
- package/dist/esm/lib/v3/types/public/model.js.map +1 -1
- package/dist/esm/lib/v3/v3.js +2 -47
- package/dist/esm/lib/v3/v3.js.map +1 -1
- package/package.json +4 -5
- package/dist/cjs/tests/cache-variables.test.d.ts +0 -1
- package/dist/cjs/tests/cache-variables.test.js +0 -221
- package/dist/cjs/tests/cache-variables.test.js.map +0 -1
- package/dist/cjs/tests/integration/agent-abort-signal.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/agent-abort-signal.spec.js +0 -123
- package/dist/cjs/tests/integration/agent-abort-signal.spec.js.map +0 -1
- package/dist/cjs/tests/integration/agent-cache-self-heal.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/agent-cache-self-heal.spec.js +0 -83
- package/dist/cjs/tests/integration/agent-cache-self-heal.spec.js.map +0 -1
- package/dist/cjs/tests/integration/agent-callbacks.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/agent-callbacks.spec.js +0 -385
- package/dist/cjs/tests/integration/agent-callbacks.spec.js.map +0 -1
- package/dist/cjs/tests/integration/agent-experimental-validation.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/agent-experimental-validation.spec.js +0 -362
- package/dist/cjs/tests/integration/agent-experimental-validation.spec.js.map +0 -1
- package/dist/cjs/tests/integration/agent-hybrid-mode.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js +0 -262
- package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js.map +0 -1
- package/dist/cjs/tests/integration/agent-message-continuation.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/agent-message-continuation.spec.js +0 -112
- package/dist/cjs/tests/integration/agent-message-continuation.spec.js.map +0 -1
- package/dist/cjs/tests/integration/agent-streaming.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/agent-streaming.spec.js +0 -140
- package/dist/cjs/tests/integration/agent-streaming.spec.js.map +0 -1
- package/dist/cjs/tests/integration/cdp-close-api-region.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/cdp-close-api-region.spec.js +0 -41
- package/dist/cjs/tests/integration/cdp-close-api-region.spec.js.map +0 -1
- package/dist/cjs/tests/integration/cdp-connection-close.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/cdp-connection-close.spec.js +0 -76
- package/dist/cjs/tests/integration/cdp-connection-close.spec.js.map +0 -1
- package/dist/cjs/tests/integration/cdp-session-detached.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/cdp-session-detached.spec.js +0 -45
- package/dist/cjs/tests/integration/cdp-session-detached.spec.js.map +0 -1
- package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js +0 -56
- package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js.map +0 -1
- package/dist/cjs/tests/integration/click-count.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/click-count.spec.js +0 -163
- package/dist/cjs/tests/integration/click-count.spec.js.map +0 -1
- package/dist/cjs/tests/integration/connect-to-existing-browser.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/connect-to-existing-browser.spec.js +0 -99
- package/dist/cjs/tests/integration/connect-to-existing-browser.spec.js.map +0 -1
- package/dist/cjs/tests/integration/context-addInitScript.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/context-addInitScript.spec.js +0 -285
- package/dist/cjs/tests/integration/context-addInitScript.spec.js.map +0 -1
- package/dist/cjs/tests/integration/context-extra-http-headers.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/context-extra-http-headers.spec.js +0 -49
- package/dist/cjs/tests/integration/context-extra-http-headers.spec.js.map +0 -1
- package/dist/cjs/tests/integration/cookies.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/cookies.spec.js +0 -187
- package/dist/cjs/tests/integration/cookies.spec.js.map +0 -1
- package/dist/cjs/tests/integration/default-page-tracking.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/default-page-tracking.spec.js +0 -52
- package/dist/cjs/tests/integration/default-page-tracking.spec.js.map +0 -1
- package/dist/cjs/tests/integration/downloads.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/downloads.spec.js +0 -52
- package/dist/cjs/tests/integration/downloads.spec.js.map +0 -1
- package/dist/cjs/tests/integration/flowLogger.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/flowLogger.spec.js +0 -718
- package/dist/cjs/tests/integration/flowLogger.spec.js.map +0 -1
- package/dist/cjs/tests/integration/frame-get-location-and-click.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/frame-get-location-and-click.spec.js +0 -57
- package/dist/cjs/tests/integration/frame-get-location-and-click.spec.js.map +0 -1
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js +0 -219
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +0 -1
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.js +0 -474
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.js.map +0 -1
- package/dist/cjs/tests/integration/keep-alive.child.d.ts +0 -1
- package/dist/cjs/tests/integration/keep-alive.child.js +0 -85
- package/dist/cjs/tests/integration/keep-alive.child.js.map +0 -1
- package/dist/cjs/tests/integration/keep-alive.spec.d.ts +0 -22
- package/dist/cjs/tests/integration/keep-alive.spec.js +0 -490
- package/dist/cjs/tests/integration/keep-alive.spec.js.map +0 -1
- package/dist/cjs/tests/integration/keyboard.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/keyboard.spec.js +0 -259
- package/dist/cjs/tests/integration/keyboard.spec.js.map +0 -1
- package/dist/cjs/tests/integration/locator-backend-node-id.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/locator-backend-node-id.spec.js +0 -150
- package/dist/cjs/tests/integration/locator-backend-node-id.spec.js.map +0 -1
- package/dist/cjs/tests/integration/locator-content-methods.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/locator-content-methods.spec.js +0 -180
- package/dist/cjs/tests/integration/locator-content-methods.spec.js.map +0 -1
- package/dist/cjs/tests/integration/locator-count-iframe.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/locator-count-iframe.spec.js +0 -129
- package/dist/cjs/tests/integration/locator-count-iframe.spec.js.map +0 -1
- package/dist/cjs/tests/integration/locator-count.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/locator-count.spec.js +0 -68
- package/dist/cjs/tests/integration/locator-count.spec.js.map +0 -1
- package/dist/cjs/tests/integration/locator-fill.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/locator-fill.spec.js +0 -117
- package/dist/cjs/tests/integration/locator-fill.spec.js.map +0 -1
- package/dist/cjs/tests/integration/locator-input-methods.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/locator-input-methods.spec.js +0 -127
- package/dist/cjs/tests/integration/locator-input-methods.spec.js.map +0 -1
- package/dist/cjs/tests/integration/locator-nth.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/locator-nth.spec.js +0 -175
- package/dist/cjs/tests/integration/locator-nth.spec.js.map +0 -1
- package/dist/cjs/tests/integration/locator-select-option.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/locator-select-option.spec.js +0 -216
- package/dist/cjs/tests/integration/locator-select-option.spec.js.map +0 -1
- package/dist/cjs/tests/integration/logger-initialization.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/logger-initialization.spec.js +0 -597
- package/dist/cjs/tests/integration/logger-initialization.spec.js.map +0 -1
- package/dist/cjs/tests/integration/multi-instance-logger.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/multi-instance-logger.spec.js +0 -293
- package/dist/cjs/tests/integration/multi-instance-logger.spec.js.map +0 -1
- package/dist/cjs/tests/integration/nested-div.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/nested-div.spec.js +0 -22
- package/dist/cjs/tests/integration/nested-div.spec.js.map +0 -1
- package/dist/cjs/tests/integration/observe-element-id-format.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/observe-element-id-format.spec.js +0 -130
- package/dist/cjs/tests/integration/observe-element-id-format.spec.js.map +0 -1
- package/dist/cjs/tests/integration/page-addInitScript.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/page-addInitScript.spec.js +0 -94
- package/dist/cjs/tests/integration/page-addInitScript.spec.js.map +0 -1
- package/dist/cjs/tests/integration/page-console.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/page-console.spec.js +0 -47
- package/dist/cjs/tests/integration/page-console.spec.js.map +0 -1
- package/dist/cjs/tests/integration/page-drag-and-drop.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/page-drag-and-drop.spec.js +0 -437
- package/dist/cjs/tests/integration/page-drag-and-drop.spec.js.map +0 -1
- package/dist/cjs/tests/integration/page-extra-http-headers.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/page-extra-http-headers.spec.js +0 -85
- package/dist/cjs/tests/integration/page-extra-http-headers.spec.js.map +0 -1
- package/dist/cjs/tests/integration/page-goto-response.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/page-goto-response.spec.js +0 -34
- package/dist/cjs/tests/integration/page-goto-response.spec.js.map +0 -1
- package/dist/cjs/tests/integration/page-hover.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/page-hover.spec.js +0 -165
- package/dist/cjs/tests/integration/page-hover.spec.js.map +0 -1
- package/dist/cjs/tests/integration/page-screenshot.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/page-screenshot.spec.js +0 -292
- package/dist/cjs/tests/integration/page-screenshot.spec.js.map +0 -1
- package/dist/cjs/tests/integration/page-scroll.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/page-scroll.spec.js +0 -183
- package/dist/cjs/tests/integration/page-scroll.spec.js.map +0 -1
- package/dist/cjs/tests/integration/page-send-cdp.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/page-send-cdp.spec.js +0 -47
- package/dist/cjs/tests/integration/page-send-cdp.spec.js.map +0 -1
- package/dist/cjs/tests/integration/perform-understudy-method.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/perform-understudy-method.spec.js +0 -63
- package/dist/cjs/tests/integration/perform-understudy-method.spec.js.map +0 -1
- package/dist/cjs/tests/integration/setinputfiles.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/setinputfiles.spec.js +0 -133
- package/dist/cjs/tests/integration/setinputfiles.spec.js.map +0 -1
- package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.js +0 -161
- package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.js.map +0 -1
- package/dist/cjs/tests/integration/shadow-iframe-spif.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/shadow-iframe-spif.spec.js +0 -160
- package/dist/cjs/tests/integration/shadow-iframe-spif.spec.js.map +0 -1
- package/dist/cjs/tests/integration/testUtils.d.ts +0 -40
- package/dist/cjs/tests/integration/testUtils.js +0 -188
- package/dist/cjs/tests/integration/testUtils.js.map +0 -1
- package/dist/cjs/tests/integration/text-selector-innermost.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/text-selector-innermost.spec.js +0 -105
- package/dist/cjs/tests/integration/text-selector-innermost.spec.js.map +0 -1
- package/dist/cjs/tests/integration/timeouts.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/timeouts.spec.js +0 -309
- package/dist/cjs/tests/integration/timeouts.spec.js.map +0 -1
- package/dist/cjs/tests/integration/user-data-dir.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/user-data-dir.spec.js +0 -77
- package/dist/cjs/tests/integration/user-data-dir.spec.js.map +0 -1
- package/dist/cjs/tests/integration/v3.config.d.ts +0 -4
- package/dist/cjs/tests/integration/v3.config.js +0 -11
- package/dist/cjs/tests/integration/v3.config.js.map +0 -1
- package/dist/cjs/tests/integration/v3.dynamic.config.d.ts +0 -4
- package/dist/cjs/tests/integration/v3.dynamic.config.js +0 -48
- package/dist/cjs/tests/integration/v3.dynamic.config.js.map +0 -1
- package/dist/cjs/tests/integration/v3.playwright.config.d.ts +0 -2
- package/dist/cjs/tests/integration/v3.playwright.config.js +0 -48
- package/dist/cjs/tests/integration/v3.playwright.config.js.map +0 -1
- package/dist/cjs/tests/integration/wait-for-selector.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/wait-for-selector.spec.js +0 -683
- package/dist/cjs/tests/integration/wait-for-selector.spec.js.map +0 -1
- package/dist/cjs/tests/integration/wait-for-timeout.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/wait-for-timeout.spec.js +0 -118
- package/dist/cjs/tests/integration/wait-for-timeout.spec.js.map +0 -1
- package/dist/cjs/tests/integration/xpath-for-location-deep.spec.d.ts +0 -1
- package/dist/cjs/tests/integration/xpath-for-location-deep.spec.js +0 -87
- package/dist/cjs/tests/integration/xpath-for-location-deep.spec.js.map +0 -1
- package/dist/cjs/tests/unit/agent-captcha-hooks.test.d.ts +0 -1
- package/dist/cjs/tests/unit/agent-captcha-hooks.test.js +0 -341
- package/dist/cjs/tests/unit/agent-captcha-hooks.test.js.map +0 -1
- package/dist/cjs/tests/unit/agent-execution-model.test.d.ts +0 -1
- package/dist/cjs/tests/unit/agent-execution-model.test.js +0 -150
- package/dist/cjs/tests/unit/agent-execution-model.test.js.map +0 -1
- package/dist/cjs/tests/unit/agent-metrics.test.d.ts +0 -1
- package/dist/cjs/tests/unit/agent-metrics.test.js +0 -112
- package/dist/cjs/tests/unit/agent-metrics.test.js.map +0 -1
- package/dist/cjs/tests/unit/agent-mode-routing.test.d.ts +0 -1
- package/dist/cjs/tests/unit/agent-mode-routing.test.js +0 -88
- package/dist/cjs/tests/unit/agent-mode-routing.test.js.map +0 -1
- package/dist/cjs/tests/unit/agent-system-prompt-variables.test.d.ts +0 -1
- package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js +0 -23
- package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js.map +0 -1
- package/dist/cjs/tests/unit/agent-temperature.test.d.ts +0 -1
- package/dist/cjs/tests/unit/agent-temperature.test.js +0 -191
- package/dist/cjs/tests/unit/agent-temperature.test.js.map +0 -1
- package/dist/cjs/tests/unit/agent-variables-validation.test.d.ts +0 -1
- package/dist/cjs/tests/unit/agent-variables-validation.test.js +0 -43
- package/dist/cjs/tests/unit/agent-variables-validation.test.js.map +0 -1
- package/dist/cjs/tests/unit/aisdk-clients.test.d.ts +0 -1
- package/dist/cjs/tests/unit/aisdk-clients.test.js +0 -86
- package/dist/cjs/tests/unit/aisdk-clients.test.js.map +0 -1
- package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +0 -1
- package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js +0 -250
- package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +0 -1
- package/dist/cjs/tests/unit/anthropic-cua-triple-click.test.d.ts +0 -1
- package/dist/cjs/tests/unit/anthropic-cua-triple-click.test.js +0 -87
- package/dist/cjs/tests/unit/anthropic-cua-triple-click.test.js.map +0 -1
- package/dist/cjs/tests/unit/api-client-observe-variables.test.d.ts +0 -1
- package/dist/cjs/tests/unit/api-client-observe-variables.test.js +0 -135
- package/dist/cjs/tests/unit/api-client-observe-variables.test.js.map +0 -1
- package/dist/cjs/tests/unit/api-multiregion.test.d.ts +0 -1
- package/dist/cjs/tests/unit/api-multiregion.test.js +0 -58
- package/dist/cjs/tests/unit/api-multiregion.test.js.map +0 -1
- package/dist/cjs/tests/unit/api-optional-model-api-key.test.d.ts +0 -1
- package/dist/cjs/tests/unit/api-optional-model-api-key.test.js +0 -155
- package/dist/cjs/tests/unit/api-optional-model-api-key.test.js.map +0 -1
- package/dist/cjs/tests/unit/api-variables-schema.test.d.ts +0 -1
- package/dist/cjs/tests/unit/api-variables-schema.test.js +0 -69
- package/dist/cjs/tests/unit/api-variables-schema.test.js.map +0 -1
- package/dist/cjs/tests/unit/browserbase-session-accessors.test.d.ts +0 -1
- package/dist/cjs/tests/unit/browserbase-session-accessors.test.js +0 -142
- package/dist/cjs/tests/unit/browserbase-session-accessors.test.js.map +0 -1
- package/dist/cjs/tests/unit/cache-llm-resolution.test.d.ts +0 -1
- package/dist/cjs/tests/unit/cache-llm-resolution.test.js +0 -186
- package/dist/cjs/tests/unit/cache-llm-resolution.test.js.map +0 -1
- package/dist/cjs/tests/unit/captcha-solver.test.d.ts +0 -1
- package/dist/cjs/tests/unit/captcha-solver.test.js +0 -154
- package/dist/cjs/tests/unit/captcha-solver.test.js.map +0 -1
- package/dist/cjs/tests/unit/cdp-connection-close.test.d.ts +0 -1
- package/dist/cjs/tests/unit/cdp-connection-close.test.js +0 -74
- package/dist/cjs/tests/unit/cdp-connection-close.test.js.map +0 -1
- package/dist/cjs/tests/unit/context-extra-http-headers.test.d.ts +0 -1
- package/dist/cjs/tests/unit/context-extra-http-headers.test.js +0 -58
- package/dist/cjs/tests/unit/context-extra-http-headers.test.js.map +0 -1
- package/dist/cjs/tests/unit/cookies.test.d.ts +0 -1
- package/dist/cjs/tests/unit/cookies.test.js +0 -944
- package/dist/cjs/tests/unit/cookies.test.js.map +0 -1
- package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.d.ts +0 -1
- package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js +0 -95
- package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js.map +0 -1
- package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.d.ts +0 -1
- package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js +0 -43
- package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js.map +0 -1
- package/dist/cjs/tests/unit/flowlogger-eventstore.test.d.ts +0 -1
- package/dist/cjs/tests/unit/flowlogger-eventstore.test.js +0 -250
- package/dist/cjs/tests/unit/flowlogger-eventstore.test.js.map +0 -1
- package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.d.ts +0 -1
- package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.js +0 -60
- package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.js.map +0 -1
- package/dist/cjs/tests/unit/helpers/mockCDPSession.d.ts +0 -19
- package/dist/cjs/tests/unit/helpers/mockCDPSession.js +0 -29
- package/dist/cjs/tests/unit/helpers/mockCDPSession.js.map +0 -1
- package/dist/cjs/tests/unit/inference-temperature.test.d.ts +0 -1
- package/dist/cjs/tests/unit/inference-temperature.test.js +0 -65
- package/dist/cjs/tests/unit/inference-temperature.test.js.map +0 -1
- package/dist/cjs/tests/unit/llm-middleware.test.d.ts +0 -1
- package/dist/cjs/tests/unit/llm-middleware.test.js +0 -495
- package/dist/cjs/tests/unit/llm-middleware.test.js.map +0 -1
- package/dist/cjs/tests/unit/llm-provider.test.d.ts +0 -1
- package/dist/cjs/tests/unit/llm-provider.test.js +0 -64
- package/dist/cjs/tests/unit/llm-provider.test.js.map +0 -1
- package/dist/cjs/tests/unit/microsoft-cua-client.test.d.ts +0 -1
- package/dist/cjs/tests/unit/microsoft-cua-client.test.js +0 -86
- package/dist/cjs/tests/unit/microsoft-cua-client.test.js.map +0 -1
- package/dist/cjs/tests/unit/model-deprecation.test.d.ts +0 -1
- package/dist/cjs/tests/unit/model-deprecation.test.js +0 -142
- package/dist/cjs/tests/unit/model-deprecation.test.js.map +0 -1
- package/dist/cjs/tests/unit/model-utils.test.d.ts +0 -1
- package/dist/cjs/tests/unit/model-utils.test.js +0 -42
- package/dist/cjs/tests/unit/model-utils.test.js.map +0 -1
- package/dist/cjs/tests/unit/openai-compatible-temperature.test.d.ts +0 -1
- package/dist/cjs/tests/unit/openai-compatible-temperature.test.js +0 -84
- package/dist/cjs/tests/unit/openai-compatible-temperature.test.js.map +0 -1
- package/dist/cjs/tests/unit/openai-cua-client.test.d.ts +0 -1
- package/dist/cjs/tests/unit/openai-cua-client.test.js +0 -71
- package/dist/cjs/tests/unit/openai-cua-client.test.js.map +0 -1
- package/dist/cjs/tests/unit/page-extra-http-headers.test.d.ts +0 -1
- package/dist/cjs/tests/unit/page-extra-http-headers.test.js +0 -92
- package/dist/cjs/tests/unit/page-extra-http-headers.test.js.map +0 -1
- package/dist/cjs/tests/unit/page-snapshot.test.d.ts +0 -1
- package/dist/cjs/tests/unit/page-snapshot.test.js +0 -75
- package/dist/cjs/tests/unit/page-snapshot.test.js.map +0 -1
- package/dist/cjs/tests/unit/prompt-observe-variables.test.d.ts +0 -1
- package/dist/cjs/tests/unit/prompt-observe-variables.test.js +0 -25
- package/dist/cjs/tests/unit/prompt-observe-variables.test.js.map +0 -1
- package/dist/cjs/tests/unit/public-api/export-surface.test.d.ts +0 -1
- package/dist/cjs/tests/unit/public-api/export-surface.test.js +0 -107
- package/dist/cjs/tests/unit/public-api/export-surface.test.js.map +0 -1
- package/dist/cjs/tests/unit/public-api/llm-and-agents.test.d.ts +0 -1
- package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +0 -179
- package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js.map +0 -1
- package/dist/cjs/tests/unit/public-api/public-error-types.test.d.ts +0 -62
- package/dist/cjs/tests/unit/public-api/public-error-types.test.js +0 -110
- package/dist/cjs/tests/unit/public-api/public-error-types.test.js.map +0 -1
- package/dist/cjs/tests/unit/public-api/public-types.test.d.ts +0 -1
- package/dist/cjs/tests/unit/public-api/public-types.test.js +0 -99
- package/dist/cjs/tests/unit/public-api/public-types.test.js.map +0 -1
- package/dist/cjs/tests/unit/public-api/runtime-utils.test.d.ts +0 -1
- package/dist/cjs/tests/unit/public-api/runtime-utils.test.js +0 -60
- package/dist/cjs/tests/unit/public-api/runtime-utils.test.js.map +0 -1
- package/dist/cjs/tests/unit/public-api/schema-utils.test.d.ts +0 -1
- package/dist/cjs/tests/unit/public-api/schema-utils.test.js +0 -95
- package/dist/cjs/tests/unit/public-api/schema-utils.test.js.map +0 -1
- package/dist/cjs/tests/unit/public-api/timeout-error-types.test.d.ts +0 -1
- package/dist/cjs/tests/unit/public-api/timeout-error-types.test.js +0 -121
- package/dist/cjs/tests/unit/public-api/timeout-error-types.test.js.map +0 -1
- package/dist/cjs/tests/unit/public-api/tool-type-export.test.d.ts +0 -1
- package/dist/cjs/tests/unit/public-api/tool-type-export.test.js +0 -65
- package/dist/cjs/tests/unit/public-api/tool-type-export.test.js.map +0 -1
- package/dist/cjs/tests/unit/public-api/v3-core.test.d.ts +0 -1
- package/dist/cjs/tests/unit/public-api/v3-core.test.js +0 -108
- package/dist/cjs/tests/unit/public-api/v3-core.test.js.map +0 -1
- package/dist/cjs/tests/unit/safety-confirmation.test.d.ts +0 -1
- package/dist/cjs/tests/unit/safety-confirmation.test.js +0 -110
- package/dist/cjs/tests/unit/safety-confirmation.test.js.map +0 -1
- package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.d.ts +0 -1
- package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.js +0 -431
- package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.js.map +0 -1
- package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.d.ts +0 -1
- package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.js +0 -339
- package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.js.map +0 -1
- package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.d.ts +0 -1
- package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.js +0 -504
- package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.js.map +0 -1
- package/dist/cjs/tests/unit/snapshot-cbor.test.d.ts +0 -1
- package/dist/cjs/tests/unit/snapshot-cbor.test.js +0 -204
- package/dist/cjs/tests/unit/snapshot-cbor.test.js.map +0 -1
- package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.d.ts +0 -1
- package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.js +0 -220
- package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.js.map +0 -1
- package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.d.ts +0 -1
- package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.js +0 -107
- package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.js.map +0 -1
- package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.d.ts +0 -1
- package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.js +0 -89
- package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.js.map +0 -1
- package/dist/cjs/tests/unit/snapshot-frame-merge.test.d.ts +0 -1
- package/dist/cjs/tests/unit/snapshot-frame-merge.test.js +0 -335
- package/dist/cjs/tests/unit/snapshot-frame-merge.test.js.map +0 -1
- package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.d.ts +0 -1
- package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.js +0 -127
- package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.js.map +0 -1
- package/dist/cjs/tests/unit/snapshot-xpath-utils.test.d.ts +0 -1
- package/dist/cjs/tests/unit/snapshot-xpath-utils.test.js +0 -74
- package/dist/cjs/tests/unit/snapshot-xpath-utils.test.js.map +0 -1
- package/dist/cjs/tests/unit/timeout-handlers.test.d.ts +0 -1
- package/dist/cjs/tests/unit/timeout-handlers.test.js +0 -933
- package/dist/cjs/tests/unit/timeout-handlers.test.js.map +0 -1
- package/dist/cjs/tests/unit/understudy-command-exception.test.d.ts +0 -1
- package/dist/cjs/tests/unit/understudy-command-exception.test.js +0 -57
- package/dist/cjs/tests/unit/understudy-command-exception.test.js.map +0 -1
- package/dist/cjs/tests/unit/xpath-parser.test.d.ts +0 -1
- package/dist/cjs/tests/unit/xpath-parser.test.js +0 -311
- package/dist/cjs/tests/unit/xpath-parser.test.js.map +0 -1
- package/dist/cjs/tests/unit/xpath-resolver.test.d.ts +0 -1
- package/dist/cjs/tests/unit/xpath-resolver.test.js +0 -80
- package/dist/cjs/tests/unit/xpath-resolver.test.js.map +0 -1
- package/dist/cjs/tests/unit/zod-enum-compatibility.test.d.ts +0 -1
- package/dist/cjs/tests/unit/zod-enum-compatibility.test.js +0 -149
- package/dist/cjs/tests/unit/zod-enum-compatibility.test.js.map +0 -1
- package/dist/esm/tests/cache-variables.test.d.ts +0 -1
- package/dist/esm/tests/cache-variables.test.js +0 -219
- package/dist/esm/tests/cache-variables.test.js.map +0 -1
- package/dist/esm/tests/integration/agent-abort-signal.spec.d.ts +0 -1
- package/dist/esm/tests/integration/agent-abort-signal.spec.js +0 -121
- package/dist/esm/tests/integration/agent-abort-signal.spec.js.map +0 -1
- package/dist/esm/tests/integration/agent-cache-self-heal.spec.d.ts +0 -1
- package/dist/esm/tests/integration/agent-cache-self-heal.spec.js +0 -78
- package/dist/esm/tests/integration/agent-cache-self-heal.spec.js.map +0 -1
- package/dist/esm/tests/integration/agent-callbacks.spec.d.ts +0 -1
- package/dist/esm/tests/integration/agent-callbacks.spec.js +0 -383
- package/dist/esm/tests/integration/agent-callbacks.spec.js.map +0 -1
- package/dist/esm/tests/integration/agent-experimental-validation.spec.d.ts +0 -1
- package/dist/esm/tests/integration/agent-experimental-validation.spec.js +0 -360
- package/dist/esm/tests/integration/agent-experimental-validation.spec.js.map +0 -1
- package/dist/esm/tests/integration/agent-hybrid-mode.spec.d.ts +0 -1
- package/dist/esm/tests/integration/agent-hybrid-mode.spec.js +0 -260
- package/dist/esm/tests/integration/agent-hybrid-mode.spec.js.map +0 -1
- package/dist/esm/tests/integration/agent-message-continuation.spec.d.ts +0 -1
- package/dist/esm/tests/integration/agent-message-continuation.spec.js +0 -110
- package/dist/esm/tests/integration/agent-message-continuation.spec.js.map +0 -1
- package/dist/esm/tests/integration/agent-streaming.spec.d.ts +0 -1
- package/dist/esm/tests/integration/agent-streaming.spec.js +0 -138
- package/dist/esm/tests/integration/agent-streaming.spec.js.map +0 -1
- package/dist/esm/tests/integration/cdp-close-api-region.spec.d.ts +0 -1
- package/dist/esm/tests/integration/cdp-close-api-region.spec.js +0 -39
- package/dist/esm/tests/integration/cdp-close-api-region.spec.js.map +0 -1
- package/dist/esm/tests/integration/cdp-connection-close.spec.d.ts +0 -1
- package/dist/esm/tests/integration/cdp-connection-close.spec.js +0 -74
- package/dist/esm/tests/integration/cdp-connection-close.spec.js.map +0 -1
- package/dist/esm/tests/integration/cdp-session-detached.spec.d.ts +0 -1
- package/dist/esm/tests/integration/cdp-session-detached.spec.js +0 -43
- package/dist/esm/tests/integration/cdp-session-detached.spec.js.map +0 -1
- package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.d.ts +0 -1
- package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js +0 -54
- package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js.map +0 -1
- package/dist/esm/tests/integration/click-count.spec.d.ts +0 -1
- package/dist/esm/tests/integration/click-count.spec.js +0 -161
- package/dist/esm/tests/integration/click-count.spec.js.map +0 -1
- package/dist/esm/tests/integration/connect-to-existing-browser.spec.d.ts +0 -1
- package/dist/esm/tests/integration/connect-to-existing-browser.spec.js +0 -97
- package/dist/esm/tests/integration/connect-to-existing-browser.spec.js.map +0 -1
- package/dist/esm/tests/integration/context-addInitScript.spec.d.ts +0 -1
- package/dist/esm/tests/integration/context-addInitScript.spec.js +0 -283
- package/dist/esm/tests/integration/context-addInitScript.spec.js.map +0 -1
- package/dist/esm/tests/integration/context-extra-http-headers.spec.d.ts +0 -1
- package/dist/esm/tests/integration/context-extra-http-headers.spec.js +0 -47
- package/dist/esm/tests/integration/context-extra-http-headers.spec.js.map +0 -1
- package/dist/esm/tests/integration/cookies.spec.d.ts +0 -1
- package/dist/esm/tests/integration/cookies.spec.js +0 -185
- package/dist/esm/tests/integration/cookies.spec.js.map +0 -1
- package/dist/esm/tests/integration/default-page-tracking.spec.d.ts +0 -1
- package/dist/esm/tests/integration/default-page-tracking.spec.js +0 -50
- package/dist/esm/tests/integration/default-page-tracking.spec.js.map +0 -1
- package/dist/esm/tests/integration/downloads.spec.d.ts +0 -1
- package/dist/esm/tests/integration/downloads.spec.js +0 -47
- package/dist/esm/tests/integration/downloads.spec.js.map +0 -1
- package/dist/esm/tests/integration/flowLogger.spec.d.ts +0 -1
- package/dist/esm/tests/integration/flowLogger.spec.js +0 -716
- package/dist/esm/tests/integration/flowLogger.spec.js.map +0 -1
- package/dist/esm/tests/integration/frame-get-location-and-click.spec.d.ts +0 -1
- package/dist/esm/tests/integration/frame-get-location-and-click.spec.js +0 -55
- package/dist/esm/tests/integration/frame-get-location-and-click.spec.js.map +0 -1
- package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +0 -1
- package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js +0 -217
- package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +0 -1
- package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.d.ts +0 -1
- package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.js +0 -472
- package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.js.map +0 -1
- package/dist/esm/tests/integration/keep-alive.child.d.ts +0 -1
- package/dist/esm/tests/integration/keep-alive.child.js +0 -83
- package/dist/esm/tests/integration/keep-alive.child.js.map +0 -1
- package/dist/esm/tests/integration/keep-alive.spec.d.ts +0 -22
- package/dist/esm/tests/integration/keep-alive.spec.js +0 -482
- package/dist/esm/tests/integration/keep-alive.spec.js.map +0 -1
- package/dist/esm/tests/integration/keyboard.spec.d.ts +0 -1
- package/dist/esm/tests/integration/keyboard.spec.js +0 -257
- package/dist/esm/tests/integration/keyboard.spec.js.map +0 -1
- package/dist/esm/tests/integration/locator-backend-node-id.spec.d.ts +0 -1
- package/dist/esm/tests/integration/locator-backend-node-id.spec.js +0 -148
- package/dist/esm/tests/integration/locator-backend-node-id.spec.js.map +0 -1
- package/dist/esm/tests/integration/locator-content-methods.spec.d.ts +0 -1
- package/dist/esm/tests/integration/locator-content-methods.spec.js +0 -178
- package/dist/esm/tests/integration/locator-content-methods.spec.js.map +0 -1
- package/dist/esm/tests/integration/locator-count-iframe.spec.d.ts +0 -1
- package/dist/esm/tests/integration/locator-count-iframe.spec.js +0 -127
- package/dist/esm/tests/integration/locator-count-iframe.spec.js.map +0 -1
- package/dist/esm/tests/integration/locator-count.spec.d.ts +0 -1
- package/dist/esm/tests/integration/locator-count.spec.js +0 -66
- package/dist/esm/tests/integration/locator-count.spec.js.map +0 -1
- package/dist/esm/tests/integration/locator-fill.spec.d.ts +0 -1
- package/dist/esm/tests/integration/locator-fill.spec.js +0 -115
- package/dist/esm/tests/integration/locator-fill.spec.js.map +0 -1
- package/dist/esm/tests/integration/locator-input-methods.spec.d.ts +0 -1
- package/dist/esm/tests/integration/locator-input-methods.spec.js +0 -125
- package/dist/esm/tests/integration/locator-input-methods.spec.js.map +0 -1
- package/dist/esm/tests/integration/locator-nth.spec.d.ts +0 -1
- package/dist/esm/tests/integration/locator-nth.spec.js +0 -173
- package/dist/esm/tests/integration/locator-nth.spec.js.map +0 -1
- package/dist/esm/tests/integration/locator-select-option.spec.d.ts +0 -1
- package/dist/esm/tests/integration/locator-select-option.spec.js +0 -214
- package/dist/esm/tests/integration/locator-select-option.spec.js.map +0 -1
- package/dist/esm/tests/integration/logger-initialization.spec.d.ts +0 -1
- package/dist/esm/tests/integration/logger-initialization.spec.js +0 -595
- package/dist/esm/tests/integration/logger-initialization.spec.js.map +0 -1
- package/dist/esm/tests/integration/multi-instance-logger.spec.d.ts +0 -1
- package/dist/esm/tests/integration/multi-instance-logger.spec.js +0 -291
- package/dist/esm/tests/integration/multi-instance-logger.spec.js.map +0 -1
- package/dist/esm/tests/integration/nested-div.spec.d.ts +0 -1
- package/dist/esm/tests/integration/nested-div.spec.js +0 -20
- package/dist/esm/tests/integration/nested-div.spec.js.map +0 -1
- package/dist/esm/tests/integration/observe-element-id-format.spec.d.ts +0 -1
- package/dist/esm/tests/integration/observe-element-id-format.spec.js +0 -128
- package/dist/esm/tests/integration/observe-element-id-format.spec.js.map +0 -1
- package/dist/esm/tests/integration/page-addInitScript.spec.d.ts +0 -1
- package/dist/esm/tests/integration/page-addInitScript.spec.js +0 -92
- package/dist/esm/tests/integration/page-addInitScript.spec.js.map +0 -1
- package/dist/esm/tests/integration/page-console.spec.d.ts +0 -1
- package/dist/esm/tests/integration/page-console.spec.js +0 -45
- package/dist/esm/tests/integration/page-console.spec.js.map +0 -1
- package/dist/esm/tests/integration/page-drag-and-drop.spec.d.ts +0 -1
- package/dist/esm/tests/integration/page-drag-and-drop.spec.js +0 -435
- package/dist/esm/tests/integration/page-drag-and-drop.spec.js.map +0 -1
- package/dist/esm/tests/integration/page-extra-http-headers.spec.d.ts +0 -1
- package/dist/esm/tests/integration/page-extra-http-headers.spec.js +0 -83
- package/dist/esm/tests/integration/page-extra-http-headers.spec.js.map +0 -1
- package/dist/esm/tests/integration/page-goto-response.spec.d.ts +0 -1
- package/dist/esm/tests/integration/page-goto-response.spec.js +0 -32
- package/dist/esm/tests/integration/page-goto-response.spec.js.map +0 -1
- package/dist/esm/tests/integration/page-hover.spec.d.ts +0 -1
- package/dist/esm/tests/integration/page-hover.spec.js +0 -163
- package/dist/esm/tests/integration/page-hover.spec.js.map +0 -1
- package/dist/esm/tests/integration/page-screenshot.spec.d.ts +0 -1
- package/dist/esm/tests/integration/page-screenshot.spec.js +0 -257
- package/dist/esm/tests/integration/page-screenshot.spec.js.map +0 -1
- package/dist/esm/tests/integration/page-scroll.spec.d.ts +0 -1
- package/dist/esm/tests/integration/page-scroll.spec.js +0 -181
- package/dist/esm/tests/integration/page-scroll.spec.js.map +0 -1
- package/dist/esm/tests/integration/page-send-cdp.spec.d.ts +0 -1
- package/dist/esm/tests/integration/page-send-cdp.spec.js +0 -45
- package/dist/esm/tests/integration/page-send-cdp.spec.js.map +0 -1
- package/dist/esm/tests/integration/perform-understudy-method.spec.d.ts +0 -1
- package/dist/esm/tests/integration/perform-understudy-method.spec.js +0 -61
- package/dist/esm/tests/integration/perform-understudy-method.spec.js.map +0 -1
- package/dist/esm/tests/integration/setinputfiles.spec.d.ts +0 -1
- package/dist/esm/tests/integration/setinputfiles.spec.js +0 -128
- package/dist/esm/tests/integration/setinputfiles.spec.js.map +0 -1
- package/dist/esm/tests/integration/shadow-iframe-oopif.spec.d.ts +0 -1
- package/dist/esm/tests/integration/shadow-iframe-oopif.spec.js +0 -156
- package/dist/esm/tests/integration/shadow-iframe-oopif.spec.js.map +0 -1
- package/dist/esm/tests/integration/shadow-iframe-spif.spec.d.ts +0 -1
- package/dist/esm/tests/integration/shadow-iframe-spif.spec.js +0 -155
- package/dist/esm/tests/integration/shadow-iframe-spif.spec.js.map +0 -1
- package/dist/esm/tests/integration/testUtils.d.ts +0 -40
- package/dist/esm/tests/integration/testUtils.js +0 -178
- package/dist/esm/tests/integration/testUtils.js.map +0 -1
- package/dist/esm/tests/integration/text-selector-innermost.spec.d.ts +0 -1
- package/dist/esm/tests/integration/text-selector-innermost.spec.js +0 -103
- package/dist/esm/tests/integration/text-selector-innermost.spec.js.map +0 -1
- package/dist/esm/tests/integration/timeouts.spec.d.ts +0 -1
- package/dist/esm/tests/integration/timeouts.spec.js +0 -307
- package/dist/esm/tests/integration/timeouts.spec.js.map +0 -1
- package/dist/esm/tests/integration/user-data-dir.spec.d.ts +0 -1
- package/dist/esm/tests/integration/user-data-dir.spec.js +0 -42
- package/dist/esm/tests/integration/user-data-dir.spec.js.map +0 -1
- package/dist/esm/tests/integration/v3.config.d.ts +0 -4
- package/dist/esm/tests/integration/v3.config.js +0 -7
- package/dist/esm/tests/integration/v3.config.js.map +0 -1
- package/dist/esm/tests/integration/v3.dynamic.config.d.ts +0 -4
- package/dist/esm/tests/integration/v3.dynamic.config.js +0 -44
- package/dist/esm/tests/integration/v3.dynamic.config.js.map +0 -1
- package/dist/esm/tests/integration/v3.playwright.config.d.ts +0 -2
- package/dist/esm/tests/integration/v3.playwright.config.js +0 -46
- package/dist/esm/tests/integration/v3.playwright.config.js.map +0 -1
- package/dist/esm/tests/integration/wait-for-selector.spec.d.ts +0 -1
- package/dist/esm/tests/integration/wait-for-selector.spec.js +0 -681
- package/dist/esm/tests/integration/wait-for-selector.spec.js.map +0 -1
- package/dist/esm/tests/integration/wait-for-timeout.spec.d.ts +0 -1
- package/dist/esm/tests/integration/wait-for-timeout.spec.js +0 -116
- package/dist/esm/tests/integration/wait-for-timeout.spec.js.map +0 -1
- package/dist/esm/tests/integration/xpath-for-location-deep.spec.d.ts +0 -1
- package/dist/esm/tests/integration/xpath-for-location-deep.spec.js +0 -85
- package/dist/esm/tests/integration/xpath-for-location-deep.spec.js.map +0 -1
- package/dist/esm/tests/unit/agent-captcha-hooks.test.d.ts +0 -1
- package/dist/esm/tests/unit/agent-captcha-hooks.test.js +0 -339
- package/dist/esm/tests/unit/agent-captcha-hooks.test.js.map +0 -1
- package/dist/esm/tests/unit/agent-execution-model.test.d.ts +0 -1
- package/dist/esm/tests/unit/agent-execution-model.test.js +0 -148
- package/dist/esm/tests/unit/agent-execution-model.test.js.map +0 -1
- package/dist/esm/tests/unit/agent-metrics.test.d.ts +0 -1
- package/dist/esm/tests/unit/agent-metrics.test.js +0 -110
- package/dist/esm/tests/unit/agent-metrics.test.js.map +0 -1
- package/dist/esm/tests/unit/agent-mode-routing.test.d.ts +0 -1
- package/dist/esm/tests/unit/agent-mode-routing.test.js +0 -86
- package/dist/esm/tests/unit/agent-mode-routing.test.js.map +0 -1
- package/dist/esm/tests/unit/agent-system-prompt-variables.test.d.ts +0 -1
- package/dist/esm/tests/unit/agent-system-prompt-variables.test.js +0 -21
- package/dist/esm/tests/unit/agent-system-prompt-variables.test.js.map +0 -1
- package/dist/esm/tests/unit/agent-temperature.test.d.ts +0 -1
- package/dist/esm/tests/unit/agent-temperature.test.js +0 -189
- package/dist/esm/tests/unit/agent-temperature.test.js.map +0 -1
- package/dist/esm/tests/unit/agent-variables-validation.test.d.ts +0 -1
- package/dist/esm/tests/unit/agent-variables-validation.test.js +0 -41
- package/dist/esm/tests/unit/agent-variables-validation.test.js.map +0 -1
- package/dist/esm/tests/unit/aisdk-clients.test.d.ts +0 -1
- package/dist/esm/tests/unit/aisdk-clients.test.js +0 -84
- package/dist/esm/tests/unit/aisdk-clients.test.js.map +0 -1
- package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +0 -1
- package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js +0 -245
- package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +0 -1
- package/dist/esm/tests/unit/anthropic-cua-triple-click.test.d.ts +0 -1
- package/dist/esm/tests/unit/anthropic-cua-triple-click.test.js +0 -82
- package/dist/esm/tests/unit/anthropic-cua-triple-click.test.js.map +0 -1
- package/dist/esm/tests/unit/api-client-observe-variables.test.d.ts +0 -1
- package/dist/esm/tests/unit/api-client-observe-variables.test.js +0 -133
- package/dist/esm/tests/unit/api-client-observe-variables.test.js.map +0 -1
- package/dist/esm/tests/unit/api-multiregion.test.d.ts +0 -1
- package/dist/esm/tests/unit/api-multiregion.test.js +0 -56
- package/dist/esm/tests/unit/api-multiregion.test.js.map +0 -1
- package/dist/esm/tests/unit/api-optional-model-api-key.test.d.ts +0 -1
- package/dist/esm/tests/unit/api-optional-model-api-key.test.js +0 -153
- package/dist/esm/tests/unit/api-optional-model-api-key.test.js.map +0 -1
- package/dist/esm/tests/unit/api-variables-schema.test.d.ts +0 -1
- package/dist/esm/tests/unit/api-variables-schema.test.js +0 -67
- package/dist/esm/tests/unit/api-variables-schema.test.js.map +0 -1
- package/dist/esm/tests/unit/browserbase-session-accessors.test.d.ts +0 -1
- package/dist/esm/tests/unit/browserbase-session-accessors.test.js +0 -140
- package/dist/esm/tests/unit/browserbase-session-accessors.test.js.map +0 -1
- package/dist/esm/tests/unit/cache-llm-resolution.test.d.ts +0 -1
- package/dist/esm/tests/unit/cache-llm-resolution.test.js +0 -184
- package/dist/esm/tests/unit/cache-llm-resolution.test.js.map +0 -1
- package/dist/esm/tests/unit/captcha-solver.test.d.ts +0 -1
- package/dist/esm/tests/unit/captcha-solver.test.js +0 -152
- package/dist/esm/tests/unit/captcha-solver.test.js.map +0 -1
- package/dist/esm/tests/unit/cdp-connection-close.test.d.ts +0 -1
- package/dist/esm/tests/unit/cdp-connection-close.test.js +0 -72
- package/dist/esm/tests/unit/cdp-connection-close.test.js.map +0 -1
- package/dist/esm/tests/unit/context-extra-http-headers.test.d.ts +0 -1
- package/dist/esm/tests/unit/context-extra-http-headers.test.js +0 -56
- package/dist/esm/tests/unit/context-extra-http-headers.test.js.map +0 -1
- package/dist/esm/tests/unit/cookies.test.d.ts +0 -1
- package/dist/esm/tests/unit/cookies.test.js +0 -909
- package/dist/esm/tests/unit/cookies.test.js.map +0 -1
- package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.d.ts +0 -1
- package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js +0 -93
- package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js.map +0 -1
- package/dist/esm/tests/unit/flowlogger-capturing-llm.test.d.ts +0 -1
- package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js +0 -41
- package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js.map +0 -1
- package/dist/esm/tests/unit/flowlogger-eventstore.test.d.ts +0 -1
- package/dist/esm/tests/unit/flowlogger-eventstore.test.js +0 -248
- package/dist/esm/tests/unit/flowlogger-eventstore.test.js.map +0 -1
- package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.d.ts +0 -1
- package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.js +0 -58
- package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.js.map +0 -1
- package/dist/esm/tests/unit/helpers/mockCDPSession.d.ts +0 -19
- package/dist/esm/tests/unit/helpers/mockCDPSession.js +0 -25
- package/dist/esm/tests/unit/helpers/mockCDPSession.js.map +0 -1
- package/dist/esm/tests/unit/inference-temperature.test.d.ts +0 -1
- package/dist/esm/tests/unit/inference-temperature.test.js +0 -63
- package/dist/esm/tests/unit/inference-temperature.test.js.map +0 -1
- package/dist/esm/tests/unit/llm-middleware.test.d.ts +0 -1
- package/dist/esm/tests/unit/llm-middleware.test.js +0 -460
- package/dist/esm/tests/unit/llm-middleware.test.js.map +0 -1
- package/dist/esm/tests/unit/llm-provider.test.d.ts +0 -1
- package/dist/esm/tests/unit/llm-provider.test.js +0 -62
- package/dist/esm/tests/unit/llm-provider.test.js.map +0 -1
- package/dist/esm/tests/unit/microsoft-cua-client.test.d.ts +0 -1
- package/dist/esm/tests/unit/microsoft-cua-client.test.js +0 -84
- package/dist/esm/tests/unit/microsoft-cua-client.test.js.map +0 -1
- package/dist/esm/tests/unit/model-deprecation.test.d.ts +0 -1
- package/dist/esm/tests/unit/model-deprecation.test.js +0 -140
- package/dist/esm/tests/unit/model-deprecation.test.js.map +0 -1
- package/dist/esm/tests/unit/model-utils.test.d.ts +0 -1
- package/dist/esm/tests/unit/model-utils.test.js +0 -40
- package/dist/esm/tests/unit/model-utils.test.js.map +0 -1
- package/dist/esm/tests/unit/openai-compatible-temperature.test.d.ts +0 -1
- package/dist/esm/tests/unit/openai-compatible-temperature.test.js +0 -82
- package/dist/esm/tests/unit/openai-compatible-temperature.test.js.map +0 -1
- package/dist/esm/tests/unit/openai-cua-client.test.d.ts +0 -1
- package/dist/esm/tests/unit/openai-cua-client.test.js +0 -69
- package/dist/esm/tests/unit/openai-cua-client.test.js.map +0 -1
- package/dist/esm/tests/unit/page-extra-http-headers.test.d.ts +0 -1
- package/dist/esm/tests/unit/page-extra-http-headers.test.js +0 -90
- package/dist/esm/tests/unit/page-extra-http-headers.test.js.map +0 -1
- package/dist/esm/tests/unit/page-snapshot.test.d.ts +0 -1
- package/dist/esm/tests/unit/page-snapshot.test.js +0 -40
- package/dist/esm/tests/unit/page-snapshot.test.js.map +0 -1
- package/dist/esm/tests/unit/prompt-observe-variables.test.d.ts +0 -1
- package/dist/esm/tests/unit/prompt-observe-variables.test.js +0 -23
- package/dist/esm/tests/unit/prompt-observe-variables.test.js.map +0 -1
- package/dist/esm/tests/unit/public-api/export-surface.test.d.ts +0 -1
- package/dist/esm/tests/unit/public-api/export-surface.test.js +0 -72
- package/dist/esm/tests/unit/public-api/export-surface.test.js.map +0 -1
- package/dist/esm/tests/unit/public-api/llm-and-agents.test.d.ts +0 -1
- package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +0 -144
- package/dist/esm/tests/unit/public-api/llm-and-agents.test.js.map +0 -1
- package/dist/esm/tests/unit/public-api/public-error-types.test.d.ts +0 -62
- package/dist/esm/tests/unit/public-api/public-error-types.test.js +0 -74
- package/dist/esm/tests/unit/public-api/public-error-types.test.js.map +0 -1
- package/dist/esm/tests/unit/public-api/public-types.test.d.ts +0 -1
- package/dist/esm/tests/unit/public-api/public-types.test.js +0 -97
- package/dist/esm/tests/unit/public-api/public-types.test.js.map +0 -1
- package/dist/esm/tests/unit/public-api/runtime-utils.test.d.ts +0 -1
- package/dist/esm/tests/unit/public-api/runtime-utils.test.js +0 -25
- package/dist/esm/tests/unit/public-api/runtime-utils.test.js.map +0 -1
- package/dist/esm/tests/unit/public-api/schema-utils.test.d.ts +0 -1
- package/dist/esm/tests/unit/public-api/schema-utils.test.js +0 -60
- package/dist/esm/tests/unit/public-api/schema-utils.test.js.map +0 -1
- package/dist/esm/tests/unit/public-api/timeout-error-types.test.d.ts +0 -1
- package/dist/esm/tests/unit/public-api/timeout-error-types.test.js +0 -86
- package/dist/esm/tests/unit/public-api/timeout-error-types.test.js.map +0 -1
- package/dist/esm/tests/unit/public-api/tool-type-export.test.d.ts +0 -1
- package/dist/esm/tests/unit/public-api/tool-type-export.test.js +0 -30
- package/dist/esm/tests/unit/public-api/tool-type-export.test.js.map +0 -1
- package/dist/esm/tests/unit/public-api/v3-core.test.d.ts +0 -1
- package/dist/esm/tests/unit/public-api/v3-core.test.js +0 -73
- package/dist/esm/tests/unit/public-api/v3-core.test.js.map +0 -1
- package/dist/esm/tests/unit/safety-confirmation.test.d.ts +0 -1
- package/dist/esm/tests/unit/safety-confirmation.test.js +0 -108
- package/dist/esm/tests/unit/safety-confirmation.test.js.map +0 -1
- package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.d.ts +0 -1
- package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.js +0 -396
- package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.js.map +0 -1
- package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.d.ts +0 -1
- package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.js +0 -337
- package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.js.map +0 -1
- package/dist/esm/tests/unit/snapshot-capture-orchestration.test.d.ts +0 -1
- package/dist/esm/tests/unit/snapshot-capture-orchestration.test.js +0 -469
- package/dist/esm/tests/unit/snapshot-capture-orchestration.test.js.map +0 -1
- package/dist/esm/tests/unit/snapshot-cbor.test.d.ts +0 -1
- package/dist/esm/tests/unit/snapshot-cbor.test.js +0 -202
- package/dist/esm/tests/unit/snapshot-cbor.test.js.map +0 -1
- package/dist/esm/tests/unit/snapshot-dom-session-builders.test.d.ts +0 -1
- package/dist/esm/tests/unit/snapshot-dom-session-builders.test.js +0 -218
- package/dist/esm/tests/unit/snapshot-dom-session-builders.test.js.map +0 -1
- package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.d.ts +0 -1
- package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.js +0 -105
- package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.js.map +0 -1
- package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.d.ts +0 -1
- package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.js +0 -87
- package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.js.map +0 -1
- package/dist/esm/tests/unit/snapshot-frame-merge.test.d.ts +0 -1
- package/dist/esm/tests/unit/snapshot-frame-merge.test.js +0 -333
- package/dist/esm/tests/unit/snapshot-frame-merge.test.js.map +0 -1
- package/dist/esm/tests/unit/snapshot-tree-format-utils.test.d.ts +0 -1
- package/dist/esm/tests/unit/snapshot-tree-format-utils.test.js +0 -125
- package/dist/esm/tests/unit/snapshot-tree-format-utils.test.js.map +0 -1
- package/dist/esm/tests/unit/snapshot-xpath-utils.test.d.ts +0 -1
- package/dist/esm/tests/unit/snapshot-xpath-utils.test.js +0 -72
- package/dist/esm/tests/unit/snapshot-xpath-utils.test.js.map +0 -1
- package/dist/esm/tests/unit/timeout-handlers.test.d.ts +0 -1
- package/dist/esm/tests/unit/timeout-handlers.test.js +0 -898
- package/dist/esm/tests/unit/timeout-handlers.test.js.map +0 -1
- package/dist/esm/tests/unit/understudy-command-exception.test.d.ts +0 -1
- package/dist/esm/tests/unit/understudy-command-exception.test.js +0 -55
- package/dist/esm/tests/unit/understudy-command-exception.test.js.map +0 -1
- package/dist/esm/tests/unit/xpath-parser.test.d.ts +0 -1
- package/dist/esm/tests/unit/xpath-parser.test.js +0 -309
- package/dist/esm/tests/unit/xpath-parser.test.js.map +0 -1
- package/dist/esm/tests/unit/xpath-resolver.test.d.ts +0 -1
- package/dist/esm/tests/unit/xpath-resolver.test.js +0 -78
- package/dist/esm/tests/unit/xpath-resolver.test.js.map +0 -1
- package/dist/esm/tests/unit/zod-enum-compatibility.test.d.ts +0 -1
- package/dist/esm/tests/unit/zod-enum-compatibility.test.js +0 -114
- package/dist/esm/tests/unit/zod-enum-compatibility.test.js.map +0 -1
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { test, expect } from "@playwright/test";
|
|
2
|
-
import { V3 } from "../../lib/v3/v3.js";
|
|
3
|
-
import { getV3TestConfig } from "./v3.config.js";
|
|
4
|
-
import { raceTimeout } from "./testUtils.js";
|
|
5
|
-
/**
|
|
6
|
-
* Full production trigger chain:
|
|
7
|
-
*
|
|
8
|
-
* v3.close()
|
|
9
|
-
* → apiClient.end() (tells hosted API to kill the BB session)
|
|
10
|
-
* → hosted API terminates BB (CDP WebSocket closes from server side)
|
|
11
|
-
* → ctx.close() → conn.close() (awaits "close" on already-CLOSED WS → hangs)
|
|
12
|
-
*
|
|
13
|
-
* Requires:
|
|
14
|
-
* - BROWSERBASE_API_KEY / BROWSERBASE_PROJECT_ID
|
|
15
|
-
* - The Stagehand hosted API to be reachable
|
|
16
|
-
* - A non-us-west-2 region (higher latency makes the race reliably trigger)
|
|
17
|
-
*/
|
|
18
|
-
test.describe("v3.close() with Stagehand API + non-default region", () => {
|
|
19
|
-
test("close resolves instead of hanging", async () => {
|
|
20
|
-
const apiKey = process.env.BROWSERBASE_API_KEY;
|
|
21
|
-
const projectId = process.env.BROWSERBASE_PROJECT_ID;
|
|
22
|
-
test.skip(!apiKey || !projectId, "BROWSERBASE_API_KEY and BROWSERBASE_PROJECT_ID are required");
|
|
23
|
-
const v3 = new V3(getV3TestConfig({
|
|
24
|
-
disableAPI: false,
|
|
25
|
-
browserbaseSessionCreateParams: { region: "ap-southeast-1" },
|
|
26
|
-
}));
|
|
27
|
-
await v3.init();
|
|
28
|
-
// Verify the instance is functional.
|
|
29
|
-
const page = v3.context.pages()[0];
|
|
30
|
-
await page.goto("data:text/html,<html><body>api-region-test</body></html>");
|
|
31
|
-
// Call v3.close() — the normal production shutdown path.
|
|
32
|
-
// Internally: apiClient.end() → hosted API kills BB session →
|
|
33
|
-
// CDP WebSocket closes → conn.close() tries to close already-closed WS.
|
|
34
|
-
// Without the fix this hangs forever.
|
|
35
|
-
const result = await raceTimeout(v3.close().then(() => "resolved"), 30_000);
|
|
36
|
-
expect(result).toBe("resolved");
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
//# sourceMappingURL=cdp-close-api-region.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cdp-close-api-region.spec.js","sourceRoot":"","sources":["../../../../tests/integration/cdp-close-api-region.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;;;;;;;;;GAYG;AACH,IAAI,CAAC,QAAQ,CAAC,oDAAoD,EAAE,GAAG,EAAE;IACvE,IAAI,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;QAErD,IAAI,CAAC,IAAI,CACP,CAAC,MAAM,IAAI,CAAC,SAAS,EACrB,6DAA6D,CAC9D,CAAC;QAEF,MAAM,EAAE,GAAG,IAAI,EAAE,CACf,eAAe,CAAC;YACd,UAAU,EAAE,KAAK;YACjB,8BAA8B,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE;SAC7D,CAAC,CACH,CAAC;QAEF,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAEhB,qCAAqC;QACrC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,IAAI,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QAE5E,yDAAyD;QACzD,8DAA8D;QAC9D,wEAAwE;QACxE,sCAAsC;QACtC,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAmB,CAAC,EAC1C,MAAM,CACP,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../../lib/v3/v3.js\";\nimport { getV3TestConfig } from \"./v3.config.js\";\nimport { raceTimeout } from \"./testUtils.js\";\n\n/**\n * Full production trigger chain:\n *\n * v3.close()\n * → apiClient.end() (tells hosted API to kill the BB session)\n * → hosted API terminates BB (CDP WebSocket closes from server side)\n * → ctx.close() → conn.close() (awaits \"close\" on already-CLOSED WS → hangs)\n *\n * Requires:\n * - BROWSERBASE_API_KEY / BROWSERBASE_PROJECT_ID\n * - The Stagehand hosted API to be reachable\n * - A non-us-west-2 region (higher latency makes the race reliably trigger)\n */\ntest.describe(\"v3.close() with Stagehand API + non-default region\", () => {\n test(\"close resolves instead of hanging\", async () => {\n const apiKey = process.env.BROWSERBASE_API_KEY;\n const projectId = process.env.BROWSERBASE_PROJECT_ID;\n\n test.skip(\n !apiKey || !projectId,\n \"BROWSERBASE_API_KEY and BROWSERBASE_PROJECT_ID are required\",\n );\n\n const v3 = new V3(\n getV3TestConfig({\n disableAPI: false,\n browserbaseSessionCreateParams: { region: \"ap-southeast-1\" },\n }),\n );\n\n await v3.init();\n\n // Verify the instance is functional.\n const page = v3.context.pages()[0];\n await page.goto(\"data:text/html,<html><body>api-region-test</body></html>\");\n\n // Call v3.close() — the normal production shutdown path.\n // Internally: apiClient.end() → hosted API kills BB session →\n // CDP WebSocket closes → conn.close() tries to close already-closed WS.\n // Without the fix this hangs forever.\n const result = await raceTimeout(\n v3.close().then(() => \"resolved\" as const),\n 30_000,\n );\n\n expect(result).toBe(\"resolved\");\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { test, expect } from "@playwright/test";
|
|
2
|
-
import { V3 } from "../../lib/v3/v3.js";
|
|
3
|
-
import { v3TestConfig } from "./v3.config.js";
|
|
4
|
-
import { raceTimeout } from "./testUtils.js";
|
|
5
|
-
test.describe("CdpConnection.close() after external WebSocket close", () => {
|
|
6
|
-
let v3;
|
|
7
|
-
test.beforeEach(async () => {
|
|
8
|
-
v3 = new V3(v3TestConfig);
|
|
9
|
-
await v3.init();
|
|
10
|
-
});
|
|
11
|
-
test.afterEach(async () => {
|
|
12
|
-
// Best-effort teardown – don't let a hung close block the suite.
|
|
13
|
-
try {
|
|
14
|
-
await raceTimeout(v3?.close?.(), 5_000);
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
// ignore
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
test("v3.close() resolves after the CDP WebSocket is already closed", async () => {
|
|
21
|
-
// Verify the V3 instance is functional.
|
|
22
|
-
const page = v3.context.pages()[0];
|
|
23
|
-
await page.goto("data:text/html,<html><body>close-test</body></html>");
|
|
24
|
-
const conn = v3.context.conn;
|
|
25
|
-
// Unhook the V3-level _onCdpClosed handler so it doesn't trigger
|
|
26
|
-
// _immediateShutdown in the background (we want to isolate the
|
|
27
|
-
// CdpConnection.close() hang).
|
|
28
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
29
|
-
const onCdpClosed = v3._onCdpClosed;
|
|
30
|
-
if (onCdpClosed) {
|
|
31
|
-
conn.offTransportClosed(onCdpClosed);
|
|
32
|
-
}
|
|
33
|
-
// Wait for the transport-close event to be fully processed.
|
|
34
|
-
const transportClosed = new Promise((resolve) => {
|
|
35
|
-
conn.onTransportClosed(() => resolve());
|
|
36
|
-
});
|
|
37
|
-
// Terminate the underlying WebSocket – simulates the hosted API
|
|
38
|
-
// killing the Browserbase session, which closes the CDP socket
|
|
39
|
-
// from the server side.
|
|
40
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
|
-
const ws = conn.ws;
|
|
42
|
-
ws.terminate();
|
|
43
|
-
await transportClosed;
|
|
44
|
-
// Now call v3.close(). Internally this calls ctx.close() →
|
|
45
|
-
// conn.close(), which awaits a "close" event on an already-CLOSED
|
|
46
|
-
// WebSocket. Without the fix this promise never resolves.
|
|
47
|
-
const result = await raceTimeout(v3.close().then(() => "resolved"), 5_000);
|
|
48
|
-
expect(result).toBe("resolved");
|
|
49
|
-
});
|
|
50
|
-
test("inflight CDP calls reject when the WebSocket is terminated", async () => {
|
|
51
|
-
const page = v3.context.pages()[0];
|
|
52
|
-
await page.goto("data:text/html,<html><body>inflight-test</body></html>");
|
|
53
|
-
const conn = v3.context.conn;
|
|
54
|
-
// Unhook the V3-level handler as above.
|
|
55
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
|
-
const onCdpClosed = v3._onCdpClosed;
|
|
57
|
-
if (onCdpClosed) {
|
|
58
|
-
conn.offTransportClosed(onCdpClosed);
|
|
59
|
-
}
|
|
60
|
-
// Send a long-running CDP call that the server will never answer.
|
|
61
|
-
const pending = conn.send("Runtime.evaluate", {
|
|
62
|
-
expression: "new Promise(r => setTimeout(() => r('done'), 60000))",
|
|
63
|
-
awaitPromise: true,
|
|
64
|
-
});
|
|
65
|
-
// Terminate the WebSocket while the call is inflight.
|
|
66
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
67
|
-
const ws = conn.ws;
|
|
68
|
-
ws.terminate();
|
|
69
|
-
// The pending promise must reject – not hang forever.
|
|
70
|
-
const result = await raceTimeout(pending.then(() => "resolved").catch(() => "rejected"), 5_000);
|
|
71
|
-
expect(result).toBe("rejected");
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
//# sourceMappingURL=cdp-connection-close.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cdp-connection-close.spec.js","sourceRoot":"","sources":["../../../../tests/integration/cdp-connection-close.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { test, expect } from \"@playwright/test\";\nimport WebSocket from \"ws\";\nimport { V3 } from \"../../lib/v3/v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\nimport { raceTimeout } from \"./testUtils.js\";\n\ntest.describe(\"CdpConnection.close() after external WebSocket close\", () => {\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 // Best-effort teardown – don't let a hung close block the suite.\n try {\n await raceTimeout(v3?.close?.(), 5_000);\n } catch {\n // ignore\n }\n });\n\n test(\"v3.close() resolves after the CDP WebSocket is already closed\", async () => {\n // Verify the V3 instance is functional.\n const page = v3.context.pages()[0];\n await page.goto(\"data:text/html,<html><body>close-test</body></html>\");\n\n const conn = v3.context.conn;\n\n // Unhook the V3-level _onCdpClosed handler so it doesn't trigger\n // _immediateShutdown in the background (we want to isolate the\n // CdpConnection.close() hang).\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const onCdpClosed = (v3 as any)._onCdpClosed;\n if (onCdpClosed) {\n conn.offTransportClosed(onCdpClosed);\n }\n\n // Wait for the transport-close event to be fully processed.\n const transportClosed = new Promise<void>((resolve) => {\n conn.onTransportClosed(() => resolve());\n });\n\n // Terminate the underlying WebSocket – simulates the hosted API\n // killing the Browserbase session, which closes the CDP socket\n // from the server side.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const ws: WebSocket = (conn as any).ws;\n ws.terminate();\n\n await transportClosed;\n\n // Now call v3.close(). Internally this calls ctx.close() →\n // conn.close(), which awaits a \"close\" event on an already-CLOSED\n // WebSocket. Without the fix this promise never resolves.\n const result = await raceTimeout(\n v3.close().then(() => \"resolved\" as const),\n 5_000,\n );\n\n expect(result).toBe(\"resolved\");\n });\n\n test(\"inflight CDP calls reject when the WebSocket is terminated\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\"data:text/html,<html><body>inflight-test</body></html>\");\n\n const conn = v3.context.conn;\n\n // Unhook the V3-level handler as above.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const onCdpClosed = (v3 as any)._onCdpClosed;\n if (onCdpClosed) {\n conn.offTransportClosed(onCdpClosed);\n }\n\n // Send a long-running CDP call that the server will never answer.\n const pending = conn.send(\"Runtime.evaluate\", {\n expression: \"new Promise(r => setTimeout(() => r('done'), 60000))\",\n awaitPromise: true,\n });\n\n // Terminate the WebSocket while the call is inflight.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const ws: WebSocket = (conn as any).ws;\n ws.terminate();\n\n // The pending promise must reject – not hang forever.\n const result = await raceTimeout(\n pending.then(() => \"resolved\" as const).catch(() => \"rejected\" as const),\n 5_000,\n );\n\n expect(result).toBe(\"rejected\");\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { test, expect } from "@playwright/test";
|
|
2
|
-
import { chromium as playwrightChromium } from "playwright";
|
|
3
|
-
import { V3 } from "../../lib/v3/v3.js";
|
|
4
|
-
import { v3TestConfig } from "./v3.config.js";
|
|
5
|
-
test.describe("CDP session detach handling", () => {
|
|
6
|
-
let v3;
|
|
7
|
-
test.beforeEach(async () => {
|
|
8
|
-
v3 = new V3(v3TestConfig);
|
|
9
|
-
await v3.init();
|
|
10
|
-
});
|
|
11
|
-
test.afterEach(async () => {
|
|
12
|
-
await v3?.close?.().catch(() => { });
|
|
13
|
-
});
|
|
14
|
-
test("rejects inflight CDP calls when a target is closed", async () => {
|
|
15
|
-
const unhandled = [];
|
|
16
|
-
const onUnhandled = (reason) => {
|
|
17
|
-
unhandled.push(reason);
|
|
18
|
-
};
|
|
19
|
-
process.on("unhandledRejection", onUnhandled);
|
|
20
|
-
let pwBrowser = null;
|
|
21
|
-
try {
|
|
22
|
-
pwBrowser = await playwrightChromium.connectOverCDP(v3.connectURL());
|
|
23
|
-
const pwContext = pwBrowser.contexts()[0];
|
|
24
|
-
const pwPage = pwContext.pages()[0];
|
|
25
|
-
const v3Page = v3.context.pages()[0];
|
|
26
|
-
await v3Page.goto("data:text/html,<html><body>cdp</body></html>");
|
|
27
|
-
const pending = v3Page.sendCDP("Runtime.evaluate", {
|
|
28
|
-
expression: "new Promise(r => setTimeout(() => r('done'), 5000))",
|
|
29
|
-
awaitPromise: true,
|
|
30
|
-
returnByValue: true,
|
|
31
|
-
});
|
|
32
|
-
await pwPage.close();
|
|
33
|
-
await expect(pending).rejects.toThrow(/No Page found for target closed before CDP response/);
|
|
34
|
-
await new Promise((r) => setTimeout(r, 50));
|
|
35
|
-
expect(unhandled).toHaveLength(0);
|
|
36
|
-
}
|
|
37
|
-
finally {
|
|
38
|
-
process.off("unhandledRejection", onUnhandled);
|
|
39
|
-
await pwBrowser?.close().catch(() => { });
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
//# sourceMappingURL=cdp-session-detached.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cdp-session-detached.spec.js","sourceRoot":"","sources":["../../../../tests/integration/cdp-session-detached.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,IAAI,CAAC,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAChD,IAAI,EAAM,CAAC;IAEX,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;QACzB,EAAE,GAAG,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC;QAC1B,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,SAAS,GAAc,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,CAAC,MAAe,EAAE,EAAE;YACtC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;QAE9C,IAAI,SAAS,GAEF,IAAI,CAAC;QAEhB,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,kBAAkB,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;YACrE,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAEpC,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAElE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE;gBACjD,UAAU,EAAE,qDAAqD;gBACjE,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YAEH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YAErB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CACnC,qDAAqD,CACtD,CAAC;YAEF,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;YAC/C,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { test, expect } from \"@playwright/test\";\nimport { chromium as playwrightChromium } from \"playwright\";\nimport { V3 } from \"../../lib/v3/v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\n\ntest.describe(\"CDP session detach handling\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch(() => {});\n });\n\n test(\"rejects inflight CDP calls when a target is closed\", async () => {\n const unhandled: unknown[] = [];\n const onUnhandled = (reason: unknown) => {\n unhandled.push(reason);\n };\n\n process.on(\"unhandledRejection\", onUnhandled);\n\n let pwBrowser: Awaited<\n ReturnType<typeof playwrightChromium.connectOverCDP>\n > | null = null;\n\n try {\n pwBrowser = await playwrightChromium.connectOverCDP(v3.connectURL());\n const pwContext = pwBrowser.contexts()[0];\n const pwPage = pwContext.pages()[0];\n\n const v3Page = v3.context.pages()[0];\n await v3Page.goto(\"data:text/html,<html><body>cdp</body></html>\");\n\n const pending = v3Page.sendCDP(\"Runtime.evaluate\", {\n expression: \"new Promise(r => setTimeout(() => r('done'), 5000))\",\n awaitPromise: true,\n returnByValue: true,\n });\n\n await pwPage.close();\n\n await expect(pending).rejects.toThrow(\n /No Page found for target closed before CDP response/,\n );\n\n await new Promise((r) => setTimeout(r, 50));\n expect(unhandled).toHaveLength(0);\n } finally {\n process.off(\"unhandledRejection\", onUnhandled);\n await pwBrowser?.close().catch(() => {});\n }\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { test, expect } from "@playwright/test";
|
|
2
|
-
import { V3 } from "../../lib/v3/v3.js";
|
|
3
|
-
import { v3DynamicTestConfig } from "./v3.dynamic.config.js";
|
|
4
|
-
import { closeV3 } from "./testUtils.js";
|
|
5
|
-
test.describe("V3 chrome:// new-tab page tracking", () => {
|
|
6
|
-
let v3;
|
|
7
|
-
test.beforeEach(async () => {
|
|
8
|
-
v3 = new V3(v3DynamicTestConfig);
|
|
9
|
-
await v3.init();
|
|
10
|
-
});
|
|
11
|
-
test.afterEach(async () => {
|
|
12
|
-
await closeV3(v3);
|
|
13
|
-
});
|
|
14
|
-
test("pages() includes a tab opened via chrome://newtab/", async () => {
|
|
15
|
-
const ctx = v3.context;
|
|
16
|
-
const initialPages = ctx.pages();
|
|
17
|
-
expect(initialPages.length).toBe(1);
|
|
18
|
-
// Simulate a manually-opened tab by creating a target at chrome://newtab/.
|
|
19
|
-
// This is the same CDP path the browser takes when the user presses Ctrl+T.
|
|
20
|
-
const { targetId } = await ctx.conn.send("Target.createTarget", { url: "chrome://newtab/" });
|
|
21
|
-
// Wait for the page to be registered (onAttachedToTarget is async).
|
|
22
|
-
const deadline = Date.now() + 5000;
|
|
23
|
-
while (Date.now() < deadline) {
|
|
24
|
-
if (ctx.pages().length >= 2)
|
|
25
|
-
break;
|
|
26
|
-
await new Promise((r) => setTimeout(r, 50));
|
|
27
|
-
}
|
|
28
|
-
const pages = ctx.pages();
|
|
29
|
-
expect(pages.length).toBe(2);
|
|
30
|
-
// The new page's target should match the one we created.
|
|
31
|
-
const newPage = pages.find((p) => p.targetId() === targetId);
|
|
32
|
-
expect(newPage).toBeTruthy();
|
|
33
|
-
});
|
|
34
|
-
test("chrome://newtab/ tab becomes usable after navigating to a web URL", async () => {
|
|
35
|
-
const ctx = v3.context;
|
|
36
|
-
// Create a tab at chrome://newtab/ (same as user pressing Ctrl+T).
|
|
37
|
-
const { targetId } = await ctx.conn.send("Target.createTarget", { url: "chrome://newtab/" });
|
|
38
|
-
// Wait for registration.
|
|
39
|
-
const deadline = Date.now() + 5000;
|
|
40
|
-
while (Date.now() < deadline) {
|
|
41
|
-
if (ctx.pages().some((p) => p.targetId() === targetId))
|
|
42
|
-
break;
|
|
43
|
-
await new Promise((r) => setTimeout(r, 50));
|
|
44
|
-
}
|
|
45
|
-
const newPage = ctx.pages().find((p) => p.targetId() === targetId);
|
|
46
|
-
expect(newPage).toBeTruthy();
|
|
47
|
-
// Navigate the new tab to a real web page.
|
|
48
|
-
await newPage.goto("https://example.com/", {
|
|
49
|
-
waitUntil: "domcontentloaded",
|
|
50
|
-
});
|
|
51
|
-
expect(newPage.url()).toContain("example.com");
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
//# sourceMappingURL=chrome-newtab-page-tracking.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chrome-newtab-page-tracking.spec.js","sourceRoot":"","sources":["../../../../tests/integration/chrome-newtab-page-tracking.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../../lib/v3/v3.js\";\nimport { v3DynamicTestConfig } from \"./v3.dynamic.config.js\";\nimport { closeV3 } from \"./testUtils.js\";\n\ntest.describe(\"V3 chrome:// new-tab page tracking\", () => {\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(\"pages() includes a tab opened via chrome://newtab/\", async () => {\n const ctx = v3.context;\n const initialPages = ctx.pages();\n expect(initialPages.length).toBe(1);\n\n // Simulate a manually-opened tab by creating a target at chrome://newtab/.\n // This is the same CDP path the browser takes when the user presses Ctrl+T.\n const { targetId } = await ctx.conn.send<{ targetId: string }>(\n \"Target.createTarget\",\n { url: \"chrome://newtab/\" },\n );\n\n // Wait for the page to be registered (onAttachedToTarget is async).\n const deadline = Date.now() + 5000;\n while (Date.now() < deadline) {\n if (ctx.pages().length >= 2) break;\n await new Promise((r) => setTimeout(r, 50));\n }\n\n const pages = ctx.pages();\n expect(pages.length).toBe(2);\n\n // The new page's target should match the one we created.\n const newPage = pages.find((p) => p.targetId() === targetId);\n expect(newPage).toBeTruthy();\n });\n\n test(\"chrome://newtab/ tab becomes usable after navigating to a web URL\", async () => {\n const ctx = v3.context;\n\n // Create a tab at chrome://newtab/ (same as user pressing Ctrl+T).\n const { targetId } = await ctx.conn.send<{ targetId: string }>(\n \"Target.createTarget\",\n { url: \"chrome://newtab/\" },\n );\n\n // Wait for registration.\n const deadline = Date.now() + 5000;\n while (Date.now() < deadline) {\n if (ctx.pages().some((p) => p.targetId() === targetId)) break;\n await new Promise((r) => setTimeout(r, 50));\n }\n\n const newPage = ctx.pages().find((p) => p.targetId() === targetId);\n expect(newPage).toBeTruthy();\n\n // Navigate the new tab to a real web page.\n await newPage!.goto(\"https://example.com/\", {\n waitUntil: \"domcontentloaded\",\n });\n\n expect(newPage!.url()).toContain(\"example.com\");\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { test, expect } from "@playwright/test";
|
|
2
|
-
import { V3 } from "../../lib/v3/v3.js";
|
|
3
|
-
import { v3TestConfig } from "./v3.config.js";
|
|
4
|
-
// Keep double-click verification event-based and deterministic.
|
|
5
|
-
// Time-delta counters (Date.now() between mousedowns) are flaky at ms boundaries
|
|
6
|
-
// and can miss valid double-clicks when synthetic input lands in the same millisecond.
|
|
7
|
-
const doubleClickFixtureUrl = `data:text/html,${encodeURIComponent(`<!DOCTYPE html>
|
|
8
|
-
<html>
|
|
9
|
-
<body>
|
|
10
|
-
<div id="target" style="width: 240px; height: 120px; border: 1px solid #000;">target</div>
|
|
11
|
-
<input id="clickCount" value="0" readonly />
|
|
12
|
-
<input id="dblClickCount" value="0" readonly />
|
|
13
|
-
<input id="lastClickDetail" value="0" readonly />
|
|
14
|
-
<input id="lastDblClickDetail" value="0" readonly />
|
|
15
|
-
<script>
|
|
16
|
-
const target = document.getElementById("target");
|
|
17
|
-
const clickCount = document.getElementById("clickCount");
|
|
18
|
-
const dblClickCount = document.getElementById("dblClickCount");
|
|
19
|
-
const lastClickDetail = document.getElementById("lastClickDetail");
|
|
20
|
-
const lastDblClickDetail = document.getElementById("lastDblClickDetail");
|
|
21
|
-
let clicks = 0;
|
|
22
|
-
let dblClicks = 0;
|
|
23
|
-
|
|
24
|
-
target.addEventListener("click", (event) => {
|
|
25
|
-
clicks += 1;
|
|
26
|
-
clickCount.value = String(clicks);
|
|
27
|
-
lastClickDetail.value = String(event.detail);
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
target.addEventListener("dblclick", (event) => {
|
|
31
|
-
dblClicks += 1;
|
|
32
|
-
dblClickCount.value = String(dblClicks);
|
|
33
|
-
lastDblClickDetail.value = String(event.detail);
|
|
34
|
-
});
|
|
35
|
-
</script>
|
|
36
|
-
</body>
|
|
37
|
-
</html>`)}`;
|
|
38
|
-
test.describe("Locator and Page click methods", () => {
|
|
39
|
-
let v3;
|
|
40
|
-
test.beforeEach(async () => {
|
|
41
|
-
v3 = new V3(v3TestConfig);
|
|
42
|
-
await v3.init();
|
|
43
|
-
});
|
|
44
|
-
test.afterEach(async () => {
|
|
45
|
-
await v3?.close?.().catch(() => { });
|
|
46
|
-
});
|
|
47
|
-
test("locator.click() performs single click by default", async () => {
|
|
48
|
-
const page = v3.context.pages()[0];
|
|
49
|
-
await page.goto("https://browserbase.github.io/stagehand-eval-sites/sites/click-test/");
|
|
50
|
-
// Wait for page to be fully loaded
|
|
51
|
-
await page.waitForLoadState("domcontentloaded");
|
|
52
|
-
// Get initial count
|
|
53
|
-
const countDisplay = page.locator("#count");
|
|
54
|
-
const initialCount = await countDisplay.inputValue();
|
|
55
|
-
expect(initialCount).toBe("0");
|
|
56
|
-
// Perform single click on the textarea (the clickable area)
|
|
57
|
-
const clickArea = page.locator("#textarea");
|
|
58
|
-
await clickArea.click();
|
|
59
|
-
// Verify count incremented by 1
|
|
60
|
-
const newCount = await countDisplay.inputValue();
|
|
61
|
-
expect(newCount).toBe("1");
|
|
62
|
-
});
|
|
63
|
-
test("locator.click() with clickCount: 2 performs double-click", async () => {
|
|
64
|
-
const page = v3.context.pages()[0];
|
|
65
|
-
await page.goto(doubleClickFixtureUrl);
|
|
66
|
-
await page.waitForLoadState("domcontentloaded");
|
|
67
|
-
const countDisplay = page.locator("#clickCount");
|
|
68
|
-
const dcCountDisplay = page.locator("#dblClickCount");
|
|
69
|
-
const clickDetailDisplay = page.locator("#lastClickDetail");
|
|
70
|
-
const dblClickDetailDisplay = page.locator("#lastDblClickDetail");
|
|
71
|
-
const initialCount = await countDisplay.inputValue();
|
|
72
|
-
const initialDcCount = await dcCountDisplay.inputValue();
|
|
73
|
-
expect(initialCount).toBe("0");
|
|
74
|
-
expect(initialDcCount).toBe("0");
|
|
75
|
-
const clickArea = page.locator("#target");
|
|
76
|
-
await clickArea.click({ clickCount: 2 });
|
|
77
|
-
const newCount = await countDisplay.inputValue();
|
|
78
|
-
expect(newCount).toBe("2");
|
|
79
|
-
const newDcCount = await dcCountDisplay.inputValue();
|
|
80
|
-
expect(newDcCount).toBe("1");
|
|
81
|
-
// `dblclick` is the browser-level contract for double-click behavior.
|
|
82
|
-
// Verifying `detail=2` ensures the click sequence is recognized as a true multi-click.
|
|
83
|
-
expect(await clickDetailDisplay.inputValue()).toBe("2");
|
|
84
|
-
expect(await dblClickDetailDisplay.inputValue()).toBe("2");
|
|
85
|
-
});
|
|
86
|
-
test("locator.click() with clickCount: 3 performs triple-click", async () => {
|
|
87
|
-
const page = v3.context.pages()[0];
|
|
88
|
-
await page.goto("https://browserbase.github.io/stagehand-eval-sites/sites/click-test/");
|
|
89
|
-
// Wait for page to be fully loaded
|
|
90
|
-
await page.waitForLoadState("domcontentloaded");
|
|
91
|
-
const countDisplay = page.locator("#count");
|
|
92
|
-
const initialCount = await countDisplay.inputValue();
|
|
93
|
-
expect(initialCount).toBe("0");
|
|
94
|
-
// Perform triple-click on the textarea
|
|
95
|
-
const clickArea = page.locator("#textarea");
|
|
96
|
-
await clickArea.click({ clickCount: 3 });
|
|
97
|
-
// Verify count incremented by 3
|
|
98
|
-
const newCount = await countDisplay.inputValue();
|
|
99
|
-
expect(newCount).toBe("3");
|
|
100
|
-
});
|
|
101
|
-
test("page.click() performs single click with coordinates", async () => {
|
|
102
|
-
const page = v3.context.pages()[0];
|
|
103
|
-
await page.goto("https://browserbase.github.io/stagehand-eval-sites/sites/click-test/");
|
|
104
|
-
// Wait for page to be fully loaded
|
|
105
|
-
await page.waitForLoadState("domcontentloaded");
|
|
106
|
-
// Get initial count
|
|
107
|
-
const countDisplay = page.locator("#count");
|
|
108
|
-
const initialCount = await countDisplay.inputValue();
|
|
109
|
-
expect(initialCount).toBe("0");
|
|
110
|
-
// Get the centroid of the textarea to click
|
|
111
|
-
const clickArea = page.locator("#textarea");
|
|
112
|
-
const { x, y } = await clickArea.centroid();
|
|
113
|
-
// Perform single click using page.click() with coordinates
|
|
114
|
-
await page.click(x, y);
|
|
115
|
-
// Verify count incremented by 1
|
|
116
|
-
const newCount = await countDisplay.inputValue();
|
|
117
|
-
expect(newCount).toBe("1");
|
|
118
|
-
});
|
|
119
|
-
test("page.click() with clickCount: 2 performs double-click", async () => {
|
|
120
|
-
const page = v3.context.pages()[0];
|
|
121
|
-
await page.goto(doubleClickFixtureUrl);
|
|
122
|
-
await page.waitForLoadState("domcontentloaded");
|
|
123
|
-
const countDisplay = page.locator("#clickCount");
|
|
124
|
-
const dcCountDisplay = page.locator("#dblClickCount");
|
|
125
|
-
const clickDetailDisplay = page.locator("#lastClickDetail");
|
|
126
|
-
const dblClickDetailDisplay = page.locator("#lastDblClickDetail");
|
|
127
|
-
const initialCount = await countDisplay.inputValue();
|
|
128
|
-
const initialDcCount = await dcCountDisplay.inputValue();
|
|
129
|
-
expect(initialCount).toBe("0");
|
|
130
|
-
expect(initialDcCount).toBe("0");
|
|
131
|
-
const clickArea = page.locator("#target");
|
|
132
|
-
const { x, y } = await clickArea.centroid();
|
|
133
|
-
await page.click(x, y, { clickCount: 2 });
|
|
134
|
-
const newCount = await countDisplay.inputValue();
|
|
135
|
-
expect(newCount).toBe("2");
|
|
136
|
-
const newDcCount = await dcCountDisplay.inputValue();
|
|
137
|
-
expect(newDcCount).toBe("1");
|
|
138
|
-
// `dblclick` is the browser-level contract for double-click behavior.
|
|
139
|
-
// Verifying `detail=2` ensures the click sequence is recognized as a true multi-click.
|
|
140
|
-
expect(await clickDetailDisplay.inputValue()).toBe("2");
|
|
141
|
-
expect(await dblClickDetailDisplay.inputValue()).toBe("2");
|
|
142
|
-
});
|
|
143
|
-
test("page.click() with clickCount: 3 performs triple-click", async () => {
|
|
144
|
-
const page = v3.context.pages()[0];
|
|
145
|
-
await page.goto("https://browserbase.github.io/stagehand-eval-sites/sites/click-test/");
|
|
146
|
-
// Wait for page to be fully loaded
|
|
147
|
-
await page.waitForLoadState("domcontentloaded");
|
|
148
|
-
const countDisplay = page.locator("#count");
|
|
149
|
-
const initialCount = await countDisplay.inputValue();
|
|
150
|
-
expect(initialCount).toBe("0");
|
|
151
|
-
// Get the centroid of the textarea to click
|
|
152
|
-
const clickArea = page.locator("#textarea");
|
|
153
|
-
const { x, y } = await clickArea.centroid();
|
|
154
|
-
// Perform triple-click using page.click() with coordinates
|
|
155
|
-
await page.click(x, y, { clickCount: 3 });
|
|
156
|
-
// Verify count incremented by 3
|
|
157
|
-
const newCount = await countDisplay.inputValue();
|
|
158
|
-
expect(newCount).toBe("3");
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
//# sourceMappingURL=click-count.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"click-count.spec.js","sourceRoot":"","sources":["../../../../tests/integration/click-count.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,gEAAgE;AAChE,iFAAiF;AACjF,uFAAuF;AACvF,MAAM,qBAAqB,GAAG,kBAAkB,kBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA8B3D,CAAC,EAAE,CAAC;AAEZ,IAAI,CAAC,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IACnD,IAAI,EAAM,CAAC;IAEX,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;QACzB,EAAE,GAAG,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC;QAC1B,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,IAAI,CAAC,IAAI,CACb,sEAAsE,CACvE,CAAC;QAEF,mCAAmC;QACnC,MAAM,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAEhD,oBAAoB;QACpB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QACrD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE/B,4DAA4D;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;QAExB,gCAAgC;QAChC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAEhD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACtD,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC5D,MAAM,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAElE,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QACrD,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;QACzD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QAEzC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE3B,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;QACrD,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,sEAAsE;QACtE,uFAAuF;QACvF,MAAM,CAAC,MAAM,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,qBAAqB,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,IAAI,CAAC,IAAI,CACb,sEAAsE,CACvE,CAAC;QAEF,mCAAmC;QACnC,MAAM,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAEhD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QACrD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE/B,uCAAuC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QAEzC,gCAAgC;QAChC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,IAAI,CAAC,IAAI,CACb,sEAAsE,CACvE,CAAC;QAEF,mCAAmC;QACnC,MAAM,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAEhD,oBAAoB;QACpB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QACrD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE/B,4CAA4C;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;QAE5C,2DAA2D;QAC3D,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvB,gCAAgC;QAChC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAEhD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACtD,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC5D,MAAM,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAElE,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QACrD,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;QACzD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;QAE5C,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE3B,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;QACrD,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,sEAAsE;QACtE,uFAAuF;QACvF,MAAM,CAAC,MAAM,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,qBAAqB,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,IAAI,CAAC,IAAI,CACb,sEAAsE,CACvE,CAAC;QAEF,mCAAmC;QACnC,MAAM,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAEhD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QACrD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE/B,4CAA4C;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;QAE5C,2DAA2D;QAC3D,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QAE1C,gCAAgC;QAChC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../../lib/v3/v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\n\n// Keep double-click verification event-based and deterministic.\n// Time-delta counters (Date.now() between mousedowns) are flaky at ms boundaries\n// and can miss valid double-clicks when synthetic input lands in the same millisecond.\nconst doubleClickFixtureUrl = `data:text/html,${encodeURIComponent(`<!DOCTYPE html>\n<html>\n <body>\n <div id=\"target\" style=\"width: 240px; height: 120px; border: 1px solid #000;\">target</div>\n <input id=\"clickCount\" value=\"0\" readonly />\n <input id=\"dblClickCount\" value=\"0\" readonly />\n <input id=\"lastClickDetail\" value=\"0\" readonly />\n <input id=\"lastDblClickDetail\" value=\"0\" readonly />\n <script>\n const target = document.getElementById(\"target\");\n const clickCount = document.getElementById(\"clickCount\");\n const dblClickCount = document.getElementById(\"dblClickCount\");\n const lastClickDetail = document.getElementById(\"lastClickDetail\");\n const lastDblClickDetail = document.getElementById(\"lastDblClickDetail\");\n let clicks = 0;\n let dblClicks = 0;\n\n target.addEventListener(\"click\", (event) => {\n clicks += 1;\n clickCount.value = String(clicks);\n lastClickDetail.value = String(event.detail);\n });\n\n target.addEventListener(\"dblclick\", (event) => {\n dblClicks += 1;\n dblClickCount.value = String(dblClicks);\n lastDblClickDetail.value = String(event.detail);\n });\n </script>\n </body>\n</html>`)}`;\n\ntest.describe(\"Locator and Page click methods\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch(() => {});\n });\n\n test(\"locator.click() performs single click by default\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/\",\n );\n\n // Wait for page to be fully loaded\n await page.waitForLoadState(\"domcontentloaded\");\n\n // Get initial count\n const countDisplay = page.locator(\"#count\");\n const initialCount = await countDisplay.inputValue();\n expect(initialCount).toBe(\"0\");\n\n // Perform single click on the textarea (the clickable area)\n const clickArea = page.locator(\"#textarea\");\n await clickArea.click();\n\n // Verify count incremented by 1\n const newCount = await countDisplay.inputValue();\n expect(newCount).toBe(\"1\");\n });\n\n test(\"locator.click() with clickCount: 2 performs double-click\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(doubleClickFixtureUrl);\n await page.waitForLoadState(\"domcontentloaded\");\n\n const countDisplay = page.locator(\"#clickCount\");\n const dcCountDisplay = page.locator(\"#dblClickCount\");\n const clickDetailDisplay = page.locator(\"#lastClickDetail\");\n const dblClickDetailDisplay = page.locator(\"#lastDblClickDetail\");\n\n const initialCount = await countDisplay.inputValue();\n const initialDcCount = await dcCountDisplay.inputValue();\n expect(initialCount).toBe(\"0\");\n expect(initialDcCount).toBe(\"0\");\n\n const clickArea = page.locator(\"#target\");\n await clickArea.click({ clickCount: 2 });\n\n const newCount = await countDisplay.inputValue();\n expect(newCount).toBe(\"2\");\n\n const newDcCount = await dcCountDisplay.inputValue();\n expect(newDcCount).toBe(\"1\");\n // `dblclick` is the browser-level contract for double-click behavior.\n // Verifying `detail=2` ensures the click sequence is recognized as a true multi-click.\n expect(await clickDetailDisplay.inputValue()).toBe(\"2\");\n expect(await dblClickDetailDisplay.inputValue()).toBe(\"2\");\n });\n\n test(\"locator.click() with clickCount: 3 performs triple-click\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/\",\n );\n\n // Wait for page to be fully loaded\n await page.waitForLoadState(\"domcontentloaded\");\n\n const countDisplay = page.locator(\"#count\");\n const initialCount = await countDisplay.inputValue();\n expect(initialCount).toBe(\"0\");\n\n // Perform triple-click on the textarea\n const clickArea = page.locator(\"#textarea\");\n await clickArea.click({ clickCount: 3 });\n\n // Verify count incremented by 3\n const newCount = await countDisplay.inputValue();\n expect(newCount).toBe(\"3\");\n });\n\n test(\"page.click() performs single click with coordinates\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/\",\n );\n\n // Wait for page to be fully loaded\n await page.waitForLoadState(\"domcontentloaded\");\n\n // Get initial count\n const countDisplay = page.locator(\"#count\");\n const initialCount = await countDisplay.inputValue();\n expect(initialCount).toBe(\"0\");\n\n // Get the centroid of the textarea to click\n const clickArea = page.locator(\"#textarea\");\n const { x, y } = await clickArea.centroid();\n\n // Perform single click using page.click() with coordinates\n await page.click(x, y);\n\n // Verify count incremented by 1\n const newCount = await countDisplay.inputValue();\n expect(newCount).toBe(\"1\");\n });\n\n test(\"page.click() with clickCount: 2 performs double-click\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(doubleClickFixtureUrl);\n await page.waitForLoadState(\"domcontentloaded\");\n\n const countDisplay = page.locator(\"#clickCount\");\n const dcCountDisplay = page.locator(\"#dblClickCount\");\n const clickDetailDisplay = page.locator(\"#lastClickDetail\");\n const dblClickDetailDisplay = page.locator(\"#lastDblClickDetail\");\n\n const initialCount = await countDisplay.inputValue();\n const initialDcCount = await dcCountDisplay.inputValue();\n expect(initialCount).toBe(\"0\");\n expect(initialDcCount).toBe(\"0\");\n\n const clickArea = page.locator(\"#target\");\n const { x, y } = await clickArea.centroid();\n\n await page.click(x, y, { clickCount: 2 });\n\n const newCount = await countDisplay.inputValue();\n expect(newCount).toBe(\"2\");\n\n const newDcCount = await dcCountDisplay.inputValue();\n expect(newDcCount).toBe(\"1\");\n // `dblclick` is the browser-level contract for double-click behavior.\n // Verifying `detail=2` ensures the click sequence is recognized as a true multi-click.\n expect(await clickDetailDisplay.inputValue()).toBe(\"2\");\n expect(await dblClickDetailDisplay.inputValue()).toBe(\"2\");\n });\n\n test(\"page.click() with clickCount: 3 performs triple-click\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/\",\n );\n\n // Wait for page to be fully loaded\n await page.waitForLoadState(\"domcontentloaded\");\n\n const countDisplay = page.locator(\"#count\");\n const initialCount = await countDisplay.inputValue();\n expect(initialCount).toBe(\"0\");\n\n // Get the centroid of the textarea to click\n const clickArea = page.locator(\"#textarea\");\n const { x, y } = await clickArea.centroid();\n\n // Perform triple-click using page.click() with coordinates\n await page.click(x, y, { clickCount: 3 });\n\n // Verify count incremented by 3\n const newCount = await countDisplay.inputValue();\n expect(newCount).toBe(\"3\");\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { test, expect } from "@playwright/test";
|
|
2
|
-
import { V3 } from "../../lib/v3/v3.js";
|
|
3
|
-
import { v3DynamicTestConfig } from "./v3.dynamic.config.js";
|
|
4
|
-
import { closeV3 } from "./testUtils.js";
|
|
5
|
-
const PAGE_TARGET_COUNT = 5;
|
|
6
|
-
test.describe("connect to existing Browserbase session", () => {
|
|
7
|
-
test("new Stagehand instance reuses an existing Browserbase session", async () => {
|
|
8
|
-
const browserTarget = (process.env.STAGEHAND_BROWSER_TARGET ?? "local").toLowerCase();
|
|
9
|
-
const isBrowserbase = browserTarget === "browserbase";
|
|
10
|
-
test.skip(!isBrowserbase, "Requires STAGEHAND_BROWSER_TARGET=browserbase");
|
|
11
|
-
test.skip(!process.env.BROWSERBASE_API_KEY || !process.env.BROWSERBASE_PROJECT_ID, "BROWSERBASE credentials are required");
|
|
12
|
-
const initialStagehand = new V3({
|
|
13
|
-
...v3DynamicTestConfig,
|
|
14
|
-
disableAPI: true,
|
|
15
|
-
});
|
|
16
|
-
await initialStagehand.init();
|
|
17
|
-
let resumedStagehand = null;
|
|
18
|
-
try {
|
|
19
|
-
const ctx = initialStagehand.context;
|
|
20
|
-
const initialPage = ctx.pages()[0];
|
|
21
|
-
expect(initialPage).toBeDefined();
|
|
22
|
-
for (let i = 0; i < PAGE_TARGET_COUNT; i++) {
|
|
23
|
-
await ctx.newPage(`https://example.com/?tab=${i}`);
|
|
24
|
-
}
|
|
25
|
-
await initialPage?.close();
|
|
26
|
-
await expect
|
|
27
|
-
.poll(() => ctx.pages().length, { timeout: 15_000 })
|
|
28
|
-
.toBe(PAGE_TARGET_COUNT);
|
|
29
|
-
const sessionUrl = initialStagehand.connectURL();
|
|
30
|
-
expect(sessionUrl).toBeTruthy();
|
|
31
|
-
resumedStagehand = new V3({
|
|
32
|
-
env: "LOCAL",
|
|
33
|
-
verbose: 0,
|
|
34
|
-
disablePino: true,
|
|
35
|
-
disableAPI: true,
|
|
36
|
-
logger: v3DynamicTestConfig.logger,
|
|
37
|
-
localBrowserLaunchOptions: {
|
|
38
|
-
cdpUrl: sessionUrl,
|
|
39
|
-
},
|
|
40
|
-
});
|
|
41
|
-
await resumedStagehand.init();
|
|
42
|
-
await expect
|
|
43
|
-
.poll(() => resumedStagehand.context.pages().length, {
|
|
44
|
-
timeout: 15_000,
|
|
45
|
-
})
|
|
46
|
-
.toBe(PAGE_TARGET_COUNT);
|
|
47
|
-
const resumedPagesCount = resumedStagehand.context.pages().length;
|
|
48
|
-
expect(resumedPagesCount).toBe(PAGE_TARGET_COUNT);
|
|
49
|
-
}
|
|
50
|
-
finally {
|
|
51
|
-
await closeV3(resumedStagehand);
|
|
52
|
-
await closeV3(initialStagehand);
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
test("new Stagehand instance initializes when existing browser has zero pages", async () => {
|
|
56
|
-
const browserTarget = (process.env.STAGEHAND_BROWSER_TARGET ?? "local").toLowerCase();
|
|
57
|
-
const isLocal = browserTarget !== "browserbase";
|
|
58
|
-
test.skip(!isLocal, "Requires STAGEHAND_BROWSER_TARGET=local");
|
|
59
|
-
const initialStagehand = new V3({
|
|
60
|
-
...v3DynamicTestConfig,
|
|
61
|
-
disableAPI: true,
|
|
62
|
-
env: "LOCAL",
|
|
63
|
-
});
|
|
64
|
-
await initialStagehand.init();
|
|
65
|
-
let resumedStagehand = null;
|
|
66
|
-
try {
|
|
67
|
-
const ctx = initialStagehand.context;
|
|
68
|
-
const pages = ctx.pages();
|
|
69
|
-
for (const page of pages) {
|
|
70
|
-
await page.close();
|
|
71
|
-
}
|
|
72
|
-
await expect.poll(() => ctx.pages().length, { timeout: 15_000 }).toBe(0);
|
|
73
|
-
const sessionUrl = initialStagehand.connectURL();
|
|
74
|
-
resumedStagehand = new V3({
|
|
75
|
-
env: "LOCAL",
|
|
76
|
-
verbose: 0,
|
|
77
|
-
disablePino: true,
|
|
78
|
-
disableAPI: true,
|
|
79
|
-
logger: v3DynamicTestConfig.logger,
|
|
80
|
-
localBrowserLaunchOptions: {
|
|
81
|
-
cdpUrl: sessionUrl,
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
await resumedStagehand.init();
|
|
85
|
-
await expect
|
|
86
|
-
.poll(() => resumedStagehand.context.pages().length, {
|
|
87
|
-
timeout: 15_000,
|
|
88
|
-
})
|
|
89
|
-
.toBeGreaterThan(0);
|
|
90
|
-
}
|
|
91
|
-
finally {
|
|
92
|
-
await closeV3(resumedStagehand);
|
|
93
|
-
await closeV3(initialStagehand);
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
//# sourceMappingURL=connect-to-existing-browser.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connect-to-existing-browser.spec.js","sourceRoot":"","sources":["../../../../tests/integration/connect-to-existing-browser.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../../lib/v3/v3.js\";\nimport { v3DynamicTestConfig } from \"./v3.dynamic.config.js\";\nimport { closeV3 } from \"./testUtils.js\";\n\nconst PAGE_TARGET_COUNT = 5;\n\ntest.describe(\"connect to existing Browserbase session\", () => {\n test(\"new Stagehand instance reuses an existing Browserbase session\", async () => {\n const browserTarget = (\n process.env.STAGEHAND_BROWSER_TARGET ?? \"local\"\n ).toLowerCase();\n const isBrowserbase = browserTarget === \"browserbase\";\n test.skip(!isBrowserbase, \"Requires STAGEHAND_BROWSER_TARGET=browserbase\");\n test.skip(\n !process.env.BROWSERBASE_API_KEY || !process.env.BROWSERBASE_PROJECT_ID,\n \"BROWSERBASE credentials are required\",\n );\n\n const initialStagehand = new V3({\n ...v3DynamicTestConfig,\n disableAPI: true,\n });\n await initialStagehand.init();\n\n let resumedStagehand: V3 | null = null;\n\n try {\n const ctx = initialStagehand.context;\n const initialPage = ctx.pages()[0];\n expect(initialPage).toBeDefined();\n\n for (let i = 0; i < PAGE_TARGET_COUNT; i++) {\n await ctx.newPage(`https://example.com/?tab=${i}`);\n }\n\n await initialPage?.close();\n await expect\n .poll(() => ctx.pages().length, { timeout: 15_000 })\n .toBe(PAGE_TARGET_COUNT);\n\n const sessionUrl = initialStagehand.connectURL();\n expect(sessionUrl).toBeTruthy();\n\n resumedStagehand = new V3({\n env: \"LOCAL\",\n verbose: 0,\n disablePino: true,\n disableAPI: true,\n logger: v3DynamicTestConfig.logger,\n localBrowserLaunchOptions: {\n cdpUrl: sessionUrl,\n },\n });\n await resumedStagehand.init();\n\n await expect\n .poll(() => resumedStagehand!.context.pages().length, {\n timeout: 15_000,\n })\n .toBe(PAGE_TARGET_COUNT);\n\n const resumedPagesCount = resumedStagehand.context.pages().length;\n expect(resumedPagesCount).toBe(PAGE_TARGET_COUNT);\n } finally {\n await closeV3(resumedStagehand);\n await closeV3(initialStagehand);\n }\n });\n\n test(\"new Stagehand instance initializes when existing browser has zero pages\", async () => {\n const browserTarget = (\n process.env.STAGEHAND_BROWSER_TARGET ?? \"local\"\n ).toLowerCase();\n const isLocal = browserTarget !== \"browserbase\";\n test.skip(!isLocal, \"Requires STAGEHAND_BROWSER_TARGET=local\");\n\n const initialStagehand = new V3({\n ...v3DynamicTestConfig,\n disableAPI: true,\n env: \"LOCAL\",\n });\n await initialStagehand.init();\n\n let resumedStagehand: V3 | null = null;\n\n try {\n const ctx = initialStagehand.context;\n const pages = ctx.pages();\n for (const page of pages) {\n await page.close();\n }\n\n await expect.poll(() => ctx.pages().length, { timeout: 15_000 }).toBe(0);\n\n const sessionUrl = initialStagehand.connectURL();\n resumedStagehand = new V3({\n env: \"LOCAL\",\n verbose: 0,\n disablePino: true,\n disableAPI: true,\n logger: v3DynamicTestConfig.logger,\n localBrowserLaunchOptions: {\n cdpUrl: sessionUrl,\n },\n });\n\n await resumedStagehand.init();\n\n await expect\n .poll(() => resumedStagehand!.context.pages().length, {\n timeout: 15_000,\n })\n .toBeGreaterThan(0);\n } finally {\n await closeV3(resumedStagehand);\n await closeV3(initialStagehand);\n }\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|