@vardot/varbase-e2e 2.0.0 → 2.0.1

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 (60) hide show
  1. package/.playwright-mcp/console-2026-08-09T19-48-04-420Z.log +6 -0
  2. package/.playwright-mcp/console-2026-08-09T19-48-21-910Z.log +4 -0
  3. package/.playwright-mcp/console-2026-08-09T19-48-37-544Z.log +5 -0
  4. package/.playwright-mcp/console-2026-08-09T20-02-58-240Z.log +5 -0
  5. package/.playwright-mcp/console-2026-08-09T20-15-05-487Z.log +71 -0
  6. package/.playwright-mcp/console-2026-08-09T20-31-11-228Z.log +14 -0
  7. package/.playwright-mcp/console-2026-08-09T20-34-03-115Z.log +7 -0
  8. package/.playwright-mcp/console-2026-08-09T20-34-34-018Z.log +85 -0
  9. package/.playwright-mcp/console-2026-08-09T20-34-34-740Z.log +46 -0
  10. package/.playwright-mcp/console-2026-08-09T20-34-35-618Z.log +92 -0
  11. package/.playwright-mcp/console-2026-08-09T22-57-59-606Z.log +14 -0
  12. package/.playwright-mcp/console-2026-08-09T23-09-53-902Z.log +28 -0
  13. package/.playwright-mcp/console-2026-08-09T23-09-55-918Z.log +49 -0
  14. package/.playwright-mcp/console-2026-08-09T23-09-57-522Z.log +42 -0
  15. package/.playwright-mcp/console-2026-08-09T23-40-26-847Z.log +28 -0
  16. package/.playwright-mcp/console-2026-08-10T00-05-53-423Z.log +8 -0
  17. package/.playwright-mcp/page-2026-08-09T19-48-23-422Z.yml +288 -0
  18. package/.playwright-mcp/page-2026-08-09T19-48-32-827Z.yml +39 -0
  19. package/.playwright-mcp/page-2026-08-09T19-48-39-150Z.yml +39 -0
  20. package/.playwright-mcp/page-2026-08-09T19-50-55-594Z.yml +787 -0
  21. package/.playwright-mcp/page-2026-08-09T19-51-28-160Z.yml +391 -0
  22. package/.playwright-mcp/page-2026-08-09T19-51-45-546Z.yml +391 -0
  23. package/.playwright-mcp/page-2026-08-09T19-51-46-085Z.yml +391 -0
  24. package/.playwright-mcp/page-2026-08-09T19-51-46-355Z.yml +391 -0
  25. package/.playwright-mcp/page-2026-08-09T19-51-49-918Z.yml +391 -0
  26. package/.playwright-mcp/page-2026-08-09T19-52-30-248Z.yml +415 -0
  27. package/.playwright-mcp/page-2026-08-09T19-52-42-510Z.yml +415 -0
  28. package/.playwright-mcp/page-2026-08-09T19-52-45-588Z.yml +391 -0
  29. package/.playwright-mcp/page-2026-08-09T19-52-54-615Z.yml +391 -0
  30. package/.playwright-mcp/page-2026-08-09T19-52-55-424Z.yml +391 -0
  31. package/.playwright-mcp/page-2026-08-09T19-52-55-553Z.yml +391 -0
  32. package/.playwright-mcp/page-2026-08-09T19-52-58-991Z.yml +391 -0
  33. package/.playwright-mcp/page-2026-08-09T19-53-29-261Z.yml +415 -0
  34. package/.playwright-mcp/page-2026-08-09T19-53-40-322Z.yml +415 -0
  35. package/.playwright-mcp/page-2026-08-09T19-53-44-146Z.yml +391 -0
  36. package/.playwright-mcp/page-2026-08-09T19-53-51-021Z.yml +391 -0
  37. package/.playwright-mcp/page-2026-08-09T19-53-51-565Z.yml +391 -0
  38. package/.playwright-mcp/page-2026-08-09T19-53-51-979Z.yml +391 -0
  39. package/.playwright-mcp/page-2026-08-09T19-53-54-883Z.yml +391 -0
  40. package/.playwright-mcp/page-2026-08-09T19-54-24-537Z.yml +415 -0
  41. package/.playwright-mcp/page-2026-08-09T20-01-07-921Z.yml +404 -0
  42. package/.playwright-mcp/page-2026-08-09T20-01-35-366Z.yml +404 -0
  43. package/.playwright-mcp/page-2026-08-09T20-01-54-083Z.yml +404 -0
  44. package/.playwright-mcp/page-2026-08-09T20-02-07-954Z.yml +416 -0
  45. package/.playwright-mcp/page-2026-08-09T20-02-24-800Z.yml +404 -0
  46. package/.playwright-mcp/page-2026-08-09T20-02-29-695Z.yml +404 -0
  47. package/.playwright-mcp/page-2026-08-09T20-02-33-819Z.yml +404 -0
  48. package/.playwright-mcp/page-2026-08-09T20-02-41-437Z.yml +404 -0
  49. package/.playwright-mcp/page-2026-08-09T20-02-53-232Z.yml +416 -0
  50. package/.playwright-mcp/page-2026-08-09T20-03-00-246Z.yml +404 -0
  51. package/.playwright-mcp/page-2026-08-09T20-03-03-297Z.yml +404 -0
  52. package/.playwright-mcp/page-2026-08-09T20-03-11-014Z.yml +404 -0
  53. package/.playwright-mcp/page-2026-08-09T20-03-21-049Z.yml +416 -0
  54. package/AGENTS.md +4 -2
  55. package/CLAUDE.md +22 -8
  56. package/docs/README.md +4 -3
  57. package/package.json +1 -1
  58. package/tests/step-definitions/action.steps.js +11 -3
  59. package/tests/step-definitions/drupal-layout-builder.steps.js +12 -5
  60. package/tests/step-definitions/drupal-media.steps.js +8 -1
@@ -0,0 +1,416 @@
1
+ - generic [active] [ref=f3e1]:
2
+ - generic:
3
+ - link "Skip to main content" [ref=f3e2] [cursor=pointer]:
4
+ - /url: "#content"
5
+ - link "Skip to search" [ref=f3e3] [cursor=pointer]:
6
+ - /url: "#search-block-form"
7
+ - navigation [ref=f3e5]:
8
+ - generic [ref=f3e6]:
9
+ - generic [ref=f3e7]:
10
+ - generic:
11
+ - generic:
12
+ - generic:
13
+ - list:
14
+ - listitem [ref=f3e8]:
15
+ - link "Drupal.org home" [ref=f3e9] [cursor=pointer]:
16
+ - /url: /home
17
+ - listitem [ref=f3e10]:
18
+ - link "Discover Drupal" [ref=f3e11] [cursor=pointer]:
19
+ - /url: https://www.drupal.org/about/overview/technical
20
+ - listitem [ref=f3e12]:
21
+ - link "Build with Drupal" [ref=f3e13] [cursor=pointer]:
22
+ - /url: https://www.drupal.org/docs/official_docs/local-development-guide
23
+ - listitem [ref=f3e14]:
24
+ - link "Partners & Services" [ref=f3e15] [cursor=pointer]:
25
+ - /url: https://www.drupal.org/drupal-services
26
+ - listitem [ref=f3e16]:
27
+ - link "Community" [ref=f3e17] [cursor=pointer]:
28
+ - /url: https://www.drupal.org/community
29
+ - listitem [ref=f3e18]:
30
+ - link "Support Drupal" [ref=f3e19] [cursor=pointer]:
31
+ - /url: /association
32
+ - listitem [ref=f3e20]:
33
+ - link "Get Started" [ref=f3e21] [cursor=pointer]:
34
+ - /url: /try-hosting
35
+ - generic [ref=f3e27]:
36
+ - heading "Search form" [level=2] [ref=f3e28]
37
+ - generic: Search
38
+ - button "Search" [ref=f3e31] [cursor=pointer]
39
+ - generic [ref=f3e32]:
40
+ - generic:
41
+ - generic:
42
+ - generic:
43
+ - list:
44
+ - listitem:
45
+ - link [ref=f3e33] [cursor=pointer]:
46
+ - /url: "#block-system-user-menu"
47
+ - img "Log in, view profile, and more" [ref=f3e34]
48
+ - link [ref=f3e39] [cursor=pointer]:
49
+ - /url: /
50
+ - img "Drupal.org" [ref=f3e40]
51
+ - generic [ref=f3e42]:
52
+ - generic [ref=f3e43]:
53
+ - navigation [ref=f3e45]:
54
+ - link "General projects" [ref=f3e47] [cursor=pointer]:
55
+ - /url: /project/project_general
56
+ - link "Varbase Project Template" [ref=f3e49] [cursor=pointer]:
57
+ - /url: /project/varbase_project
58
+ - link "Issues" [ref=f3e51] [cursor=pointer]:
59
+ - /url: /project/issues/varbase_project
60
+ - 'heading "task: Switch the Varbase functional testing suite to Varbase E2E on 9.2.x" [level=1] [ref=f3e52]'
61
+ - generic [ref=f3e53]:
62
+ - heading "Primary tabs" [level=2] [ref=f3e54]
63
+ - list [ref=f3e55]:
64
+ - listitem [ref=f3e56]:
65
+ - link "View (active tab)" [ref=f3e57] [cursor=pointer]:
66
+ - /url: /project/varbase_project/issues/3615713
67
+ - text: View
68
+ - generic [ref=f3e58]: (active tab)
69
+ - listitem [ref=f3e59]:
70
+ - link "Edit" [ref=f3e60] [cursor=pointer]:
71
+ - /url: /node/3615713/edit
72
+ - generic [ref=f3e61]:
73
+ - complementary [ref=f3e62]:
74
+ - generic [ref=f3e67]:
75
+ - generic [ref=f3e68]: Active
76
+ - generic [ref=f3e71]:
77
+ - generic [ref=f3e72]: "Project:"
78
+ - generic [ref=f3e73]: Varbase Project Template
79
+ - generic [ref=f3e75]:
80
+ - generic [ref=f3e76]: "Version:"
81
+ - generic [ref=f3e77]: 9.2.x-dev
82
+ - generic [ref=f3e79]:
83
+ - generic [ref=f3e80]: "Component:"
84
+ - generic [ref=f3e81]: Code
85
+ - generic [ref=f3e83]:
86
+ - generic [ref=f3e84]: "Priority:"
87
+ - generic [ref=f3e85]: Normal
88
+ - generic [ref=f3e87]:
89
+ - generic [ref=f3e88]: "Category:"
90
+ - generic [ref=f3e89]: Task
91
+ - generic [ref=f3e91]:
92
+ - generic [ref=f3e92]: "Assigned:"
93
+ - generic [ref=f3e93]: Unassigned
94
+ - generic [ref=f3e95]:
95
+ - generic [ref=f3e96]: "Reporter:"
96
+ - link "rajab natshah" [ref=f3e99] [cursor=pointer]:
97
+ - /url: /u/rajab-natshah
98
+ - generic [ref=f3e100]:
99
+ - generic [ref=f3e101]: "Created:"
100
+ - generic [ref=f3e102]: 9 Aug 2026 at 22:54 +03
101
+ - generic [ref=f3e104]:
102
+ - generic [ref=f3e105]: "Updated:"
103
+ - generic [ref=f3e106]: 9 Aug 2026 at 22:54 +03
104
+ - generic [ref=f3e108]:
105
+ - link "Following" [ref=f3e109] [cursor=pointer]:
106
+ - /url: /flag/unflag/project_issue_follow/3615713?destination=node/3615713&token=Si8owP4UUqm59BxlPtzMAGr0hNyjv8tfHNFl-OXzOAg
107
+ - text: 1 follower
108
+ - generic [ref=f3e111]:
109
+ - text: "Jump to comment:"
110
+ - link "Most recent" [ref=f3e112] [cursor=pointer]:
111
+ - /url: /project/varbase_project/issues/3615713#comment-16724237
112
+ - text: ","
113
+ - link "Add new" [ref=f3e113] [cursor=pointer]:
114
+ - /url: /project/varbase_project/issues/3615713#project-issue-ajax-form
115
+ - main [ref=f3e114]:
116
+ - generic [ref=f3e120]:
117
+ - generic [ref=f3e122]:
118
+ - generic [ref=f3e125]:
119
+ - heading "Problem/Motivation" [level=3] [ref=f3e126]
120
+ - paragraph [ref=f3e127]:
121
+ - text: The Varbase functional testing suite on this branch still depends on the previous testing package. The harness now ships as Varbase E2E (
122
+ - code [ref=f3e128]: "@vardot/varbase-e2e"
123
+ - text: 2.0.0), which includes the Drupal and Varbase step packs as built-ins. Keeping local copies makes scenarios ambiguous and cuts this project off from upstream fixes.
124
+ - heading "Steps to reproduce" [level=4] [ref=f3e129]
125
+ - paragraph [ref=f3e130]:
126
+ - text: Run
127
+ - code [ref=f3e131]: grep -rn "VARBASE_E2E\|varbase-e2e" package.json cucumber.js
128
+ - text: on 9.2.x — it still points at the previous package.
129
+ - heading "Proposed resolution" [level=3] [ref=f3e132]
130
+ - list [ref=f3e133]:
131
+ - listitem [ref=f3e134]:
132
+ - text: Depend on
133
+ - code [ref=f3e135]: "@vardot/varbase-e2e ^2.0.0"
134
+ - text: ; update
135
+ - code [ref=f3e136]: cucumber.js
136
+ - text: require globs and the report script path.
137
+ - listitem [ref=f3e137]: Re-point custom step helper imports at the new package.
138
+ - listitem [ref=f3e138]: Remove custom steps now shipped as built-ins; keep only project-specific ones.
139
+ - listitem [ref=f3e139]:
140
+ - text: Rename env vars to the
141
+ - code [ref=f3e140]: VARBASE_E2E_*
142
+ - text: family across config/CI/DDEV.
143
+ - listitem [ref=f3e141]:
144
+ - text: Verify with
145
+ - code [ref=f3e142]: npx cucumber-js --dry-run
146
+ - text: (zero ambiguous/undefined), then CI.
147
+ - paragraph [ref=f3e143]:
148
+ - emphasis [ref=f3e144]: "AI-Generated: Yes"
149
+ - heading "Remaining tasks" [level=3] [ref=f3e145]
150
+ - list [ref=f3e146]:
151
+ - listitem [ref=f3e147]: ✅ File an issue
152
+ - listitem [ref=f3e148]: ❌ Addition/Change/Update/Fix
153
+ - listitem [ref=f3e149]: ❌ Testing to ensure no regression
154
+ - listitem [ref=f3e150]: ➖ Automated unit testing coverage
155
+ - listitem [ref=f3e151]: ❌ Automated functional testing coverage
156
+ - listitem [ref=f3e152]: ➖ UX/UI designer responsibilities
157
+ - listitem [ref=f3e153]: ❌ Readability
158
+ - listitem [ref=f3e154]: ➖ Accessibility
159
+ - listitem [ref=f3e155]: ➖ Performance
160
+ - listitem [ref=f3e156]: ➖ Security
161
+ - listitem [ref=f3e157]: ❌ Developer Documentation
162
+ - listitem [ref=f3e158]: ➖ User Guide Documentation
163
+ - listitem [ref=f3e159]: ➖ Reviewed by human
164
+ - listitem [ref=f3e160]: ➖ Code review by maintainers
165
+ - listitem [ref=f3e161]: ➖ Full testing and approval
166
+ - listitem [ref=f3e162]: ➖ Credit contributors
167
+ - listitem [ref=f3e163]: ➖ Review with the product owner
168
+ - listitem [ref=f3e164]: ➖ Release notes snippet
169
+ - listitem [ref=f3e165]: ❌ Release
170
+ - heading "User interface changes" [level=3] [ref=f3e166]
171
+ - list [ref=f3e167]:
172
+ - listitem [ref=f3e168]: N/A
173
+ - heading "API changes" [level=3] [ref=f3e169]
174
+ - list [ref=f3e170]:
175
+ - listitem [ref=f3e171]: N/A
176
+ - heading "Data model changes" [level=3] [ref=f3e172]
177
+ - list [ref=f3e173]:
178
+ - listitem [ref=f3e174]: N/A
179
+ - heading "Release notes snippet" [level=3] [ref=f3e175]
180
+ - list [ref=f3e176]:
181
+ - listitem [ref=f3e177]:
182
+ - text: The Varbase functional testing suite now runs on Varbase E2E (
183
+ - code [ref=f3e178]: "@vardot/varbase-e2e"
184
+ - text: 2.0.0).
185
+ - generic [ref=f3e179]:
186
+ - generic [ref=f3e375]:
187
+ - generic [ref=f3e376]:
188
+ - heading [level=3] [ref=f3e377]:
189
+ - text: Issue fork
190
+ - link "varbase_project-3615713" [ref=f3e378] [cursor=pointer]:
191
+ - /url: https://git.drupalcode.org/issue/varbase_project-3615713
192
+ - generic [ref=f3e379]: ✓ You have push access
193
+ - group:
194
+ - generic [ref=f3e383]:
195
+ - img "Command icon" [ref=f3e384]
196
+ - text: Show commands
197
+ - list [ref=f3e386]:
198
+ - listitem [ref=f3e387]:
199
+ - strong [ref=f3e388]:
200
+ - link "3615713-varbase-e2e" [ref=f3e389] [cursor=pointer]:
201
+ - /url: https://git.drupalcode.org/issue/varbase_project-3615713/-/tree/3615713-varbase-e2e
202
+ - link [ref=f3e390] [cursor=pointer]:
203
+ - /url: https://git.drupalcode.org/issue/varbase_project-3615713/-/compare/9.2.x...3615713-varbase-e2e
204
+ - img "Compare" [ref=f3e391]
205
+ - text: compare
206
+ - link "Hide branch" [ref=f3e392] [cursor=pointer]:
207
+ - /url: /drupalorg_toggle_branch_visibility/239030/3615713-varbase-e2e/hidden?token=lZ0AugERRWHJ0Qi-yKhQC5al9sjLpDhFk1aK-vx-sZ8&destination=system/ajax
208
+ - link "Create new branch" [ref=f3e394] [cursor=pointer]:
209
+ - /url: https://git.drupalcode.org/issue/varbase_project-3615713/-/branches/new?branch_name=3615713-&ref=9.2.x
210
+ - link "About issue forks" [ref=f3e193] [cursor=pointer]:
211
+ - /url: /docs/develop/git/using-gitlab-to-contribute-to-drupal/creating-issue-forks
212
+ - generic [ref=f3e194]:
213
+ - heading "Comments" [level=2] [ref=f3e195]
214
+ - generic [ref=f3e196]:
215
+ - heading [level=3]
216
+ - heading [level=3] [ref=f3e198]:
217
+ - 'link "Comment #1" [ref=f3e199] [cursor=pointer]':
218
+ - /url: /project/varbase_project/issues/3615713#comment-16724237
219
+ - generic [ref=f3e200]: Comment
220
+ - text: "#1"
221
+ - paragraph [ref=f3e205]:
222
+ - link "rajab natshah" [ref=f3e206] [cursor=pointer]:
223
+ - /url: /u/rajab-natshah
224
+ - text: created an issue.
225
+ - list [ref=f3e207]:
226
+ - listitem [ref=f3e208]:
227
+ - link "edit" [ref=f3e209] [cursor=pointer]:
228
+ - /url: /comment/16724237/edit
229
+ - listitem [ref=f3e210]:
230
+ - link "report as spam" [ref=f3e213] [cursor=pointer]:
231
+ - /url: /flag/flag/drupalorg_comment_spam/16724237?destination=node/3615713&token=HNJ6tT2n_8QrBDZwXf0hwXi-pyU_S7Wky6mir7xpJ-0
232
+ - complementary [ref=f3e214]:
233
+ - generic [ref=f3e216]:
234
+ - link "Contribution record" [ref=f3e220] [cursor=pointer]:
235
+ - /url: https://new.drupal.org/contribution-record?source_link=https%3A//www.drupal.org/node/3615713
236
+ - generic [ref=f3e225]:
237
+ - link "Add child issue" [ref=f3e226] [cursor=pointer]:
238
+ - /url: /node/add/project-issue/varbase_project?field_issue_parent_link=https%3A//www.drupal.org/node/3615713
239
+ - text: ","
240
+ - link "clone issue" [ref=f3e227] [cursor=pointer]:
241
+ - /url: /node/add/project-issue/varbase_project?title=task%3A%20Switch%20the%20Varbase%20functional%20testing%20suite%20to%20Varbase%20E2E%20on%209.2.x&field_issue_parent_link=https%3A//www.drupal.org/node/3615713&clone_body=1&categories=2&priorities=200&status=1&version=9.2.x-dev&component=Code&assigned=0&tags=
242
+ - text: ","
243
+ - link "add change notice" [ref=f3e228] [cursor=pointer]:
244
+ - /url: /node/add/changenotice?field_project=3401545&field_issue_links=https%3A//www.drupal.org/node/3615713
245
+ - complementary [ref=f3e229]:
246
+ - generic [ref=f3e233]:
247
+ - heading "Add new comment" [level=2] [ref=f3e234]
248
+ - generic [ref=f3e237]:
249
+ - group [ref=f3e238]:
250
+ - link "Show Issue metadata" [ref=f3e241] [cursor=pointer]:
251
+ - /url: "#"
252
+ - generic [ref=f3e242]: Show
253
+ - text: Issue metadata
254
+ - generic [ref=f3e246]:
255
+ - generic [ref=f3e247]:
256
+ - generic [ref=f3e248]: Comment
257
+ - generic [ref=f3e249]:
258
+ - toolbar [ref=f3e250]:
259
+ - button "Bold(B)" [ref=f3e251] [cursor=pointer]
260
+ - button "Italic(I)" [ref=f3e252] [cursor=pointer]
261
+ - button "Strike-through" [ref=f3e253] [cursor=pointer]
262
+ - button "Heading 2" [ref=f3e254] [cursor=pointer]
263
+ - button "Heading 3" [ref=f3e255] [cursor=pointer]
264
+ - button "Heading 4" [ref=f3e256] [cursor=pointer]
265
+ - button "Quote" [ref=f3e257] [cursor=pointer]
266
+ - button "code" [ref=f3e258] [cursor=pointer]
267
+ - button "PHP" [ref=f3e259] [cursor=pointer]
268
+ - button "Insert/edit image(M)" [ref=f3e260] [cursor=pointer]
269
+ - button "Insert/edit link(L)" [ref=f3e261] [cursor=pointer]
270
+ - button "Ordered list. Converts selected lines to a numbered list.(O)" [ref=f3e262] [cursor=pointer]
271
+ - button "Unordered list. Converts selected lines to a bulleted list.(U)" [ref=f3e263] [cursor=pointer]
272
+ - button "Get help on button functionality.(H)" [ref=f3e264] [cursor=pointer]
273
+ - textbox "Comment" [ref=f3e265]
274
+ - group "Show Text format" [ref=f3e267]:
275
+ - paragraph [ref=f3e269]:
276
+ - link "More information about text formats" [ref=f3e270] [cursor=pointer]:
277
+ - /url: /filter/tips
278
+ - group [ref=f3e271]:
279
+ - link "Show Issue summary & relationships" [ref=f3e274] [cursor=pointer]:
280
+ - /url: "#"
281
+ - generic [ref=f3e275]: Show
282
+ - text: Issue summary & relationships
283
+ - group [ref=f3e278]:
284
+ - link "Show Files" [ref=f3e281] [cursor=pointer]:
285
+ - /url: "#"
286
+ - generic [ref=f3e282]: Show
287
+ - text: Files
288
+ - paragraph [ref=f3e283]:
289
+ - text: Be sure to
290
+ - link "update the contribution record" [ref=f3e284] [cursor=pointer]:
291
+ - /url: https://new.drupal.org/contribution-record?source_link=https%3A//www.drupal.org/node/3615713
292
+ - generic [ref=f3e285]:
293
+ - button "Save" [ref=f3e286]
294
+ - button "Preview" [ref=f3e287]
295
+ - button "View changes" [ref=f3e288]
296
+ - contentinfo [ref=f3e289]:
297
+ - generic [ref=f3e290]:
298
+ - generic [ref=f3e293]:
299
+ - link [ref=f3e294] [cursor=pointer]:
300
+ - /url: https://www.tag1.com/?utm_source=DA&utm_medium=referral&utm_campaign=drupal-org-footer
301
+ - text: Infrastructure management for Drupal.org provided by
302
+ - img "Tag1 logo" [ref=f3e295]
303
+ - link "Need a Drupal 7 extended support partner? Consider Tag1." [ref=f3e297] [cursor=pointer]:
304
+ - /url: https://d7es.tag1.com/plans?utm_source=DA&utm_medium=footer&utm_campaign=EOL&utm_id=d7es&utm_term=plans&utm_content=Dec
305
+ - generic [ref=f3e298]:
306
+ - generic:
307
+ - generic:
308
+ - heading "News items" [level=4] [ref=f3e299]
309
+ - list [ref=f3e300]:
310
+ - listitem [ref=f3e301]:
311
+ - link "News" [ref=f3e302] [cursor=pointer]:
312
+ - /url: https://www.drupal.org/news
313
+ - listitem [ref=f3e303]:
314
+ - link "Planet Drupal" [ref=f3e304] [cursor=pointer]:
315
+ - /url: https://www.drupal.org/planet
316
+ - listitem [ref=f3e305]:
317
+ - link "Social media" [ref=f3e306] [cursor=pointer]:
318
+ - /url: https://www.drupal.org/about/media-kit/social-media
319
+ - listitem [ref=f3e307]:
320
+ - link "Sign up for Drupal news" [ref=f3e308] [cursor=pointer]:
321
+ - /url: https://www.drupal.org/subscribe
322
+ - listitem [ref=f3e309]:
323
+ - link "Security advisories" [ref=f3e310] [cursor=pointer]:
324
+ - /url: https://www.drupal.org/security
325
+ - listitem [ref=f3e311]:
326
+ - link "Jobs" [ref=f3e312] [cursor=pointer]:
327
+ - /url: https://jobs.drupal.org/
328
+ - heading "Our community" [level=4] [ref=f3e313]
329
+ - list [ref=f3e314]:
330
+ - listitem [ref=f3e315]:
331
+ - link "Community" [ref=f3e316] [cursor=pointer]:
332
+ - /url: https://www.drupal.org/community
333
+ - listitem [ref=f3e317]:
334
+ - generic [ref=f3e318]:
335
+ - link "Services" [ref=f3e319] [cursor=pointer]:
336
+ - /url: https://www.drupal.org/drupal-services
337
+ - text: ","
338
+ - link "Training" [ref=f3e320] [cursor=pointer]:
339
+ - /url: https://www.drupal.org/training
340
+ - text: "&"
341
+ - link "Hosting" [ref=f3e321] [cursor=pointer]:
342
+ - /url: https://www.drupal.org/hosting
343
+ - listitem [ref=f3e322]:
344
+ - link "Contributor guide" [ref=f3e323] [cursor=pointer]:
345
+ - /url: https://www.drupal.org/community/contributor-guide
346
+ - listitem [ref=f3e324]:
347
+ - link "Groups & meetups" [ref=f3e325] [cursor=pointer]:
348
+ - /url: https://groups.drupal.org/groups
349
+ - listitem [ref=f3e326]:
350
+ - link "DrupalCon" [ref=f3e327] [cursor=pointer]:
351
+ - /url: https://events.drupal.org
352
+ - listitem [ref=f3e328]:
353
+ - link "Code of conduct" [ref=f3e329] [cursor=pointer]:
354
+ - /url: https://www.drupal.org/dcoc
355
+ - heading "Documentation" [level=4] [ref=f3e330]
356
+ - list [ref=f3e331]:
357
+ - listitem [ref=f3e332]:
358
+ - link "Documentation" [ref=f3e333] [cursor=pointer]:
359
+ - /url: https://www.drupal.org/documentation
360
+ - listitem [ref=f3e334]:
361
+ - link "Drupal Guide" [ref=f3e335] [cursor=pointer]:
362
+ - /url: https://www.drupal.org/docs
363
+ - listitem [ref=f3e336]:
364
+ - link "Drupal User Guide" [ref=f3e337] [cursor=pointer]:
365
+ - /url: https://www.drupal.org/docs/user_guide/en/index.html
366
+ - listitem [ref=f3e338]:
367
+ - link "Developer docs" [ref=f3e339] [cursor=pointer]:
368
+ - /url: https://www.drupal.org/documentation/develop
369
+ - listitem [ref=f3e340]:
370
+ - link "API.Drupal.org" [ref=f3e341] [cursor=pointer]:
371
+ - /url: https://api.drupal.org/
372
+ - heading "Drupal code base" [level=4] [ref=f3e342]
373
+ - list [ref=f3e343]:
374
+ - listitem [ref=f3e344]:
375
+ - link "Download & Extend" [ref=f3e345] [cursor=pointer]:
376
+ - /url: https://www.drupal.org/download
377
+ - listitem [ref=f3e346]:
378
+ - link "Drupal core" [ref=f3e347] [cursor=pointer]:
379
+ - /url: https://www.drupal.org/project/drupal
380
+ - listitem [ref=f3e348]:
381
+ - link "Modules" [ref=f3e349] [cursor=pointer]:
382
+ - /url: https://www.drupal.org/project/project_module
383
+ - listitem [ref=f3e350]:
384
+ - link "Themes" [ref=f3e351] [cursor=pointer]:
385
+ - /url: https://www.drupal.org/project/project_theme
386
+ - listitem [ref=f3e352]:
387
+ - link "Distributions" [ref=f3e353] [cursor=pointer]:
388
+ - /url: https://www.drupal.org/project/project_distribution
389
+ - heading "Governance of community" [level=4] [ref=f3e354]
390
+ - list [ref=f3e355]:
391
+ - listitem [ref=f3e356]:
392
+ - link "About" [ref=f3e357] [cursor=pointer]:
393
+ - /url: https://www.drupal.org/about
394
+ - listitem [ref=f3e358]:
395
+ - link "Web accessibility" [ref=f3e359] [cursor=pointer]:
396
+ - /url: https://www.drupal.org/about/features/accessibility
397
+ - listitem [ref=f3e360]:
398
+ - link "Drupal Association" [ref=f3e361] [cursor=pointer]:
399
+ - /url: https://www.drupal.org/association
400
+ - listitem [ref=f3e362]:
401
+ - link "About Drupal.org" [ref=f3e363] [cursor=pointer]:
402
+ - /url: https://www.drupal.org/drupalorg
403
+ - listitem [ref=f3e364]:
404
+ - link "Terms of service" [ref=f3e365] [cursor=pointer]:
405
+ - /url: https://www.drupal.org/terms
406
+ - listitem [ref=f3e366]:
407
+ - link "Privacy policy" [ref=f3e367] [cursor=pointer]:
408
+ - /url: https://www.drupal.org/privacy
409
+ - paragraph [ref=f3e371]:
410
+ - text: Drupal is a
411
+ - link "registered trademark" [ref=f3e372] [cursor=pointer]:
412
+ - /url: /about/trademark
413
+ - text: of
414
+ - link "Dries Buytaert" [ref=f3e373] [cursor=pointer]:
415
+ - /url: https://dri.es
416
+ - text: .
package/AGENTS.md CHANGED
@@ -133,8 +133,10 @@ Config: `cucumber.js` (`worldParameters`, annotated) and
133
133
  `playwright.config.ts` (browser launch + context), plus the scaffold
134
134
  template in `bin/init-varbase-e2e.js` that must mirror them.
135
135
 
136
- Visual regression: extracted to the [`diffy-steps`](https://github.com/webship/diffy-steps)
137
- plugin not in this repository.
136
+ Visual regression: not in this repository — consumers install a step-pack
137
+ plugin such as [`@webship-js/diffy-steps`](https://github.com/webship/diffy-steps).
138
+ Third-party `*-steps` packs built for the harness this grew from work with
139
+ varbase-e2e unchanged.
138
140
 
139
141
  ## This repo is the package
140
142
 
package/CLAUDE.md CHANGED
@@ -56,7 +56,7 @@ Env vars: `LAUNCH_URL`, `BROWSER`, `HEADLESS`, `SLOW_MO`, `FORCE_COLOR`,
56
56
  `VARBASE_E2E_AUTO_SETTLE`, `VARBASE_E2E_REPORT_DISABLE`, `VARBASE_E2E_REPORT_ARGS`,
57
57
  `VARBASE_E2E_FILTER_HOOK_LINES`, `VARBASE_E2E_SCREENSHOT_*`, `VARBASE_E2E_VIDEO*`,
58
58
  `VARBASE_E2E_JS_ERROR_*`, `VARBASE_E2E_SELECTORS_OFFSET`,
59
- `VARBASE_E2E_SELECTORS_BREAKPOINTS`, `DIFFY_*`. Every one of them mirrors a
59
+ `VARBASE_E2E_SELECTORS_BREAKPOINTS`. Every one of them mirrors a
60
60
  `worldParameters` key in `cucumber.js` — that file is the annotated
61
61
  reference; read it before inventing a new knob.
62
62
 
@@ -150,13 +150,27 @@ names matter more than they look.
150
150
 
151
151
  ### 2.6 Visual regression lives outside this repo
152
152
 
153
- The Diffy step-pack was extracted to its own plugin,
154
- [`diffy-steps`](https://github.com/webship/diffy-steps). varbase-e2e no
155
- longer ships `tests/step-definitions-diffy/`, the `diffy`
156
- `worldParameters` block, or the mock Diffy API. Consumers install the
157
- plugin and add `node_modules/@webship-js/diffy-steps/tests/step-definitions/**/*.js`
158
- to their own `require:` list. Nothing in this repo depends on it — the
159
- steps only ever used `@cucumber/cucumber`, `axios`, and Node built-ins.
153
+ varbase-e2e ships no visual-regression steps: no
154
+ `tests/step-definitions-diffy/`, no `diffy` `worldParameters` block, no
155
+ mock Diffy API. Consumers who want visual regression install a
156
+ step-pack plugin and add its step-definition path to their own
157
+ `require:` list the Diffy pack,
158
+ [`@webship-js/diffy-steps`](https://github.com/webship/diffy-steps), is
159
+ the reference example. Third-party `*-steps` packs built for the
160
+ harness this grew from work with varbase-e2e unchanged: they only ever
161
+ used `@cucumber/cucumber`, `axios`, and Node built-ins, none of which
162
+ this rename touched. Its `DIFFY_*` env vars belong to that plugin, not
163
+ to this package's `cucumber.js`.
164
+
165
+ ```js
166
+ // consumer cucumber.js
167
+ require: [
168
+ 'node_modules/@vardot/varbase-e2e/tests/step-definitions/**/*.js',
169
+ 'node_modules/@webship-js/diffy-steps/tests/step-definitions/**/*.js',
170
+ 'tests/step-definitions/**/*.js',
171
+ ],
172
+ ```
173
+
160
174
  Treat any `diffy` question as a `diffy-steps` question.
161
175
 
162
176
  ### 2.7 CI
package/docs/README.md CHANGED
@@ -44,9 +44,10 @@ The full step catalogue — one page per category, generated from the step defin
44
44
  | [Advanced screenshots](advanced-screenshots.md) | Per-size, full-page, named (3 sub-pages under `advanced-screenshots/`) |
45
45
  | [Advanced selectors](advanced-selectors.md) | Named selector registry, position assertions |
46
46
 
47
- > **Visual regression moved out.** The Diffy step-pack now ships as its own
48
- > plugin, [`diffy-steps`](https://github.com/webship/diffy-steps) — install it
49
- > alongside varbase-e2e and add its step-definition path to `cucumber.js`.
47
+ > **Visual regression moved out.** It ships as a separate step-pack plugin
48
+ > [`@webship-js/diffy-steps`](https://github.com/webship/diffy-steps) — install
49
+ > it alongside varbase-e2e and add its step-definition path to `cucumber.js`.
50
+ > `*-steps` packs built for the harness this grew from work unchanged.
50
51
 
51
52
  ## At a glance
52
53
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vardot/varbase-e2e",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "Varbase E2E automated functional testing.",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -44,10 +44,18 @@ When(/^(I |we )*press( the)* "([^"]*)?"( button)*$/, async function (pronounCase
44
44
  const esc = element.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
45
45
  const page = this.page;
46
46
  await actOrExplain('press button', element, async () => {
47
- await page.locator('button, input[type="button"], input[type="submit"], [role="button"], a')
47
+ const btn = page.locator('button, input[type="button"], input[type="submit"], [role="button"], a')
48
48
  .filter({ hasText: new RegExp('^' + esc + '$') })
49
- .first()
50
- .click();
49
+ .first();
50
+ try {
51
+ await btn.click({ timeout: 15000 });
52
+ } catch (e) {
53
+ // A fixed-position overlay (chat widgets, sticky action bars) can sit on
54
+ // top of a correctly-resolved button and starve the pointer click's
55
+ // actionability checks. The button itself is right — dispatch the click
56
+ // in-page so its handlers (including form submit) still fire.
57
+ await btn.evaluate((el) => el.click());
58
+ }
51
59
  });
52
60
  });
53
61
 
@@ -105,14 +105,21 @@ When(/^(?:I |we )*add section gutters$/, async function () {
105
105
  * Example #5: When we select the "Edge to Edge" container type
106
106
  */
107
107
  When(/^(?:I |we )*select the "([^"]*)" container type(?: with a "([^"]*)" width)?$/, async function (type, width) {
108
- // Real Playwright clicks, not a raw DOM click inside page.evaluate(): the
109
- // LB config sidebar's radio labels are wired through Drupal AJAX behaviors,
110
- // which a synthetic click can silently fail to trigger (see the identical
111
- // issue fixed for "save the section").
108
+ // A real Playwright click first: the LB config sidebar's radio labels are
109
+ // wired through Drupal AJAX behaviors, which a synthetic click can silently
110
+ // fail to trigger (see the identical issue fixed for "save the section").
111
+ // But on some Bootstrap Styles versions these labels are visually-hidden
112
+ // colour/type swatches, so the actionability checks time out even though the
113
+ // label is the right target — fall back to an in-page native click then
114
+ // (the label's own click handler still fires Drupal's behaviors).
112
115
  const clickLabel = async (text, forPrefix) => {
113
116
  const lbl = this.page.locator('label').filter({ hasText: text }).and(this.page.locator(`label[for*="${forPrefix}"]`)).first();
114
117
  if (!(await lbl.count())) return false;
115
- await lbl.click();
118
+ try {
119
+ await lbl.click({ timeout: 10000 });
120
+ } catch (e) {
121
+ await lbl.evaluate((el) => el.click());
122
+ }
116
123
  return true;
117
124
  };
118
125
  if (!(await clickLabel(type, 'edit-layout-settings-ui-tab-content-layout-container-type'))) {
@@ -55,7 +55,14 @@ When(/^(?:I |we )*open the "([^"]*)" media library$/, async function (field) {
55
55
  if (!(await btn.count())) {
56
56
  throw friendly(`No media library open button for the "${field}" field was found.`);
57
57
  }
58
- await btn.click({ timeout: 8000 });
58
+ try {
59
+ await btn.click({ timeout: 8000 });
60
+ } catch (e) {
61
+ // A stale jQuery UI overlay (ui-widget-overlay) from a previous dialog can
62
+ // intercept pointer events over a correctly-resolved button. The button is
63
+ // right - dispatch the click in-page so Drupal's AJAX handler still fires.
64
+ await btn.evaluate((el) => el.click());
65
+ }
59
66
  await smartSettle(this.page, budget(this));
60
67
  });
61
68