craftdriver 1.8.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.
Files changed (108) hide show
  1. package/CHANGELOG.md +6 -5
  2. package/README.md +3 -2
  3. package/dist/cli/pageSemantics.d.ts +3 -39
  4. package/dist/cli/pageSemantics.d.ts.map +1 -1
  5. package/dist/cli/pageSemantics.js +3 -191
  6. package/dist/cli/pageSemantics.js.map +1 -1
  7. package/dist/cli/selector.d.ts +3 -3
  8. package/dist/cli/selector.d.ts.map +1 -1
  9. package/dist/cli/selector.js +6 -9
  10. package/dist/cli/selector.js.map +1 -1
  11. package/dist/cli/snapshot.d.ts +5 -6
  12. package/dist/cli/snapshot.d.ts.map +1 -1
  13. package/dist/cli/snapshot.js +59 -18
  14. package/dist/cli/snapshot.js.map +1 -1
  15. package/dist/index.d.ts +2 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +1 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/lib/a11y.d.ts +6 -2
  20. package/dist/lib/a11y.d.ts.map +1 -1
  21. package/dist/lib/a11y.js +3 -1
  22. package/dist/lib/a11y.js.map +1 -1
  23. package/dist/lib/bidi/evaluate.d.ts +11 -0
  24. package/dist/lib/bidi/evaluate.d.ts.map +1 -0
  25. package/dist/lib/bidi/evaluate.js +25 -0
  26. package/dist/lib/bidi/evaluate.js.map +1 -0
  27. package/dist/lib/bidi/types.d.ts +2 -0
  28. package/dist/lib/bidi/types.d.ts.map +1 -1
  29. package/dist/lib/browser.d.ts +1 -1
  30. package/dist/lib/browser.d.ts.map +1 -1
  31. package/dist/lib/browser.js +46 -35
  32. package/dist/lib/browser.js.map +1 -1
  33. package/dist/lib/browserContext.d.ts +4 -6
  34. package/dist/lib/browserContext.d.ts.map +1 -1
  35. package/dist/lib/browserContext.js +5 -7
  36. package/dist/lib/browserContext.js.map +1 -1
  37. package/dist/lib/by.d.ts +65 -27
  38. package/dist/lib/by.d.ts.map +1 -1
  39. package/dist/lib/by.js +47 -20
  40. package/dist/lib/by.js.map +1 -1
  41. package/dist/lib/clearFastPath.d.ts.map +1 -1
  42. package/dist/lib/clearFastPath.js +2 -0
  43. package/dist/lib/clearFastPath.js.map +1 -1
  44. package/dist/lib/clickFastPath.d.ts.map +1 -1
  45. package/dist/lib/clickFastPath.js +2 -0
  46. package/dist/lib/clickFastPath.js.map +1 -1
  47. package/dist/lib/driver.d.ts +19 -0
  48. package/dist/lib/driver.d.ts.map +1 -1
  49. package/dist/lib/driver.js +111 -4
  50. package/dist/lib/driver.js.map +1 -1
  51. package/dist/lib/elementHandle.d.ts +13 -10
  52. package/dist/lib/elementHandle.d.ts.map +1 -1
  53. package/dist/lib/elementHandle.js +119 -50
  54. package/dist/lib/elementHandle.js.map +1 -1
  55. package/dist/lib/errors.d.ts +5 -1
  56. package/dist/lib/errors.d.ts.map +1 -1
  57. package/dist/lib/errors.js +5 -1
  58. package/dist/lib/errors.js.map +1 -1
  59. package/dist/lib/expect.d.ts +10 -0
  60. package/dist/lib/expect.d.ts.map +1 -1
  61. package/dist/lib/expect.js +76 -49
  62. package/dist/lib/expect.js.map +1 -1
  63. package/dist/lib/fillFastPath.d.ts.map +1 -1
  64. package/dist/lib/fillFastPath.js +2 -0
  65. package/dist/lib/fillFastPath.js.map +1 -1
  66. package/dist/lib/frame.d.ts.map +1 -1
  67. package/dist/lib/frame.js +29 -17
  68. package/dist/lib/frame.js.map +1 -1
  69. package/dist/lib/locator.d.ts +21 -54
  70. package/dist/lib/locator.d.ts.map +1 -1
  71. package/dist/lib/locator.js +165 -208
  72. package/dist/lib/locator.js.map +1 -1
  73. package/dist/lib/page.d.ts.map +1 -1
  74. package/dist/lib/page.js +23 -13
  75. package/dist/lib/page.js.map +1 -1
  76. package/dist/lib/pageSemantics.d.ts +42 -0
  77. package/dist/lib/pageSemantics.d.ts.map +1 -0
  78. package/dist/lib/pageSemantics.js +216 -0
  79. package/dist/lib/pageSemantics.js.map +1 -0
  80. package/dist/lib/query.d.ts +68 -0
  81. package/dist/lib/query.d.ts.map +1 -0
  82. package/dist/lib/query.js +590 -0
  83. package/dist/lib/query.js.map +1 -0
  84. package/dist/lib/shadowRoot.d.ts +21 -0
  85. package/dist/lib/shadowRoot.d.ts.map +1 -0
  86. package/dist/lib/shadowRoot.js +29 -0
  87. package/dist/lib/shadowRoot.js.map +1 -0
  88. package/dist/lib/shadowRootLocator.d.ts +31 -0
  89. package/dist/lib/shadowRootLocator.d.ts.map +1 -0
  90. package/dist/lib/shadowRootLocator.js +55 -0
  91. package/dist/lib/shadowRootLocator.js.map +1 -0
  92. package/dist/lib/timing.d.ts +2 -2
  93. package/dist/lib/timing.js +2 -2
  94. package/docs/accessibility.md +9 -1
  95. package/docs/api-reference.md +4 -1
  96. package/docs/browser-api.md +3 -3
  97. package/docs/browser-context.md +3 -3
  98. package/docs/cli.md +10 -7
  99. package/docs/error-codes.md +3 -1
  100. package/docs/getting-started.md +1 -1
  101. package/docs/mcp.md +9 -5
  102. package/docs/public/examples/iframe-child.html +12 -1
  103. package/docs/public/examples/shadow-dom.html +137 -0
  104. package/docs/recipes/login-once-reuse-session.md +1 -1
  105. package/docs/selectors.md +61 -0
  106. package/docs/session-management.md +17 -10
  107. package/package.json +3 -3
  108. package/skills/craftdriver/patterns.md +3 -0
@@ -13,14 +13,21 @@ the best available WebDriver transport for the browser you launched.
13
13
  not a promise of Playwright JSON compatibility and does not include IndexedDB,
14
14
  Cache Storage, service workers, or reusable sessionStorage.
15
15
 
16
+ State files contain live session cookies. Keep them in a dedicated ignored
17
+ directory:
18
+
19
+ ```text
20
+ .auth/
21
+ ```
22
+
16
23
  ## Saving Session State
17
24
 
18
25
  ```typescript
19
26
  // Save all cookies and localStorage to a file
20
- await browser.saveState('./session.json');
27
+ await browser.saveState('.auth/session.json');
21
28
 
22
29
  // Save with options
23
- await browser.saveState('./session.json', {
30
+ await browser.saveState('.auth/session.json', {
24
31
  includeCookies: true, // default: true
25
32
  includeLocalStorage: true, // default: true
26
33
  includeSessionStorage: false, // default: false
@@ -55,7 +62,7 @@ The saved file contains:
55
62
 
56
63
  ```typescript
57
64
  // Load state into current browser
58
- await browser.loadState('./session.json');
65
+ await browser.loadState('.auth/session.json');
59
66
 
60
67
  // Paths and in-memory state objects are equivalent
61
68
  await browser.loadState(await browser.storage.getState());
@@ -82,7 +89,7 @@ The most common pattern - launch a browser with existing session:
82
89
  ```typescript
83
90
  const browser = await Browser.launch({
84
91
  browserName: 'chrome',
85
- storageState: './session.json',
92
+ storageState: '.auth/session.json',
86
93
  });
87
94
 
88
95
  // Navigate directly to authenticated page
@@ -117,7 +124,7 @@ fallback instead:
117
124
  ```typescript
118
125
  const browser = await Browser.launch({ enableBiDi: false });
119
126
  await browser.navigateTo('https://example.com');
120
- await browser.loadState('./session.json');
127
+ await browser.loadState('.auth/session.json');
121
128
  await browser.reload(); // the app can now read the restored state
122
129
  ```
123
130
 
@@ -195,10 +202,10 @@ async function generateAuth() {
195
202
  await browser.expect('#dashboard').toBeVisible();
196
203
 
197
204
  // Save the authenticated state
198
- await browser.saveState('./auth.json');
205
+ await browser.saveState('.auth/session.json');
199
206
 
200
207
  await browser.quit();
201
- console.log('Auth state saved to auth.json');
208
+ console.log('Auth state saved to .auth/session.json');
202
209
  }
203
210
 
204
211
  generateAuth();
@@ -218,7 +225,7 @@ describe('Dashboard', () => {
218
225
  // Launch with saved auth - already logged in!
219
226
  browser = await Browser.launch({
220
227
  browserName: 'chrome',
221
- storageState: './auth.json',
228
+ storageState: '.auth/session.json',
222
229
  });
223
230
  });
224
231
 
@@ -257,13 +264,13 @@ async function testLoginPersistence() {
257
264
  await browser.click('#submit');
258
265
  await browser.expect('#welcome').toBeVisible();
259
266
 
260
- await browser.saveState('./session.json');
267
+ await browser.saveState('.auth/session.json');
261
268
  await browser.quit();
262
269
 
263
270
  // Second browser: Load state and verify logged in
264
271
  browser = await Browser.launch({
265
272
  browserName: 'chrome',
266
- storageState: './session.json',
273
+ storageState: '.auth/session.json',
267
274
  });
268
275
 
269
276
  await browser.navigateTo('http://localhost:3000/login');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "craftdriver",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "description": "Modern WebDriver automation library for NodeJS",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -14,7 +14,7 @@
14
14
  "lint": "eslint . --ext .ts",
15
15
  "format": "prettier --write .",
16
16
  "test": "HEADLESS=true vitest run",
17
- "test:firefox": "BROWSER_NAME=firefox HEADLESS=true vitest run --maxWorkers=2",
17
+ "test:firefox": "BROWSER_NAME=firefox HEADLESS=true vitest run",
18
18
  "test:chrome": "BROWSER_NAME=chrome vitest run",
19
19
  "test:chromium": "BROWSER_NAME=chromium vitest run",
20
20
  "test:safari": "BROWSER_NAME=safari vitest run tests/safari.test.ts --maxWorkers=1",
@@ -110,7 +110,7 @@
110
110
  "yazl": "^3.3.1"
111
111
  },
112
112
  "overrides": {
113
- "brace-expansion": "5.0.6",
113
+ "brace-expansion": "5.0.7",
114
114
  "ip-address": "10.1.1",
115
115
  "npm": "^11.18.0",
116
116
  "undici": "7.28.0",
@@ -4,6 +4,9 @@ Worked recipes, each kept compact. Load on demand from [SKILL.md](SKILL.md).
4
4
 
5
5
  ## 1. Login, save storage state for reuse
6
6
 
7
+ Add `.auth/` to the consuming project's `.gitignore`; these files contain live
8
+ session cookies even though CraftDriver writes them with restricted permissions.
9
+
7
10
  ```ts
8
11
  const browser = await Browser.launch();
9
12
  await browser.navigateTo('https://app.example.com/login');