playwriter 0.0.63 → 0.0.89

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 (223) hide show
  1. package/dist/a11y-client.js +18 -8
  2. package/dist/aria-snapshot.d.ts +41 -3
  3. package/dist/aria-snapshot.d.ts.map +1 -1
  4. package/dist/aria-snapshot.js +134 -55
  5. package/dist/aria-snapshot.js.map +1 -1
  6. package/dist/aria-snapshot.test.js +5 -2
  7. package/dist/aria-snapshot.test.js.map +1 -1
  8. package/dist/aria-snapshot.unit.test.js +83 -41
  9. package/dist/aria-snapshot.unit.test.js.map +1 -1
  10. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts +5 -0
  11. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.d.ts.map +1 -0
  12. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js +5 -0
  13. package/dist/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.js.map +1 -0
  14. package/dist/bippy.js +1 -1
  15. package/dist/cdp-log.d.ts +1 -1
  16. package/dist/cdp-log.d.ts.map +1 -1
  17. package/dist/cdp-log.js +1 -1
  18. package/dist/cdp-log.js.map +1 -1
  19. package/dist/cdp-relay.d.ts.map +1 -1
  20. package/dist/cdp-relay.js +492 -298
  21. package/dist/cdp-relay.js.map +1 -1
  22. package/dist/cdp-session.d.ts.map +1 -1
  23. package/dist/cdp-session.js.map +1 -1
  24. package/dist/cdp-types.d.ts.map +1 -1
  25. package/dist/cdp-types.js +7 -7
  26. package/dist/cdp-types.js.map +1 -1
  27. package/dist/clean-html.d.ts.map +1 -1
  28. package/dist/clean-html.js +4 -5
  29. package/dist/clean-html.js.map +1 -1
  30. package/dist/cli.js +45 -27
  31. package/dist/cli.js.map +1 -1
  32. package/dist/create-logger.d.ts.map +1 -1
  33. package/dist/create-logger.js +3 -1
  34. package/dist/create-logger.js.map +1 -1
  35. package/dist/debugger-examples-types.d.ts.map +1 -1
  36. package/dist/debugger.d.ts.map +1 -1
  37. package/dist/debugger.js +1 -3
  38. package/dist/debugger.js.map +1 -1
  39. package/dist/diff-utils.d.ts.map +1 -1
  40. package/dist/diff-utils.js +1 -4
  41. package/dist/diff-utils.js.map +1 -1
  42. package/dist/editor-api.md +12 -2
  43. package/dist/editor-examples.d.ts +1 -1
  44. package/dist/editor-examples.d.ts.map +1 -1
  45. package/dist/editor-examples.js +1 -1
  46. package/dist/editor-examples.js.map +1 -1
  47. package/dist/editor.d.ts +1 -1
  48. package/dist/editor.d.ts.map +1 -1
  49. package/dist/editor.js +1 -1
  50. package/dist/editor.js.map +1 -1
  51. package/dist/executor.d.ts +26 -3
  52. package/dist/executor.d.ts.map +1 -1
  53. package/dist/executor.js +297 -64
  54. package/dist/executor.js.map +1 -1
  55. package/dist/executor.unit.test.js +38 -1
  56. package/dist/executor.unit.test.js.map +1 -1
  57. package/dist/extension-connection.test.js +139 -36
  58. package/dist/extension-connection.test.js.map +1 -1
  59. package/dist/ffmpeg.d.ts +148 -0
  60. package/dist/ffmpeg.d.ts.map +1 -0
  61. package/dist/ffmpeg.js +523 -0
  62. package/dist/ffmpeg.js.map +1 -0
  63. package/dist/ghost-browser.d.ts.map +1 -1
  64. package/dist/ghost-browser.js.map +1 -1
  65. package/dist/ghost-cursor-client.js +287 -0
  66. package/dist/ghost-cursor.d.ts +27 -0
  67. package/dist/ghost-cursor.d.ts.map +1 -0
  68. package/dist/ghost-cursor.js +63 -0
  69. package/dist/ghost-cursor.js.map +1 -0
  70. package/dist/htmlrewrite.d.ts.map +1 -1
  71. package/dist/htmlrewrite.js +17 -55
  72. package/dist/htmlrewrite.js.map +1 -1
  73. package/dist/htmlrewrite.test.js.map +1 -1
  74. package/dist/kill-port.d.ts.map +1 -1
  75. package/dist/kill-port.js +1 -3
  76. package/dist/kill-port.js.map +1 -1
  77. package/dist/locator-selector.test.d.ts +2 -0
  78. package/dist/locator-selector.test.d.ts.map +1 -0
  79. package/dist/locator-selector.test.js +96 -0
  80. package/dist/locator-selector.test.js.map +1 -0
  81. package/dist/mcp-client.js.map +1 -1
  82. package/dist/mcp.d.ts.map +1 -1
  83. package/dist/mcp.js +8 -3
  84. package/dist/mcp.js.map +1 -1
  85. package/dist/on-mouse-action.test.d.ts +2 -0
  86. package/dist/on-mouse-action.test.d.ts.map +1 -0
  87. package/dist/on-mouse-action.test.js +155 -0
  88. package/dist/on-mouse-action.test.js.map +1 -0
  89. package/dist/page-markdown.js +4 -4
  90. package/dist/page-markdown.js.map +1 -1
  91. package/dist/prompt.md +450 -377
  92. package/dist/protocol.d.ts +4 -0
  93. package/dist/protocol.d.ts.map +1 -1
  94. package/dist/readability.js +16 -2
  95. package/dist/recording-ghost-cursor.d.ts +41 -0
  96. package/dist/recording-ghost-cursor.d.ts.map +1 -0
  97. package/dist/recording-ghost-cursor.js +79 -0
  98. package/dist/recording-ghost-cursor.js.map +1 -0
  99. package/dist/recording-relay.d.ts.map +1 -1
  100. package/dist/recording-relay.js +8 -8
  101. package/dist/recording-relay.js.map +1 -1
  102. package/dist/relay-client.d.ts +17 -4
  103. package/dist/relay-client.d.ts.map +1 -1
  104. package/dist/relay-client.js +45 -11
  105. package/dist/relay-client.js.map +1 -1
  106. package/dist/relay-core.test.d.ts.map +1 -1
  107. package/dist/relay-core.test.js +515 -26
  108. package/dist/relay-core.test.js.map +1 -1
  109. package/dist/relay-navigation.test.d.ts.map +1 -1
  110. package/dist/relay-navigation.test.js +169 -31
  111. package/dist/relay-navigation.test.js.map +1 -1
  112. package/dist/relay-session.test.d.ts.map +1 -1
  113. package/dist/relay-session.test.js +113 -65
  114. package/dist/relay-session.test.js.map +1 -1
  115. package/dist/relay-state.d.ts +158 -0
  116. package/dist/relay-state.d.ts.map +1 -0
  117. package/dist/relay-state.js +306 -0
  118. package/dist/relay-state.js.map +1 -0
  119. package/dist/relay-state.test.d.ts +2 -0
  120. package/dist/relay-state.test.d.ts.map +1 -0
  121. package/dist/relay-state.test.js +472 -0
  122. package/dist/relay-state.test.js.map +1 -0
  123. package/dist/scoped-fs.d.ts.map +1 -1
  124. package/dist/scoped-fs.js.map +1 -1
  125. package/dist/screen-recording.d.ts +66 -4
  126. package/dist/screen-recording.d.ts.map +1 -1
  127. package/dist/screen-recording.js +150 -13
  128. package/dist/screen-recording.js.map +1 -1
  129. package/dist/screen-recording.test.d.ts +2 -0
  130. package/dist/screen-recording.test.d.ts.map +1 -0
  131. package/dist/screen-recording.test.js +102 -0
  132. package/dist/screen-recording.test.js.map +1 -0
  133. package/dist/selector-generator.js +1 -1
  134. package/dist/snapshot-tools.test.js +71 -28
  135. package/dist/snapshot-tools.test.js.map +1 -1
  136. package/dist/start-relay-server.d.ts +1 -1
  137. package/dist/start-relay-server.d.ts.map +1 -1
  138. package/dist/start-relay-server.js +1 -1
  139. package/dist/start-relay-server.js.map +1 -1
  140. package/dist/styles-api.md +8 -1
  141. package/dist/styles-examples.d.ts +1 -1
  142. package/dist/styles-examples.d.ts.map +1 -1
  143. package/dist/styles-examples.js +1 -1
  144. package/dist/styles-examples.js.map +1 -1
  145. package/dist/styles.d.ts.map +1 -1
  146. package/dist/styles.js +1 -3
  147. package/dist/styles.js.map +1 -1
  148. package/dist/test-declarations.d.ts.map +1 -1
  149. package/dist/test-utils.d.ts +1 -1
  150. package/dist/test-utils.d.ts.map +1 -1
  151. package/dist/test-utils.js +7 -5
  152. package/dist/test-utils.js.map +1 -1
  153. package/dist/utils.d.ts.map +1 -1
  154. package/dist/utils.js.map +1 -1
  155. package/dist/wait-for-page-load.d.ts.map +1 -1
  156. package/dist/wait-for-page-load.js +1 -1
  157. package/dist/wait-for-page-load.js.map +1 -1
  158. package/package.json +4 -3
  159. package/src/a11y-client.ts +5 -4
  160. package/src/aria-snapshot.test.ts +5 -2
  161. package/src/aria-snapshot.ts +306 -117
  162. package/src/aria-snapshot.unit.test.ts +199 -141
  163. package/src/aria-snapshots/github-interactive.txt +2 -0
  164. package/src/aria-snapshots/github-raw.txt +5 -1
  165. package/src/aria-snapshots/hackernews-interactive.txt +238 -241
  166. package/src/aria-snapshots/hackernews-raw.txt +265 -269
  167. package/src/assets/aria-labels-example.png +0 -0
  168. package/src/assets/aria-labels-github.png +0 -0
  169. package/src/assets/aria-labels-hacker-news.png +0 -0
  170. package/src/assets/aria-labels-old-reddit.png +0 -0
  171. package/src/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.ts +5 -0
  172. package/src/assets/cursors/screen-studio/pointer-macos-tahoe.svg +18 -0
  173. package/src/cdp-log.ts +4 -1
  174. package/src/cdp-relay.ts +1059 -737
  175. package/src/cdp-session.ts +12 -3
  176. package/src/cdp-types.ts +51 -51
  177. package/src/clean-html.ts +4 -5
  178. package/src/cli.ts +82 -55
  179. package/src/create-logger.ts +5 -3
  180. package/src/debugger-examples-types.ts +4 -1
  181. package/src/debugger.ts +1 -5
  182. package/src/diff-utils.ts +2 -5
  183. package/src/editor-examples.ts +11 -1
  184. package/src/editor.ts +10 -2
  185. package/src/executor.ts +374 -73
  186. package/src/executor.unit.test.ts +48 -1
  187. package/src/extension-connection.test.ts +612 -488
  188. package/src/ffmpeg.ts +769 -0
  189. package/src/ghost-browser.ts +4 -6
  190. package/src/ghost-cursor-client.ts +369 -0
  191. package/src/ghost-cursor.ts +110 -0
  192. package/src/htmlrewrite.test.ts +6 -2
  193. package/src/htmlrewrite.ts +348 -386
  194. package/src/kill-port.ts +1 -3
  195. package/src/locator-selector.test.ts +115 -0
  196. package/src/mcp-client.ts +1 -1
  197. package/src/mcp.ts +21 -15
  198. package/src/on-mouse-action.test.ts +196 -0
  199. package/src/page-markdown.ts +7 -7
  200. package/src/protocol.ts +73 -57
  201. package/src/recording-ghost-cursor.ts +113 -0
  202. package/src/recording-relay.ts +20 -12
  203. package/src/relay-client.ts +85 -18
  204. package/src/relay-core.test.ts +1117 -578
  205. package/src/relay-navigation.test.ts +648 -483
  206. package/src/relay-session.test.ts +984 -929
  207. package/src/relay-state.test.ts +570 -0
  208. package/src/relay-state.ts +497 -0
  209. package/src/resource.md +21 -49
  210. package/src/scoped-fs.ts +9 -3
  211. package/src/screen-recording.test.ts +111 -0
  212. package/src/screen-recording.ts +256 -31
  213. package/src/skill.md +476 -396
  214. package/src/snapshot-tools.test.ts +580 -528
  215. package/src/snapshots/shadcn-ui-accessibility-full.md +8 -8
  216. package/src/snapshots/shadcn-ui-accessibility-interactive.md +8 -8
  217. package/src/start-relay-server.ts +14 -11
  218. package/src/styles-examples.ts +8 -1
  219. package/src/styles.ts +20 -21
  220. package/src/test-declarations.ts +6 -6
  221. package/src/test-utils.ts +104 -91
  222. package/src/utils.ts +2 -1
  223. package/src/wait-for-page-load.ts +6 -1
@@ -29,61 +29,85 @@ describe('aria-snapshot tree filters', () => {
29
29
  const buttonId = '8' as Protocol.Accessibility.AXNodeId
30
30
 
31
31
  const axById = new Map<Protocol.Accessibility.AXNodeId, Protocol.Accessibility.AXNode>([
32
- [rootId, {
33
- nodeId: rootId,
34
- ignored: false,
35
- role: roleValue('rootwebarea'),
36
- childIds: [mainId, navId],
37
- }],
38
- [mainId, {
39
- nodeId: mainId,
40
- ignored: false,
41
- role: roleValue('main'),
42
- childIds: [headingId, buttonId],
43
- backendDOMNodeId: 200 as Protocol.DOM.BackendNodeId,
44
- }],
45
- [navId, {
46
- nodeId: navId,
47
- ignored: false,
48
- role: roleValue('navigation'),
49
- childIds: [listId],
50
- backendDOMNodeId: 201 as Protocol.DOM.BackendNodeId,
51
- }],
52
- [listId, {
53
- nodeId: listId,
54
- ignored: false,
55
- role: roleValue('list'),
56
- childIds: [listItemId],
57
- backendDOMNodeId: 202 as Protocol.DOM.BackendNodeId,
58
- }],
59
- [listItemId, {
60
- nodeId: listItemId,
61
- ignored: false,
62
- role: roleValue('listitem'),
63
- childIds: [linkId],
64
- backendDOMNodeId: 203 as Protocol.DOM.BackendNodeId,
65
- }],
66
- [linkId, {
67
- nodeId: linkId,
68
- ignored: false,
69
- role: roleValue('link'),
70
- name: nameValue('Docs'),
71
- backendDOMNodeId: 204 as Protocol.DOM.BackendNodeId,
72
- }],
73
- [headingId, {
74
- nodeId: headingId,
75
- ignored: false,
76
- role: roleValue('heading'),
77
- name: nameValue('Title'),
78
- backendDOMNodeId: 205 as Protocol.DOM.BackendNodeId,
79
- }],
80
- [buttonId, {
81
- nodeId: buttonId,
82
- ignored: false,
83
- role: roleValue('button'),
84
- name: nameValue('Submit'),
85
- backendDOMNodeId: 206 as Protocol.DOM.BackendNodeId,
86
- }],
32
+ [
33
+ rootId,
34
+ {
35
+ nodeId: rootId,
36
+ ignored: false,
37
+ role: roleValue('rootwebarea'),
38
+ childIds: [mainId, navId],
39
+ },
40
+ ],
41
+ [
42
+ mainId,
43
+ {
44
+ nodeId: mainId,
45
+ ignored: false,
46
+ role: roleValue('main'),
47
+ childIds: [headingId, buttonId],
48
+ backendDOMNodeId: 200 as Protocol.DOM.BackendNodeId,
49
+ },
50
+ ],
51
+ [
52
+ navId,
53
+ {
54
+ nodeId: navId,
55
+ ignored: false,
56
+ role: roleValue('navigation'),
57
+ childIds: [listId],
58
+ backendDOMNodeId: 201 as Protocol.DOM.BackendNodeId,
59
+ },
60
+ ],
61
+ [
62
+ listId,
63
+ {
64
+ nodeId: listId,
65
+ ignored: false,
66
+ role: roleValue('list'),
67
+ childIds: [listItemId],
68
+ backendDOMNodeId: 202 as Protocol.DOM.BackendNodeId,
69
+ },
70
+ ],
71
+ [
72
+ listItemId,
73
+ {
74
+ nodeId: listItemId,
75
+ ignored: false,
76
+ role: roleValue('listitem'),
77
+ childIds: [linkId],
78
+ backendDOMNodeId: 203 as Protocol.DOM.BackendNodeId,
79
+ },
80
+ ],
81
+ [
82
+ linkId,
83
+ {
84
+ nodeId: linkId,
85
+ ignored: false,
86
+ role: roleValue('link'),
87
+ name: nameValue('Docs'),
88
+ backendDOMNodeId: 204 as Protocol.DOM.BackendNodeId,
89
+ },
90
+ ],
91
+ [
92
+ headingId,
93
+ {
94
+ nodeId: headingId,
95
+ ignored: false,
96
+ role: roleValue('heading'),
97
+ name: nameValue('Title'),
98
+ backendDOMNodeId: 205 as Protocol.DOM.BackendNodeId,
99
+ },
100
+ ],
101
+ [
102
+ buttonId,
103
+ {
104
+ nodeId: buttonId,
105
+ ignored: false,
106
+ role: roleValue('button'),
107
+ name: nameValue('Submit'),
108
+ backendDOMNodeId: 206 as Protocol.DOM.BackendNodeId,
109
+ },
110
+ ],
87
111
  ])
88
112
 
89
113
  const allowed = new Set<Protocol.DOM.BackendNodeId>([204 as Protocol.DOM.BackendNodeId])
@@ -145,25 +169,19 @@ describe('aria-snapshot tree filters', () => {
145
169
  role: 'navigation',
146
170
  name: '',
147
171
  ignored: false,
148
- children: [
149
- { role: 'link', name: 'Home', backendNodeId: 2 as Protocol.DOM.BackendNodeId, children: [] },
150
- ],
172
+ children: [{ role: 'link', name: 'Home', backendNodeId: 2 as Protocol.DOM.BackendNodeId, children: [] }],
151
173
  },
152
174
  {
153
175
  role: 'labeltext',
154
176
  name: '',
155
177
  ignored: false,
156
- children: [
157
- { role: 'statictext', name: 'Email', ignored: false, children: [] },
158
- ],
178
+ children: [{ role: 'statictext', name: 'Email', ignored: false, children: [] }],
159
179
  },
160
180
  {
161
181
  role: 'generic',
162
182
  name: '',
163
183
  ignored: false,
164
- children: [
165
- { role: 'button', name: 'Save', backendNodeId: 1 as Protocol.DOM.BackendNodeId, children: [] },
166
- ],
184
+ children: [{ role: 'button', name: 'Save', backendNodeId: 1 as Protocol.DOM.BackendNodeId, children: [] }],
167
185
  },
168
186
  {
169
187
  role: 'generic',
@@ -186,35 +204,51 @@ describe('aria-snapshot tree filters', () => {
186
204
  ],
187
205
  }
188
206
 
189
- const domByBackendId = new Map<Protocol.DOM.BackendNodeId, {
190
- nodeId: Protocol.DOM.NodeId
191
- parentId?: Protocol.DOM.NodeId
192
- backendNodeId: Protocol.DOM.BackendNodeId
193
- nodeName: string
194
- attributes: Map<string, string>
195
- }>([
196
- [1 as Protocol.DOM.BackendNodeId, {
197
- nodeId: 10 as Protocol.DOM.NodeId,
198
- backendNodeId: 1 as Protocol.DOM.BackendNodeId,
199
- nodeName: 'BUTTON',
200
- attributes: new Map([['id', 'save-btn']]),
201
- }],
202
- [2 as Protocol.DOM.BackendNodeId, {
203
- nodeId: 11 as Protocol.DOM.NodeId,
204
- backendNodeId: 2 as Protocol.DOM.BackendNodeId,
205
- nodeName: 'A',
206
- attributes: new Map([['data-testid', 'nav-home']]),
207
- }],
208
- [3 as Protocol.DOM.BackendNodeId, {
209
- nodeId: 12 as Protocol.DOM.NodeId,
210
- backendNodeId: 3 as Protocol.DOM.BackendNodeId,
211
- nodeName: 'BUTTON',
212
- attributes: new Map([['id', 'ignored-action']]),
213
- }],
207
+ const domByBackendId = new Map<
208
+ Protocol.DOM.BackendNodeId,
209
+ {
210
+ nodeId: Protocol.DOM.NodeId
211
+ parentId?: Protocol.DOM.NodeId
212
+ backendNodeId: Protocol.DOM.BackendNodeId
213
+ nodeName: string
214
+ attributes: Map<string, string>
215
+ }
216
+ >([
217
+ [
218
+ 1 as Protocol.DOM.BackendNodeId,
219
+ {
220
+ nodeId: 10 as Protocol.DOM.NodeId,
221
+ backendNodeId: 1 as Protocol.DOM.BackendNodeId,
222
+ nodeName: 'BUTTON',
223
+ attributes: new Map([['id', 'save-btn']]),
224
+ },
225
+ ],
226
+ [
227
+ 2 as Protocol.DOM.BackendNodeId,
228
+ {
229
+ nodeId: 11 as Protocol.DOM.NodeId,
230
+ backendNodeId: 2 as Protocol.DOM.BackendNodeId,
231
+ nodeName: 'A',
232
+ attributes: new Map([['data-testid', 'nav-home']]),
233
+ },
234
+ ],
235
+ [
236
+ 3 as Protocol.DOM.BackendNodeId,
237
+ {
238
+ nodeId: 12 as Protocol.DOM.NodeId,
239
+ backendNodeId: 3 as Protocol.DOM.BackendNodeId,
240
+ nodeName: 'BUTTON',
241
+ attributes: new Map([['id', 'ignored-action']]),
242
+ },
243
+ ],
214
244
  ])
215
245
 
216
246
  let refCounter = 0
217
- const createRefForNode = (options: { backendNodeId?: Protocol.DOM.BackendNodeId; role: string; name: string }): string => {
247
+ const createRefForNode = (options: {
248
+ backendNodeId?: Protocol.DOM.BackendNodeId
249
+ role: string
250
+ name: string
251
+ }): string => {
218
252
  refCounter += 1
219
253
  return `${options.role}-${options.name}-${refCounter}`
220
254
  }
@@ -317,31 +351,43 @@ describe('aria-snapshot tree filters', () => {
317
351
  ],
318
352
  }
319
353
 
320
- const domByBackendId = new Map<Protocol.DOM.BackendNodeId, {
321
- nodeId: Protocol.DOM.NodeId
322
- parentId?: Protocol.DOM.NodeId
323
- backendNodeId: Protocol.DOM.BackendNodeId
324
- nodeName: string
325
- attributes: Map<string, string>
326
- }>([
327
- [2 as Protocol.DOM.BackendNodeId, {
328
- nodeId: 20 as Protocol.DOM.NodeId,
329
- backendNodeId: 2 as Protocol.DOM.BackendNodeId,
330
- nodeName: 'INPUT',
331
- attributes: new Map([['data-testid', 'email-input']]),
332
- }],
333
- [3 as Protocol.DOM.BackendNodeId, {
334
- nodeId: 21 as Protocol.DOM.NodeId,
335
- backendNodeId: 3 as Protocol.DOM.BackendNodeId,
336
- nodeName: 'BUTTON',
337
- attributes: new Map([['id', 'save-primary']]),
338
- }],
339
- [4 as Protocol.DOM.BackendNodeId, {
340
- nodeId: 22 as Protocol.DOM.NodeId,
341
- backendNodeId: 4 as Protocol.DOM.BackendNodeId,
342
- nodeName: 'BUTTON',
343
- attributes: new Map([['id', 'save-secondary']]),
344
- }],
354
+ const domByBackendId = new Map<
355
+ Protocol.DOM.BackendNodeId,
356
+ {
357
+ nodeId: Protocol.DOM.NodeId
358
+ parentId?: Protocol.DOM.NodeId
359
+ backendNodeId: Protocol.DOM.BackendNodeId
360
+ nodeName: string
361
+ attributes: Map<string, string>
362
+ }
363
+ >([
364
+ [
365
+ 2 as Protocol.DOM.BackendNodeId,
366
+ {
367
+ nodeId: 20 as Protocol.DOM.NodeId,
368
+ backendNodeId: 2 as Protocol.DOM.BackendNodeId,
369
+ nodeName: 'INPUT',
370
+ attributes: new Map([['data-testid', 'email-input']]),
371
+ },
372
+ ],
373
+ [
374
+ 3 as Protocol.DOM.BackendNodeId,
375
+ {
376
+ nodeId: 21 as Protocol.DOM.NodeId,
377
+ backendNodeId: 3 as Protocol.DOM.BackendNodeId,
378
+ nodeName: 'BUTTON',
379
+ attributes: new Map([['id', 'save-primary']]),
380
+ },
381
+ ],
382
+ [
383
+ 4 as Protocol.DOM.BackendNodeId,
384
+ {
385
+ nodeId: 22 as Protocol.DOM.NodeId,
386
+ backendNodeId: 4 as Protocol.DOM.BackendNodeId,
387
+ nodeName: 'BUTTON',
388
+ attributes: new Map([['id', 'save-secondary']]),
389
+ },
390
+ ],
345
391
  ])
346
392
 
347
393
  let refCounter = 0
@@ -432,13 +478,16 @@ describe('aria-snapshot tree filters', () => {
432
478
  ],
433
479
  }
434
480
 
435
- const domByBackendId = new Map<Protocol.DOM.BackendNodeId, {
436
- nodeId: Protocol.DOM.NodeId
437
- parentId?: Protocol.DOM.NodeId
438
- backendNodeId: Protocol.DOM.BackendNodeId
439
- nodeName: string
440
- attributes: Map<string, string>
441
- }>()
481
+ const domByBackendId = new Map<
482
+ Protocol.DOM.BackendNodeId,
483
+ {
484
+ nodeId: Protocol.DOM.NodeId
485
+ parentId?: Protocol.DOM.NodeId
486
+ backendNodeId: Protocol.DOM.BackendNodeId
487
+ nodeName: string
488
+ attributes: Map<string, string>
489
+ }
490
+ >()
442
491
 
443
492
  const createRefForNode = (): string | null => {
444
493
  return null
@@ -491,25 +540,34 @@ describe('aria-snapshot tree filters', () => {
491
540
  ],
492
541
  }
493
542
 
494
- const domByBackendId = new Map<Protocol.DOM.BackendNodeId, {
495
- nodeId: Protocol.DOM.NodeId
496
- parentId?: Protocol.DOM.NodeId
497
- backendNodeId: Protocol.DOM.BackendNodeId
498
- nodeName: string
499
- attributes: Map<string, string>
500
- }>([
501
- [5 as Protocol.DOM.BackendNodeId, {
502
- nodeId: 30 as Protocol.DOM.NodeId,
503
- backendNodeId: 5 as Protocol.DOM.BackendNodeId,
504
- nodeName: 'BUTTON',
505
- attributes: new Map([['id', 'delete']]),
506
- }],
507
- [6 as Protocol.DOM.BackendNodeId, {
508
- nodeId: 31 as Protocol.DOM.NodeId,
509
- backendNodeId: 6 as Protocol.DOM.BackendNodeId,
510
- nodeName: 'BUTTON',
511
- attributes: new Map([['id', 'save']]),
512
- }],
543
+ const domByBackendId = new Map<
544
+ Protocol.DOM.BackendNodeId,
545
+ {
546
+ nodeId: Protocol.DOM.NodeId
547
+ parentId?: Protocol.DOM.NodeId
548
+ backendNodeId: Protocol.DOM.BackendNodeId
549
+ nodeName: string
550
+ attributes: Map<string, string>
551
+ }
552
+ >([
553
+ [
554
+ 5 as Protocol.DOM.BackendNodeId,
555
+ {
556
+ nodeId: 30 as Protocol.DOM.NodeId,
557
+ backendNodeId: 5 as Protocol.DOM.BackendNodeId,
558
+ nodeName: 'BUTTON',
559
+ attributes: new Map([['id', 'delete']]),
560
+ },
561
+ ],
562
+ [
563
+ 6 as Protocol.DOM.BackendNodeId,
564
+ {
565
+ nodeId: 31 as Protocol.DOM.NodeId,
566
+ backendNodeId: 6 as Protocol.DOM.BackendNodeId,
567
+ nodeName: 'BUTTON',
568
+ attributes: new Map([['id', 'save']]),
569
+ },
570
+ ],
513
571
  ])
514
572
 
515
573
  let refCounter = 0
@@ -1,4 +1,6 @@
1
1
  - role=link[name="Skip to content"]
2
+ - role=link[name="join the product roadmap webinar"]
3
+ - role=button[name="Close"]
2
4
  - banner:
3
5
  - role=link[name="Homepage"]
4
6
  - navigation "Global":
@@ -1,4 +1,8 @@
1
1
  - role=link[name="Skip to content"]
2
+ - alert "Announcement":
3
+ - text: "Inside GitHub’s roadmap for agentic development —"
4
+ - role=link[name="join the product roadmap webinar"]
5
+ - role=button[name="Close"]
2
6
  - banner:
3
7
  - heading "Navigation Menu"
4
8
  - role=link[name="Homepage"]
@@ -43,7 +47,7 @@
43
47
  - role=tab[name="Secure"]
44
48
  - paragraph:
45
49
  - text: "Write, test, and fix code quickly with GitHub Copilot, from simple boilerplate to complex features."
46
- - heading "GitHub customers"
50
+ - heading "GITHUB CUSTOMERS"
47
51
  - image "American Airlines"
48
52
  - image "Duolingo"
49
53
  - image "Ernst and Young"