@vardot/varbase-e2e 2.0.2 → 2.0.4
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.
- package/.playwright-mcp/console-2026-09-07T08-40-17-262Z.log +28 -0
- package/.playwright-mcp/console-2026-09-07T08-40-55-044Z.log +4 -0
- package/.playwright-mcp/console-2026-09-07T08-41-12-557Z.log +18 -0
- package/.playwright-mcp/console-2026-09-07T08-42-32-413Z.log +38 -0
- package/.playwright-mcp/console-2026-09-07T09-02-43-145Z.log +1 -0
- package/.playwright-mcp/console-2026-09-07T09-03-15-665Z.log +17 -0
- package/.playwright-mcp/page-2026-09-07T08-40-18-956Z.yml +261 -0
- package/.playwright-mcp/page-2026-09-07T08-40-55-673Z.yml +132 -0
- package/.playwright-mcp/page-2026-09-07T08-41-13-471Z.yml +386 -0
- package/.playwright-mcp/page-2026-09-07T08-42-33-250Z.yml +287 -0
- package/AGENTS.md +1 -1
- package/CLAUDE.md +6 -5
- package/README.md +2 -0
- package/docs/04-step-reference.md +15 -1
- package/docs/README.md +8 -5
- package/docs/install-varbase-e2e.md +0 -2
- package/docs/steps/README.md +6 -5
- package/docs/steps/assertion.md +90 -5
- package/docs/steps/drupal-drimage-improved.md +372 -0
- package/docs/steps/navigation.md +81 -1
- package/docs/steps/varbase.md +6 -65
- package/examples/access-denied.html +6 -0
- package/examples/drimage.html +55 -0
- package/examples/styles/drimage_improved_1000_667/public/sample.png +0 -0
- package/examples/styles/drimage_improved_1200_800/public/sample.png +0 -0
- package/examples/styles/drimage_improved_1400_933/public/sample.png +0 -0
- package/examples/styles/drimage_improved_1600_1067/public/sample.png +0 -0
- package/examples/styles/drimage_improved_1800_1200/public/sample.png +0 -0
- package/examples/styles/drimage_improved_2000_1333/public/sample.png +0 -0
- package/examples/styles/drimage_improved_200_133/public/sample.png +0 -0
- package/examples/styles/drimage_improved_2200_1467/public/sample.png +0 -0
- package/examples/styles/drimage_improved_2400_1600/public/sample.png +0 -0
- package/examples/styles/drimage_improved_2600_1734/public/sample.png +0 -0
- package/examples/styles/drimage_improved_2800_1867/public/sample.png +0 -0
- package/examples/styles/drimage_improved_3000_2000/public/sample.png +0 -0
- package/examples/styles/drimage_improved_3200_2134/public/sample.png +0 -0
- package/examples/styles/drimage_improved_3400_2267/public/sample.png +0 -0
- package/examples/styles/drimage_improved_3600_2400/public/sample.png +0 -0
- package/examples/styles/drimage_improved_3800_2534/public/sample.png +0 -0
- package/examples/styles/drimage_improved_4000_2667/public/sample.png +0 -0
- package/examples/styles/drimage_improved_400_267/public/sample.png +0 -0
- package/examples/styles/drimage_improved_600_400/public/sample.png +0 -0
- package/examples/styles/drimage_improved_800_533/public/sample.png +0 -0
- package/examples/user-login.html +12 -0
- package/images/varbase-e2e-logo.svg +24 -0
- package/package.json +1 -1
- package/tests/features/access.feature +33 -0
- package/tests/features/drupal-drimage-improved.feature +59 -0
- package/tests/features/http-status.feature +21 -0
- package/tests/features/page-title.feature +24 -0
- package/tests/step-definitions/assertion.steps.js +108 -19
- package/tests/step-definitions/drupal-drimage-improved.steps.js +486 -0
- package/tests/step-definitions/navigation.steps.js +101 -1
- package/tests/step-definitions/varbase.steps.js +0 -83
- package/.playwright-mcp/console-2026-08-09T19-48-04-420Z.log +0 -6
- package/.playwright-mcp/console-2026-08-09T19-48-21-910Z.log +0 -4
- package/.playwright-mcp/console-2026-08-09T19-48-37-544Z.log +0 -5
- package/.playwright-mcp/console-2026-08-09T20-02-58-240Z.log +0 -5
- package/.playwright-mcp/console-2026-08-09T20-15-05-487Z.log +0 -71
- package/.playwright-mcp/console-2026-08-09T20-31-11-228Z.log +0 -14
- package/.playwright-mcp/console-2026-08-09T20-34-03-115Z.log +0 -7
- package/.playwright-mcp/console-2026-08-09T20-34-34-018Z.log +0 -85
- package/.playwright-mcp/console-2026-08-09T20-34-34-740Z.log +0 -46
- package/.playwright-mcp/console-2026-08-09T20-34-35-618Z.log +0 -92
- package/.playwright-mcp/console-2026-08-09T22-57-59-606Z.log +0 -14
- package/.playwright-mcp/console-2026-08-09T23-09-53-902Z.log +0 -28
- package/.playwright-mcp/console-2026-08-09T23-09-55-918Z.log +0 -49
- package/.playwright-mcp/console-2026-08-09T23-09-57-522Z.log +0 -42
- package/.playwright-mcp/console-2026-08-09T23-40-26-847Z.log +0 -28
- package/.playwright-mcp/console-2026-08-10T00-05-53-423Z.log +0 -8
- package/.playwright-mcp/console-2026-08-10T08-51-59-747Z.log +0 -5
- package/.playwright-mcp/console-2026-08-10T09-00-26-735Z.log +0 -7
- package/.playwright-mcp/page-2026-08-09T19-48-23-422Z.yml +0 -288
- package/.playwright-mcp/page-2026-08-09T19-48-32-827Z.yml +0 -39
- package/.playwright-mcp/page-2026-08-09T19-48-39-150Z.yml +0 -39
- package/.playwright-mcp/page-2026-08-09T19-50-55-594Z.yml +0 -787
- package/.playwright-mcp/page-2026-08-09T19-51-28-160Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-09T19-51-45-546Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-09T19-51-46-085Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-09T19-51-46-355Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-09T19-51-49-918Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-09T19-52-30-248Z.yml +0 -415
- package/.playwright-mcp/page-2026-08-09T19-52-42-510Z.yml +0 -415
- package/.playwright-mcp/page-2026-08-09T19-52-45-588Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-09T19-52-54-615Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-09T19-52-55-424Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-09T19-52-55-553Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-09T19-52-58-991Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-09T19-53-29-261Z.yml +0 -415
- package/.playwright-mcp/page-2026-08-09T19-53-40-322Z.yml +0 -415
- package/.playwright-mcp/page-2026-08-09T19-53-44-146Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-09T19-53-51-021Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-09T19-53-51-565Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-09T19-53-51-979Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-09T19-53-54-883Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-09T19-54-24-537Z.yml +0 -415
- package/.playwright-mcp/page-2026-08-09T20-01-07-921Z.yml +0 -404
- package/.playwright-mcp/page-2026-08-09T20-01-35-366Z.yml +0 -404
- package/.playwright-mcp/page-2026-08-09T20-01-54-083Z.yml +0 -404
- package/.playwright-mcp/page-2026-08-09T20-02-07-954Z.yml +0 -416
- package/.playwright-mcp/page-2026-08-09T20-02-24-800Z.yml +0 -404
- package/.playwright-mcp/page-2026-08-09T20-02-29-695Z.yml +0 -404
- package/.playwright-mcp/page-2026-08-09T20-02-33-819Z.yml +0 -404
- package/.playwright-mcp/page-2026-08-09T20-02-41-437Z.yml +0 -404
- package/.playwright-mcp/page-2026-08-09T20-02-53-232Z.yml +0 -416
- package/.playwright-mcp/page-2026-08-09T20-03-00-246Z.yml +0 -404
- package/.playwright-mcp/page-2026-08-09T20-03-03-297Z.yml +0 -404
- package/.playwright-mcp/page-2026-08-09T20-03-11-014Z.yml +0 -404
- package/.playwright-mcp/page-2026-08-09T20-03-21-049Z.yml +0 -416
- package/.playwright-mcp/page-2026-08-10T01-04-54-039Z.yml +0 -410
- package/.playwright-mcp/page-2026-08-10T01-05-06-967Z.png +0 -0
- package/.playwright-mcp/page-2026-08-10T01-05-52-136Z.yml +0 -720
- package/.playwright-mcp/page-2026-08-10T01-06-05-985Z.yml +0 -410
- package/.playwright-mcp/page-2026-08-10T01-06-25-942Z.yml +0 -726
- package/.playwright-mcp/page-2026-08-10T01-25-57-152Z.yml +0 -395
- package/.playwright-mcp/page-2026-08-10T01-26-48-853Z.yml +0 -395
- package/.playwright-mcp/page-2026-08-10T01-27-47-127Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-27-57-349Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-28-07-943Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-28-30-462Z.yml +0 -369
- package/.playwright-mcp/page-2026-08-10T01-29-00-369Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-29-08-988Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-29-19-888Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-29-30-189Z.yml +0 -369
- package/.playwright-mcp/page-2026-08-10T01-30-08-272Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-30-16-955Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-30-27-612Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-30-37-943Z.yml +0 -465
- package/.playwright-mcp/page-2026-08-10T01-31-15-265Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-31-24-328Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-31-36-622Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-31-45-965Z.yml +0 -470
- package/.playwright-mcp/page-2026-08-10T01-32-13-400Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-32-23-469Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-32-33-859Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-32-43-461Z.yml +0 -513
- package/.playwright-mcp/page-2026-08-10T01-33-13-160Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-33-23-937Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-33-35-367Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-33-47-266Z.yml +0 -459
- package/.playwright-mcp/page-2026-08-10T01-34-14-452Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-34-26-042Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-34-40-869Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-34-49-587Z.yml +0 -391
- package/.playwright-mcp/page-2026-08-10T01-35-16-735Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-35-24-882Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-35-36-165Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-35-45-644Z.yml +0 -455
- package/.playwright-mcp/page-2026-08-10T01-36-18-148Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-36-26-751Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-36-37-834Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-36-48-078Z.yml +0 -370
- package/.playwright-mcp/page-2026-08-10T01-37-16-309Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-37-28-723Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-37-39-325Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-37-48-278Z.yml +0 -409
- package/.playwright-mcp/page-2026-08-10T01-38-27-405Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-38-36-994Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-38-49-584Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-38-59-289Z.yml +0 -396
- package/.playwright-mcp/page-2026-08-10T01-39-24-880Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-39-35-551Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-39-47-960Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-39-56-844Z.yml +0 -549
- package/.playwright-mcp/page-2026-08-10T01-40-24-645Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-40-33-806Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-40-46-946Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-40-56-503Z.yml +0 -443
- package/.playwright-mcp/page-2026-08-10T01-41-32-064Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-41-40-666Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-41-51-325Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-41-58-790Z.yml +0 -368
- package/.playwright-mcp/page-2026-08-10T01-42-26-459Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-42-38-306Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-42-49-073Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-42-57-453Z.yml +0 -443
- package/.playwright-mcp/page-2026-08-10T01-43-32-099Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-43-42-882Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-43-54-853Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-44-04-373Z.yml +0 -399
- package/.playwright-mcp/page-2026-08-10T01-44-30-874Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-44-39-830Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-44-51-515Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-44-59-974Z.yml +0 -503
- package/.playwright-mcp/page-2026-08-10T01-45-26-748Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-45-36-685Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-45-47-715Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-45-57-895Z.yml +0 -469
- package/.playwright-mcp/page-2026-08-10T01-46-36-371Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-46-49-906Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-47-01-554Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-47-12-712Z.yml +0 -581
- package/.playwright-mcp/page-2026-08-10T01-47-39-024Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-47-49-714Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-48-00-608Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-48-09-739Z.yml +0 -604
- package/.playwright-mcp/page-2026-08-10T01-48-51-940Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-49-01-562Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-49-13-751Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-49-22-503Z.yml +0 -400
- package/.playwright-mcp/page-2026-08-10T01-49-49-311Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-50-00-769Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-50-12-083Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-50-23-765Z.yml +0 -458
- package/.playwright-mcp/page-2026-08-10T01-51-02-339Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-51-12-711Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-51-25-370Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-51-33-936Z.yml +0 -368
- package/.playwright-mcp/page-2026-08-10T01-52-09-467Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-52-21-616Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-52-32-806Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-52-42-382Z.yml +0 -407
- package/.playwright-mcp/page-2026-08-10T01-53-11-994Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-53-21-669Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-53-33-141Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-53-43-582Z.yml +0 -443
- package/.playwright-mcp/page-2026-08-10T01-54-19-884Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-54-32-359Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-54-43-530Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-54-53-891Z.yml +0 -474
- package/.playwright-mcp/page-2026-08-10T01-55-24-634Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-55-35-283Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-55-46-649Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-55-56-585Z.yml +0 -431
- package/.playwright-mcp/page-2026-08-10T01-56-31-670Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-56-40-782Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-56-52-065Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-57-03-705Z.yml +0 -445
- package/.playwright-mcp/page-2026-08-10T01-57-31-390Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-57-44-756Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-57-56-802Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-58-06-937Z.yml +0 -468
- package/.playwright-mcp/page-2026-08-10T01-58-40-595Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-58-51-715Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T01-59-04-402Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T01-59-15-638Z.yml +0 -472
- package/.playwright-mcp/page-2026-08-10T01-59-58-162Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T02-00-09-962Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T02-00-21-468Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T02-00-33-248Z.yml +0 -451
- package/.playwright-mcp/page-2026-08-10T02-01-15-418Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T02-01-27-182Z.yml +0 -413
- package/.playwright-mcp/page-2026-08-10T02-01-38-250Z.yml +0 -425
- package/.playwright-mcp/page-2026-08-10T04-20-27-979Z.yml +0 -513
- package/.playwright-mcp/page-2026-08-10T04-20-41-431Z.yml +0 -513
- package/.playwright-mcp/page-2026-08-10T04-21-46-133Z.yml +0 -406
- package/.playwright-mcp/page-2026-08-10T04-22-10-938Z.yml +0 -406
- package/.playwright-mcp/page-2026-08-10T04-23-00-626Z.yml +0 -406
- package/.playwright-mcp/page-2026-08-10T04-23-19-844Z.yml +0 -418
- package/.playwright-mcp/page-2026-08-10T04-25-00-732Z.yml +0 -455
- package/.playwright-mcp/page-2026-08-10T04-25-35-125Z.yml +0 -412
- package/.playwright-mcp/page-2026-08-10T04-25-46-640Z.yml +0 -412
- package/.playwright-mcp/page-2026-08-10T04-25-55-092Z.yml +0 -549
- package/.playwright-mcp/page-2026-08-10T04-26-26-403Z.yml +0 -406
- package/.playwright-mcp/page-2026-08-10T04-26-40-673Z.yml +0 -406
- package/.playwright-mcp/page-2026-08-10T04-26-48-427Z.yml +0 -604
- package/.playwright-mcp/page-2026-08-10T04-27-23-584Z.yml +0 -408
- package/.playwright-mcp/page-2026-08-10T04-27-34-294Z.yml +0 -408
- package/.playwright-mcp/page-2026-08-10T04-27-42-299Z.yml +0 -443
- package/.playwright-mcp/page-2026-08-10T04-28-20-032Z.yml +0 -406
- package/.playwright-mcp/page-2026-08-10T04-28-32-275Z.yml +0 -406
- package/.playwright-mcp/page-2026-08-10T04-28-41-592Z.yml +0 -581
- package/.playwright-mcp/page-2026-08-10T04-29-19-972Z.yml +0 -414
- package/.playwright-mcp/page-2026-08-10T04-29-30-961Z.yml +0 -414
- package/.playwright-mcp/page-2026-08-10T04-29-39-044Z.yml +0 -465
- package/.playwright-mcp/page-2026-08-10T04-30-13-196Z.yml +0 -402
- package/.playwright-mcp/page-2026-08-10T04-30-24-867Z.yml +0 -402
- package/.playwright-mcp/page-2026-08-10T04-30-32-372Z.yml +0 -409
- package/.playwright-mcp/page-2026-08-10T04-31-06-199Z.yml +0 -402
- package/.playwright-mcp/page-2026-08-10T04-31-17-733Z.yml +0 -402
- package/.playwright-mcp/page-2026-08-10T04-31-26-296Z.yml +0 -445
- package/.playwright-mcp/page-2026-08-10T04-32-02-456Z.yml +0 -402
- package/.playwright-mcp/page-2026-08-10T04-32-14-091Z.yml +0 -402
- package/.playwright-mcp/page-2026-08-10T04-32-23-437Z.yml +0 -396
- package/.playwright-mcp/page-2026-08-10T04-32-58-401Z.yml +0 -403
- package/.playwright-mcp/page-2026-08-10T04-33-09-818Z.yml +0 -403
- package/.playwright-mcp/page-2026-08-10T04-33-20-858Z.yml +0 -468
- package/.playwright-mcp/page-2026-08-10T04-33-53-074Z.yml +0 -407
- package/.playwright-mcp/page-2026-08-10T04-34-05-806Z.yml +0 -407
- package/.playwright-mcp/page-2026-08-10T08-52-00-165Z.yml +0 -0
- package/.playwright-mcp/page-2026-08-10T08-52-17-430Z.yml +0 -410
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
- generic [active] [ref=f3e1]:
|
|
2
|
+
- link "Skip to main content" [ref=f3e2] [cursor=pointer]:
|
|
3
|
+
- /url: "#main-content"
|
|
4
|
+
- generic [ref=f3e4]:
|
|
5
|
+
- banner [ref=f3e5]:
|
|
6
|
+
- generic [ref=f3e11]:
|
|
7
|
+
- link [ref=f3e14] [cursor=pointer]:
|
|
8
|
+
- /url: /
|
|
9
|
+
- img "Horizon Aid Client Demo 1 logo" [ref=f3e15]
|
|
10
|
+
- generic [ref=f3e17]:
|
|
11
|
+
- navigation [ref=f3e20]:
|
|
12
|
+
- list [ref=f3e22]:
|
|
13
|
+
- listitem [ref=f3e23]:
|
|
14
|
+
- link "About" [ref=f3e24] [cursor=pointer]:
|
|
15
|
+
- /url: /about
|
|
16
|
+
- listitem [ref=f3e25]:
|
|
17
|
+
- link "Resources" [ref=f3e26] [cursor=pointer]:
|
|
18
|
+
- /url: /resources
|
|
19
|
+
- listitem [ref=f3e27]:
|
|
20
|
+
- link "Programs" [ref=f3e28] [cursor=pointer]:
|
|
21
|
+
- /url: /programs
|
|
22
|
+
- listitem [ref=f3e29]:
|
|
23
|
+
- link "Countries" [ref=f3e30] [cursor=pointer]:
|
|
24
|
+
- /url: /countries
|
|
25
|
+
- listitem [ref=f3e31]:
|
|
26
|
+
- link "Events" [ref=f3e32] [cursor=pointer]:
|
|
27
|
+
- /url: /events
|
|
28
|
+
- listitem [ref=f3e33]:
|
|
29
|
+
- link "Donate" [ref=f3e34] [cursor=pointer]:
|
|
30
|
+
- /url: /donate
|
|
31
|
+
- generic [ref=f3e35]:
|
|
32
|
+
- button "Search" [ref=f3e36] [cursor=pointer]:
|
|
33
|
+
- generic [ref=f3e37]:
|
|
34
|
+
- text:
|
|
35
|
+
- main [ref=f3e38]:
|
|
36
|
+
- generic [ref=f3e41]:
|
|
37
|
+
- generic [ref=f3e42]:
|
|
38
|
+
- figure [ref=f3e44]:
|
|
39
|
+
- img "Home Page Header Banner" [ref=f3e47]
|
|
40
|
+
- generic [ref=f3e48]:
|
|
41
|
+
- heading "Focus Forward" [level=1] [ref=f3e49]
|
|
42
|
+
- paragraph [ref=f3e51]: Empowering local communities to defend human rights and rebuild together.
|
|
43
|
+
- link "Donate Today" [ref=f3e53] [cursor=pointer]:
|
|
44
|
+
- /url: /donate
|
|
45
|
+
- generic [ref=f3e60]:
|
|
46
|
+
- heading "Delivering life-saving aid and sustainable development to communities in crisis." [level=2] [ref=f3e61]
|
|
47
|
+
- link "Learn About Our Role" [ref=f3e64] [cursor=pointer]:
|
|
48
|
+
- /url: /about
|
|
49
|
+
- generic [ref=f3e69]:
|
|
50
|
+
- generic [ref=f3e75]:
|
|
51
|
+
- generic [ref=f3e76]:
|
|
52
|
+
- heading "Global Impact" [level=2] [ref=f3e77]
|
|
53
|
+
- paragraph [ref=f3e79]: We believe in absolute transparency. Through partnerships and direct community funding, we track every dollar to ensure your support creates immediate, sustainable protection for human rights worldwide.
|
|
54
|
+
- link "Explore Our Impact" [ref=f3e81] [cursor=pointer]:
|
|
55
|
+
- /url: /countries
|
|
56
|
+
- generic [ref=f3e83]:
|
|
57
|
+
- generic [ref=f3e85]:
|
|
58
|
+
- generic [ref=f3e86]: 0K+
|
|
59
|
+
- paragraph [ref=f3e87]: Lives Protected
|
|
60
|
+
- generic [ref=f3e89]:
|
|
61
|
+
- generic [ref=f3e90]: 0K+
|
|
62
|
+
- paragraph [ref=f3e91]: Legal Aid Hours
|
|
63
|
+
- generic [ref=f3e93]:
|
|
64
|
+
- generic [ref=f3e94]: 0K+
|
|
65
|
+
- paragraph [ref=f3e95]: Communities Served
|
|
66
|
+
- generic [ref=f3e101]:
|
|
67
|
+
- heading "Explore Our Programs" [level=2] [ref=f3e102]
|
|
68
|
+
- generic [ref=f3e106]:
|
|
69
|
+
- tablist [ref=f3e107]:
|
|
70
|
+
- tab "Education" [selected] [ref=f3e108] [cursor=pointer]
|
|
71
|
+
- tab "Women" [ref=f3e109] [cursor=pointer]
|
|
72
|
+
- tab "Agriculture" [ref=f3e110] [cursor=pointer]
|
|
73
|
+
- tab "Medicine" [ref=f3e111] [cursor=pointer]
|
|
74
|
+
- tab "Health" [ref=f3e112] [cursor=pointer]
|
|
75
|
+
- tabpanel [ref=f3e114]:
|
|
76
|
+
- generic [ref=f3e115]:
|
|
77
|
+
- figure [ref=f3e117]:
|
|
78
|
+
- img "Children sitting together outside tents in a camp" [ref=f3e120]
|
|
79
|
+
- generic [ref=f3e121]:
|
|
80
|
+
- heading "Education" [level=3] [ref=f3e122]
|
|
81
|
+
- paragraph [ref=f3e123]: Building safe schools and training local teachers to give children a clear path to a brighter future.
|
|
82
|
+
- link "Learn More" [ref=f3e124] [cursor=pointer]:
|
|
83
|
+
- /url: /programs/education
|
|
84
|
+
- generic [ref=f3e139]:
|
|
85
|
+
- generic [ref=f3e140]:
|
|
86
|
+
- heading "Where We Work" [level=2] [ref=f3e141]
|
|
87
|
+
- generic [ref=f3e142]: We work where displacement, conflict and climate pressure hit hardest. Each country page sets out our role, the work on the ground, the figures behind it and the partners we work with.
|
|
88
|
+
- generic [ref=f3e143]:
|
|
89
|
+
- generic [ref=f3e144]:
|
|
90
|
+
- figure [ref=f3e146]:
|
|
91
|
+
- img "Girls in a classroom in Afghanistan" [ref=f3e148]
|
|
92
|
+
- generic [ref=f3e149]:
|
|
93
|
+
- generic [ref=f3e150]:
|
|
94
|
+
- heading "Afghanistan" [level=3] [ref=f3e151]
|
|
95
|
+
- generic [ref=f3e152]: One of the most complex humanitarian contexts in the world. We have worked alongside Afghan communities through displacement, conflict and recovery for over a decade.
|
|
96
|
+
- link "View Country" [ref=f3e154] [cursor=pointer]:
|
|
97
|
+
- /url: /countries/afghanistan
|
|
98
|
+
- generic [ref=f3e155]:
|
|
99
|
+
- figure [ref=f3e157]:
|
|
100
|
+
- img "Bangladesh country programme" [ref=f3e159]
|
|
101
|
+
- generic [ref=f3e160]:
|
|
102
|
+
- generic [ref=f3e161]:
|
|
103
|
+
- heading "Bangladesh" [level=3] [ref=f3e162]
|
|
104
|
+
- generic [ref=f3e163]: Shelter, water and sanitation support in dense displacement settlements exposed to cyclones and monsoon flooding.
|
|
105
|
+
- link "View Country" [ref=f3e165] [cursor=pointer]:
|
|
106
|
+
- /url: /countries/bangladesh
|
|
107
|
+
- generic [ref=f3e166]:
|
|
108
|
+
- figure [ref=f3e168]:
|
|
109
|
+
- img "Colombia country programme" [ref=f3e170]
|
|
110
|
+
- generic [ref=f3e171]:
|
|
111
|
+
- generic [ref=f3e172]:
|
|
112
|
+
- heading "Colombia" [level=3] [ref=f3e173]
|
|
113
|
+
- generic [ref=f3e174]: Legal aid, documentation and integration support for migrant and host communities along the migration corridor.
|
|
114
|
+
- link "View Country" [ref=f3e176] [cursor=pointer]:
|
|
115
|
+
- /url: /countries/colombia
|
|
116
|
+
- generic [ref=f3e177]:
|
|
117
|
+
- figure [ref=f3e179]:
|
|
118
|
+
- img "Ecuador country programme" [ref=f3e181]
|
|
119
|
+
- generic [ref=f3e182]:
|
|
120
|
+
- generic [ref=f3e183]:
|
|
121
|
+
- heading "Ecuador" [level=3] [ref=f3e184]
|
|
122
|
+
- generic [ref=f3e185]: Emergency legal aid and protection services for migrant families moving through major border corridors.
|
|
123
|
+
- link "View Country" [ref=f3e187] [cursor=pointer]:
|
|
124
|
+
- /url: /countries/ecuador
|
|
125
|
+
- generic [ref=f3e188]:
|
|
126
|
+
- link "View All Countries" [ref=f3e189] [cursor=pointer]:
|
|
127
|
+
- /url: /countries
|
|
128
|
+
- generic [ref=f3e191]:
|
|
129
|
+
- button "Previous" [disabled]
|
|
130
|
+
- button "Next" [disabled]
|
|
131
|
+
- generic [ref=f3e197]:
|
|
132
|
+
- heading "Collaborating With Partners to Drive Community Impact" [level=2] [ref=f3e205]
|
|
133
|
+
- generic [ref=f3e206]:
|
|
134
|
+
- figure [ref=f3e208]:
|
|
135
|
+
- img "Invert Partner" [ref=f3e210]
|
|
136
|
+
- figure [ref=f3e212]:
|
|
137
|
+
- img "Cloud Partner" [ref=f3e214]
|
|
138
|
+
- figure [ref=f3e216]:
|
|
139
|
+
- img "Minty Partner" [ref=f3e218]
|
|
140
|
+
- figure [ref=f3e220]:
|
|
141
|
+
- img "Greenish Partner" [ref=f3e222]
|
|
142
|
+
- figure [ref=f3e224]:
|
|
143
|
+
- img "Vision Partner" [ref=f3e226]
|
|
144
|
+
- generic [ref=f3e230]:
|
|
145
|
+
- heading "Upcoming Events" [level=2] [ref=f3e232]
|
|
146
|
+
- generic [ref=f3e240]:
|
|
147
|
+
- generic [ref=f3e242]:
|
|
148
|
+
- generic [ref=f3e243]:
|
|
149
|
+
- generic [ref=f3e244]: Webinar
|
|
150
|
+
- generic [ref=f3e246]:
|
|
151
|
+
- heading "Digital security for advocacy groups" [level=3] [ref=f3e247]
|
|
152
|
+
- generic [ref=f3e248]: Learn how to protect field communications, secure donor data, and defend your organisation against cyber threats in high-risk environments.
|
|
153
|
+
- generic [ref=f3e249]:
|
|
154
|
+
- paragraph [ref=f3e250]: 12 Jun – 30 Jul
|
|
155
|
+
- paragraph [ref=f3e251]: 11:00 - 14:30 +03
|
|
156
|
+
- link "Digital security for advocacy groups Learn how to protect field communications, secure donor data, and defend your organisation against cyber threats in high-risk environments.":
|
|
157
|
+
- /url: /events/digital-security-advocacy-groups
|
|
158
|
+
- generic [ref=f3e253]:
|
|
159
|
+
- generic [ref=f3e254]:
|
|
160
|
+
- generic [ref=f3e255]: In-person
|
|
161
|
+
- generic [ref=f3e257]:
|
|
162
|
+
- heading "Global refugee policy briefing" [level=3] [ref=f3e258]
|
|
163
|
+
- generic [ref=f3e259]: Senior legal advisors present new frameworks on asylum rights and cross-border protection standards.
|
|
164
|
+
- generic [ref=f3e260]:
|
|
165
|
+
- paragraph [ref=f3e261]: 17 Jun
|
|
166
|
+
- paragraph [ref=f3e262]: 11:00 - 14:30 +03
|
|
167
|
+
- link "Global refugee policy briefing Senior legal advisors present new frameworks on asylum rights and cross-border protection standards.":
|
|
168
|
+
- /url: /events/global-refugee-policy-briefing
|
|
169
|
+
- generic [ref=f3e264]:
|
|
170
|
+
- generic [ref=f3e265]:
|
|
171
|
+
- generic [ref=f3e266]: Summit
|
|
172
|
+
- generic [ref=f3e268]:
|
|
173
|
+
- heading "Grassroots leadership summit" [level=3] [ref=f3e269]
|
|
174
|
+
- generic [ref=f3e270]: A two-day convening for community leaders working in displacement and humanitarian response.
|
|
175
|
+
- generic [ref=f3e271]:
|
|
176
|
+
- paragraph [ref=f3e272]: 28 Jun – 29 Jun
|
|
177
|
+
- paragraph [ref=f3e273]: 11:00 - 14:30 +03
|
|
178
|
+
- link "Grassroots leadership summit A two-day convening for community leaders working in displacement and humanitarian response.":
|
|
179
|
+
- /url: /events/grassroots-leadership-summit
|
|
180
|
+
- link "See All Events" [ref=f3e275] [cursor=pointer]:
|
|
181
|
+
- /url: /events
|
|
182
|
+
- generic [ref=f3e284]:
|
|
183
|
+
- generic [ref=f3e285]:
|
|
184
|
+
- heading "Latest Updates" [level=2] [ref=f3e286]
|
|
185
|
+
- list [ref=f3e287]:
|
|
186
|
+
- listitem [ref=f3e288]:
|
|
187
|
+
- link "Healthcare & Medicine" [ref=f3e289] [cursor=pointer]:
|
|
188
|
+
- /url: /resources
|
|
189
|
+
- listitem [ref=f3e290]:
|
|
190
|
+
- link "Sustenance & Growth" [ref=f3e291] [cursor=pointer]:
|
|
191
|
+
- /url: /resources
|
|
192
|
+
- listitem [ref=f3e292]:
|
|
193
|
+
- link "Universal Education" [ref=f3e293] [cursor=pointer]:
|
|
194
|
+
- /url: /resources
|
|
195
|
+
- link "Explore More" [ref=f3e294] [cursor=pointer]:
|
|
196
|
+
- /url: /resources
|
|
197
|
+
- generic [ref=f3e296]:
|
|
198
|
+
- generic [ref=f3e297]:
|
|
199
|
+
- generic [ref=f3e298]:
|
|
200
|
+
- generic [ref=f3e299]:
|
|
201
|
+
- figure [ref=f3e300]:
|
|
202
|
+
- img "Two people walking through irrigated fields at first light" [ref=f3e303]
|
|
203
|
+
- generic "Report" [ref=f3e305]
|
|
204
|
+
- generic [ref=f3e307]:
|
|
205
|
+
- heading "Cultivating independence in rural farms" [level=3] [ref=f3e308]
|
|
206
|
+
- time [ref=f3e309]:
|
|
207
|
+
- generic [ref=f3e310]: Aug 19, 2026
|
|
208
|
+
- generic [ref=f3e311]: Cooperatives using climate-resilient tools secured steady yields for a second consecutive season.
|
|
209
|
+
- link "Cultivating independence in rural farms Aug 19, 2026 Cooperatives using climate-resilient tools secured steady yields for a second consecutive season.":
|
|
210
|
+
- /url: /resources/cultivating-independence-rural-farms
|
|
211
|
+
- generic [ref=f3e312]:
|
|
212
|
+
- generic [ref=f3e313]:
|
|
213
|
+
- figure [ref=f3e314]:
|
|
214
|
+
- img "An aid worker handing supplies to a man beside a mobile clinic van" [ref=f3e317]
|
|
215
|
+
- generic "News" [ref=f3e319]
|
|
216
|
+
- generic [ref=f3e321]:
|
|
217
|
+
- heading "Bridging medical gaps in border corridors" [level=3] [ref=f3e322]
|
|
218
|
+
- time [ref=f3e323]:
|
|
219
|
+
- generic [ref=f3e324]: Aug 19, 2026
|
|
220
|
+
- generic [ref=f3e325]: Mobile health units delivered emergency paediatric care and preventative supplies to more than forty remote settlements this quarter.
|
|
221
|
+
- link "Bridging medical gaps in border corridors Aug 19, 2026 Mobile health units delivered emergency paediatric care and preventative supplies to more than forty remote settlements this quarter.":
|
|
222
|
+
- /url: /resources/bridging-medical-gaps-border-corridors
|
|
223
|
+
- generic [ref=f3e326]:
|
|
224
|
+
- generic [ref=f3e327]:
|
|
225
|
+
- figure [ref=f3e328]:
|
|
226
|
+
- img "An aid worker handing supplies to a man beside a mobile clinic van" [ref=f3e331]
|
|
227
|
+
- generic "Report" [ref=f3e333]
|
|
228
|
+
- generic [ref=f3e335]:
|
|
229
|
+
- heading "Border health screening outcomes" [level=3] [ref=f3e336]
|
|
230
|
+
- time [ref=f3e337]:
|
|
231
|
+
- generic [ref=f3e338]: Aug 19, 2026
|
|
232
|
+
- generic [ref=f3e339]: Screening results from four crossings over twelve months.
|
|
233
|
+
- link "Border health screening outcomes Aug 19, 2026 Screening results from four crossings over twelve months.":
|
|
234
|
+
- /url: /resources/border-health-screening-outcomes
|
|
235
|
+
- generic [ref=f3e340]:
|
|
236
|
+
- button "Previous" [disabled]
|
|
237
|
+
- button "Next" [ref=f3e341] [cursor=pointer]
|
|
238
|
+
- contentinfo [ref=f3e347]:
|
|
239
|
+
- generic [ref=f3e348]:
|
|
240
|
+
- generic [ref=f3e355]:
|
|
241
|
+
- generic [ref=f3e356]:
|
|
242
|
+
- figure [ref=f3e366]:
|
|
243
|
+
- img "Horizon Aid" [ref=f3e367]
|
|
244
|
+
- paragraph [ref=f3e370]: A nonprofit fighting poverty, disease, and inequity around the world.
|
|
245
|
+
- list [ref=f3e374]:
|
|
246
|
+
- listitem [ref=f3e375]:
|
|
247
|
+
- link " Linkedin" [ref=f3e376] [cursor=pointer]:
|
|
248
|
+
- /url: https://www.linkedin.com/company/vardot
|
|
249
|
+
- listitem [ref=f3e377]:
|
|
250
|
+
- link " Facebook" [ref=f3e378] [cursor=pointer]:
|
|
251
|
+
- /url: https://www.facebook.com/vardotters/
|
|
252
|
+
- listitem [ref=f3e379]:
|
|
253
|
+
- link " Instagram" [ref=f3e380] [cursor=pointer]:
|
|
254
|
+
- /url: https://www.instagram.com/vardotters/
|
|
255
|
+
- listitem [ref=f3e381]:
|
|
256
|
+
- link " X-Twitter" [ref=f3e382] [cursor=pointer]:
|
|
257
|
+
- /url: https://x.com/Vardot
|
|
258
|
+
- list [ref=f3e386]:
|
|
259
|
+
- listitem [ref=f3e387]:
|
|
260
|
+
- link "Quicklinks":
|
|
261
|
+
- /url: ""
|
|
262
|
+
- list [ref=f3e388]:
|
|
263
|
+
- listitem [ref=f3e389]:
|
|
264
|
+
- link "Learn" [ref=f3e390] [cursor=pointer]:
|
|
265
|
+
- /url: /resources
|
|
266
|
+
- listitem [ref=f3e391]:
|
|
267
|
+
- link "Explore" [ref=f3e392] [cursor=pointer]:
|
|
268
|
+
- /url: /programs
|
|
269
|
+
- listitem [ref=f3e393]:
|
|
270
|
+
- link "Impact" [ref=f3e394] [cursor=pointer]:
|
|
271
|
+
- /url: /impact
|
|
272
|
+
- listitem [ref=f3e395]:
|
|
273
|
+
- link "Act" [ref=f3e396] [cursor=pointer]:
|
|
274
|
+
- /url: /donate
|
|
275
|
+
- generic [ref=f3e397]:
|
|
276
|
+
- heading "Join Our Mission" [level=2] [ref=f3e398]
|
|
277
|
+
- paragraph [ref=f3e401]: Stay informed about our latest initiatives and how you can help.
|
|
278
|
+
- button "Subscribe" [ref=f3e403] [cursor=pointer]
|
|
279
|
+
- generic [ref=f3e409]:
|
|
280
|
+
- list [ref=f3e413]:
|
|
281
|
+
- listitem [ref=f3e414]:
|
|
282
|
+
- link "Terms and Conditions" [ref=f3e415] [cursor=pointer]:
|
|
283
|
+
- /url: /terms-and-conditions
|
|
284
|
+
- listitem [ref=f3e416]:
|
|
285
|
+
- link "My privacy settings" [ref=f3e417] [cursor=pointer]:
|
|
286
|
+
- /url: ""
|
|
287
|
+
- paragraph [ref=f3e420]: Copyright © 2026
|
package/AGENTS.md
CHANGED
|
@@ -109,7 +109,7 @@ step definitions. Critical takeaways:
|
|
|
109
109
|
|
|
110
110
|
## Source map
|
|
111
111
|
|
|
112
|
-
Step definitions: `tests/step-definitions/` —
|
|
112
|
+
Step definitions: `tests/step-definitions/` — 512 steps across 45
|
|
113
113
|
`*.steps.js` files, all auto-loaded, including the Drupal and Varbase packs
|
|
114
114
|
(`drupal-core`, `drupal-ckeditor`, `drupal-media`, `drupal-moderation`,
|
|
115
115
|
`drupal-layout-builder`, `drupal-paragraphs`, `drupal-canvas`, `varbase`)
|
package/CLAUDE.md
CHANGED
|
@@ -266,7 +266,7 @@ Some pairs look similar but cover different domains. NEVER merge:
|
|
|
266
266
|
|
|
267
267
|
## 5. File organisation
|
|
268
268
|
|
|
269
|
-
|
|
269
|
+
512 built-in steps across 45 step files. Cucumber auto-loads every
|
|
270
270
|
`*.steps.js` in `tests/step-definitions/`.
|
|
271
271
|
|
|
272
272
|
```
|
|
@@ -276,7 +276,7 @@ tests/step-definitions/
|
|
|
276
276
|
├── a11y.steps.js (26) # axe-core WCAG audits + POUR hygiene probes (axe loaded lazily)
|
|
277
277
|
├── action.steps.js (7) # press / click / follow / attach file (actOrExplain lives here)
|
|
278
278
|
├── api.steps.js (22) # REST long form — base URL, headers, query, body, JSON Pointer
|
|
279
|
-
├── assertion.steps.js (
|
|
279
|
+
├── assertion.steps.js (17) # see / not see, in row, in element, page title, response, HTTP status, count
|
|
280
280
|
├── auth.steps.js (3) # storageState save / restore / clear
|
|
281
281
|
├── clock.steps.js (7) # page.clock — install / advance / pause / set
|
|
282
282
|
├── cookie.steps.js (12) # cookie exists / equals / contains
|
|
@@ -293,7 +293,7 @@ tests/step-definitions/
|
|
|
293
293
|
├── link.steps.js (9) # href / title / target / rel assertions
|
|
294
294
|
├── metatag.steps.js (3) # <meta> description / keywords / OG / Twitter
|
|
295
295
|
├── modal.steps.js (9) # HTML modal visibility / content / interactions
|
|
296
|
-
├── navigation.steps.js (
|
|
296
|
+
├── navigation.steps.js (14) # anonymous user, homepage, paths, history, URL + access assertions
|
|
297
297
|
├── network.steps.js (10) # route stubs / blocks / delays / offline
|
|
298
298
|
├── path.steps.js (8) # URL path / query parameter / fragment
|
|
299
299
|
├── response.steps.js (4) # response header inspection
|
|
@@ -310,15 +310,16 @@ tests/step-definitions/
|
|
|
310
310
|
├── xml.steps.js (20) # XPath equals / contains / count / attr
|
|
311
311
|
├── drupal-canvas.steps.js (12) # Drupal Canvas editor + authoring API (pages, library, patterns, publish)
|
|
312
312
|
├── drupal-ckeditor.steps.js (4) # CKEditor 5 body writing, toolbar commands, Linkit dialog
|
|
313
|
+
├── drupal-drimage-improved.steps.js (13) # Drimage Improved: loaded / lazy / sized / webp / noscript / figure / caption / alt / title, selector-free
|
|
313
314
|
├── drupal-core.steps.js (27) # Drupal core: session, rows, operations, breadcrumbs, toolbar, waits
|
|
314
315
|
├── drupal-layout-builder.steps.js (17) # Layout Builder sections + the form controls that configure them
|
|
315
316
|
├── drupal-media.steps.js (4) # media library open / select / insert / submit dialog
|
|
316
317
|
├── drupal-moderation.steps.js (3)# moderation sidebar open + shows / does not show
|
|
317
318
|
├── drupal-paragraphs.steps.js (1)# choose a paragraph component in the add-widget dialog
|
|
318
|
-
├── varbase.steps.js (
|
|
319
|
+
├── varbase.steps.js (12) # Varbase: users, tour, theme settings, sticky header, a11y checker, warm-up
|
|
319
320
|
└── yaml.steps.js (38) # multi-doc, types, numerics, JSON Schema, diff
|
|
320
321
|
|
|
321
|
-
tests/features/ #
|
|
322
|
+
tests/features/ # 72 .feature files
|
|
322
323
|
tests/selectors/ # 26 JSON presets + _canonical-keys.json
|
|
323
324
|
tests/assets/ # upload fixtures (pdf, png)
|
|
324
325
|
examples/ # static HTML fixtures served by `npm start`
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ All step definitions ship in `tests/step-definitions/*.steps.js`. Cucumber-js lo
|
|
|
4
4
|
|
|
5
5
|
This is a topical reference — the fast lookup when you know roughly what you want.
|
|
6
6
|
|
|
7
|
-
For the **full catalogue**, with every step's pattern and at least five valid Gherkin examples each, see [`steps/`](steps/README.md):
|
|
7
|
+
For the **full catalogue**, with every step's pattern and at least five valid Gherkin examples each, see [`steps/`](steps/README.md): 508 steps across 45 category pages, generated from the step definitions themselves. The Drupal and Varbase packs are documented there and not repeated below.
|
|
8
8
|
|
|
9
9
|
## Navigation
|
|
10
10
|
|
|
@@ -18,6 +18,14 @@ For the **full catalogue**, with every step's pattern and at least five valid Gh
|
|
|
18
18
|
| `When I move forward one page` | `varbase-e2e.js` |
|
|
19
19
|
| `When I reload the page` | `varbase-e2e.js` |
|
|
20
20
|
|
|
21
|
+
## Access
|
|
22
|
+
|
|
23
|
+
| Step | Notes |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| `Then I am denied access to "/path"` | Refused: 403, 404, an access-denied page, or a log-in redirect. `should be refused` is the same step. |
|
|
26
|
+
| `Then I should be allowed "/path"` | 2xx and no refusal marker. `am granted access to` is the same step. |
|
|
27
|
+
| `Then I should be denied access` | The page already open. `the page should be access restricted` is the same step. |
|
|
28
|
+
|
|
21
29
|
## Click & press
|
|
22
30
|
|
|
23
31
|
| Step | Notes |
|
|
@@ -358,9 +366,12 @@ This index lists every public step grouped by source file, with one Gherkin exam
|
|
|
358
366
|
- *^(the )*"([^"]*)?" element should( not)* contain "([^"]*)?"$* · Example: `Then the "body" element should contain "color:white;"`
|
|
359
367
|
- *^(I |we )*should see (\d+) "([^"]*)" elements?$* · Example: `Then I should see 3 "li" elements`
|
|
360
368
|
- *^(the )*"([^"]*)?" link should contain "([^"]*)?"$* · Example: `Then the "Login" link should contain "/log-in"`
|
|
369
|
+
- *^(the )*page title should( not)* be "([^"]*)?"$* · Example: `Then the page title should be "About Us"`
|
|
370
|
+
- *^(the )*page title should( not)* contain "([^"]*)?"$* · Example: `Then the page title should contain "About"`
|
|
361
371
|
- *^(the )*"([^"]*)?" link should contain "([^"]*)?" by( its)*(?: "([^"]*)?")* (attribute|attr)$* · Example: `Then the "#about-us-id" link should contain "about" by attr`
|
|
362
372
|
- *^(the )*response should( not)* contain "([^"]*)?"$* · Example: `Then the response should contain "Welcome visitor"`
|
|
363
373
|
- *^(the )*response status code should( not)* be (\d+)$* · Example: `Then the response status code should be 200`
|
|
374
|
+
- *^(the )*page should( not)* return HTTP status (\d+)$* · Example: `Then the page should return HTTP status 404`
|
|
364
375
|
|
|
365
376
|
### auth.steps.js
|
|
366
377
|
|
|
@@ -570,6 +581,9 @@ This index lists every public step grouped by source file, with one Gherkin exam
|
|
|
570
581
|
- *^(I |we )*should( not)* be on( the)* (homepage|frontpage)$* · Example: `Then I should be on homepage`
|
|
571
582
|
- *^(I |we )*should( not)* be on( the)* "([^"]*)?"( page)*$* · Example: `Then I should be on "/"`
|
|
572
583
|
- *^(the )*url should( not)* match "([^"]*)?"$* · Example: `Then the url should match "/contact-us.html"`
|
|
584
|
+
- *^(I |we )*(?:am|should be) (?:denied access to|refused) "([^"]*)?"$* · Example: `Then I am denied access to "/admin/config"`
|
|
585
|
+
- *^(I |we )*(?:am|should be) (?:allowed|granted access to) "([^"]*)?"$* · Example: `Then I should be allowed "/admin/content"`
|
|
586
|
+
- *^(?:(?:I |we )*should be denied access|(?:the )*page should be access restricted)$* · Example: `Then I should be denied access`
|
|
573
587
|
|
|
574
588
|
### network.steps.js
|
|
575
589
|
|
package/docs/README.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+

|
|
2
|
+
|
|
1
3
|
# Varbase E2E Documentation
|
|
2
4
|
|
|
3
5
|
Varbase E2E is a BDD-first browser-automation harness built on Playwright + Cucumber-js. Feature files in plain Gherkin; selectors that survive redesigns; smart waits that never sleep.
|
|
4
6
|
|
|
5
|
-
**
|
|
7
|
+
**512 built-in steps** across **45 step files**, including the Drupal and Varbase packs. **299 example scenarios / 1,456 step executions** in the bundled suite, all green on chromium.
|
|
6
8
|
|
|
7
9
|
The full step catalogue — one page per category, generated from the step definitions themselves — is in **[`steps/`](steps/README.md)**.
|
|
8
10
|
|
|
@@ -39,7 +41,7 @@ The full step catalogue — one page per category, generated from the step defin
|
|
|
39
41
|
| [Install — DDEV](install-varbase-e2e/ddev-varbase-e2e.md) | DDEV-Varbase-E2E variant |
|
|
40
42
|
| [Global settings](global-settings.md) | `cucumber.js` `worldParameters` reference |
|
|
41
43
|
| [Step definitions](step-definitions.md) | Step-definition hub — what a step is, the rules, where the catalogue lives |
|
|
42
|
-
| [Step catalogue](steps/README.md) | All
|
|
44
|
+
| [Step catalogue](steps/README.md) | All 512 steps, 45 category pages under `steps/`, generated from the source |
|
|
43
45
|
| [API step definitions](api-step-definitions.md) | REST step definitions |
|
|
44
46
|
| [Advanced screenshots](advanced-screenshots.md) | Per-size, full-page, named (3 sub-pages under `advanced-screenshots/`) |
|
|
45
47
|
| [Advanced selectors](advanced-selectors.md) | Named selector registry, position assertions |
|
|
@@ -79,7 +81,7 @@ varbase-e2e/
|
|
|
79
81
|
│ ├── a11y.steps.js (26) # axe-core audits + WCAG hygiene probes
|
|
80
82
|
│ ├── action.steps.js (7) # press / click / follow / attach
|
|
81
83
|
│ ├── api.steps.js (22) # REST long form (base URL, headers, query, body, JSON Pointer)
|
|
82
|
-
│ ├── assertion.steps.js (
|
|
84
|
+
│ ├── assertion.steps.js (17) # see / not see, in row, in element, page title, response, HTTP status, count
|
|
83
85
|
│ ├── auth.steps.js (3) # save / restore / clear storageState
|
|
84
86
|
│ ├── clock.steps.js (7) # install / advance / pause / set system time
|
|
85
87
|
│ ├── cookie.steps.js (12) # cookie exists / equals / contains
|
|
@@ -96,7 +98,7 @@ varbase-e2e/
|
|
|
96
98
|
│ ├── link.steps.js (9) # href / title / target / rel
|
|
97
99
|
│ ├── metatag.steps.js (3) # description / keywords / OG / Twitter
|
|
98
100
|
│ ├── modal.steps.js (9) # HTML modal visibility / content / interactions
|
|
99
|
-
│ ├── navigation.steps.js (
|
|
101
|
+
│ ├── navigation.steps.js (14) # homepage / paths / history / URL assertions
|
|
100
102
|
│ ├── network.steps.js (10) # route stubs / mocks / delays / offline
|
|
101
103
|
│ ├── path.steps.js (8) # URL path / query / fragment
|
|
102
104
|
│ ├── response.steps.js (4) # response header inspection
|
|
@@ -117,7 +119,8 @@ varbase-e2e/
|
|
|
117
119
|
│ ├── drupal-media.steps.js (4) # media library open / select / insert
|
|
118
120
|
│ ├── drupal-moderation.steps.js (3) # moderation sidebar open + assertions
|
|
119
121
|
│ ├── drupal-paragraphs.steps.js (1) # choose a paragraph component
|
|
120
|
-
│ ├──
|
|
122
|
+
│ ├── drupal-drimage-improved.steps.js (13) # Drimage Improved: loaded / lazy / sized / webp / noscript / figure / caption / alt / title, no selectors
|
|
123
|
+
│ ├── varbase.steps.js (12) # Varbase users, tour, theme settings, a11y checker
|
|
121
124
|
│ ├── xml.steps.js (20) # XPath equals / contains / count / attr
|
|
122
125
|
│ └── yaml.steps.js (38) # multi-doc + types + numerics + JSON Schema + diff
|
|
123
126
|
├── examples/ <— Static HTML fixtures
|
|
@@ -30,5 +30,3 @@ The page is part of the Varbase E2E 2.0.x documentation section, which includes:
|
|
|
30
30
|
- Advanced Selectors
|
|
31
31
|
- Assertions
|
|
32
32
|
- Commands
|
|
33
|
-
|
|
34
|
-
There is also a subsection on "[DDEV Varbase E2E](/docs/varbase-e2e/2.0.x/install-varbase-e2e/ddev-varbase-e2e)" available under the installation guide.
|
package/docs/steps/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Every step Varbase E2E ships, one page per category, generated from the step
|
|
|
4
4
|
definitions themselves — so the phrasing, the pattern and the examples on these
|
|
5
5
|
pages are exactly what the runner matches.
|
|
6
6
|
|
|
7
|
-
**
|
|
7
|
+
**512 steps across 45 categories.**
|
|
8
8
|
|
|
9
9
|
Cucumber-js loads every `*.steps.js` under `tests/step-definitions/`
|
|
10
10
|
automatically. You never `require()` a step file from a feature: write the
|
|
@@ -37,10 +37,11 @@ Steps for the Drupal and Varbase surfaces the team tests every day — the node
|
|
|
37
37
|
| Content moderation | 3 | [`drupal-moderation.md`](drupal-moderation.md) |
|
|
38
38
|
| Layout Builder | 17 | [`drupal-layout-builder.md`](drupal-layout-builder.md) |
|
|
39
39
|
| Paragraphs | 1 | [`drupal-paragraphs.md`](drupal-paragraphs.md) |
|
|
40
|
+
| Drimage Improved | 13 | [`drupal-drimage-improved.md`](drupal-drimage-improved.md) |
|
|
40
41
|
| Drupal Canvas | 12 | [`drupal-canvas.md`](drupal-canvas.md) |
|
|
41
|
-
| Varbase |
|
|
42
|
+
| Varbase | 12 | [`varbase.md`](varbase.md) |
|
|
42
43
|
|
|
43
|
-
**
|
|
44
|
+
**95 steps.**
|
|
44
45
|
|
|
45
46
|
## User journeys
|
|
46
47
|
|
|
@@ -48,7 +49,7 @@ Driving the browser the way a person does: going somewhere, filling something in
|
|
|
48
49
|
|
|
49
50
|
| Category | Steps | Page |
|
|
50
51
|
| --- | --- | --- |
|
|
51
|
-
| Navigation |
|
|
52
|
+
| Navigation | 14 | [`navigation.md`](navigation.md) |
|
|
52
53
|
| Actions | 7 | [`action.md`](action.md) |
|
|
53
54
|
| Forms | 13 | [`form.md`](form.md) |
|
|
54
55
|
| Field state | 27 | [`field.md`](field.md) |
|
|
@@ -67,7 +68,7 @@ Asserting what the page ended up showing.
|
|
|
67
68
|
|
|
68
69
|
| Category | Steps | Page |
|
|
69
70
|
| --- | --- | --- |
|
|
70
|
-
| Assertions |
|
|
71
|
+
| Assertions | 17 | [`assertion.md`](assertion.md) |
|
|
71
72
|
| Web-first matchers | 12 | [`web-first.md`](web-first.md) |
|
|
72
73
|
| Element interactions | 19 | [`element.md`](element.md) |
|
|
73
74
|
| Tables | 8 | [`table.md`](table.md) |
|
package/docs/steps/assertion.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Assertions steps
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
17 steps, defined in `tests/step-definitions/assertion.steps.js`.
|
|
4
4
|
|
|
5
5
|
Cucumber-js loads every `*.steps.js` in that directory automatically — you never `require()` a step file from a feature.
|
|
6
6
|
|
|
@@ -18,8 +18,11 @@ Cucumber-js loads every `*.steps.js` in that directory automatically — you nev
|
|
|
18
18
|
| 10 | `Then I should see 3 "li" elements` |
|
|
19
19
|
| 11 | `Then the "Login" link should contain "/log-in"` |
|
|
20
20
|
| 12 | `Then the "#about-us-id" link should contain "about" by attr` |
|
|
21
|
-
| 13 | `Then the
|
|
22
|
-
| 14 | `Then the
|
|
21
|
+
| 13 | `Then the page title should be "About Us"` |
|
|
22
|
+
| 14 | `Then the page title should contain "About"` |
|
|
23
|
+
| 15 | `Then the response should contain "Welcome visitor"` |
|
|
24
|
+
| 16 | `Then the response status code should be 200` |
|
|
25
|
+
| 17 | `Then the page should return HTTP status 200` |
|
|
23
26
|
|
|
24
27
|
---
|
|
25
28
|
|
|
@@ -280,7 +283,59 @@ And the "aboutUs" link should contain "about" by its "class" attribute
|
|
|
280
283
|
And the ".contactUs" link should contain "/contact-" by attr
|
|
281
284
|
```
|
|
282
285
|
|
|
283
|
-
## 13. Then the
|
|
286
|
+
## 13. Then the page title should be "About Us"
|
|
287
|
+
|
|
288
|
+
Assert the page title is, or is not, exactly this text.
|
|
289
|
+
|
|
290
|
+
The title is `document.title` — the `<title>` element, which is the browser tab text, the bookmark name, the search-result heading and what a screen reader announces first on a new page. On a Drupal site it is the head title pattern, so this is how a test proves the pattern and the token that fills it both work. Compared after trimming, because a title built from a template often carries stray whitespace around the separator.
|
|
291
|
+
|
|
292
|
+
**Keyword**: `Then`
|
|
293
|
+
|
|
294
|
+
**Pattern**
|
|
295
|
+
|
|
296
|
+
```js
|
|
297
|
+
/^(the )*page title should( not)* be "([^"]*)?"$/
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
**Examples**
|
|
301
|
+
|
|
302
|
+
```gherkin
|
|
303
|
+
Then the page title should be "About Us"
|
|
304
|
+
Then the page title should not be "Access denied"
|
|
305
|
+
And the page title should be "Contact Us | Example"
|
|
306
|
+
When I go to "/blog"
|
|
307
|
+
Then the page title should be "Blog | Example"
|
|
308
|
+
Then the page title should not be "Page not found | Example"
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
## 14. Then the page title should contain "About"
|
|
312
|
+
|
|
313
|
+
Assert the page title contains, or does not contain, this text.
|
|
314
|
+
|
|
315
|
+
The form to reach for on a real site: the head title carries the site name and a separator the test has no business hardcoding, so assert the part the page owns. Case-sensitive, compared after trimming.
|
|
316
|
+
|
|
317
|
+
**Keyword**: `Then`
|
|
318
|
+
|
|
319
|
+
**Pattern**
|
|
320
|
+
|
|
321
|
+
```js
|
|
322
|
+
/^(the )*page title should( not)* contain "([^"]*)?"$/
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
**Examples**
|
|
326
|
+
|
|
327
|
+
```gherkin
|
|
328
|
+
Then the page title should contain "About"
|
|
329
|
+
Then the page title should not contain "Access denied"
|
|
330
|
+
And the page title should contain "Getting Started"
|
|
331
|
+
When I go to "/contact-us"
|
|
332
|
+
Then the page title should contain "Contact"
|
|
333
|
+
Then the page title should not contain "Untitled"
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
Related: `I wait until the page title is/contains "..."` in [`wait.md`](wait.md) waits for a title to become something; these two assert what it is now.
|
|
337
|
+
|
|
338
|
+
## 15. Then the response should contain "Welcome visitor"
|
|
284
339
|
|
|
285
340
|
Assert that the rendered HTML response contains or does not contain text.
|
|
286
341
|
|
|
@@ -307,10 +362,12 @@ When I am on "/about"
|
|
|
307
362
|
And the response should not contain "TODO"
|
|
308
363
|
```
|
|
309
364
|
|
|
310
|
-
##
|
|
365
|
+
## 16. Then the response status code should be 200
|
|
311
366
|
|
|
312
367
|
Assert that the current page's response status is or is not a given code.
|
|
313
368
|
|
|
369
|
+
Re-requests the current URL **through the browser's own context**, so the check sees what this user sees: the session cookies travel with the request, and redirects are not followed, so a 3xx can actually be asserted.
|
|
370
|
+
|
|
314
371
|
**Keyword**: `Then`
|
|
315
372
|
|
|
316
373
|
**Pattern**
|
|
@@ -325,4 +382,32 @@ Assert that the current page's response status is or is not a given code.
|
|
|
325
382
|
Then the response status code should be 200
|
|
326
383
|
And the response status code should not be 404
|
|
327
384
|
Then the response status code should be 301
|
|
385
|
+
When I go to "/no-such-page"
|
|
386
|
+
Then the response status code should be 404
|
|
387
|
+
Then the response status code should not be 500
|
|
328
388
|
```
|
|
389
|
+
|
|
390
|
+
## 17. Then the page should return HTTP status 200
|
|
391
|
+
|
|
392
|
+
The same assertion as step 16, in the phrasing that reads as a sentence about the page rather than about a response object — one implementation, two phrasings. A test about a 404 page reads better as "the page should return HTTP status 404"; a test about an API call reads better as "the response status code should be 404".
|
|
393
|
+
|
|
394
|
+
**Keyword**: `Then`
|
|
395
|
+
|
|
396
|
+
**Pattern**
|
|
397
|
+
|
|
398
|
+
```js
|
|
399
|
+
/^(the )*page should( not)* return HTTP status (\d+)$/
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
**Examples**
|
|
403
|
+
|
|
404
|
+
```gherkin
|
|
405
|
+
Then the page should return HTTP status 200
|
|
406
|
+
Then the page should not return HTTP status 404
|
|
407
|
+
And the page should return HTTP status 403
|
|
408
|
+
When I go to "/no-such-page"
|
|
409
|
+
Then the page should return HTTP status 404
|
|
410
|
+
Then the page should return HTTP status 301
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
Note: the status a page returns is not always what it renders. A Drupal site can answer 200 with an access-denied page, or 404 to keep a route unguessable — see the access assertions in [`navigation.md`](navigation.md) for asserting the refusal itself rather than its status.
|