@vardot/varbase-e2e 2.0.0 → 2.0.2

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 (234) 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/console-2026-08-10T08-51-59-747Z.log +5 -0
  18. package/.playwright-mcp/console-2026-08-10T09-00-26-735Z.log +7 -0
  19. package/.playwright-mcp/page-2026-08-09T19-48-23-422Z.yml +288 -0
  20. package/.playwright-mcp/page-2026-08-09T19-48-32-827Z.yml +39 -0
  21. package/.playwright-mcp/page-2026-08-09T19-48-39-150Z.yml +39 -0
  22. package/.playwright-mcp/page-2026-08-09T19-50-55-594Z.yml +787 -0
  23. package/.playwright-mcp/page-2026-08-09T19-51-28-160Z.yml +391 -0
  24. package/.playwright-mcp/page-2026-08-09T19-51-45-546Z.yml +391 -0
  25. package/.playwright-mcp/page-2026-08-09T19-51-46-085Z.yml +391 -0
  26. package/.playwright-mcp/page-2026-08-09T19-51-46-355Z.yml +391 -0
  27. package/.playwright-mcp/page-2026-08-09T19-51-49-918Z.yml +391 -0
  28. package/.playwright-mcp/page-2026-08-09T19-52-30-248Z.yml +415 -0
  29. package/.playwright-mcp/page-2026-08-09T19-52-42-510Z.yml +415 -0
  30. package/.playwright-mcp/page-2026-08-09T19-52-45-588Z.yml +391 -0
  31. package/.playwright-mcp/page-2026-08-09T19-52-54-615Z.yml +391 -0
  32. package/.playwright-mcp/page-2026-08-09T19-52-55-424Z.yml +391 -0
  33. package/.playwright-mcp/page-2026-08-09T19-52-55-553Z.yml +391 -0
  34. package/.playwright-mcp/page-2026-08-09T19-52-58-991Z.yml +391 -0
  35. package/.playwright-mcp/page-2026-08-09T19-53-29-261Z.yml +415 -0
  36. package/.playwright-mcp/page-2026-08-09T19-53-40-322Z.yml +415 -0
  37. package/.playwright-mcp/page-2026-08-09T19-53-44-146Z.yml +391 -0
  38. package/.playwright-mcp/page-2026-08-09T19-53-51-021Z.yml +391 -0
  39. package/.playwright-mcp/page-2026-08-09T19-53-51-565Z.yml +391 -0
  40. package/.playwright-mcp/page-2026-08-09T19-53-51-979Z.yml +391 -0
  41. package/.playwright-mcp/page-2026-08-09T19-53-54-883Z.yml +391 -0
  42. package/.playwright-mcp/page-2026-08-09T19-54-24-537Z.yml +415 -0
  43. package/.playwright-mcp/page-2026-08-09T20-01-07-921Z.yml +404 -0
  44. package/.playwright-mcp/page-2026-08-09T20-01-35-366Z.yml +404 -0
  45. package/.playwright-mcp/page-2026-08-09T20-01-54-083Z.yml +404 -0
  46. package/.playwright-mcp/page-2026-08-09T20-02-07-954Z.yml +416 -0
  47. package/.playwright-mcp/page-2026-08-09T20-02-24-800Z.yml +404 -0
  48. package/.playwright-mcp/page-2026-08-09T20-02-29-695Z.yml +404 -0
  49. package/.playwright-mcp/page-2026-08-09T20-02-33-819Z.yml +404 -0
  50. package/.playwright-mcp/page-2026-08-09T20-02-41-437Z.yml +404 -0
  51. package/.playwright-mcp/page-2026-08-09T20-02-53-232Z.yml +416 -0
  52. package/.playwright-mcp/page-2026-08-09T20-03-00-246Z.yml +404 -0
  53. package/.playwright-mcp/page-2026-08-09T20-03-03-297Z.yml +404 -0
  54. package/.playwright-mcp/page-2026-08-09T20-03-11-014Z.yml +404 -0
  55. package/.playwright-mcp/page-2026-08-09T20-03-21-049Z.yml +416 -0
  56. package/.playwright-mcp/page-2026-08-10T01-04-54-039Z.yml +410 -0
  57. package/.playwright-mcp/page-2026-08-10T01-05-06-967Z.png +0 -0
  58. package/.playwright-mcp/page-2026-08-10T01-05-52-136Z.yml +720 -0
  59. package/.playwright-mcp/page-2026-08-10T01-06-05-985Z.yml +410 -0
  60. package/.playwright-mcp/page-2026-08-10T01-06-25-942Z.yml +726 -0
  61. package/.playwright-mcp/page-2026-08-10T01-25-57-152Z.yml +395 -0
  62. package/.playwright-mcp/page-2026-08-10T01-26-48-853Z.yml +395 -0
  63. package/.playwright-mcp/page-2026-08-10T01-27-47-127Z.yml +413 -0
  64. package/.playwright-mcp/page-2026-08-10T01-27-57-349Z.yml +413 -0
  65. package/.playwright-mcp/page-2026-08-10T01-28-07-943Z.yml +425 -0
  66. package/.playwright-mcp/page-2026-08-10T01-28-30-462Z.yml +369 -0
  67. package/.playwright-mcp/page-2026-08-10T01-29-00-369Z.yml +413 -0
  68. package/.playwright-mcp/page-2026-08-10T01-29-08-988Z.yml +413 -0
  69. package/.playwright-mcp/page-2026-08-10T01-29-19-888Z.yml +425 -0
  70. package/.playwright-mcp/page-2026-08-10T01-29-30-189Z.yml +369 -0
  71. package/.playwright-mcp/page-2026-08-10T01-30-08-272Z.yml +413 -0
  72. package/.playwright-mcp/page-2026-08-10T01-30-16-955Z.yml +413 -0
  73. package/.playwright-mcp/page-2026-08-10T01-30-27-612Z.yml +425 -0
  74. package/.playwright-mcp/page-2026-08-10T01-30-37-943Z.yml +465 -0
  75. package/.playwright-mcp/page-2026-08-10T01-31-15-265Z.yml +413 -0
  76. package/.playwright-mcp/page-2026-08-10T01-31-24-328Z.yml +413 -0
  77. package/.playwright-mcp/page-2026-08-10T01-31-36-622Z.yml +425 -0
  78. package/.playwright-mcp/page-2026-08-10T01-31-45-965Z.yml +470 -0
  79. package/.playwright-mcp/page-2026-08-10T01-32-13-400Z.yml +413 -0
  80. package/.playwright-mcp/page-2026-08-10T01-32-23-469Z.yml +413 -0
  81. package/.playwright-mcp/page-2026-08-10T01-32-33-859Z.yml +425 -0
  82. package/.playwright-mcp/page-2026-08-10T01-32-43-461Z.yml +513 -0
  83. package/.playwright-mcp/page-2026-08-10T01-33-13-160Z.yml +413 -0
  84. package/.playwright-mcp/page-2026-08-10T01-33-23-937Z.yml +413 -0
  85. package/.playwright-mcp/page-2026-08-10T01-33-35-367Z.yml +425 -0
  86. package/.playwright-mcp/page-2026-08-10T01-33-47-266Z.yml +459 -0
  87. package/.playwright-mcp/page-2026-08-10T01-34-14-452Z.yml +413 -0
  88. package/.playwright-mcp/page-2026-08-10T01-34-26-042Z.yml +413 -0
  89. package/.playwright-mcp/page-2026-08-10T01-34-40-869Z.yml +425 -0
  90. package/.playwright-mcp/page-2026-08-10T01-34-49-587Z.yml +391 -0
  91. package/.playwright-mcp/page-2026-08-10T01-35-16-735Z.yml +413 -0
  92. package/.playwright-mcp/page-2026-08-10T01-35-24-882Z.yml +413 -0
  93. package/.playwright-mcp/page-2026-08-10T01-35-36-165Z.yml +425 -0
  94. package/.playwright-mcp/page-2026-08-10T01-35-45-644Z.yml +455 -0
  95. package/.playwright-mcp/page-2026-08-10T01-36-18-148Z.yml +413 -0
  96. package/.playwright-mcp/page-2026-08-10T01-36-26-751Z.yml +413 -0
  97. package/.playwright-mcp/page-2026-08-10T01-36-37-834Z.yml +425 -0
  98. package/.playwright-mcp/page-2026-08-10T01-36-48-078Z.yml +370 -0
  99. package/.playwright-mcp/page-2026-08-10T01-37-16-309Z.yml +413 -0
  100. package/.playwright-mcp/page-2026-08-10T01-37-28-723Z.yml +413 -0
  101. package/.playwright-mcp/page-2026-08-10T01-37-39-325Z.yml +425 -0
  102. package/.playwright-mcp/page-2026-08-10T01-37-48-278Z.yml +409 -0
  103. package/.playwright-mcp/page-2026-08-10T01-38-27-405Z.yml +413 -0
  104. package/.playwright-mcp/page-2026-08-10T01-38-36-994Z.yml +413 -0
  105. package/.playwright-mcp/page-2026-08-10T01-38-49-584Z.yml +425 -0
  106. package/.playwright-mcp/page-2026-08-10T01-38-59-289Z.yml +396 -0
  107. package/.playwright-mcp/page-2026-08-10T01-39-24-880Z.yml +413 -0
  108. package/.playwright-mcp/page-2026-08-10T01-39-35-551Z.yml +413 -0
  109. package/.playwright-mcp/page-2026-08-10T01-39-47-960Z.yml +425 -0
  110. package/.playwright-mcp/page-2026-08-10T01-39-56-844Z.yml +549 -0
  111. package/.playwright-mcp/page-2026-08-10T01-40-24-645Z.yml +413 -0
  112. package/.playwright-mcp/page-2026-08-10T01-40-33-806Z.yml +413 -0
  113. package/.playwright-mcp/page-2026-08-10T01-40-46-946Z.yml +425 -0
  114. package/.playwright-mcp/page-2026-08-10T01-40-56-503Z.yml +443 -0
  115. package/.playwright-mcp/page-2026-08-10T01-41-32-064Z.yml +413 -0
  116. package/.playwright-mcp/page-2026-08-10T01-41-40-666Z.yml +413 -0
  117. package/.playwright-mcp/page-2026-08-10T01-41-51-325Z.yml +425 -0
  118. package/.playwright-mcp/page-2026-08-10T01-41-58-790Z.yml +368 -0
  119. package/.playwright-mcp/page-2026-08-10T01-42-26-459Z.yml +413 -0
  120. package/.playwright-mcp/page-2026-08-10T01-42-38-306Z.yml +413 -0
  121. package/.playwright-mcp/page-2026-08-10T01-42-49-073Z.yml +425 -0
  122. package/.playwright-mcp/page-2026-08-10T01-42-57-453Z.yml +443 -0
  123. package/.playwright-mcp/page-2026-08-10T01-43-32-099Z.yml +413 -0
  124. package/.playwright-mcp/page-2026-08-10T01-43-42-882Z.yml +413 -0
  125. package/.playwright-mcp/page-2026-08-10T01-43-54-853Z.yml +425 -0
  126. package/.playwright-mcp/page-2026-08-10T01-44-04-373Z.yml +399 -0
  127. package/.playwright-mcp/page-2026-08-10T01-44-30-874Z.yml +413 -0
  128. package/.playwright-mcp/page-2026-08-10T01-44-39-830Z.yml +413 -0
  129. package/.playwright-mcp/page-2026-08-10T01-44-51-515Z.yml +425 -0
  130. package/.playwright-mcp/page-2026-08-10T01-44-59-974Z.yml +503 -0
  131. package/.playwright-mcp/page-2026-08-10T01-45-26-748Z.yml +413 -0
  132. package/.playwright-mcp/page-2026-08-10T01-45-36-685Z.yml +413 -0
  133. package/.playwright-mcp/page-2026-08-10T01-45-47-715Z.yml +425 -0
  134. package/.playwright-mcp/page-2026-08-10T01-45-57-895Z.yml +469 -0
  135. package/.playwright-mcp/page-2026-08-10T01-46-36-371Z.yml +413 -0
  136. package/.playwright-mcp/page-2026-08-10T01-46-49-906Z.yml +413 -0
  137. package/.playwright-mcp/page-2026-08-10T01-47-01-554Z.yml +425 -0
  138. package/.playwright-mcp/page-2026-08-10T01-47-12-712Z.yml +581 -0
  139. package/.playwright-mcp/page-2026-08-10T01-47-39-024Z.yml +413 -0
  140. package/.playwright-mcp/page-2026-08-10T01-47-49-714Z.yml +413 -0
  141. package/.playwright-mcp/page-2026-08-10T01-48-00-608Z.yml +425 -0
  142. package/.playwright-mcp/page-2026-08-10T01-48-09-739Z.yml +604 -0
  143. package/.playwright-mcp/page-2026-08-10T01-48-51-940Z.yml +413 -0
  144. package/.playwright-mcp/page-2026-08-10T01-49-01-562Z.yml +413 -0
  145. package/.playwright-mcp/page-2026-08-10T01-49-13-751Z.yml +425 -0
  146. package/.playwright-mcp/page-2026-08-10T01-49-22-503Z.yml +400 -0
  147. package/.playwright-mcp/page-2026-08-10T01-49-49-311Z.yml +413 -0
  148. package/.playwright-mcp/page-2026-08-10T01-50-00-769Z.yml +413 -0
  149. package/.playwright-mcp/page-2026-08-10T01-50-12-083Z.yml +425 -0
  150. package/.playwright-mcp/page-2026-08-10T01-50-23-765Z.yml +458 -0
  151. package/.playwright-mcp/page-2026-08-10T01-51-02-339Z.yml +413 -0
  152. package/.playwright-mcp/page-2026-08-10T01-51-12-711Z.yml +413 -0
  153. package/.playwright-mcp/page-2026-08-10T01-51-25-370Z.yml +425 -0
  154. package/.playwright-mcp/page-2026-08-10T01-51-33-936Z.yml +368 -0
  155. package/.playwright-mcp/page-2026-08-10T01-52-09-467Z.yml +413 -0
  156. package/.playwright-mcp/page-2026-08-10T01-52-21-616Z.yml +413 -0
  157. package/.playwright-mcp/page-2026-08-10T01-52-32-806Z.yml +425 -0
  158. package/.playwright-mcp/page-2026-08-10T01-52-42-382Z.yml +407 -0
  159. package/.playwright-mcp/page-2026-08-10T01-53-11-994Z.yml +413 -0
  160. package/.playwright-mcp/page-2026-08-10T01-53-21-669Z.yml +413 -0
  161. package/.playwright-mcp/page-2026-08-10T01-53-33-141Z.yml +425 -0
  162. package/.playwright-mcp/page-2026-08-10T01-53-43-582Z.yml +443 -0
  163. package/.playwright-mcp/page-2026-08-10T01-54-19-884Z.yml +413 -0
  164. package/.playwright-mcp/page-2026-08-10T01-54-32-359Z.yml +413 -0
  165. package/.playwright-mcp/page-2026-08-10T01-54-43-530Z.yml +425 -0
  166. package/.playwright-mcp/page-2026-08-10T01-54-53-891Z.yml +474 -0
  167. package/.playwright-mcp/page-2026-08-10T01-55-24-634Z.yml +413 -0
  168. package/.playwright-mcp/page-2026-08-10T01-55-35-283Z.yml +413 -0
  169. package/.playwright-mcp/page-2026-08-10T01-55-46-649Z.yml +425 -0
  170. package/.playwright-mcp/page-2026-08-10T01-55-56-585Z.yml +431 -0
  171. package/.playwright-mcp/page-2026-08-10T01-56-31-670Z.yml +413 -0
  172. package/.playwright-mcp/page-2026-08-10T01-56-40-782Z.yml +413 -0
  173. package/.playwright-mcp/page-2026-08-10T01-56-52-065Z.yml +425 -0
  174. package/.playwright-mcp/page-2026-08-10T01-57-03-705Z.yml +445 -0
  175. package/.playwright-mcp/page-2026-08-10T01-57-31-390Z.yml +413 -0
  176. package/.playwright-mcp/page-2026-08-10T01-57-44-756Z.yml +413 -0
  177. package/.playwright-mcp/page-2026-08-10T01-57-56-802Z.yml +425 -0
  178. package/.playwright-mcp/page-2026-08-10T01-58-06-937Z.yml +468 -0
  179. package/.playwright-mcp/page-2026-08-10T01-58-40-595Z.yml +413 -0
  180. package/.playwright-mcp/page-2026-08-10T01-58-51-715Z.yml +413 -0
  181. package/.playwright-mcp/page-2026-08-10T01-59-04-402Z.yml +425 -0
  182. package/.playwright-mcp/page-2026-08-10T01-59-15-638Z.yml +472 -0
  183. package/.playwright-mcp/page-2026-08-10T01-59-58-162Z.yml +413 -0
  184. package/.playwright-mcp/page-2026-08-10T02-00-09-962Z.yml +413 -0
  185. package/.playwright-mcp/page-2026-08-10T02-00-21-468Z.yml +425 -0
  186. package/.playwright-mcp/page-2026-08-10T02-00-33-248Z.yml +451 -0
  187. package/.playwright-mcp/page-2026-08-10T02-01-15-418Z.yml +413 -0
  188. package/.playwright-mcp/page-2026-08-10T02-01-27-182Z.yml +413 -0
  189. package/.playwright-mcp/page-2026-08-10T02-01-38-250Z.yml +425 -0
  190. package/.playwright-mcp/page-2026-08-10T04-20-27-979Z.yml +513 -0
  191. package/.playwright-mcp/page-2026-08-10T04-20-41-431Z.yml +513 -0
  192. package/.playwright-mcp/page-2026-08-10T04-21-46-133Z.yml +406 -0
  193. package/.playwright-mcp/page-2026-08-10T04-22-10-938Z.yml +406 -0
  194. package/.playwright-mcp/page-2026-08-10T04-23-00-626Z.yml +406 -0
  195. package/.playwright-mcp/page-2026-08-10T04-23-19-844Z.yml +418 -0
  196. package/.playwright-mcp/page-2026-08-10T04-25-00-732Z.yml +455 -0
  197. package/.playwright-mcp/page-2026-08-10T04-25-35-125Z.yml +412 -0
  198. package/.playwright-mcp/page-2026-08-10T04-25-46-640Z.yml +412 -0
  199. package/.playwright-mcp/page-2026-08-10T04-25-55-092Z.yml +549 -0
  200. package/.playwright-mcp/page-2026-08-10T04-26-26-403Z.yml +406 -0
  201. package/.playwright-mcp/page-2026-08-10T04-26-40-673Z.yml +406 -0
  202. package/.playwright-mcp/page-2026-08-10T04-26-48-427Z.yml +604 -0
  203. package/.playwright-mcp/page-2026-08-10T04-27-23-584Z.yml +408 -0
  204. package/.playwright-mcp/page-2026-08-10T04-27-34-294Z.yml +408 -0
  205. package/.playwright-mcp/page-2026-08-10T04-27-42-299Z.yml +443 -0
  206. package/.playwright-mcp/page-2026-08-10T04-28-20-032Z.yml +406 -0
  207. package/.playwright-mcp/page-2026-08-10T04-28-32-275Z.yml +406 -0
  208. package/.playwright-mcp/page-2026-08-10T04-28-41-592Z.yml +581 -0
  209. package/.playwright-mcp/page-2026-08-10T04-29-19-972Z.yml +414 -0
  210. package/.playwright-mcp/page-2026-08-10T04-29-30-961Z.yml +414 -0
  211. package/.playwright-mcp/page-2026-08-10T04-29-39-044Z.yml +465 -0
  212. package/.playwright-mcp/page-2026-08-10T04-30-13-196Z.yml +402 -0
  213. package/.playwright-mcp/page-2026-08-10T04-30-24-867Z.yml +402 -0
  214. package/.playwright-mcp/page-2026-08-10T04-30-32-372Z.yml +409 -0
  215. package/.playwright-mcp/page-2026-08-10T04-31-06-199Z.yml +402 -0
  216. package/.playwright-mcp/page-2026-08-10T04-31-17-733Z.yml +402 -0
  217. package/.playwright-mcp/page-2026-08-10T04-31-26-296Z.yml +445 -0
  218. package/.playwright-mcp/page-2026-08-10T04-32-02-456Z.yml +402 -0
  219. package/.playwright-mcp/page-2026-08-10T04-32-14-091Z.yml +402 -0
  220. package/.playwright-mcp/page-2026-08-10T04-32-23-437Z.yml +396 -0
  221. package/.playwright-mcp/page-2026-08-10T04-32-58-401Z.yml +403 -0
  222. package/.playwright-mcp/page-2026-08-10T04-33-09-818Z.yml +403 -0
  223. package/.playwright-mcp/page-2026-08-10T04-33-20-858Z.yml +468 -0
  224. package/.playwright-mcp/page-2026-08-10T04-33-53-074Z.yml +407 -0
  225. package/.playwright-mcp/page-2026-08-10T04-34-05-806Z.yml +407 -0
  226. package/.playwright-mcp/page-2026-08-10T08-52-00-165Z.yml +0 -0
  227. package/.playwright-mcp/page-2026-08-10T08-52-17-430Z.yml +410 -0
  228. package/AGENTS.md +4 -2
  229. package/CLAUDE.md +22 -8
  230. package/docs/README.md +4 -3
  231. package/package.json +1 -1
  232. package/tests/step-definitions/action.steps.js +19 -4
  233. package/tests/step-definitions/drupal-layout-builder.steps.js +48 -7
  234. package/tests/step-definitions/drupal-media.steps.js +26 -2
@@ -0,0 +1,410 @@
1
+ - generic [active] [ref=f99e1]:
2
+ - generic:
3
+ - link "Skip to main content" [ref=f99e2] [cursor=pointer]:
4
+ - /url: "#content"
5
+ - link "Skip to search" [ref=f99e3] [cursor=pointer]:
6
+ - /url: "#search-block-form"
7
+ - navigation [ref=f99e5]:
8
+ - generic [ref=f99e6]:
9
+ - generic [ref=f99e7]:
10
+ - generic:
11
+ - generic:
12
+ - generic:
13
+ - list:
14
+ - listitem [ref=f99e8]:
15
+ - link "Drupal.org home" [ref=f99e9] [cursor=pointer]:
16
+ - /url: /home
17
+ - listitem [ref=f99e10]:
18
+ - link "Discover Drupal" [ref=f99e11] [cursor=pointer]:
19
+ - /url: https://www.drupal.org/about/overview/technical
20
+ - listitem [ref=f99e12]:
21
+ - link "Build with Drupal" [ref=f99e13] [cursor=pointer]:
22
+ - /url: https://www.drupal.org/docs/official_docs/local-development-guide
23
+ - listitem [ref=f99e14]:
24
+ - link "Partners & Services" [ref=f99e15] [cursor=pointer]:
25
+ - /url: https://www.drupal.org/drupal-services
26
+ - listitem [ref=f99e16]:
27
+ - link "Community" [ref=f99e17] [cursor=pointer]:
28
+ - /url: https://www.drupal.org/community
29
+ - listitem [ref=f99e18]:
30
+ - link "Support Drupal" [ref=f99e19] [cursor=pointer]:
31
+ - /url: /association
32
+ - listitem [ref=f99e20]:
33
+ - link "Get Started" [ref=f99e21] [cursor=pointer]:
34
+ - /url: /try-hosting
35
+ - generic [ref=f99e27]:
36
+ - heading "Search form" [level=2] [ref=f99e28]
37
+ - generic: Search
38
+ - button "Search" [ref=f99e31] [cursor=pointer]
39
+ - generic [ref=f99e32]:
40
+ - generic:
41
+ - generic:
42
+ - generic:
43
+ - list:
44
+ - listitem:
45
+ - link [ref=f99e33] [cursor=pointer]:
46
+ - /url: "#block-system-user-menu"
47
+ - img "Log in, view profile, and more" [ref=f99e34]
48
+ - link [ref=f99e39] [cursor=pointer]:
49
+ - /url: /
50
+ - img "Drupal.org" [ref=f99e40]
51
+ - generic [ref=f99e42]:
52
+ - generic [ref=f99e43]:
53
+ - navigation [ref=f99e45]:
54
+ - link "General projects" [ref=f99e47] [cursor=pointer]:
55
+ - /url: /project/project_general
56
+ - link "Varbase Project Template" [ref=f99e49] [cursor=pointer]:
57
+ - /url: /project/varbase_project
58
+ - link "Issues" [ref=f99e51] [cursor=pointer]:
59
+ - /url: /project/issues/varbase_project
60
+ - 'link "task: Switch the Varbase functional testing suite to Varbase E2E on 9.2.x" [ref=f99e53] [cursor=pointer]':
61
+ - /url: /project/varbase_project/issues/3615713
62
+ - heading [level=1] [ref=f99e54]:
63
+ - text: Edit
64
+ - emphasis [ref=f99e55]: "task: Switch the Varbase functional testing suite to Varbase E2E on 9.2.x"
65
+ - generic [ref=f99e56]:
66
+ - heading "Primary tabs" [level=2] [ref=f99e57]
67
+ - list [ref=f99e58]:
68
+ - listitem [ref=f99e59]:
69
+ - link "View" [ref=f99e60] [cursor=pointer]:
70
+ - /url: /project/varbase_project/issues/3615713
71
+ - listitem [ref=f99e61]:
72
+ - link "Edit (active tab)" [ref=f99e62] [cursor=pointer]:
73
+ - /url: /node/3615713/edit
74
+ - text: Edit
75
+ - generic [ref=f99e63]: (active tab)
76
+ - main [ref=f99e64]:
77
+ - generic [ref=f99e65]:
78
+ - generic [ref=f99e67]:
79
+ - text: "?"
80
+ - paragraph [ref=f99e70]:
81
+ - text: Learn
82
+ - link "how to report an issue" [ref=f99e71] [cursor=pointer]:
83
+ - /url: /community/contributor-guide/reference-information/quick-info/creating-or-updating-an-issue-report
84
+ - text: .
85
+ - generic [ref=f99e79]:
86
+ - group [ref=f99e80]:
87
+ - link "Hide Issue metadata" [ref=f99e83] [cursor=pointer]:
88
+ - /url: "#"
89
+ - generic [ref=f99e84]: Hide
90
+ - text: Issue metadata
91
+ - generic [ref=f99e85]:
92
+ - generic [ref=f99e86]:
93
+ - generic [ref=f99e87]: Title *
94
+ - textbox "Title *" [ref=f99e88]: "task: Switch the Varbase functional testing suite to Varbase E2E on 9.2.x"
95
+ - generic [ref=f99e89]:
96
+ - application [ref=f99e92]:
97
+ - generic [ref=f99e93]: Project *
98
+ - textbox "Project *" [ref=f99e94]: Varbase Project Template (3401545)
99
+ - generic [ref=f99e97]:
100
+ - generic [ref=f99e98]: Version *
101
+ - combobox "Version *" [ref=f99e99]:
102
+ - option "11.0.x-dev"
103
+ - option "11.0.5"
104
+ - option "11.0.4"
105
+ - option "11.0.3"
106
+ - option "11.0.2"
107
+ - option "11.0.1"
108
+ - option "11.0.0"
109
+ - option "11.0.0-alpha1"
110
+ - option "10.1.x-dev"
111
+ - option "10.1.3"
112
+ - option "10.1.2"
113
+ - option "10.1.1"
114
+ - option "9.2.x-dev" [selected]
115
+ - option "9.2.1"
116
+ - option "9.2.0"
117
+ - generic [ref=f99e101]:
118
+ - generic [ref=f99e102]: Component *
119
+ - combobox "Component *" [ref=f99e103]:
120
+ - option "Code" [selected]
121
+ - option "Documentation"
122
+ - option "Miscellaneous"
123
+ - option "User interface"
124
+ - generic [ref=f99e105]:
125
+ - generic [ref=f99e106]: Assigned *
126
+ - combobox "Assigned *" [ref=f99e107]:
127
+ - option "Unassigned" [selected]
128
+ - option "josebc"
129
+ - option "mohammed j. razem"
130
+ - option "omar alahmed"
131
+ - option "rajab natshah"
132
+ - generic [ref=f99e108]:
133
+ - generic [ref=f99e110]:
134
+ - generic [ref=f99e111]: Category *
135
+ - combobox "Category *" [ref=f99e112]:
136
+ - option "Bug report"
137
+ - option "Task" [selected]
138
+ - option "Feature request"
139
+ - option "Support request"
140
+ - option "Plan"
141
+ - generic [ref=f99e114]:
142
+ - generic [ref=f99e115]: Priority *
143
+ - combobox "Priority *" [ref=f99e116]:
144
+ - option "Critical"
145
+ - option "Major"
146
+ - option "Normal" [selected]
147
+ - option "Minor"
148
+ - generic [ref=f99e118]:
149
+ - generic [ref=f99e119]: Status *
150
+ - combobox "Status *" [ref=f99e120]:
151
+ - option "Active" [selected]
152
+ - option "Needs work"
153
+ - option "Needs review"
154
+ - option "Reviewed & tested by the community"
155
+ - option "Patch (to be ported)"
156
+ - option "Fixed"
157
+ - option "Postponed"
158
+ - option "Postponed (maintainer needs more info)"
159
+ - option "Closed (duplicate)"
160
+ - option "Closed (won't fix)"
161
+ - option "Closed (works as designed)"
162
+ - option "Closed (cannot reproduce)"
163
+ - option "Closed (outdated)"
164
+ - generic [ref=f99e121]:
165
+ - text: Descriptions of the
166
+ - link "Priority" [ref=f99e122] [cursor=pointer]:
167
+ - /url: /docs/develop/issues/fields-and-other-parts-of-an-issue/issue-priority-field
168
+ - text: and
169
+ - link "Status" [ref=f99e123] [cursor=pointer]:
170
+ - /url: /docs/develop/issues/fields-and-other-parts-of-an-issue/issue-status-field
171
+ - text: values can be found in the
172
+ - link "Drupal project issues" [ref=f99e124] [cursor=pointer]:
173
+ - /url: /docs/develop/issues
174
+ - text: documentation.
175
+ - application [ref=f99e127]:
176
+ - generic [ref=f99e128]: Issue tags
177
+ - textbox "Issue tags" [ref=f99e129]
178
+ - generic [ref=f99e130]:
179
+ - text: Before adding tags
180
+ - link "read the issue tag guidelines" [ref=f99e131] [cursor=pointer]:
181
+ - /url: /node/3156530
182
+ - text: . Do
183
+ - strong [ref=f99e132]: NOT
184
+ - text: use tags for adding random keywords or duplicating any other fields. Separate terms with a comma, not a space.
185
+ - generic [ref=f99e137]:
186
+ - generic [ref=f99e138]:
187
+ - generic [ref=f99e139]: Comment
188
+ - generic [ref=f99e140]:
189
+ - toolbar [ref=f99e141]:
190
+ - button "Bold(B)" [ref=f99e142] [cursor=pointer]
191
+ - button "Italic(I)" [ref=f99e143] [cursor=pointer]
192
+ - button "Strike-through" [ref=f99e144] [cursor=pointer]
193
+ - button "Heading 2" [ref=f99e145] [cursor=pointer]
194
+ - button "Heading 3" [ref=f99e146] [cursor=pointer]
195
+ - button "Heading 4" [ref=f99e147] [cursor=pointer]
196
+ - button "Quote" [ref=f99e148] [cursor=pointer]
197
+ - button "code" [ref=f99e149] [cursor=pointer]
198
+ - button "PHP" [ref=f99e150] [cursor=pointer]
199
+ - button "Insert/edit image(M)" [ref=f99e151] [cursor=pointer]
200
+ - button "Insert/edit link(L)" [ref=f99e152] [cursor=pointer]
201
+ - button "Ordered list. Converts selected lines to a numbered list.(O)" [ref=f99e153] [cursor=pointer]
202
+ - button "Unordered list. Converts selected lines to a bulleted list.(U)" [ref=f99e154] [cursor=pointer]
203
+ - button "Get help on button functionality.(H)" [ref=f99e155] [cursor=pointer]
204
+ - textbox "Comment" [ref=f99e156]
205
+ - group "Show Text format" [ref=f99e158]:
206
+ - paragraph [ref=f99e160]:
207
+ - link "More information about text formats" [ref=f99e161] [cursor=pointer]:
208
+ - /url: /filter/tips
209
+ - group [ref=f99e162]:
210
+ - link "Hide Issue summary & relationships" [ref=f99e165] [cursor=pointer]:
211
+ - /url: "#"
212
+ - generic [ref=f99e166]: Hide
213
+ - text: Issue summary & relationships
214
+ - generic [ref=f99e167]:
215
+ - generic [ref=f99e170]:
216
+ - generic [ref=f99e171]:
217
+ - generic [ref=f99e172]: Issue summary
218
+ - generic [ref=f99e173]:
219
+ - toolbar [ref=f99e174]:
220
+ - button "Bold(B)" [ref=f99e175] [cursor=pointer]
221
+ - button "Italic(I)" [ref=f99e176] [cursor=pointer]
222
+ - button "Strike-through" [ref=f99e177] [cursor=pointer]
223
+ - button "Heading 2" [ref=f99e178] [cursor=pointer]
224
+ - button "Heading 3" [ref=f99e179] [cursor=pointer]
225
+ - button "Heading 4" [ref=f99e180] [cursor=pointer]
226
+ - button "Quote" [ref=f99e181] [cursor=pointer]
227
+ - button "code" [ref=f99e182] [cursor=pointer]
228
+ - button "PHP" [ref=f99e183] [cursor=pointer]
229
+ - button "Insert/edit image(M)" [ref=f99e184] [cursor=pointer]
230
+ - button "Insert/edit link(L)" [ref=f99e185] [cursor=pointer]
231
+ - button "Ordered list. Converts selected lines to a numbered list.(O)" [ref=f99e186] [cursor=pointer]
232
+ - button "Unordered list. Converts selected lines to a bulleted list.(U)" [ref=f99e187] [cursor=pointer]
233
+ - button "Get help on button functionality.(H)" [ref=f99e188] [cursor=pointer]
234
+ - textbox "Issue summary" [ref=f99e189]: "<h3 id=\"summary-problem-motivation\">Problem/Motivation</h3> <p>The Varbase functional testing suite on this branch still depends on the previous testing package. The harness now ships as Varbase E2E (<code>@vardot/varbase-e2e</code> 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.</p> <h4 id=\"summary-steps-reproduce\">Steps to reproduce</h4> <p>Run <code>grep -rn \"VARBASE_E2E\\|varbase-e2e\" package.json cucumber.js</code> on 9.2.x &mdash; it still points at the previous package.</p> <h3 id=\"summary-proposed-resolution\">Proposed resolution</h3> <ul> <li>Depend on <code>@vardot/varbase-e2e ^2.0.0</code>; update <code>cucumber.js</code> require globs and the report script path.</li> <li>Re-point custom step helper imports at the new package.</li> <li>Remove custom steps now shipped as built-ins; keep only project-specific ones.</li> <li>Rename env vars to the <code>VARBASE_E2E_*</code> family across config/CI/DDEV.</li> <li>Verify with <code>npx cucumber-js --dry-run</code> (zero ambiguous/undefined), then CI.</li> </ul> <p><em>AI-Generated: Yes</em></p> <h3 id=\"summary-remaining-tasks\">Remaining tasks</h3> <ul> <li>✅ File an issue</li> <li>❌ Addition/Change/Update/Fix</li> <li>❌ Testing to ensure no regression</li> <li>➖ Automated unit testing coverage</li> <li>❌ Automated functional testing coverage</li> <li>➖ UX/UI designer responsibilities</li> <li>❌ Readability</li> <li>➖ Accessibility</li> <li>➖ Performance</li> <li>➖ Security</li> <li>❌ Developer Documentation</li> <li>➖ User Guide Documentation</li> <li>➖ Reviewed by human</li> <li>➖ Code review by maintainers</li> <li>➖ Full testing and approval</li> <li>➖ Credit contributors</li> <li>➖ Review with the product owner</li> <li>➖ Release notes snippet</li> <li>❌ Release</li> </ul> <h3 id=\"summary-ui-changes\">User interface changes</h3> <ul> <li>N/A</li> </ul> <h3 id=\"summary-api-changes\">API changes</h3> <ul> <li>N/A</li> </ul> <h3 id=\"summary-data-model-changes\">Data model changes</h3> <ul> <li>N/A</li> </ul> <h3 id=\"summary-release-notes\">Release notes snippet</h3> <ul> <li>The Varbase functional testing suite now runs on Varbase E2E (<code>@vardot/varbase-e2e</code> 2.0.0).</li> </ul>"
235
+ - group "Show Text format" [ref=f99e191]:
236
+ - paragraph [ref=f99e193]:
237
+ - link "More information about text formats" [ref=f99e194] [cursor=pointer]:
238
+ - /url: /filter/tips
239
+ - generic [ref=f99e195]:
240
+ - text: A
241
+ - link "description of the issue summary field" [ref=f99e196] [cursor=pointer]:
242
+ - /url: /community/contributor-guide/reference-information/drupal-project-issues/fields-and-other-parts-of-9
243
+ - text: and
244
+ - link "alternative issue summary templates" [ref=f99e197] [cursor=pointer]:
245
+ - /url: /community/contributor-guide/reference-information/drupal-project-issues/fields-and-other-parts-of-11
246
+ - text: can be found in the
247
+ - link "Drupal project issues" [ref=f99e198] [cursor=pointer]:
248
+ - /url: /community/contributor-guide/reference-information/drupal-project-issues
249
+ - text: documentation.
250
+ - generic [ref=f99e201]:
251
+ - generic [ref=f99e202]: Parent issue link
252
+ - generic [ref=f99e205]:
253
+ - generic [ref=f99e206]: URL
254
+ - textbox "URL" [ref=f99e207]
255
+ - generic [ref=f99e208]: URL of the parent issue. It can be https://www.drupal.org issue or https://git.drupalcode.org issue.
256
+ - generic [ref=f99e211]:
257
+ - link "Show row weights" [ref=f99e213] [cursor=pointer]:
258
+ - /url: "#"
259
+ - table [ref=f99e214]:
260
+ - rowgroup [ref=f99e215]:
261
+ - row [ref=f99e216]:
262
+ - columnheader "Related issues links" [ref=f99e217]
263
+ - rowgroup [ref=f99e219]:
264
+ - row "Related issues links URL" [ref=f99e220]:
265
+ - cell [ref=f99e221]:
266
+ - link "Drag to re-order" [ref=f99e222]:
267
+ - /url: "#"
268
+ - cell "Related issues links URL" [ref=f99e224]:
269
+ - generic [ref=f99e225]:
270
+ - generic [ref=f99e226]: Related issues links
271
+ - generic [ref=f99e229]:
272
+ - generic [ref=f99e230]: URL
273
+ - textbox "URL" [ref=f99e231]
274
+ - generic [ref=f99e232]: URLs of related issues. They can be https://www.drupal.org issues or https://git.drupalcode.org issues.
275
+ - button "Add another item" [ref=f99e234]
276
+ - group [ref=f99e237]:
277
+ - link "Show Files" [ref=f99e240] [cursor=pointer]:
278
+ - /url: "#"
279
+ - generic [ref=f99e241]: Show
280
+ - text: Files
281
+ - heading "Vertical Tabs" [level=2] [ref=f99e242]
282
+ - paragraph [ref=f99e243]:
283
+ - text: Be sure to
284
+ - link "update the contribution record" [ref=f99e244] [cursor=pointer]:
285
+ - /url: https://new.drupal.org/contribution-record?source_link=https%3A//www.drupal.org/node/3615713
286
+ - generic [ref=f99e245]:
287
+ - button "Save" [ref=f99e246]
288
+ - button "Preview" [ref=f99e247]
289
+ - button "View changes" [ref=f99e248]
290
+ - contentinfo [ref=f99e249]:
291
+ - generic [ref=f99e250]:
292
+ - generic [ref=f99e253]:
293
+ - link [ref=f99e254] [cursor=pointer]:
294
+ - /url: https://www.tag1.com/?utm_source=DA&utm_medium=referral&utm_campaign=drupal-org-footer
295
+ - text: Infrastructure management for Drupal.org provided by
296
+ - img "Tag1 logo" [ref=f99e255]
297
+ - link "Need a Drupal 7 extended support partner? Consider Tag1." [ref=f99e257] [cursor=pointer]:
298
+ - /url: https://d7es.tag1.com/plans?utm_source=DA&utm_medium=footer&utm_campaign=EOL&utm_id=d7es&utm_term=plans&utm_content=Dec
299
+ - generic [ref=f99e258]:
300
+ - generic:
301
+ - generic:
302
+ - heading "News items" [level=4] [ref=f99e259]
303
+ - list [ref=f99e260]:
304
+ - listitem [ref=f99e261]:
305
+ - link "News" [ref=f99e262] [cursor=pointer]:
306
+ - /url: https://www.drupal.org/news
307
+ - listitem [ref=f99e263]:
308
+ - link "Planet Drupal" [ref=f99e264] [cursor=pointer]:
309
+ - /url: https://www.drupal.org/planet
310
+ - listitem [ref=f99e265]:
311
+ - link "Social media" [ref=f99e266] [cursor=pointer]:
312
+ - /url: https://www.drupal.org/about/media-kit/social-media
313
+ - listitem [ref=f99e267]:
314
+ - link "Sign up for Drupal news" [ref=f99e268] [cursor=pointer]:
315
+ - /url: https://www.drupal.org/subscribe
316
+ - listitem [ref=f99e269]:
317
+ - link "Security advisories" [ref=f99e270] [cursor=pointer]:
318
+ - /url: https://www.drupal.org/security
319
+ - listitem [ref=f99e271]:
320
+ - link "Jobs" [ref=f99e272] [cursor=pointer]:
321
+ - /url: https://jobs.drupal.org/
322
+ - heading "Our community" [level=4] [ref=f99e273]
323
+ - list [ref=f99e274]:
324
+ - listitem [ref=f99e275]:
325
+ - link "Community" [ref=f99e276] [cursor=pointer]:
326
+ - /url: https://www.drupal.org/community
327
+ - listitem [ref=f99e277]:
328
+ - generic [ref=f99e278]:
329
+ - link "Services" [ref=f99e279] [cursor=pointer]:
330
+ - /url: https://www.drupal.org/drupal-services
331
+ - text: ","
332
+ - link "Training" [ref=f99e280] [cursor=pointer]:
333
+ - /url: https://www.drupal.org/training
334
+ - text: "&"
335
+ - link "Hosting" [ref=f99e281] [cursor=pointer]:
336
+ - /url: https://www.drupal.org/hosting
337
+ - listitem [ref=f99e282]:
338
+ - link "Contributor guide" [ref=f99e283] [cursor=pointer]:
339
+ - /url: https://www.drupal.org/community/contributor-guide
340
+ - listitem [ref=f99e284]:
341
+ - link "Groups & meetups" [ref=f99e285] [cursor=pointer]:
342
+ - /url: https://groups.drupal.org/groups
343
+ - listitem [ref=f99e286]:
344
+ - link "DrupalCon" [ref=f99e287] [cursor=pointer]:
345
+ - /url: https://events.drupal.org
346
+ - listitem [ref=f99e288]:
347
+ - link "Code of conduct" [ref=f99e289] [cursor=pointer]:
348
+ - /url: https://www.drupal.org/dcoc
349
+ - heading "Documentation" [level=4] [ref=f99e290]
350
+ - list [ref=f99e291]:
351
+ - listitem [ref=f99e292]:
352
+ - link "Documentation" [ref=f99e293] [cursor=pointer]:
353
+ - /url: https://www.drupal.org/documentation
354
+ - listitem [ref=f99e294]:
355
+ - link "Drupal Guide" [ref=f99e295] [cursor=pointer]:
356
+ - /url: https://www.drupal.org/docs
357
+ - listitem [ref=f99e296]:
358
+ - link "Drupal User Guide" [ref=f99e297] [cursor=pointer]:
359
+ - /url: https://www.drupal.org/docs/user_guide/en/index.html
360
+ - listitem [ref=f99e298]:
361
+ - link "Developer docs" [ref=f99e299] [cursor=pointer]:
362
+ - /url: https://www.drupal.org/documentation/develop
363
+ - listitem [ref=f99e300]:
364
+ - link "API.Drupal.org" [ref=f99e301] [cursor=pointer]:
365
+ - /url: https://api.drupal.org/
366
+ - heading "Drupal code base" [level=4] [ref=f99e302]
367
+ - list [ref=f99e303]:
368
+ - listitem [ref=f99e304]:
369
+ - link "Download & Extend" [ref=f99e305] [cursor=pointer]:
370
+ - /url: https://www.drupal.org/download
371
+ - listitem [ref=f99e306]:
372
+ - link "Drupal core" [ref=f99e307] [cursor=pointer]:
373
+ - /url: https://www.drupal.org/project/drupal
374
+ - listitem [ref=f99e308]:
375
+ - link "Modules" [ref=f99e309] [cursor=pointer]:
376
+ - /url: https://www.drupal.org/project/project_module
377
+ - listitem [ref=f99e310]:
378
+ - link "Themes" [ref=f99e311] [cursor=pointer]:
379
+ - /url: https://www.drupal.org/project/project_theme
380
+ - listitem [ref=f99e312]:
381
+ - link "Distributions" [ref=f99e313] [cursor=pointer]:
382
+ - /url: https://www.drupal.org/project/project_distribution
383
+ - heading "Governance of community" [level=4] [ref=f99e314]
384
+ - list [ref=f99e315]:
385
+ - listitem [ref=f99e316]:
386
+ - link "About" [ref=f99e317] [cursor=pointer]:
387
+ - /url: https://www.drupal.org/about
388
+ - listitem [ref=f99e318]:
389
+ - link "Web accessibility" [ref=f99e319] [cursor=pointer]:
390
+ - /url: https://www.drupal.org/about/features/accessibility
391
+ - listitem [ref=f99e320]:
392
+ - link "Drupal Association" [ref=f99e321] [cursor=pointer]:
393
+ - /url: https://www.drupal.org/association
394
+ - listitem [ref=f99e322]:
395
+ - link "About Drupal.org" [ref=f99e323] [cursor=pointer]:
396
+ - /url: https://www.drupal.org/drupalorg
397
+ - listitem [ref=f99e324]:
398
+ - link "Terms of service" [ref=f99e325] [cursor=pointer]:
399
+ - /url: https://www.drupal.org/terms
400
+ - listitem [ref=f99e326]:
401
+ - link "Privacy policy" [ref=f99e327] [cursor=pointer]:
402
+ - /url: https://www.drupal.org/privacy
403
+ - paragraph [ref=f99e331]:
404
+ - text: Drupal is a
405
+ - link "registered trademark" [ref=f99e332] [cursor=pointer]:
406
+ - /url: /about/trademark
407
+ - text: of
408
+ - link "Dries Buytaert" [ref=f99e333] [cursor=pointer]:
409
+ - /url: https://dri.es
410
+ - 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.2",
4
4
  "description": "Varbase E2E automated functional testing.",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -44,10 +44,25 @@ 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')
48
- .filter({ hasText: new RegExp('^' + esc + '$') })
49
- .first()
50
- .click();
47
+ const all = page.locator('button, input[type="button"], input[type="submit"], [role="button"], a')
48
+ .filter({ hasText: new RegExp('^' + esc + '$') });
49
+ // Sticky action bars (Gin) clone buttons: the original stays hidden while
50
+ // the visible clone carries the same text. Prefer the visible candidate —
51
+ // clicking the hidden original starves actionability for the full timeout.
52
+ let btn = all.first();
53
+ const count = await all.count();
54
+ for (let i = 0; i < count; i++) {
55
+ if (await all.nth(i).isVisible()) { btn = all.nth(i); break; }
56
+ }
57
+ try {
58
+ await btn.click({ timeout: 10000 });
59
+ } catch (e) {
60
+ // A fixed-position overlay (chat widgets, sticky action bars) can sit on
61
+ // top of a correctly-resolved button and starve the pointer click's
62
+ // actionability checks. The button itself is right — dispatch the click
63
+ // in-page so its handlers (including form submit) still fire.
64
+ await btn.evaluate((el) => el.click(), { timeout: 5000 });
65
+ }
51
66
  });
52
67
  });
53
68
 
@@ -51,6 +51,28 @@ When(/^(?:I |we )*add a basic(?: "([^"]*)")? section at the end of layout$/, asy
51
51
  if (!(await layoutLink.count())) throw friendly(`The "${layout}" layout option was not found in the Add section list.`);
52
52
  await layoutLink.click();
53
53
  await smartSettle(this.page, budget(this));
54
+ // On newer Bootstrap Layout Builder the layout option adds the section
55
+ // directly instead of opening its settings in the off-canvas. When the
56
+ // section settings form (container type, breakpoints, background) did not
57
+ // open, click the newly added (highest-delta) section's "Configure" link -
58
+ // a use-ajax link that opens the settings in the #drupal-off-canvas dialog,
59
+ // where the following section-settings steps run.
60
+ const hasSettingsForm = await this.page.locator('[id*="layout-container-type"]').count();
61
+ if (!hasSettingsForm) {
62
+ const links = this.page.locator('a.layout-builder__link--configure[href*="/layout_builder/configure-form/section/"]');
63
+ const count = await links.count();
64
+ let bestLink = null;
65
+ let bestDelta = -1;
66
+ for (let i = 0; i < count; i++) {
67
+ const href = await links.nth(i).getAttribute('href');
68
+ const delta = parseInt(href.split('/').pop(), 10);
69
+ if (delta > bestDelta) { bestDelta = delta; bestLink = links.nth(i); }
70
+ }
71
+ if (bestLink) {
72
+ await bestLink.click();
73
+ await smartSettle(this.page, budget(this));
74
+ }
75
+ }
54
76
  });
55
77
 
56
78
  /**
@@ -69,8 +91,20 @@ When(/^(?:I |we )*save the section$/, async function () {
69
91
  // Drupal's jQuery-bound AJAX submit handler for this button - it can leave
70
92
  // the section silently un-added. Use a real Playwright mouse click instead,
71
93
  // which dispatches the full native event sequence.
72
- const btn = this.page.locator('input[type="submit"], button').filter({ hasText: /Add section/i }).first();
73
- if (!(await btn.count())) throw friendly('The "Add section" button was not found.');
94
+ // The submit reads "Add section" on a fresh section and "Update" when the
95
+ // settings were opened through the section's Configure link. Match the
96
+ // value attribute exactly (the control is usually an <input>) or a
97
+ // button's exact text, preferring the off-canvas dialog - a loose /Update/
98
+ // match grabs invisible widget buttons ("Update widget") elsewhere.
99
+ const label = /^(Add section|Update)$/;
100
+ const pick = (scope) => this.page
101
+ .locator(`${scope} input[type="submit"][value="Add section"], ${scope} input[type="submit"][value="Update"]`)
102
+ .or(this.page.locator(`${scope} button`).filter({ hasText: label }));
103
+ let btn = pick('#drupal-off-canvas').first();
104
+ if (!(await btn.count())) {
105
+ btn = pick('body').first();
106
+ }
107
+ if (!(await btn.count())) throw friendly('The "Add section" / "Update" button was not found.');
74
108
  await btn.click();
75
109
  await smartSettle(this.page, budget(this));
76
110
  });
@@ -105,14 +139,21 @@ When(/^(?:I |we )*add section gutters$/, async function () {
105
139
  * Example #5: When we select the "Edge to Edge" container type
106
140
  */
107
141
  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").
142
+ // A real Playwright click first: the LB config sidebar's radio labels are
143
+ // wired through Drupal AJAX behaviors, which a synthetic click can silently
144
+ // fail to trigger (see the identical issue fixed for "save the section").
145
+ // But on some Bootstrap Styles versions these labels are visually-hidden
146
+ // colour/type swatches, so the actionability checks time out even though the
147
+ // label is the right target — fall back to an in-page native click then
148
+ // (the label's own click handler still fires Drupal's behaviors).
112
149
  const clickLabel = async (text, forPrefix) => {
113
150
  const lbl = this.page.locator('label').filter({ hasText: text }).and(this.page.locator(`label[for*="${forPrefix}"]`)).first();
114
151
  if (!(await lbl.count())) return false;
115
- await lbl.click();
152
+ try {
153
+ await lbl.click({ timeout: 10000 });
154
+ } catch (e) {
155
+ await lbl.evaluate((el) => el.click());
156
+ }
116
157
  return true;
117
158
  };
118
159
  if (!(await clickLabel(type, 'edit-layout-settings-ui-tab-content-layout-container-type'))) {
@@ -55,8 +55,32 @@ 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 });
59
- await smartSettle(this.page, budget(this));
58
+ const dialog = this.page.locator('.ui-dialog .media-library-view, .media-library-widget-modal').first();
59
+ const open = async () => {
60
+ try {
61
+ await btn.click({ timeout: 8000 });
62
+ } catch (e) {
63
+ // A stale jQuery UI overlay (ui-widget-overlay) from a previous dialog can
64
+ // intercept pointer events over a correctly-resolved button. The button is
65
+ // right - dispatch the click in-page so Drupal's AJAX handler still fires.
66
+ await btn.evaluate((el) => el.click());
67
+ }
68
+ await smartSettle(this.page, budget(this));
69
+ };
70
+ await open();
71
+ // The dialog can be torn down by a previous dialog's late close animation
72
+ // (two stacked jQuery UI dialogs) - verify it is really there, and re-open
73
+ // once when it is not, before letting the next step run against nothing.
74
+ try {
75
+ await dialog.waitFor({ state: 'visible', timeout: 10000 });
76
+ } catch (e) {
77
+ await open();
78
+ try {
79
+ await dialog.waitFor({ state: 'visible', timeout: 10000 });
80
+ } catch (e2) {
81
+ throw friendly(`The media library dialog for "${field}" did not open.`);
82
+ }
83
+ }
60
84
  });
61
85
 
62
86
  /**