import { test, expect } from '@playwright/test'; test.beforeEach(async ({ page }) => { await page.goto('http://localhost:8000/'); }); const MAX_TIMEOUT_FOR_TEST = 300_000; test.describe('WASM example', () => { test('Wait for success', async ({ page }, test_info) => { let start = new Date().getTime(); let found = false; while (new Date().getTime() - start < MAX_TIMEOUT_FOR_TEST) { let msg = await promise_with_timeout(100, on_console(page), "no log found"); if (msg.includes("no log found")) { continue; } console.log(msg); if (msg.includes("Test successful")) { let prefix = process.env.SCREENSHOT_PREFIX === undefined ? "screenshot" : process.env.SCREENSHOT_PREFIX; await page.screenshot({ path: `${prefix}-${test_info.project.name}.png`, fullPage: true }); found = true; break; } } expect(found).toBe(true); }); }); function on_console(page) { return new Promise(resolve => { page.on('console', msg => resolve(msg.text())); }); } async function promise_with_timeout(time_limit, task, failure_value) { let timeout; const timeout_promise = new Promise((resolve, reject) => { timeout = setTimeout(() => { resolve(failure_value); }, time_limit); }); const response = await Promise.race([task, timeout_promise]); if (timeout) { clearTimeout(timeout); } return response; }