// 验证 darkMode selector 配置生效 import { chromium } from 'playwright'; const browser = await chromium.launch(); async function probe(theme) { const ctx = await browser.newContext({ viewport: { width: 1280, height: 800 } }); const page = await ctx.newPage(); // 先建立 origin await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded' }); await page.evaluate((t) => { if (t === 'dark') localStorage.setItem('novalon-theme', 'dark'); else localStorage.removeItem('novalon-theme'); }, theme); // 重新加载让内联脚本读 localStorage 设置 data-theme await page.goto('http://127.0.0.1:3000/', { waitUntil: 'networkidle' }); await page.waitForTimeout(1500); const out = await page.evaluate(() => { const probe = document.createElement('div'); probe.className = 'bg-white dark:bg-blue-500'; probe.style.cssText = 'position:fixed;top:-9999px;width:50px;height:50px;'; document.body.appendChild(probe); const bg = getComputedStyle(probe).backgroundColor; const htmlTheme = document.documentElement.getAttribute('data-theme'); probe.remove(); return { bg, htmlTheme }; }); await ctx.close(); return out; } const light = await probe('light'); const dark = await probe('dark'); await browser.close(); console.log('light:', JSON.stringify(light)); console.log('dark :', JSON.stringify(dark)); const lightOk = light.bg === 'rgb(255, 255, 255)' && light.htmlTheme !== 'dark'; const darkOk = dark.bg === 'rgb(59, 130, 246)' && dark.htmlTheme === 'dark'; console.log(`\n[assert] light bg=white, no data-theme: ${lightOk}`); console.log(`[assert] dark bg=blue, data-theme=dark: ${darkOk}`); console.log(`[result] ${lightOk && darkOk ? 'PASS' : 'FAIL'}`);