const { chromium } = require('playwright'); (async () => { const browser = await chromium.launch({ headless: true, executablePath: 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe' }); const page = await browser.newPage({ viewport: { width: 1440, height: 1000 } }); const errors = []; page.on('pageerror', error => errors.push(error.message)); const url = 'http://127.0.0.1:8931/AI%E5%BF%AB%E9%80%9F%E6%8A%A5%E4%BB%B7_Demo2.html?v=kitchen-default-persistence'; await page.goto(url, { waitUntil: 'load' }); await page.evaluate(() => localStorage.removeItem(STORAGE_KEY)); await page.reload({ waitUntil: 'load' }); const defaults = await page.evaluate(() => DEFAULT_RULES.kitchen.map(rule => ({ name: rule.name, method: rule.method, value: Number(rule.value), unit: rule.unit }))); await page.evaluate(() => { switchView('rules'); switchRuleTab('kitchen'); startRuleEdit('kitchen', 0); }); await page.locator('#rule-table-kitchen tr').first().locator('td').nth(2).locator('input').fill('2399'); await page.locator('#rule-table-kitchen tr').first().locator('td').nth(4).locator('input').fill('可编辑说明'); await page.evaluate(() => saveRuleEdit('kitchen', 0)); const beforeReload = await page.evaluate(() => ({ value: DEFAULT_RULES.kitchen[0].value, stored: JSON.parse(localStorage.getItem(STORAGE_KEY)).priceRules.kitchen[0].value })); await page.reload({ waitUntil: 'load' }); await page.waitForTimeout(500); const persisted = await page.evaluate(() => ({ value: Number(DEFAULT_RULES.kitchen[0].value), method: DEFAULT_RULES.kitchen[0].method, desc: DEFAULT_RULES.kitchen[0].desc, blankDefaults: DEFAULT_RULES.kitchen.slice(1).every(rule => rule.desc === ''), count: DEFAULT_RULES.kitchen.length })); console.log(JSON.stringify({ defaults, beforeReload, persisted, errors })); await browser.close(); })().catch(error => { console.error(error); process.exit(1); });