craftdriver 1.7.0 → 1.9.0
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/CHANGELOG.md +25 -12
- package/README.md +16 -6
- package/dist/cli/agentSession.d.ts +62 -0
- package/dist/cli/agentSession.d.ts.map +1 -0
- package/dist/cli/agentSession.js +100 -0
- package/dist/cli/agentSession.js.map +1 -0
- package/dist/cli/artifactPaths.d.ts +42 -0
- package/dist/cli/artifactPaths.d.ts.map +1 -0
- package/dist/cli/artifactPaths.js +144 -0
- package/dist/cli/artifactPaths.js.map +1 -0
- package/dist/cli/bounds.d.ts +88 -0
- package/dist/cli/bounds.d.ts.map +1 -0
- package/dist/cli/bounds.js +128 -0
- package/dist/cli/bounds.js.map +1 -0
- package/dist/cli/client.d.ts +3 -0
- package/dist/cli/client.d.ts.map +1 -1
- package/dist/cli/client.js +24 -8
- package/dist/cli/client.js.map +1 -1
- package/dist/cli/daemon.d.ts +3 -0
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +152 -39
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/defaults.d.ts +23 -3
- package/dist/cli/defaults.d.ts.map +1 -1
- package/dist/cli/defaults.js +50 -5
- package/dist/cli/defaults.js.map +1 -1
- package/dist/cli/dispatcher.d.ts +54 -11
- package/dist/cli/dispatcher.d.ts.map +1 -1
- package/dist/cli/dispatcher.js +851 -54
- package/dist/cli/dispatcher.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +305 -56
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts +14 -14
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +328 -180
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/journal.d.ts +153 -0
- package/dist/cli/journal.d.ts.map +1 -0
- package/dist/cli/journal.js +252 -0
- package/dist/cli/journal.js.map +1 -0
- package/dist/cli/lineReader.d.ts +33 -0
- package/dist/cli/lineReader.d.ts.map +1 -0
- package/dist/cli/lineReader.js +66 -0
- package/dist/cli/lineReader.js.map +1 -0
- package/dist/cli/locatorCandidates.d.ts +44 -0
- package/dist/cli/locatorCandidates.d.ts.map +1 -0
- package/dist/cli/locatorCandidates.js +190 -0
- package/dist/cli/locatorCandidates.js.map +1 -0
- package/dist/cli/mcp/artifacts.d.ts +39 -1
- package/dist/cli/mcp/artifacts.d.ts.map +1 -1
- package/dist/cli/mcp/artifacts.js +104 -9
- package/dist/cli/mcp/artifacts.js.map +1 -1
- package/dist/cli/mcp/bounds.d.ts +65 -0
- package/dist/cli/mcp/bounds.d.ts.map +1 -0
- package/dist/cli/mcp/bounds.js +124 -0
- package/dist/cli/mcp/bounds.js.map +1 -0
- package/dist/cli/mcp/params.d.ts +38 -0
- package/dist/cli/mcp/params.d.ts.map +1 -0
- package/dist/cli/mcp/params.js +174 -0
- package/dist/cli/mcp/params.js.map +1 -0
- package/dist/cli/mcp/server.d.ts +94 -16
- package/dist/cli/mcp/server.d.ts.map +1 -1
- package/dist/cli/mcp/server.js +304 -150
- package/dist/cli/mcp/server.js.map +1 -1
- package/dist/cli/mcp/tools.d.ts +62 -17
- package/dist/cli/mcp/tools.d.ts.map +1 -1
- package/dist/cli/mcp/tools.js +373 -158
- package/dist/cli/mcp/tools.js.map +1 -1
- package/dist/cli/pageSemantics.d.ts +6 -0
- package/dist/cli/pageSemantics.d.ts.map +1 -0
- package/dist/cli/pageSemantics.js +6 -0
- package/dist/cli/pageSemantics.js.map +1 -0
- package/dist/cli/parseArgs.d.ts +6 -18
- package/dist/cli/parseArgs.d.ts.map +1 -1
- package/dist/cli/parseArgs.js +689 -45
- package/dist/cli/parseArgs.js.map +1 -1
- package/dist/cli/protocol.d.ts +8 -0
- package/dist/cli/protocol.d.ts.map +1 -1
- package/dist/cli/selector.d.ts +3 -3
- package/dist/cli/selector.d.ts.map +1 -1
- package/dist/cli/selector.js +6 -9
- package/dist/cli/selector.js.map +1 -1
- package/dist/cli/sessionRegistry.d.ts +42 -0
- package/dist/cli/sessionRegistry.d.ts.map +1 -0
- package/dist/cli/sessionRegistry.js +99 -0
- package/dist/cli/sessionRegistry.js.map +1 -0
- package/dist/cli/snapshot.d.ts +100 -19
- package/dist/cli/snapshot.d.ts.map +1 -1
- package/dist/cli/snapshot.js +295 -108
- package/dist/cli/snapshot.js.map +1 -1
- package/dist/cli/stateStore.d.ts +50 -0
- package/dist/cli/stateStore.d.ts.map +1 -0
- package/dist/cli/stateStore.js +122 -0
- package/dist/cli/stateStore.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/a11y.d.ts +6 -2
- package/dist/lib/a11y.d.ts.map +1 -1
- package/dist/lib/a11y.js +3 -1
- package/dist/lib/a11y.js.map +1 -1
- package/dist/lib/bidi/evaluate.d.ts +11 -0
- package/dist/lib/bidi/evaluate.d.ts.map +1 -0
- package/dist/lib/bidi/evaluate.js +25 -0
- package/dist/lib/bidi/evaluate.js.map +1 -0
- package/dist/lib/bidi/index.d.ts +1 -1
- package/dist/lib/bidi/index.d.ts.map +1 -1
- package/dist/lib/bidi/index.js +2 -2
- package/dist/lib/bidi/index.js.map +1 -1
- package/dist/lib/bidi/logs.d.ts +3 -0
- package/dist/lib/bidi/logs.d.ts.map +1 -1
- package/dist/lib/bidi/logs.js +7 -0
- package/dist/lib/bidi/logs.js.map +1 -1
- package/dist/lib/bidi/network.d.ts +14 -1
- package/dist/lib/bidi/network.d.ts.map +1 -1
- package/dist/lib/bidi/network.js +45 -7
- package/dist/lib/bidi/network.js.map +1 -1
- package/dist/lib/bidi/storage.d.ts +30 -6
- package/dist/lib/bidi/storage.d.ts.map +1 -1
- package/dist/lib/bidi/storage.js +190 -45
- package/dist/lib/bidi/storage.js.map +1 -1
- package/dist/lib/bidi/types.d.ts +9 -2
- package/dist/lib/bidi/types.d.ts.map +1 -1
- package/dist/lib/browser.d.ts +7 -4
- package/dist/lib/browser.d.ts.map +1 -1
- package/dist/lib/browser.js +186 -65
- package/dist/lib/browser.js.map +1 -1
- package/dist/lib/browserContext.d.ts +58 -24
- package/dist/lib/browserContext.d.ts.map +1 -1
- package/dist/lib/browserContext.js +300 -99
- package/dist/lib/browserContext.js.map +1 -1
- package/dist/lib/by.d.ts +68 -30
- package/dist/lib/by.d.ts.map +1 -1
- package/dist/lib/by.js +54 -23
- package/dist/lib/by.js.map +1 -1
- package/dist/lib/clearFastPath.d.ts.map +1 -1
- package/dist/lib/clearFastPath.js +2 -0
- package/dist/lib/clearFastPath.js.map +1 -1
- package/dist/lib/clickFastPath.d.ts.map +1 -1
- package/dist/lib/clickFastPath.js +2 -0
- package/dist/lib/clickFastPath.js.map +1 -1
- package/dist/lib/driver.d.ts +26 -0
- package/dist/lib/driver.d.ts.map +1 -1
- package/dist/lib/driver.js +123 -4
- package/dist/lib/driver.js.map +1 -1
- package/dist/lib/elementHandle.d.ts +13 -10
- package/dist/lib/elementHandle.d.ts.map +1 -1
- package/dist/lib/elementHandle.js +119 -50
- package/dist/lib/elementHandle.js.map +1 -1
- package/dist/lib/errors.d.ts +12 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +12 -0
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/expect.d.ts +10 -0
- package/dist/lib/expect.d.ts.map +1 -1
- package/dist/lib/expect.js +76 -49
- package/dist/lib/expect.js.map +1 -1
- package/dist/lib/fillFastPath.d.ts.map +1 -1
- package/dist/lib/fillFastPath.js +2 -0
- package/dist/lib/fillFastPath.js.map +1 -1
- package/dist/lib/frame.d.ts.map +1 -1
- package/dist/lib/frame.js +29 -17
- package/dist/lib/frame.js.map +1 -1
- package/dist/lib/initScript.d.ts +9 -0
- package/dist/lib/initScript.d.ts.map +1 -0
- package/dist/lib/initScript.js +14 -0
- package/dist/lib/initScript.js.map +1 -0
- package/dist/lib/locator.d.ts +21 -54
- package/dist/lib/locator.d.ts.map +1 -1
- package/dist/lib/locator.js +165 -208
- package/dist/lib/locator.js.map +1 -1
- package/dist/lib/page.d.ts +22 -0
- package/dist/lib/page.d.ts.map +1 -1
- package/dist/lib/page.js +71 -13
- package/dist/lib/page.js.map +1 -1
- package/dist/lib/pageSemantics.d.ts +42 -0
- package/dist/lib/pageSemantics.d.ts.map +1 -0
- package/dist/lib/pageSemantics.js +216 -0
- package/dist/lib/pageSemantics.js.map +1 -0
- package/dist/lib/query.d.ts +68 -0
- package/dist/lib/query.d.ts.map +1 -0
- package/dist/lib/query.js +590 -0
- package/dist/lib/query.js.map +1 -0
- package/dist/lib/secureFile.d.ts +8 -0
- package/dist/lib/secureFile.d.ts.map +1 -0
- package/dist/lib/secureFile.js +67 -0
- package/dist/lib/secureFile.js.map +1 -0
- package/dist/lib/sessionStateValidation.d.ts +35 -0
- package/dist/lib/sessionStateValidation.d.ts.map +1 -0
- package/dist/lib/sessionStateValidation.js +223 -0
- package/dist/lib/sessionStateValidation.js.map +1 -0
- package/dist/lib/shadowRoot.d.ts +21 -0
- package/dist/lib/shadowRoot.d.ts.map +1 -0
- package/dist/lib/shadowRoot.js +29 -0
- package/dist/lib/shadowRoot.js.map +1 -0
- package/dist/lib/shadowRootLocator.d.ts +31 -0
- package/dist/lib/shadowRootLocator.d.ts.map +1 -0
- package/dist/lib/shadowRootLocator.js +55 -0
- package/dist/lib/shadowRootLocator.js.map +1 -0
- package/dist/lib/timing.d.ts +2 -2
- package/dist/lib/timing.js +2 -2
- package/dist/lib/tracing.d.ts +2 -1
- package/dist/lib/tracing.d.ts.map +1 -1
- package/dist/lib/tracing.js +12 -1
- package/dist/lib/tracing.js.map +1 -1
- package/docs/accessibility.md +9 -1
- package/docs/agents.md +56 -61
- package/docs/api-reference.md +5 -1
- package/docs/browser-api.md +27 -7
- package/docs/browser-context.md +21 -15
- package/docs/cli.md +353 -30
- package/docs/error-codes.md +7 -4
- package/docs/getting-started.md +6 -1
- package/docs/index.md +1 -1
- package/docs/mcp.md +136 -65
- package/docs/public/examples/agent-actions.html +48 -0
- package/docs/public/examples/agent-debug.html +86 -0
- package/docs/public/examples/agent-late-mutation.html +18 -0
- package/docs/public/examples/agent-ref-shift.html +33 -0
- package/docs/public/examples/iframe-child.html +12 -1
- package/docs/public/examples/shadow-dom.html +137 -0
- package/docs/recipes/login-once-reuse-session.md +33 -5
- package/docs/selectors.md +61 -0
- package/docs/session-management.md +80 -12
- package/docs/why-craftdriver.md +1 -1
- package/package.json +5 -3
- package/skills/craftdriver/SKILL.md +59 -75
- package/skills/craftdriver/agents/openai.yaml +4 -0
- package/skills/craftdriver/cheatsheet.md +18 -4
- package/skills/craftdriver/cli.md +194 -68
- package/skills/craftdriver/patterns.md +17 -8
- package/skills/craftdriver/workflow.md +149 -0
package/dist/lib/tracing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/lib/tracing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AA6CvD,MAAM,OAAO,MAAM;IAqBP;
|
|
1
|
+
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/lib/tracing.ts"],"names":[],"mappings":"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"}
|
package/docs/accessibility.md
CHANGED
|
@@ -130,7 +130,12 @@ interface A11yViolation {
|
|
|
130
130
|
impact: 'minor' | 'moderate' | 'serious' | 'critical';
|
|
131
131
|
description: string;
|
|
132
132
|
helpUrl: string;
|
|
133
|
-
nodes: Array<{
|
|
133
|
+
nodes: Array<{
|
|
134
|
+
// A nested string[] is axe's selector path through open shadow roots.
|
|
135
|
+
target: Array<string | [string, string, ...string[]]>;
|
|
136
|
+
html: string;
|
|
137
|
+
failureSummary: string;
|
|
138
|
+
}>;
|
|
134
139
|
}
|
|
135
140
|
```
|
|
136
141
|
|
|
@@ -175,3 +180,6 @@ a `window` flag so subsequent audits in the same document skip the
|
|
|
175
180
|
inject step). The audit itself uses Classic WebDriver
|
|
176
181
|
`execute/async` so the underlying `axe.run()` promise is awaited
|
|
177
182
|
before the result is shipped back — works with or without BiDi.
|
|
183
|
+
axe-core traverses open Shadow DOM itself. CraftDriver preserves axe's nested
|
|
184
|
+
cross-tree selector paths in `node.target`; closed roots remain outside the
|
|
185
|
+
audit, matching axe-core's support boundary.
|
package/docs/agents.md
CHANGED
|
@@ -1,24 +1,37 @@
|
|
|
1
1
|
# AI Agent Guide
|
|
2
2
|
|
|
3
|
-
CraftDriver
|
|
3
|
+
CraftDriver's recommended agent surface is the CLI plus a project-local skill.
|
|
4
|
+
The agent explores the running application, learns its DOM and accessibility
|
|
5
|
+
structure, validates durable selectors, and then writes and runs ordinary
|
|
6
|
+
CraftDriver tests. MCP is optional.
|
|
4
7
|
|
|
5
|
-
##
|
|
8
|
+
## Install safely
|
|
6
9
|
|
|
7
|
-
|
|
8
|
-
| -------------------------- | ------------------ | -------------------------------------------------------------------------------- |
|
|
9
|
-
| Shell-capable coding agent | CLI | Simple commands, persistent daemon, JSON output when piped. |
|
|
10
|
-
| MCP-aware host | MCP server | Typed tools, compact accessibility snapshots, artifact spilling for screenshots. |
|
|
11
|
-
| Code-writing assistant | `craftdriver init` | Project rules teach selector preference, auto-waiting, and error-code handling. |
|
|
12
|
-
| Custom orchestrator | Skill pack | Small always-on `SKILL.md` with deeper references loaded on demand. |
|
|
10
|
+
From a project that already has a `package.json`:
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
```bash
|
|
13
|
+
npm install --save-dev craftdriver
|
|
14
|
+
npx craftdriver init codex
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
This installs `.agents/skills/craftdriver/` with an ownership manifest. It does
|
|
18
|
+
not read or change `AGENTS.md`, `CLAUDE.md`, Copilot instructions, Cursor rules,
|
|
19
|
+
`GEMINI.md`, or `.codex/config.toml`. It refuses user-edited, unowned, extra, or
|
|
20
|
+
symlinked destination content instead of overwriting it.
|
|
15
21
|
|
|
16
|
-
|
|
22
|
+
Preview without writes:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npx craftdriver init codex --dry-run
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Explore, then write the test
|
|
17
29
|
|
|
18
30
|
```bash
|
|
19
31
|
npx craftdriver daemon start
|
|
20
32
|
npx craftdriver go http://127.0.0.1:8080/login.html
|
|
21
33
|
npx craftdriver snapshot
|
|
34
|
+
npx craftdriver find 'label=Username' --all
|
|
22
35
|
npx craftdriver fill 'label=Username' alice
|
|
23
36
|
npx craftdriver fill 'label=Password' hunter2
|
|
24
37
|
npx craftdriver click 'role=button[name=Sign in]'
|
|
@@ -26,67 +39,49 @@ npx craftdriver text '#result'
|
|
|
26
39
|
npx craftdriver daemon stop
|
|
27
40
|
```
|
|
28
41
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
42
|
+
The daemon keeps the page and cookies between commands. Snapshot refs are
|
|
43
|
+
ephemeral exploration state in the current release: take a fresh snapshot
|
|
44
|
+
immediately before one ref action, and never copy `ref=eN` into a test. Validate
|
|
45
|
+
role/name, label, test ID, text, or stable CSS selectors against the live page,
|
|
46
|
+
then use those durable locators in test source.
|
|
34
47
|
|
|
35
|
-
|
|
48
|
+
The daemon uses a Unix socket and is not available on Windows. Windows agents
|
|
49
|
+
should use the optional MCP server for a persistent session, or run the whole
|
|
50
|
+
flow as one `craftdriver --ephemeral` script.
|
|
36
51
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
```jsonc
|
|
42
|
-
{
|
|
43
|
-
"mcpServers": {
|
|
44
|
-
"craftdriver": {
|
|
45
|
-
"command": "npx",
|
|
46
|
-
"args": ["-y", "craftdriver", "mcp"],
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
}
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
Mutating tools return compact accessibility snapshot diffs, so the agent can see what changed without a separate read. Large artifacts such as screenshots are written to disk instead of inlined into model context.
|
|
52
|
+
The installed `workflow.md` guides the full loop: inspect existing project test
|
|
53
|
+
conventions, explore, validate selectors, write the smallest test, run the
|
|
54
|
+
focused command, and debug from fresh browser evidence.
|
|
53
55
|
|
|
54
|
-
Read the
|
|
56
|
+
Read the [CLI reference](./cli.md) for all current commands.
|
|
55
57
|
|
|
56
|
-
##
|
|
58
|
+
## Optional MCP
|
|
57
59
|
|
|
58
|
-
|
|
60
|
+
CLI + Skill does not require MCP. For a host that prefers structured tool
|
|
61
|
+
calls, print the local project-pinned configuration:
|
|
59
62
|
|
|
60
63
|
```bash
|
|
61
|
-
npx craftdriver init
|
|
62
|
-
npx craftdriver init copilot
|
|
63
|
-
npx craftdriver init claude
|
|
64
|
-
npx craftdriver init cursor
|
|
65
|
-
npx craftdriver init gemini
|
|
66
|
-
npx craftdriver init all
|
|
64
|
+
npx craftdriver init codex --mcp
|
|
67
65
|
```
|
|
68
66
|
|
|
69
|
-
The
|
|
67
|
+
The command prints:
|
|
70
68
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
## Skill Pack
|
|
78
|
-
|
|
79
|
-
The npm tarball includes a tiered skill pack under `skills/craftdriver/`:
|
|
69
|
+
```toml
|
|
70
|
+
[mcp_servers.craftdriver]
|
|
71
|
+
command = "npx"
|
|
72
|
+
args = ["--no-install", "craftdriver", "mcp"]
|
|
73
|
+
```
|
|
80
74
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
| `cheatsheet.md` | Fast command and API reference for tests. |
|
|
85
|
-
| `patterns.md` | Worked recipes such as login, uploads, network waits, a11y, tracing, and virtual time. |
|
|
86
|
-
| `cli.md` | Agent-facing CLI reference. |
|
|
75
|
+
Add it manually to the host configuration. CraftDriver never reads or writes
|
|
76
|
+
that configuration. See the [MCP reference](./mcp.md) for the current optional
|
|
77
|
+
tool surface and protocol bounds.
|
|
87
78
|
|
|
88
|
-
|
|
79
|
+
## Installed skill files
|
|
89
80
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
81
|
+
| File | Purpose |
|
|
82
|
+
| --- | --- |
|
|
83
|
+
| `SKILL.md` | Short browser-to-test rules and routing. |
|
|
84
|
+
| `workflow.md` | Exploration, selector validation, test authoring, and debugging loop. |
|
|
85
|
+
| `cli.md` | Current shell command reference for agent exploration. |
|
|
86
|
+
| `cheatsheet.md` | Public TypeScript API reference for writing tests. |
|
|
87
|
+
| `patterns.md` | Focused library recipes loaded on demand. |
|
package/docs/api-reference.md
CHANGED
|
@@ -30,6 +30,7 @@ Find page content with semantic locators and selector helpers.
|
|
|
30
30
|
|---|---|---|---|
|
|
31
31
|
| `By` | class | — | [selectors](selectors.md) |
|
|
32
32
|
| `Locator` | class | — | [selectors](selectors.md) |
|
|
33
|
+
| `ShadowRootLocator` | class | Lazy, explicit search context for one open ShadowRoot. | [selectors](selectors.md) |
|
|
33
34
|
|
|
34
35
|
## Input
|
|
35
36
|
|
|
@@ -149,6 +150,8 @@ Run axe-core accessibility checks and inspect violation details.
|
|
|
149
150
|
| `A11yImpact` | type | Severity buckets reported by axe-core. | [accessibility](accessibility.md) |
|
|
150
151
|
| `A11yOptions` | type | — | [accessibility](accessibility.md) |
|
|
151
152
|
| `A11yResult` | type | — | [accessibility](accessibility.md) |
|
|
153
|
+
| `A11yShadowSelector` | type | axe-core selector path through one or more open shadow boundaries. | [accessibility](accessibility.md) |
|
|
154
|
+
| `A11yTarget` | type | A light-DOM selector or axe-core's nested selector path for Shadow DOM. | [accessibility](accessibility.md) |
|
|
152
155
|
| `A11yViolation` | type | — | [accessibility](accessibility.md) |
|
|
153
156
|
| `A11yViolationNode` | type | — | [accessibility](accessibility.md) |
|
|
154
157
|
|
|
@@ -183,5 +186,6 @@ Exports that are public but not yet assigned to a feature group.
|
|
|
183
186
|
| `PageMatcher` | type | Selects a top-level page by `url` and/or `title` for {@link Browser.waitForPage}. A string matches as a substring; a `RegExp` is tested. When both fields are given, both must match. | [browser-api](browser-api.md) |
|
|
184
187
|
| `RemoteAuth` | type | — | — |
|
|
185
188
|
| `RemoteWebDriverOptions` | type | Options for connecting to any W3C-compatible remote WebDriver endpoint — a self-hosted Selenium Grid, BrowserStack, or another cloud provider. Provider-specific detail (BrowserStack's `bstack:options`, etc.) is forwarded through `capabilities` without schema conversion. | — |
|
|
189
|
+
| `SessionStateCookie` | type | — | — |
|
|
186
190
|
|
|
187
|
-
Total exports: **
|
|
191
|
+
Total exports: **97**.
|
package/docs/browser-api.md
CHANGED
|
@@ -19,7 +19,7 @@ const browser = await Browser.launch({ browserName: 'chrome' });
|
|
|
19
19
|
// With pre-loaded session state
|
|
20
20
|
const browser = await Browser.launch({
|
|
21
21
|
browserName: 'chrome',
|
|
22
|
-
storageState: '
|
|
22
|
+
storageState: '.auth/session.json',
|
|
23
23
|
});
|
|
24
24
|
```
|
|
25
25
|
|
|
@@ -29,7 +29,7 @@ const browser = await Browser.launch({
|
|
|
29
29
|
|--------|------|---------|-------------|
|
|
30
30
|
| `browserName` | `'chrome' \| 'chromium' \| 'firefox' \| 'safari'`; any non-empty `string` remotely | `'chrome'` | Local browser to launch or provider-facing remote browser name |
|
|
31
31
|
| `enableBiDi` | `boolean` | browsers: `true`; Electron: `false` | Use WebDriver BiDi. Electron requires an explicit opt-in because negotiation resets its initial renderer to `about:blank`. |
|
|
32
|
-
| `storageState` | `string` | — |
|
|
32
|
+
| `storageState` | `string \| SessionState` | — | Native session-state path/object. Full cookies + multi-origin localStorage on supported BiDi; non-empty state is rejected at Classic launch. |
|
|
33
33
|
| `mobileEmulation` | `MobileEmulation \| DeviceName` | — | Mobile device emulation settings (Chrome/Chromium only) |
|
|
34
34
|
| `downloadsDir` | `string` | temp dir | Directory where downloaded files are saved |
|
|
35
35
|
| `browserPath` | `string` | — | Custom browser binary to launch (Chrome/Chromium/Firefox) — see [Driver Configuration → Browser Binary Configuration](./driver-configuration.md#browser-binary-configuration) |
|
|
@@ -334,9 +334,20 @@ await popup.waitForLoadState('load');
|
|
|
334
334
|
const heading = await popup.find('h1').text();
|
|
335
335
|
console.log(heading);
|
|
336
336
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
337
|
+
// Close it. Prefer this over `popup.evaluate(() => window.close())`, which
|
|
338
|
+
// leaves no window focused — every later command then fails with
|
|
339
|
+
// "no such window". `close()` switches to a surviving page for you.
|
|
340
|
+
await popup.close();
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
Use `page.activate()` to make a page the target of browser-level helpers.
|
|
344
|
+
Most page methods switch to their window and switch back, so they never
|
|
345
|
+
disturb `browser.activePage()`; `activate()` is the deliberate exception:
|
|
346
|
+
|
|
347
|
+
```ts
|
|
348
|
+
const [, second] = await browser.pages();
|
|
349
|
+
await second.activate();
|
|
350
|
+
await browser.click('#confirm'); // acts on the second tab
|
|
340
351
|
```
|
|
341
352
|
|
|
342
353
|
> **Note.** `browser.openPage()` requires BiDi (the default). In Classic
|
|
@@ -374,12 +385,21 @@ See [Session Management](./session-management.md) for full details.
|
|
|
374
385
|
const storage = browser.storage;
|
|
375
386
|
|
|
376
387
|
// Save current session to file
|
|
377
|
-
await browser.saveState('
|
|
388
|
+
await browser.saveState('.auth/session.json');
|
|
378
389
|
|
|
379
390
|
// Load session from file
|
|
380
|
-
await browser.loadState('
|
|
391
|
+
await browser.loadState('.auth/session.json');
|
|
392
|
+
|
|
393
|
+
// Or use an in-memory SessionState object
|
|
394
|
+
await browser.loadState(await browser.storage.getState());
|
|
381
395
|
```
|
|
382
396
|
|
|
397
|
+
On Chrome/Chromium and Firefox BiDi, launch and `browser.loadState()` restore
|
|
398
|
+
cookies plus multi-origin localStorage before the first real navigation. In
|
|
399
|
+
Classic mode, launch rejects non-empty state; navigate to the sole origin, call
|
|
400
|
+
`browser.loadState()`, then reload. See
|
|
401
|
+
[Session Management](./session-management.md#browser-and-transport-support).
|
|
402
|
+
|
|
383
403
|
## Evaluate
|
|
384
404
|
|
|
385
405
|
Run JavaScript in the page and get the result back. Useful for reading app state,
|
package/docs/browser-context.md
CHANGED
|
@@ -80,13 +80,13 @@ await page.find('#submit').click();
|
|
|
80
80
|
await page.expect('#welcome').toBeVisible();
|
|
81
81
|
|
|
82
82
|
// Cookies + localStorage for every origin the context has visited.
|
|
83
|
-
await ctx.saveStorageState('auth/alice.json');
|
|
83
|
+
await ctx.saveStorageState('.auth/alice.json');
|
|
84
84
|
await browser.quit();
|
|
85
85
|
```
|
|
86
86
|
|
|
87
87
|
```typescript
|
|
88
88
|
// every other test:
|
|
89
|
-
const ctx = await browser.newContext({ storageState: 'auth/alice.json' });
|
|
89
|
+
const ctx = await browser.newContext({ storageState: '.auth/alice.json' });
|
|
90
90
|
const page = await ctx.newPage({ url: 'https://app.example.com/dashboard' });
|
|
91
91
|
// Already logged in — no form, no waiting.
|
|
92
92
|
```
|
|
@@ -120,9 +120,8 @@ Create a new isolated user context. Backed by BiDi
|
|
|
120
120
|
`browser.createUserContext`. Throws in Classic mode.
|
|
121
121
|
|
|
122
122
|
- `opts.storageState`: a `SessionState` object **or** a path to a JSON
|
|
123
|
-
file produced by `BrowserContext.saveStorageState()`. Cookies
|
|
124
|
-
|
|
125
|
-
each captured origin via an internal preload script.
|
|
123
|
+
file produced by `BrowserContext.saveStorageState()`. Cookies and every
|
|
124
|
+
captured localStorage origin are restored before `newContext()` resolves.
|
|
126
125
|
- `opts.baseURL`: a base URL applied to every relative `url` passed to
|
|
127
126
|
`ctx.newPage()` or `page.navigateTo()` inside the context. Absolute
|
|
128
127
|
URLs pass through unchanged. Lets your tests say `'/login'` instead
|
|
@@ -136,7 +135,7 @@ Create a new isolated user context. Backed by BiDi
|
|
|
136
135
|
const ctx = await browser.newContext({
|
|
137
136
|
baseURL: 'https://staging.example.com',
|
|
138
137
|
extraHTTPHeaders: { 'x-test-tenant': 'acme', 'x-staging-token': process.env.STAGING_TOKEN! },
|
|
139
|
-
storageState: 'auth/alice.json',
|
|
138
|
+
storageState: '.auth/alice.json',
|
|
140
139
|
});
|
|
141
140
|
const page = await ctx.newPage({ url: '/dashboard' }); // resolves against baseURL
|
|
142
141
|
```
|
|
@@ -230,11 +229,17 @@ snapshot for inspection. See the auth-fixture example above.
|
|
|
230
229
|
### `BrowserContext.loadStorageState(source): Promise<void>`
|
|
231
230
|
|
|
232
231
|
Apply a previously-captured snapshot. `source` is a `SessionState`
|
|
233
|
-
object or a path to JSON produced by `saveStorageState`.
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
232
|
+
object or a path to JSON produced by `saveStorageState`. localStorage is
|
|
233
|
+
seeded once per captured origin through a private, locally fulfilled document;
|
|
234
|
+
cookies are then applied to the same user-context partition. The method resolves
|
|
235
|
+
after hydration and cleanup, so the first real page script sees the state.
|
|
236
|
+
Calling `loadStorageState` again applies another ordered overlay; application
|
|
237
|
+
changes remain owned by the application and survive reload.
|
|
238
|
+
|
|
239
|
+
Restores in one context are serialized. Different user contexts may restore in
|
|
240
|
+
parallel. A runtime protocol failure on an existing context throws
|
|
241
|
+
`DRIVER_ERROR` with `detail.phase` and `detail.partialApplied`; use a newly
|
|
242
|
+
created context when failure isolation is required.
|
|
238
243
|
|
|
239
244
|
### `BrowserContext.close(): Promise<void>`
|
|
240
245
|
|
|
@@ -479,10 +484,11 @@ A default `browser.newContext()` (no options) is always cross-browser.
|
|
|
479
484
|
|
|
480
485
|
A few things that aren't bugs but bite if you don't know them:
|
|
481
486
|
|
|
482
|
-
- **`storageState` covers cookies + localStorage only.** Not
|
|
483
|
-
sessionStorage,
|
|
484
|
-
|
|
485
|
-
|
|
487
|
+
- **`storageState` covers cookies + localStorage only.** Not reusable
|
|
488
|
+
sessionStorage, IndexedDB, or Cache Storage. A non-empty sessionStorage
|
|
489
|
+
section is rejected by context/launch APIs rather than ignored. Use the
|
|
490
|
+
active-page `browser.loadState()` fallback for one matching sessionStorage
|
|
491
|
+
origin, or a custom login step.
|
|
486
492
|
- **Browser-level vs context-level emulation race.** `browser.setGeolocation(...)`
|
|
487
493
|
is a session-wide override; `ctx.setGeolocation(...)` is a per-context
|
|
488
494
|
override. If both are set, the context-level one wins inside the
|