const { chromium } = require('playwright'); const session = { subjectId: 'user-author', tenant: 'tenant-default', scopes: [ 'ui.read', 'policy:read', 'policy:author', 'policy:simulate', 'advisory-ai:view', 'advisory-ai:operate', 'findings:read', 'vex:read', 'admin', ], }; (async () => { const browser = await chromium.launch({ headless: true, args: ['--no-sandbox', '--no-proxy-server'], }); const context = await browser.newContext({ ignoreHTTPSErrors: true }); const page = await context.newPage(); const navHistory = []; const httpErrors = []; const failures = []; let currentUrl = ''; page.on('framenavigated', (frame) => { if (frame !== page.mainFrame()) { return; } const entry = `${new Date().toISOString()} ${frame.url()}`; navHistory.push(entry); console.log('[nav]', entry); }); page.on('response', (response) => { if (response.status() < 400) { return; } const request = response.request(); const entry = `${response.status()} ${request.method()} ${response.url()}`; httpErrors.push(entry); console.log('[http-error]', entry); }); page.on('requestfailed', (request) => { const entry = `${request.method()} ${request.url()} :: ${request.failure()?.errorText ?? 'failed'}`; failures.push(entry); console.log('[requestfailed]', entry); }); page.on('console', (msg) => { if (msg.type() === 'error') { console.log('[console-error]', msg.text()); } }); await page.addInitScript((stubSession) => { window.__stellaopsTestSession = stubSession; }, session); const target = process.argv[2] ?? 'https://stella-ops.local/'; console.log('[goto]', target); try { await page.goto(target, { waitUntil: 'commit', timeout: 20000 }); } catch (error) { console.log('[goto-error]', error.message); } for (let i = 0; i < 20; i += 1) { const url = page.url(); if (url !== currentUrl) { currentUrl = url; console.log('[url-change]', url); } await page.waitForTimeout(1000); } const searchInputCount = await page .evaluate(() => document.querySelectorAll('app-global-search input[type="text"]').length) .catch(() => -1); console.log('[final-url]', page.url()); console.log('[title]', await page.title().catch(() => '')); console.log('[search-input-count]', searchInputCount); console.log('[nav-count]', navHistory.length); console.log('[http-error-count]', httpErrors.length); console.log('[failed-request-count]', failures.length); await page.screenshot({ path: 'output/playwright/stella-ops-local-load-check-viewport.png' }); await browser.close(); })();