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
package/dist/lib/by.d.ts CHANGED
@@ -2,10 +2,65 @@ export type Locator = {
2
2
  using: string;
3
3
  value: string;
4
4
  };
5
+ export interface RoleLocatorOptions {
6
+ name?: string;
7
+ exact?: boolean;
8
+ includeHidden?: boolean;
9
+ }
10
+ export interface TextLocatorOptions {
11
+ exact?: boolean;
12
+ caseSensitive?: boolean;
13
+ trim?: boolean;
14
+ }
15
+ export interface ExactLocatorOptions {
16
+ exact?: boolean;
17
+ }
18
+ /**
19
+ * Semantic intent retained alongside the W3C wire representation.
20
+ *
21
+ * Light-DOM lookup keeps using `using`/`value` for backwards compatibility.
22
+ * Root-aware adapters use this descriptor when XPath is not interoperable
23
+ * (notably inside a ShadowRoot) instead of trying to parse generated XPath.
24
+ */
25
+ export type QueryDescriptor = {
26
+ kind: 'css';
27
+ value: string;
28
+ } | {
29
+ kind: 'xpath';
30
+ value: string;
31
+ raw: true;
32
+ } | {
33
+ kind: 'linkText';
34
+ value: string;
35
+ partial: boolean;
36
+ } | {
37
+ kind: 'ref';
38
+ value: string;
39
+ } | {
40
+ kind: 'role';
41
+ role: string;
42
+ options: RoleLocatorOptions;
43
+ } | {
44
+ kind: 'text';
45
+ value: string;
46
+ options: TextLocatorOptions;
47
+ } | {
48
+ kind: 'label';
49
+ value: string;
50
+ options: ExactLocatorOptions;
51
+ } | {
52
+ kind: 'placeholder' | 'alt' | 'title';
53
+ value: string;
54
+ options: ExactLocatorOptions;
55
+ };
5
56
  export declare class By {
6
57
  using: string;
7
58
  value: string;
8
- constructor(using: string, value: string);
59
+ /** Internal semantic metadata; public for adapter code, optional for structural compatibility. */
60
+ readonly descriptor?: QueryDescriptor | undefined;
61
+ constructor(using: string, value: string,
62
+ /** Internal semantic metadata; public for adapter code, optional for structural compatibility. */
63
+ descriptor?: QueryDescriptor | undefined);
9
64
  static css(selector: string): By;
10
65
  static xpath(xpath: string): By;
11
66
  static id(id: string): By;
@@ -16,6 +71,8 @@ export declare class By {
16
71
  static dataAttr(name: string, value: string): By;
17
72
  static aria(name: string, value: string): By;
18
73
  static testId(value: string): By;
74
+ /** Internal agent-snapshot identity reference. Prefer durable locators in tests. */
75
+ static ref(value: string): By;
19
76
  /**
20
77
  * Match elements by their normalized visible text.
21
78
  *
@@ -26,20 +83,13 @@ export declare class By {
26
83
  * - `caseSensitive` — defaults to `true`.
27
84
  * - `trim` — collapse whitespace via `normalize-space()`. Defaults to `true`.
28
85
  */
29
- static text(text: string, opts?: {
30
- exact?: boolean;
31
- caseSensitive?: boolean;
32
- trim?: boolean;
33
- }): By;
86
+ static text(text: string, opts?: TextLocatorOptions): By;
34
87
  /**
35
88
  * Match elements whose normalized text contains `substring`. Prefer
36
89
  * `By.text(s, { exact: false })` for symmetry with the other locators;
37
90
  * this lower-level entry point is kept for explicit use.
38
91
  */
39
- static partialText(substring: string, opts?: {
40
- caseSensitive?: boolean;
41
- trim?: boolean;
42
- }): By;
92
+ static partialText(substring: string, opts?: Omit<TextLocatorOptions, 'exact'>): By;
43
93
  /**
44
94
  * Match elements by ARIA role, resolving **implicit** roles for common native
45
95
  * elements — so `role('button')` matches `<button>` and `<input type="submit">`,
@@ -54,23 +104,11 @@ export declare class By {
54
104
  * Coverage is a documented approximation of the common roles, not the full
55
105
  * ARIA algorithm; unmapped roles still match an explicit `role=` attribute.
56
106
  */
57
- static role(role: string, opts?: {
58
- name?: string;
59
- exact?: boolean;
60
- includeHidden?: boolean;
61
- }): By;
62
- static labelText(text: string, opts?: {
63
- exact?: boolean;
64
- }): By;
65
- static placeholder(text: string, opts?: {
66
- exact?: boolean;
67
- }): By;
68
- static altText(text: string, opts?: {
69
- exact?: boolean;
70
- }): By;
71
- static title(text: string, opts?: {
72
- exact?: boolean;
73
- }): By;
107
+ static role(role: string, opts?: RoleLocatorOptions): By;
108
+ static labelText(text: string, opts?: ExactLocatorOptions): By;
109
+ static placeholder(text: string, opts?: ExactLocatorOptions): By;
110
+ static altText(text: string, opts?: ExactLocatorOptions): By;
111
+ static title(text: string, opts?: ExactLocatorOptions): By;
74
112
  /** Match an `<a>` whose (trimmed) rendered text exactly equals `text`. */
75
113
  static linkText(text: string): By;
76
114
  /** Match an `<a>` whose (trimmed) rendered text contains `text`. */
@@ -1 +1 @@
1
- {"version":3,"file":"by.d.ts","sourceRoot":"","sources":["../../src/lib/by.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,qBAAa,EAAE;IAEJ,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,MAAM;gBADb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM;IAItB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,EAAE;IAGhC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE;IAK/B,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE;IAGzB,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE;IAG7B,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE;IAGjC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE;IAG/B,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE;IAG5C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE;IAGhD,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE;IAG5C,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE;IAKhC;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAI,CACT,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAClE,EAAE;IAgBL;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,EAAE;IAa7F;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,IAAI,CACT,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,GACjE,EAAE;IAsDL,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,EAAE;IAiB9D,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,EAAE;IAOhE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,EAAE;IAS5D,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,EAAE;IAa1D,0EAA0E;IAC1E,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE;IAIjC,oEAAoE;IACpE,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE;CAGzC"}
1
+ {"version":3,"file":"by.d.ts","sourceRoot":"","sources":["../../src/lib/by.ts"],"names":[],"mappings":"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"}
package/dist/lib/by.js CHANGED
@@ -1,41 +1,52 @@
1
1
  export class By {
2
2
  using;
3
3
  value;
4
- constructor(using, value) {
4
+ descriptor;
5
+ constructor(using, value,
6
+ /** Internal semantic metadata; public for adapter code, optional for structural compatibility. */
7
+ descriptor) {
5
8
  this.using = using;
6
9
  this.value = value;
10
+ this.descriptor = descriptor;
7
11
  }
8
12
  // Base CSS/XPath helpers
9
13
  static css(selector) {
10
- return new By('css selector', selector);
14
+ return new By('css selector', selector, { kind: 'css', value: selector });
11
15
  }
12
16
  static xpath(xpath) {
13
- return new By('xpath', xpath);
17
+ return new By('xpath', xpath, { kind: 'xpath', value: xpath, raw: true });
14
18
  }
15
19
  // Simple attribute-based helpers
16
20
  static id(id) {
17
- return new By('css selector', `#${cssEscape(id)}`);
21
+ return By.css(`#${cssEscape(id)}`);
18
22
  }
19
23
  static name(name) {
20
- return new By('css selector', `[name="${cssEscape(name)}"]`);
24
+ return By.css(`[name="${cssEscape(name)}"]`);
21
25
  }
22
26
  static className(cls) {
23
- return new By('css selector', `.${cssEscape(cls)}`);
27
+ return By.css(`.${cssEscape(cls)}`);
24
28
  }
25
29
  static tagName(tag) {
26
- return new By('css selector', tag);
30
+ return By.css(tag);
27
31
  }
28
32
  static attr(name, value) {
29
- return new By('css selector', `[${name}="${cssEscape(value)}"]`);
33
+ return By.css(`[${name}="${cssEscape(value)}"]`);
30
34
  }
31
35
  static dataAttr(name, value) {
32
- return new By('css selector', `[data-${name}="${cssEscape(value)}"]`);
36
+ return By.css(`[data-${name}="${cssEscape(value)}"]`);
33
37
  }
34
38
  static aria(name, value) {
35
- return new By('css selector', `[aria-${name}="${cssEscape(value)}"]`);
39
+ return By.css(`[aria-${name}="${cssEscape(value)}"]`);
36
40
  }
37
41
  static testId(value) {
38
- return new By('css selector', `[data-testid="${cssEscape(value)}"]`);
42
+ return By.css(`[data-testid="${cssEscape(value)}"]`);
43
+ }
44
+ /** Internal agent-snapshot identity reference. Prefer durable locators in tests. */
45
+ static ref(value) {
46
+ return new By('css selector', `[data-craftdriver-ref="${cssEscape(value)}"]`, {
47
+ kind: 'ref',
48
+ value,
49
+ });
39
50
  }
40
51
  // Text-based locators (XPath)
41
52
  /**
@@ -61,7 +72,7 @@ export class By {
61
72
  // Prefer the innermost element for symmetry with partialText — a wrapper
62
73
  // whose only child carries the same normalized text would otherwise match twice.
63
74
  const xpath = `.//*[${left} = ${right} and not(.//*[${left} = ${right}])]`;
64
- return By.xpath(xpath);
75
+ return new By('xpath', xpath, { kind: 'text', value: text, options: { ...opts, exact: true } });
65
76
  }
66
77
  /**
67
78
  * Match elements whose normalized text contains `substring`. Prefer
@@ -77,7 +88,11 @@ export class By {
77
88
  const right = cs ? valueExpr : toLower(valueExpr);
78
89
  // Prefer the innermost element containing the substring to avoid matching large containers
79
90
  const xpath = `.//*[contains(${left}, ${right}) and not(.//*[contains(${left}, ${right})])]`;
80
- return By.xpath(xpath);
91
+ return new By('xpath', xpath, {
92
+ kind: 'text',
93
+ value: substring,
94
+ options: { ...opts, exact: false },
95
+ });
81
96
  }
82
97
  // Accessibility-inspired helpers (approximate)
83
98
  /**
@@ -145,7 +160,7 @@ export class By {
145
160
  // WebDriver endpoint passes in, which would otherwise search the whole
146
161
  // document instead of the parent's subtree.
147
162
  const xpath = `.//*[( ${conditions.join(' and ')} )${visibleGuard}]`;
148
- return By.xpath(xpath);
163
+ return new By('xpath', xpath, { kind: 'role', role, options: { ...opts } });
149
164
  }
150
165
  static labelText(text, opts) {
151
166
  const eq = opts?.exact !== false; // default exact
@@ -161,25 +176,37 @@ export class By {
161
176
  // approximation rather than the general nested-scope bug.
162
177
  const byFor = `.//*[@id=//label[${labelMatch}]/@for]`;
163
178
  const wrapped = `.//label[${labelMatch}]//*[self::input or self::textarea or self::select]`;
164
- return By.xpath(`(${byFor} | ${wrapped})`);
179
+ return new By('xpath', `(${byFor} | ${wrapped})`, {
180
+ kind: 'label',
181
+ value: text,
182
+ options: { ...opts },
183
+ });
165
184
  }
166
185
  static placeholder(text, opts) {
167
186
  const eq = opts?.exact !== false;
168
187
  const lit = xpStringLiteral(text);
169
188
  const pred = eq ? `@placeholder = ${lit}` : `contains(@placeholder, ${lit})`;
170
- return By.xpath(`.//*[(self::input or self::textarea) and ${pred}]`);
189
+ return new By('xpath', `.//*[(self::input or self::textarea) and ${pred}]`, {
190
+ kind: 'placeholder',
191
+ value: text,
192
+ options: { ...opts },
193
+ });
171
194
  }
172
195
  static altText(text, opts) {
173
196
  const eq = opts?.exact !== false;
174
197
  const lit = xpStringLiteral(text);
175
198
  const pred = eq ? `@alt = ${lit}` : `contains(@alt, ${lit})`;
176
- return By.xpath(`.//*[(self::img or self::area or (self::input and @type='image')) and ${pred}]`);
199
+ return new By('xpath', `.//*[(self::img or self::area or (self::input and @type='image')) and ${pred}]`, { kind: 'alt', value: text, options: { ...opts } });
177
200
  }
178
201
  static title(text, opts) {
179
202
  const eq = opts?.exact !== false;
180
203
  const lit = xpStringLiteral(text);
181
204
  const pred = eq ? `@title = ${lit}` : `contains(@title, ${lit})`;
182
- return By.xpath(`.//*[@title and ${pred}]`);
205
+ return new By('xpath', `.//*[@title and ${pred}]`, {
206
+ kind: 'title',
207
+ value: text,
208
+ options: { ...opts },
209
+ });
183
210
  }
184
211
  // Link-text locators — the native W3C "link text" / "partial link text"
185
212
  // location strategies, matching Selenium's By.linkText / By.partialLinkText.
@@ -189,11 +216,11 @@ export class By {
189
216
  // strategy is resolved by the driver rather than as a document-rooted XPath.
190
217
  /** Match an `<a>` whose (trimmed) rendered text exactly equals `text`. */
191
218
  static linkText(text) {
192
- return new By('link text', text);
219
+ return new By('link text', text, { kind: 'linkText', value: text, partial: false });
193
220
  }
194
221
  /** Match an `<a>` whose (trimmed) rendered text contains `text`. */
195
222
  static partialLinkText(text) {
196
- return new By('partial link text', text);
223
+ return new By('partial link text', text, { kind: 'linkText', value: text, partial: true });
197
224
  }
198
225
  }
199
226
  // True when the candidate has an ancestor that is sectioning content (or
@@ -1 +1 @@
1
- {"version":3,"file":"by.js","sourceRoot":"","sources":["../../src/lib/by.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"by.js","sourceRoot":"","sources":["../../src/lib/by.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"clearFastPath.d.ts","sourceRoot":"","sources":["../../src/lib/clearFastPath.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAclD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,EAC7C,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,EACxD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAkBf"}
1
+ {"version":3,"file":"clearFastPath.d.ts","sourceRoot":"","sources":["../../src/lib/clearFastPath.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAelD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,EAC7C,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,EACxD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAkBf"}
@@ -5,6 +5,8 @@ const RECOVERABLE_CLEAR_ERRORS = new Set([
5
5
  'element not interactable',
6
6
  ]);
7
7
  function isRecoverableClearError(err) {
8
+ if (CraftdriverError.is(err, ErrorCode.DETACHED_SHADOW_ROOT))
9
+ return true;
8
10
  if (!CraftdriverError.is(err, ErrorCode.DRIVER_ERROR))
9
11
  return false;
10
12
  const code = err.detail?.webDriverError;
@@ -1 +1 @@
1
- {"version":3,"file":"clearFastPath.js","sourceRoot":"","sources":["../../src/lib/clearFastPath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,wBAAwB,GAAwB,IAAI,GAAG,CAAC;IAC5D,iBAAiB;IACjB,yBAAyB;IACzB,0BAA0B;CAC3B,CAAC,CAAC;AAEH,SAAS,uBAAuB,CAAC,GAAY;IAC3C,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IACpE,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IACxC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAA6C,EAC7C,cAAwD,EACxD,OAAe;IAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;QAC/B,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAC;QAC7C,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/D,IAAI,mBAAmB,IAAI,CAAC;YAAE,MAAM,GAAG,CAAC;IAC1C,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"clearFastPath.js","sourceRoot":"","sources":["../../src/lib/clearFastPath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,wBAAwB,GAAwB,IAAI,GAAG,CAAC;IAC5D,iBAAiB;IACjB,yBAAyB;IACzB,0BAA0B;CAC3B,CAAC,CAAC;AAEH,SAAS,uBAAuB,CAAC,GAAY;IAC3C,IAAI,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,oBAAoB,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1E,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IACpE,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IACxC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAA6C,EAC7C,cAAwD,EACxD,OAAe;IAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;QAC/B,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAC;QAC7C,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/D,IAAI,mBAAmB,IAAI,CAAC;YAAE,MAAM,GAAG,CAAC;IAC1C,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"clickFastPath.d.ts","sourceRoot":"","sources":["../../src/lib/clickFastPath.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgBlD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,EAC7C,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,EACxD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAkBf"}
1
+ {"version":3,"file":"clickFastPath.d.ts","sourceRoot":"","sources":["../../src/lib/clickFastPath.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAiBlD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,EAC7C,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,EACxD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAkBf"}
@@ -7,6 +7,8 @@ const RECOVERABLE_CLICK_ERRORS = new Set([
7
7
  'move target out of bounds',
8
8
  ]);
9
9
  function isRecoverableClickError(err) {
10
+ if (CraftdriverError.is(err, ErrorCode.DETACHED_SHADOW_ROOT))
11
+ return true;
10
12
  if (!CraftdriverError.is(err, ErrorCode.DRIVER_ERROR))
11
13
  return false;
12
14
  const code = err.detail?.webDriverError;
@@ -1 +1 @@
1
- {"version":3,"file":"clickFastPath.js","sourceRoot":"","sources":["../../src/lib/clickFastPath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,wBAAwB,GAAwB,IAAI,GAAG,CAAC;IAC5D,iBAAiB;IACjB,yBAAyB;IACzB,0BAA0B;IAC1B,2BAA2B;IAC3B,2BAA2B;CAC5B,CAAC,CAAC;AAEH,SAAS,uBAAuB,CAAC,GAAY;IAC3C,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IACpE,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IACxC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAA6C,EAC7C,cAAwD,EACxD,OAAe;IAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;QAC/B,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAC;QAC7C,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/D,IAAI,mBAAmB,IAAI,CAAC;YAAE,MAAM,GAAG,CAAC;IAC1C,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"clickFastPath.js","sourceRoot":"","sources":["../../src/lib/clickFastPath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,wBAAwB,GAAwB,IAAI,GAAG,CAAC;IAC5D,iBAAiB;IACjB,yBAAyB;IACzB,0BAA0B;IAC1B,2BAA2B;IAC3B,2BAA2B;CAC5B,CAAC,CAAC;AAEH,SAAS,uBAAuB,CAAC,GAAY;IAC3C,IAAI,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,oBAAoB,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1E,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IACpE,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IACxC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAA6C,EAC7C,cAAwD,EACxD,OAAe;IAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;QAC/B,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAC;QAC7C,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/D,IAAI,mBAAmB,IAAI,CAAC;YAAE,MAAM,GAAG,CAAC;IAC1C,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC"}
@@ -1,12 +1,14 @@
1
1
  import type { Capabilities, WebDriverEndpoint, ClassicCookie, ClassicCookieInput } from './types.js';
2
2
  import { By } from './by.js';
3
3
  import { WebElement } from './webelement.js';
4
+ import { ClassicShadowRoot } from './shadowRoot.js';
4
5
  import { type Condition, type WaitOptions } from './wait.js';
5
6
  export declare class Driver {
6
7
  private endpoint;
7
8
  private sessionId;
8
9
  /** BiDi WebSocket URL if available */
9
10
  __wsUrl?: string;
11
+ private bidiShadowQueriesSupported;
10
12
  constructor(endpoint: WebDriverEndpoint, sessionId: string);
11
13
  /**
12
14
  * True for sessions created against a remote WebDriver endpoint.
@@ -16,6 +18,19 @@ export declare class Driver {
16
18
  * `ElementHandle`) that still need a remote/local branch.
17
19
  */
18
20
  isRemote(): boolean;
21
+ /** Session-wide capability cache for the optional BiDi shadow adapter. */
22
+ canUseBiDiShadowQueries(): boolean;
23
+ /** Disable BiDi shadow lookup after a conclusive protocol/interoperability failure. */
24
+ disableBiDiShadowQueries(): boolean;
25
+ /** Build a Classic element wrapper from a W3C/BiDi shared node id. */
26
+ webElementFromId(elementId: string): WebElement;
27
+ /** Build an internal Classic shadow-root wrapper from its W3C id. */
28
+ shadowRootFromId(shadowRootId: string): ClassicShadowRoot;
29
+ /**
30
+ * Recursively deserialize W3C element and shadow-root references.
31
+ * Execute Script can return either reference at any depth.
32
+ */
33
+ deserializeWireValue<T = unknown>(value: unknown): T;
19
34
  static create(endpoint: WebDriverEndpoint, caps: Capabilities, options?: {
20
35
  timeoutMs?: number;
21
36
  }): Promise<Driver>;
@@ -44,6 +59,10 @@ export declare class Driver {
44
59
  * for `undefined`). Resolves with the value passed to the callback.
45
60
  */
46
61
  executeAsyncScript<T = unknown>(script: string, args?: unknown[]): Promise<T>;
62
+ /** W3C Get Element Shadow Root command. Open-only policy is enforced by the query layer. */
63
+ getElementShadowRoot(element: WebElement): Promise<ClassicShadowRoot>;
64
+ findElementFromShadowRoot(shadowRootId: string, locator: By): Promise<WebElement>;
65
+ findElementsFromShadowRoot(shadowRootId: string, locator: By): Promise<WebElement[]>;
47
66
  /** Configure the script (and async-script) timeout in milliseconds. */
48
67
  setScriptTimeout(ms: number): Promise<void>;
49
68
  wait<T>(condition: Condition<T>, options?: WaitOptions & {
@@ -1 +1 @@
1
- {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/lib/driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/lib/driver.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { HttpClient } from './http.js';
2
2
  import { WebElement, W3C_ELEMENT_KEY, LEGACY_ELEMENT_KEY } from './webelement.js';
3
+ import { ClassicShadowRoot, W3C_SHADOW_ROOT_KEY } from './shadowRoot.js';
3
4
  import { WebDriverWait } from './wait.js';
4
5
  import { CraftdriverError, ErrorCode } from './errors.js';
5
6
  import { SESSION_CREATE_TIMEOUT_MS } from './timing.js';
@@ -13,6 +14,7 @@ export class Driver {
13
14
  sessionId;
14
15
  /** BiDi WebSocket URL if available */
15
16
  __wsUrl;
17
+ bidiShadowQueriesSupported = true;
16
18
  constructor(endpoint, sessionId) {
17
19
  this.endpoint = endpoint;
18
20
  this.sessionId = sessionId;
@@ -27,6 +29,45 @@ export class Driver {
27
29
  isRemote() {
28
30
  return this.endpoint.poolKey !== undefined;
29
31
  }
32
+ /** Session-wide capability cache for the optional BiDi shadow adapter. */
33
+ canUseBiDiShadowQueries() {
34
+ return this.bidiShadowQueriesSupported;
35
+ }
36
+ /** Disable BiDi shadow lookup after a conclusive protocol/interoperability failure. */
37
+ disableBiDiShadowQueries() {
38
+ if (!this.bidiShadowQueriesSupported)
39
+ return false;
40
+ this.bidiShadowQueriesSupported = false;
41
+ return true;
42
+ }
43
+ /** Build a Classic element wrapper from a W3C/BiDi shared node id. */
44
+ webElementFromId(elementId) {
45
+ return new WebElement(this.endpoint, this.sessionId, elementId);
46
+ }
47
+ /** Build an internal Classic shadow-root wrapper from its W3C id. */
48
+ shadowRootFromId(shadowRootId) {
49
+ return new ClassicShadowRoot(this, shadowRootId);
50
+ }
51
+ /**
52
+ * Recursively deserialize W3C element and shadow-root references.
53
+ * Execute Script can return either reference at any depth.
54
+ */
55
+ deserializeWireValue(value) {
56
+ if (Array.isArray(value)) {
57
+ return value.map((item) => this.deserializeWireValue(item));
58
+ }
59
+ if (value && typeof value === 'object') {
60
+ const record = value;
61
+ const elementId = record[W3C_ELEMENT_KEY] ?? record[LEGACY_ELEMENT_KEY];
62
+ if (typeof elementId === 'string')
63
+ return this.webElementFromId(elementId);
64
+ const shadowRootId = record[W3C_SHADOW_ROOT_KEY];
65
+ if (typeof shadowRootId === 'string')
66
+ return this.shadowRootFromId(shadowRootId);
67
+ return Object.fromEntries(Object.entries(record).map(([key, item]) => [key, this.deserializeWireValue(item)]));
68
+ }
69
+ return value;
70
+ }
30
71
  static async create(endpoint, caps, options) {
31
72
  const client = new HttpClient(endpoint);
32
73
  let res;
@@ -123,6 +164,12 @@ export class Driver {
123
164
  return String(v ?? '');
124
165
  }
125
166
  async findElement(locator) {
167
+ if (locator.descriptor?.kind === 'ref') {
168
+ const elements = await this.findElements(locator);
169
+ if (elements[0])
170
+ return elements[0];
171
+ throw new CraftdriverError(ErrorCode.NO_MATCH, `Snapshot ref ${locator.descriptor.value} does not identify a live element`, { detail: { ref: locator.descriptor.value } });
172
+ }
126
173
  const client = new HttpClient(this.endpoint);
127
174
  const res = await client.send({
128
175
  method: 'POST',
@@ -134,9 +181,17 @@ export class Driver {
134
181
  const elId = value?.[W3C_ELEMENT_KEY] || value?.[LEGACY_ELEMENT_KEY];
135
182
  if (!elId)
136
183
  throw new Error(`findElement failed: ${JSON.stringify(res)}`);
137
- return new WebElement(this.endpoint, this.sessionId, elId);
184
+ return this.webElementFromId(elId);
138
185
  }
139
186
  async findElements(locator) {
187
+ if (locator.descriptor?.kind === 'ref') {
188
+ const element = await this.executeScript(`
189
+ const reg = window.__craftdriverRefs;
190
+ const el = reg && reg.map ? reg.map.get(arguments[0]) : null;
191
+ return el && el.isConnected && el.ownerDocument === document ? el : null;
192
+ `, [locator.descriptor.value]);
193
+ return element instanceof WebElement ? [element] : [];
194
+ }
140
195
  const client = new HttpClient(this.endpoint);
141
196
  const res = await client.send({
142
197
  method: 'POST',
@@ -150,7 +205,7 @@ export class Driver {
150
205
  const elId = v?.[W3C_ELEMENT_KEY] || v?.[LEGACY_ELEMENT_KEY];
151
206
  if (!elId)
152
207
  return undefined;
153
- return new WebElement(this.endpoint, this.sessionId, elId);
208
+ return this.webElementFromId(elId);
154
209
  })
155
210
  .filter(Boolean);
156
211
  }
@@ -161,7 +216,14 @@ export class Driver {
161
216
  path: `/session/${this.sessionId}/execute/sync`,
162
217
  body: { script, args },
163
218
  });
164
- return (res?.value ?? res);
219
+ // `null` is a meaningful script result (notably for `host.shadowRoot` on
220
+ // missing or closed roots). Nullish coalescing would replace it with the
221
+ // whole `{ value: null }` response and make callers think an object was
222
+ // returned, so unwrap by field presence instead.
223
+ const value = res && typeof res === 'object' && 'value' in res
224
+ ? res.value
225
+ : res;
226
+ return this.deserializeWireValue(value);
165
227
  }
166
228
  /**
167
229
  * Execute an asynchronous script. The script receives a callback as its
@@ -175,7 +237,52 @@ export class Driver {
175
237
  path: `/session/${this.sessionId}/execute/async`,
176
238
  body: { script, args },
177
239
  });
178
- return (res?.value ?? res);
240
+ const value = res && typeof res === 'object' && 'value' in res
241
+ ? res.value
242
+ : res;
243
+ return this.deserializeWireValue(value);
244
+ }
245
+ /** W3C Get Element Shadow Root command. Open-only policy is enforced by the query layer. */
246
+ async getElementShadowRoot(element) {
247
+ const client = new HttpClient(this.endpoint);
248
+ const res = await client.send({
249
+ method: 'GET',
250
+ path: `/session/${this.sessionId}/element/${element.getId()}/shadow`,
251
+ });
252
+ const value = res?.value ??
253
+ res;
254
+ const id = value?.[W3C_SHADOW_ROOT_KEY];
255
+ if (!id)
256
+ throw new Error(`getElementShadowRoot failed: ${JSON.stringify(res)}`);
257
+ return this.shadowRootFromId(id);
258
+ }
259
+ async findElementFromShadowRoot(shadowRootId, locator) {
260
+ const client = new HttpClient(this.endpoint);
261
+ const res = await client.send({
262
+ method: 'POST',
263
+ path: `/session/${this.sessionId}/shadow/${shadowRootId}/element`,
264
+ body: { using: locator.using, value: locator.value },
265
+ });
266
+ const value = res?.value ??
267
+ res;
268
+ const id = value?.[W3C_ELEMENT_KEY] ?? value?.[LEGACY_ELEMENT_KEY];
269
+ if (!id)
270
+ throw new Error(`findElementFromShadowRoot failed: ${JSON.stringify(res)}`);
271
+ return this.webElementFromId(id);
272
+ }
273
+ async findElementsFromShadowRoot(shadowRootId, locator) {
274
+ const client = new HttpClient(this.endpoint);
275
+ const res = await client.send({
276
+ method: 'POST',
277
+ path: `/session/${this.sessionId}/shadow/${shadowRootId}/elements`,
278
+ body: { using: locator.using, value: locator.value },
279
+ });
280
+ const value = res?.value ??
281
+ res;
282
+ return (value ?? [])
283
+ .map((item) => item?.[W3C_ELEMENT_KEY] ?? item?.[LEGACY_ELEMENT_KEY])
284
+ .filter((id) => typeof id === 'string')
285
+ .map((id) => this.webElementFromId(id));
179
286
  }
180
287
  /** Configure the script (and async-script) timeout in milliseconds. */
181
288
  async setScriptTimeout(ms) {