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
@@ -0,0 +1,590 @@
1
+ import { CraftdriverError, ErrorCode } from './errors.js';
2
+ import { PAGE_SEMANTICS_JS } from './pageSemantics.js';
3
+ import { ClassicShadowRoot } from './shadowRoot.js';
4
+ export function createLocatorPlan(by, root = { kind: 'document' }) {
5
+ return { root, by, index: null, filterText: null, filterHas: null };
6
+ }
7
+ export function cloneLocatorPlan(plan) {
8
+ return {
9
+ ...plan,
10
+ root: cloneRootPlan(plan.root),
11
+ filterHas: plan.filterHas ? cloneLocatorPlan(plan.filterHas) : null,
12
+ };
13
+ }
14
+ function cloneTargetPlan(target) {
15
+ return target.kind === 'fixed'
16
+ ? target
17
+ : { kind: 'locator', plan: cloneLocatorPlan(target.plan) };
18
+ }
19
+ function cloneRootPlan(root) {
20
+ if (root.kind === 'document')
21
+ return root;
22
+ if (root.kind === 'element')
23
+ return { kind: 'element', target: cloneTargetPlan(root.target) };
24
+ return { kind: 'shadow', host: cloneTargetPlan(root.host) };
25
+ }
26
+ function sameFilterText(left, right) {
27
+ if (left === right)
28
+ return true;
29
+ return left instanceof RegExp && right instanceof RegExp &&
30
+ left.source === right.source && left.flags === right.flags;
31
+ }
32
+ function sameBy(left, right) {
33
+ return left === right || (left.using === right.using &&
34
+ left.value === right.value &&
35
+ JSON.stringify(left.descriptor) === JSON.stringify(right.descriptor));
36
+ }
37
+ function sameTargetPlan(left, right) {
38
+ if (left.kind !== right.kind)
39
+ return false;
40
+ if (left.kind === 'fixed' && right.kind === 'fixed') {
41
+ return left.element.getId() === right.element.getId();
42
+ }
43
+ return left.kind === 'locator' && right.kind === 'locator' &&
44
+ sameLocatorPlan(left.plan, right.plan);
45
+ }
46
+ function sameRootPlan(left, right) {
47
+ if (left.kind !== right.kind)
48
+ return false;
49
+ if (left.kind === 'document' && right.kind === 'document')
50
+ return true;
51
+ if (left.kind === 'element' && right.kind === 'element') {
52
+ return sameTargetPlan(left.target, right.target);
53
+ }
54
+ return left.kind === 'shadow' && right.kind === 'shadow' &&
55
+ sameTargetPlan(left.host, right.host);
56
+ }
57
+ function sameLocatorPlan(left, right) {
58
+ return sameRootPlan(left.root, right.root) &&
59
+ sameBy(left.by, right.by) &&
60
+ left.index === right.index &&
61
+ sameFilterText(left.filterText, right.filterText) &&
62
+ (left.filterHas === right.filterHas ||
63
+ (left.filterHas !== null && right.filterHas !== null &&
64
+ sameLocatorPlan(left.filterHas, right.filterHas)));
65
+ }
66
+ function rebaseTarget(target, base, origin) {
67
+ if (target.kind === 'fixed')
68
+ return target;
69
+ return { kind: 'locator', plan: rebaseLocatorPlan(target.plan, base, origin) };
70
+ }
71
+ function rebaseRoot(root, base, origin) {
72
+ if (origin && sameRootPlan(root, origin))
73
+ return base;
74
+ if (root.kind === 'document')
75
+ return base;
76
+ if (root.kind === 'element') {
77
+ return { kind: 'element', target: rebaseTarget(root.target, base, origin) };
78
+ }
79
+ return { kind: 'shadow', host: rebaseTarget(root.host, base, origin) };
80
+ }
81
+ /** Rebase a locator used by `filter({ has })` beneath the candidate element. */
82
+ export function rebaseLocatorPlan(plan, base, origin) {
83
+ return {
84
+ ...plan,
85
+ root: rebaseRoot(plan.root, base, origin),
86
+ filterHas: plan.filterHas ? rebaseLocatorPlan(plan.filterHas, base, origin) : null,
87
+ };
88
+ }
89
+ export function describeTarget(target) {
90
+ return target.kind === 'fixed' ? `element#${target.element.getId()}` : describeLocatorPlan(target.plan);
91
+ }
92
+ export function describeRoot(root) {
93
+ if (root.kind === 'document')
94
+ return '';
95
+ if (root.kind === 'element')
96
+ return `${describeTarget(root.target)} -> `;
97
+ return `${describeTarget(root.host)} -> shadowRoot() -> `;
98
+ }
99
+ export function describeBy(by) {
100
+ const descriptor = by.descriptor;
101
+ if (!descriptor)
102
+ return `${by.using}=${by.value}`;
103
+ if (descriptor.kind === 'role') {
104
+ return descriptor.options.name === undefined
105
+ ? `role=${JSON.stringify(descriptor.role)}`
106
+ : `role=${JSON.stringify(descriptor.role)}[name=${JSON.stringify(descriptor.options.name)}]`;
107
+ }
108
+ if (descriptor.kind === 'text')
109
+ return `text=${JSON.stringify(descriptor.value)}`;
110
+ if (descriptor.kind === 'label')
111
+ return `label=${JSON.stringify(descriptor.value)}`;
112
+ if (descriptor.kind === 'placeholder')
113
+ return `placeholder=${JSON.stringify(descriptor.value)}`;
114
+ if (descriptor.kind === 'alt')
115
+ return `alt=${JSON.stringify(descriptor.value)}`;
116
+ if (descriptor.kind === 'title')
117
+ return `title=${JSON.stringify(descriptor.value)}`;
118
+ if (descriptor.kind === 'linkText') {
119
+ return `${descriptor.partial ? 'partial link text' : 'link text'}=${JSON.stringify(descriptor.value)}`;
120
+ }
121
+ return `${by.using}=${by.value}`;
122
+ }
123
+ export function describeLocatorPlan(plan) {
124
+ let description = `${describeRoot(plan.root)}${describeBy(plan.by)}`;
125
+ if (plan.filterText !== null)
126
+ description += ` -> filter(hasText=${String(plan.filterText)})`;
127
+ if (plan.filterHas)
128
+ description += ` -> filter(has=${describeLocatorPlan(plan.filterHas)})`;
129
+ if (plan.index === 'last')
130
+ description += ' -> last()';
131
+ else if (typeof plan.index === 'number')
132
+ description += ` -> nth(${plan.index})`;
133
+ return description;
134
+ }
135
+ export function isTerminalQueryError(error) {
136
+ if (CraftdriverError.is(error, ErrorCode.NO_OPEN_SHADOW_ROOT) ||
137
+ CraftdriverError.is(error, ErrorCode.UNSUPPORTED))
138
+ return true;
139
+ if (!CraftdriverError.is(error, ErrorCode.DRIVER_ERROR))
140
+ return false;
141
+ const wire = error.detail?.webDriverError;
142
+ return wire !== 'no such element' &&
143
+ wire !== 'stale element reference' &&
144
+ wire !== 'detached shadow root';
145
+ }
146
+ export function isDetachedShadowError(error) {
147
+ return CraftdriverError.is(error, ErrorCode.DETACHED_SHADOW_ROOT);
148
+ }
149
+ /** Attach retry diagnostics when detachment remained the terminal outcome. */
150
+ export function withShadowRetryAttempts(error, attempts) {
151
+ if (!isDetachedShadowError(error))
152
+ return error;
153
+ return new CraftdriverError(error.code, error.message, {
154
+ detail: { ...(error.detail ?? {}), attempts },
155
+ cause: error,
156
+ hint: error.hint,
157
+ });
158
+ }
159
+ function shadowError(code, message, queryPath, transport, cause, extraDetail) {
160
+ return new CraftdriverError(code, message, {
161
+ detail: { queryPath, transport, ...extraDetail },
162
+ cause,
163
+ hint: code === ErrorCode.NO_OPEN_SHADOW_ROOT
164
+ ? 'Verify the host is correct and that the component attaches its root with mode: "open".'
165
+ : 'The component replaced or detached its shadow tree; use a stable host locator and retry the action.',
166
+ });
167
+ }
168
+ function mapClassicShadowError(error, queryPath, phase) {
169
+ if (CraftdriverError.is(error, ErrorCode.DRIVER_ERROR)) {
170
+ const wire = error.detail?.webDriverError;
171
+ if (wire === 'unknown command' || wire === 'unsupported operation') {
172
+ throw new CraftdriverError(ErrorCode.UNSUPPORTED, `WebDriver Classic does not support Shadow DOM ${phase === 'open' ? 'root access' : 'lookup'} at ${queryPath}`, {
173
+ detail: {
174
+ feature: 'shadow-dom',
175
+ transport: 'classic',
176
+ operation: phase === 'open' ? 'open-root' : 'find-from-root',
177
+ queryPath,
178
+ webDriverError: wire,
179
+ },
180
+ cause: error,
181
+ });
182
+ }
183
+ if (wire === 'no such shadow root') {
184
+ throw shadowError(phase === 'open' ? ErrorCode.NO_OPEN_SHADOW_ROOT : ErrorCode.DETACHED_SHADOW_ROOT, phase === 'open'
185
+ ? `No open shadow root is attached at ${queryPath}`
186
+ : `Shadow root detached while resolving ${queryPath}`, queryPath, 'classic', error);
187
+ }
188
+ if (wire === 'detached shadow root' || wire === 'stale element reference') {
189
+ throw shadowError(ErrorCode.DETACHED_SHADOW_ROOT, `Shadow root detached while resolving ${queryPath}`, queryPath, 'classic', error);
190
+ }
191
+ }
192
+ throw error;
193
+ }
194
+ function isUnsupportedBidiError(error) {
195
+ const text = error instanceof Error ? error.message.toLowerCase() : String(error).toLowerCase();
196
+ return (text.includes('unknown command') ||
197
+ text.includes('unsupported operation') ||
198
+ text.includes('method not found') ||
199
+ text.includes('invalid argument') && text.includes('sharedid'));
200
+ }
201
+ function isDetachedBidiError(error) {
202
+ const text = error instanceof Error ? error.message.toLowerCase() : String(error).toLowerCase();
203
+ return text.includes('no such node') || text.includes('stale') || text.includes('detached');
204
+ }
205
+ function bidiDriverError(error, operation, queryPath, contextId) {
206
+ return new CraftdriverError(ErrorCode.DRIVER_ERROR, `WebDriver BiDi ${operation} failed while resolving ${queryPath}: ${error instanceof Error ? error.message : String(error)}`, {
207
+ detail: {
208
+ feature: 'shadow-dom',
209
+ transport: 'bidi',
210
+ operation,
211
+ queryPath,
212
+ contextId,
213
+ },
214
+ cause: error,
215
+ });
216
+ }
217
+ /** Internal signal: discard the BiDi root id and restart the complete plan through Classic. */
218
+ class RetryWithClassicShadowQuery extends Error {
219
+ }
220
+ function fallBackToClassicShadowQueries(driver, operation) {
221
+ if (!driver.disableBiDiShadowQueries())
222
+ return;
223
+ console.warn(`[craftdriver] WebDriver BiDi Shadow DOM ${operation} is unavailable; ` +
224
+ 'using WebDriver Classic shadow-root commands for this session.');
225
+ }
226
+ function remoteNodeSharedIds(value) {
227
+ if (!value)
228
+ return [];
229
+ if (value.type === 'node') {
230
+ return typeof value.sharedId === 'string' ? [value.sharedId] : [];
231
+ }
232
+ if (value.type === 'array' || value.type === 'set') {
233
+ return (value.value ?? []).flatMap((entry) => remoteNodeSharedIds(entry));
234
+ }
235
+ return [];
236
+ }
237
+ const SEMANTIC_QUERY_BODY = `
238
+ ${PAGE_SEMANTICS_JS}
239
+ function normalized(value, options) {
240
+ let result = value == null ? '' : String(value);
241
+ if (options && options.trim !== false) result = result.trim().replace(/\\s+/g, ' ');
242
+ if (options && options.caseSensitive === false) result = result.toLowerCase();
243
+ return result;
244
+ }
245
+ function matchesValue(actual, expected, options) {
246
+ const left = normalized(actual, options);
247
+ const right = normalized(expected, options);
248
+ return options && options.exact === false ? left.includes(right) : left === right;
249
+ }
250
+ function matchesAttribute(actual, expected, options) {
251
+ return matchesValue(actual, expected, Object.assign({}, options, {
252
+ trim: false,
253
+ caseSensitive: true
254
+ }));
255
+ }
256
+ function composedParent(el) {
257
+ if (el.parentElement) return el.parentElement;
258
+ const tree = el.getRootNode ? el.getRootNode() : null;
259
+ return tree && tree.host ? tree.host : null;
260
+ }
261
+ function ariaHiddenInScope(el) {
262
+ for (let current = el; current; current = composedParent(current)) {
263
+ if (current.hidden || current.getAttribute('aria-hidden') === 'true') return true;
264
+ }
265
+ return false;
266
+ }
267
+ function matches(el) {
268
+ if (query.kind === 'text') {
269
+ return matchesValue(el.textContent || '', query.value, query.options);
270
+ }
271
+ if (query.kind === 'role') {
272
+ if (ariaRole(el) !== query.role) return false;
273
+ if (!query.options.includeHidden && ariaHiddenInScope(el)) return false;
274
+ if (query.options.name) return matchesValue(accName(el), query.options.name, query.options);
275
+ return true;
276
+ }
277
+ if (query.kind === 'label') {
278
+ return matchesValue(associatedLabel(el) || '', query.value, query.options);
279
+ }
280
+ if (query.kind === 'placeholder') {
281
+ const tag = el.tagName.toLowerCase();
282
+ return (tag === 'input' || tag === 'textarea') &&
283
+ matchesAttribute(el.getAttribute('placeholder') || '', query.value, query.options);
284
+ }
285
+ if (query.kind === 'alt') {
286
+ const tag = el.tagName.toLowerCase();
287
+ const supported = tag === 'img' || tag === 'area' ||
288
+ (tag === 'input' && (el.getAttribute('type') || '').toLowerCase() === 'image');
289
+ return supported && matchesAttribute(el.getAttribute('alt') || '', query.value, query.options);
290
+ }
291
+ if (query.kind === 'title') {
292
+ return el.hasAttribute('title') &&
293
+ matchesAttribute(el.getAttribute('title') || '', query.value, query.options);
294
+ }
295
+ if (query.kind === 'linkText') {
296
+ return el.tagName.toLowerCase() === 'a' && matchesValue(el.innerText || '', query.value, {
297
+ exact: !query.partial,
298
+ trim: true,
299
+ caseSensitive: true
300
+ });
301
+ }
302
+ return false;
303
+ }
304
+ const candidates = Array.from(root.querySelectorAll('*'));
305
+ const matched = candidates.filter(matches);
306
+ if (query.kind !== 'text') return matched;
307
+ return matched.filter((candidate) => !Array.from(candidate.querySelectorAll('*')).some(matches));
308
+ `;
309
+ const CLASSIC_SEMANTIC_SCRIPT = `
310
+ const root = arguments[0];
311
+ const query = arguments[1];
312
+ ${SEMANTIC_QUERY_BODY}
313
+ `;
314
+ // The function source is static. User-controlled locator values cross the
315
+ // protocol boundary as a string argument and are parsed strictly as data.
316
+ const BIDI_SEMANTIC_FUNCTION = `(root, queryJson) => {
317
+ const query = JSON.parse(queryJson);
318
+ ${SEMANTIC_QUERY_BODY}
319
+ }
320
+ `;
321
+ export class QueryEnvironment {
322
+ driver;
323
+ contextSwitcher;
324
+ bidiProvider;
325
+ constructor(driver, options) {
326
+ this.driver = driver;
327
+ this.contextSwitcher = options?.contextSwitcher;
328
+ this.bidiProvider = options?.bidiProvider;
329
+ }
330
+ setContextSwitcher(switcher) {
331
+ this.contextSwitcher = switcher;
332
+ }
333
+ setBiDiProvider(provider) {
334
+ this.bidiProvider = provider;
335
+ }
336
+ async withContext(operation) {
337
+ if (!this.contextSwitcher)
338
+ return operation();
339
+ await this.contextSwitcher.in();
340
+ try {
341
+ return await operation();
342
+ }
343
+ finally {
344
+ await this.contextSwitcher.out();
345
+ }
346
+ }
347
+ async resolveTarget(target) {
348
+ if (target.kind === 'fixed')
349
+ return target.element;
350
+ const plan = target.plan;
351
+ if (plan.root.kind === 'document' &&
352
+ plan.index === null &&
353
+ plan.filterText === null &&
354
+ plan.filterHas === null) {
355
+ // Preserve ElementHandle's established singular lookup path. Besides
356
+ // avoiding an unnecessary array response, this matters to lightweight
357
+ // WebDriver intermediaries that implement /element but not /elements.
358
+ try {
359
+ return await this.driver.findElement(plan.by);
360
+ }
361
+ catch (error) {
362
+ if (CraftdriverError.is(error, ErrorCode.NO_MATCH) ||
363
+ (CraftdriverError.is(error, ErrorCode.DRIVER_ERROR) &&
364
+ error.detail?.webDriverError === 'no such element'))
365
+ return null;
366
+ throw error;
367
+ }
368
+ }
369
+ const elements = await this.resolveAll(target.plan);
370
+ return elements[0] ?? null;
371
+ }
372
+ async resolveAll(plan) {
373
+ let elements;
374
+ try {
375
+ const root = await this.resolveRoot(plan.root);
376
+ if (!root)
377
+ return [];
378
+ elements = await this.findFromRoot(root, plan.by, describeLocatorPlan(plan));
379
+ }
380
+ catch (error) {
381
+ if (error instanceof RetryWithClassicShadowQuery)
382
+ return this.resolveAll(plan);
383
+ throw error;
384
+ }
385
+ if (plan.filterText !== null) {
386
+ const pattern = plan.filterText;
387
+ const texts = await Promise.all(elements.map((element) => element.getText()));
388
+ elements = elements.filter((_, index) => {
389
+ if (pattern instanceof RegExp) {
390
+ pattern.lastIndex = 0;
391
+ return pattern.test(texts[index]);
392
+ }
393
+ return texts[index].includes(pattern);
394
+ });
395
+ }
396
+ if (plan.filterHas) {
397
+ const kept = [];
398
+ for (const element of elements) {
399
+ const rebased = rebaseLocatorPlan(plan.filterHas, {
400
+ kind: 'element',
401
+ target: { kind: 'fixed', element },
402
+ }, plan.root);
403
+ if ((await this.resolveAll(rebased)).length > 0)
404
+ kept.push(element);
405
+ }
406
+ elements = kept;
407
+ }
408
+ if (plan.index === 'last')
409
+ return elements.length ? [elements[elements.length - 1]] : [];
410
+ if (typeof plan.index === 'number')
411
+ return elements[plan.index] ? [elements[plan.index]] : [];
412
+ return elements;
413
+ }
414
+ async resolveRoot(plan) {
415
+ if (plan.kind === 'document')
416
+ return { kind: 'document' };
417
+ if (plan.kind === 'element') {
418
+ const element = await this.resolveTarget(plan.target);
419
+ return element ? { kind: 'element', element } : null;
420
+ }
421
+ const host = await this.resolveTarget(plan.host);
422
+ if (!host)
423
+ return null;
424
+ return this.openShadowRoot(host, `${describeTarget(plan.host)} -> shadowRoot()`);
425
+ }
426
+ async openShadowRoot(host, queryPath) {
427
+ const bidi = this.driver.canUseBiDiShadowQueries() ? this.bidiProvider?.() : undefined;
428
+ if (bidi) {
429
+ try {
430
+ const response = await bidi.connection.send('script.callFunction', {
431
+ functionDeclaration: '(host) => host.shadowRoot',
432
+ awaitPromise: false,
433
+ target: { context: bidi.contextId },
434
+ arguments: [{ sharedId: host.getId() }],
435
+ resultOwnership: 'none',
436
+ });
437
+ if (response.type === 'exception') {
438
+ throw new Error(response.exceptionDetails?.text ?? 'BiDi shadow-root getter threw');
439
+ }
440
+ if (!response.result || response.result.type === 'null') {
441
+ throw shadowError(ErrorCode.NO_OPEN_SHADOW_ROOT, `No open shadow root is attached at ${queryPath}`, queryPath, 'bidi', undefined, { host: describeTarget({ kind: 'fixed', element: host }), contextId: bidi.contextId });
442
+ }
443
+ if (response.result.type !== 'node' || typeof response.result.sharedId !== 'string') {
444
+ throw new Error('BiDi returned a shadow root without a sharedId');
445
+ }
446
+ return {
447
+ kind: 'bidiShadow',
448
+ sharedId: response.result.sharedId,
449
+ contextId: bidi.contextId,
450
+ connection: bidi.connection,
451
+ };
452
+ }
453
+ catch (error) {
454
+ if (isTerminalQueryError(error))
455
+ throw error;
456
+ if (isUnsupportedBidiError(error) || String(error).includes('without a sharedId')) {
457
+ fallBackToClassicShadowQueries(this.driver, 'root access');
458
+ }
459
+ else if (isDetachedBidiError(error)) {
460
+ throw shadowError(ErrorCode.DETACHED_SHADOW_ROOT, `Shadow host detached while resolving ${queryPath}`, queryPath, 'bidi', error, { contextId: bidi.contextId });
461
+ }
462
+ else {
463
+ throw bidiDriverError(error, 'open-root', queryPath, bidi.contextId);
464
+ }
465
+ }
466
+ }
467
+ try {
468
+ const root = await this.driver.executeScript('return arguments[0].shadowRoot;', [host]);
469
+ if (root === null) {
470
+ throw shadowError(ErrorCode.NO_OPEN_SHADOW_ROOT, `No open shadow root is attached at ${queryPath}`, queryPath, 'classic');
471
+ }
472
+ if (!(root instanceof ClassicShadowRoot)) {
473
+ // Some remote ends expose the public getter but do not serialize a
474
+ // ShadowRoot returned by Execute Script. The getter above is still the
475
+ // open/closed privacy gate; only after it succeeds may we use the
476
+ // dedicated W3C get-root endpoint.
477
+ return { kind: 'classicShadow', root: await this.driver.getElementShadowRoot(host) };
478
+ }
479
+ return { kind: 'classicShadow', root };
480
+ }
481
+ catch (error) {
482
+ if (CraftdriverError.is(error, ErrorCode.NO_OPEN_SHADOW_ROOT))
483
+ throw error;
484
+ if (CraftdriverError.is(error, ErrorCode.DRIVER_ERROR) &&
485
+ error.detail?.webDriverError !== 'stale element reference' &&
486
+ error.detail?.webDriverError !== 'detached shadow root' &&
487
+ error.detail?.webDriverError !== 'no such shadow root') {
488
+ // A few intermediaries cannot serialize a ShadowRoot as an Execute
489
+ // Script result. Re-check the public getter as a boolean privacy gate,
490
+ // then use the dedicated W3C endpoint.
491
+ try {
492
+ const exposed = await this.driver.executeScript('return arguments[0].shadowRoot !== null;', [host]);
493
+ if (!exposed) {
494
+ throw shadowError(ErrorCode.NO_OPEN_SHADOW_ROOT, `No open shadow root is attached at ${queryPath}`, queryPath, 'classic', error);
495
+ }
496
+ return { kind: 'classicShadow', root: await this.driver.getElementShadowRoot(host) };
497
+ }
498
+ catch (fallbackError) {
499
+ if (CraftdriverError.is(fallbackError, ErrorCode.NO_OPEN_SHADOW_ROOT)) {
500
+ throw fallbackError;
501
+ }
502
+ return mapClassicShadowError(fallbackError, queryPath, 'open');
503
+ }
504
+ }
505
+ return mapClassicShadowError(error, queryPath, 'open');
506
+ }
507
+ }
508
+ async findFromRoot(root, by, queryPath) {
509
+ if (root.kind === 'document')
510
+ return this.driver.findElements(by);
511
+ if (root.kind === 'element')
512
+ return root.element.findElements(by);
513
+ if (root.kind === 'classicShadow') {
514
+ try {
515
+ if (needsSemanticEvaluation(by.descriptor)) {
516
+ return await this.driver.executeScript(CLASSIC_SEMANTIC_SCRIPT, [
517
+ root.root,
518
+ by.descriptor,
519
+ ]);
520
+ }
521
+ return await root.root.findElements(by);
522
+ }
523
+ catch (error) {
524
+ return mapClassicShadowError(error, queryPath, 'query');
525
+ }
526
+ }
527
+ try {
528
+ if (needsSemanticEvaluation(by.descriptor)) {
529
+ return this.findSemanticFromBidiRoot(root, by.descriptor);
530
+ }
531
+ const descriptor = by.descriptor;
532
+ const locator = descriptor?.kind === 'css'
533
+ ? { type: 'css', value: descriptor.value }
534
+ : descriptor?.kind === 'xpath'
535
+ ? { type: 'xpath', value: descriptor.value }
536
+ : by.using === 'css selector'
537
+ ? { type: 'css', value: by.value }
538
+ : by.using === 'xpath'
539
+ ? { type: 'xpath', value: by.value }
540
+ : null;
541
+ if (!locator) {
542
+ // Link-text and custom wire strategies are consistently evaluated by
543
+ // the shared page function rather than translated approximately.
544
+ const fallbackDescriptor = descriptor ?? { kind: 'linkText', value: by.value, partial: by.using === 'partial link text' };
545
+ return this.findSemanticFromBidiRoot(root, fallbackDescriptor);
546
+ }
547
+ const response = await root.connection.send('browsingContext.locateNodes', {
548
+ context: root.contextId,
549
+ locator,
550
+ startNodes: [{ sharedId: root.sharedId }],
551
+ });
552
+ return (response.nodes ?? [])
553
+ .flatMap((node) => remoteNodeSharedIds(node))
554
+ .map((id) => this.driver.webElementFromId(id));
555
+ }
556
+ catch (error) {
557
+ if (isUnsupportedBidiError(error)) {
558
+ fallBackToClassicShadowQueries(this.driver, 'descendant lookup');
559
+ // Re-open from the host through Classic. One attempt never combines a
560
+ // BiDi root id with a Classic find-from-shadow operation.
561
+ throw new RetryWithClassicShadowQuery(`Retry ${queryPath} through Classic after unsupported BiDi lookup`, { cause: error });
562
+ }
563
+ if (isDetachedBidiError(error)) {
564
+ throw shadowError(ErrorCode.DETACHED_SHADOW_ROOT, `Shadow root detached while resolving ${queryPath}`, queryPath, 'bidi', error, { contextId: root.contextId });
565
+ }
566
+ throw bidiDriverError(error, 'locate-nodes', queryPath, root.contextId);
567
+ }
568
+ }
569
+ async findSemanticFromBidiRoot(root, descriptor) {
570
+ const response = await root.connection.send('script.callFunction', {
571
+ functionDeclaration: BIDI_SEMANTIC_FUNCTION,
572
+ awaitPromise: false,
573
+ target: { context: root.contextId },
574
+ arguments: [
575
+ { sharedId: root.sharedId },
576
+ { type: 'string', value: JSON.stringify(descriptor) },
577
+ ],
578
+ resultOwnership: 'none',
579
+ serializationOptions: { maxObjectDepth: 1 },
580
+ });
581
+ if (response.type === 'exception') {
582
+ throw new Error(response.exceptionDetails?.text ?? 'BiDi semantic shadow query threw');
583
+ }
584
+ return remoteNodeSharedIds(response.result).map((id) => this.driver.webElementFromId(id));
585
+ }
586
+ }
587
+ function needsSemanticEvaluation(descriptor) {
588
+ return !!descriptor && descriptor.kind !== 'css' && descriptor.kind !== 'xpath';
589
+ }
590
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/lib/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { By } from './by.js';
2
+ import type { Driver } from './driver.js';
3
+ import type { WebElement } from './webelement.js';
4
+ /** W3C WebDriver shadow-root reference key. */
5
+ export declare const W3C_SHADOW_ROOT_KEY = "shadow-6066-11e4-a52e-4f735466cecf";
6
+ /**
7
+ * A WebDriver Classic shadow-root search context.
8
+ *
9
+ * This is intentionally internal. The public API exposes the lazy
10
+ * `ShadowRootLocator`, not a cacheable wire reference that can detach.
11
+ */
12
+ export declare class ClassicShadowRoot {
13
+ private driver;
14
+ private shadowRootId;
15
+ constructor(driver: Driver, shadowRootId: string);
16
+ getId(): string;
17
+ findElement(locator: By): Promise<WebElement>;
18
+ findElements(locator: By): Promise<WebElement[]>;
19
+ toJSON(): Record<string, string>;
20
+ }
21
+ //# sourceMappingURL=shadowRoot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadowRoot.d.ts","sourceRoot":"","sources":["../../src/lib/shadowRoot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,+CAA+C;AAC/C,eAAO,MAAM,mBAAmB,uCAAuC,CAAC;AAExE;;;;;GAKG;AACH,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;gBADZ,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM;IAG9B,KAAK,IAAI,MAAM;IAIf,WAAW,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAI7C,YAAY,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAIhD,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGjC"}