| 57 | // created with the server's URL) — this wait IS the boot assertion. |
| 58 | const page = await app.firstWindow({ timeout: 120_000 }); |
| 59 | const step = async (label: string, body: () => Promise<void>) => { |
| 60 | await body(); |
| 61 | stepIndex += 1; |
| 62 | const slug = label.toLowerCase().replace(/[^a-z0-9]+/g, "-"); |
| 63 | await page.screenshot({ |
| 64 | path: join(runDir, `${String(stepIndex).padStart(2, "0")}-${slug}.png`), |
| 65 | }); |
| 66 | }; |
| 67 | |
| 68 | await step("app boots into the web console", async () => { |
| 69 | await page.getByText("Settings").first().waitFor({ timeout: 120_000 }); |