import { chromium } from 'playwright'; const b = await chromium.launch({ executablePath: 'C:/Program Files/Google/Chrome/Application/chrome.exe' }); const ctx = await b.newContext({ viewport: { width: 1440, height: 900 } }); const p = await ctx.newPage(); const errs = []; p.on('pageerror', e => errs.push(e.message.slice(0,120))); p.on('console', m => { if (m.type()==='error') errs.push(m.text().slice(0,120)); }); const clear = () => p.evaluate(() => document.querySelectorAll('vite-error-overlay').forEach(e=>e.remove())); // 登录页(新版落地页) await p.goto('http://localhost:4200/login', { waitUntil: 'networkidle' }); await clear(); await p.waitForTimeout(1500); await p.screenshot({ path: '../../.shots/v2-login.png' }); const loginProbe = await p.evaluate(() => ({ landing: !!document.querySelector('.landing'), landingHidden: !!document.querySelector('.landing') && getComputedStyle(document.querySelector('.landing')).display === 'none', cards: document.querySelectorAll('.lp-card').length, inputs: document.querySelectorAll('ui-input').length, })); console.log('=== 登录页 ==='); console.log(JSON.stringify(loginProbe)); await p.fill('ui-input input >> nth=0', '13800138000'); await p.fill('ui-input input >> nth=1', '123456'); await p.click('button[type="submit"], ui-button button'); await p.waitForTimeout(3000); console.log('登录后:', p.url()); // 「我的」页:配色缩略图 + 使用端是否移除 await p.goto('http://localhost:4200/desktop/mine', { waitUntil: 'networkidle' }); await clear(); await p.waitForTimeout(2000); await p.screenshot({ path: '../../.shots/v2-mine.png' }); const mineProbe = await p.evaluate(() => { const thumbs = [...document.querySelectorAll('.thumb')].map(t => { const nav = t.querySelector('.thumb-nav'); const main = t.querySelector('.thumb-main'); return { palette: t.getAttribute('data-preview-palette'), navBg: nav ? getComputedStyle(nav).backgroundColor : null, mainBg: main ? getComputedStyle(main).backgroundColor : null, }; }); return { thumbs, hasUsageSection: /使用端/.test(document.body.innerText), hasAutoDetect: /恢复自动识别/.test(document.body.innerText), }; }); console.log('\n=== 我的页 ==='); console.log('配色缩略图(每格应是不同色):'); mineProbe.thumbs.forEach(t => console.log(` ${(t.palette||'').padEnd(10)} nav=${t.navBg} main=${t.mainBg}`)); console.log(`「使用端」区块存在: ${mineProbe.hasUsageSection} 「恢复自动识别」存在: ${mineProbe.hasAutoDetect}`); console.log(errs.length ? '\n⚠ '+errs.slice(0,2).join(' | ') : '\n✅ 无控制台错误'); await b.close();