| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #!/usr/bin/env node
- /**
- * 顶栏状态一致性验证(2026-11-10)
- *
- * 验证点:容器空闲几分钟后,顶栏**不再**显示「状态未同步」,
- * 而是与侧栏/通讯录一致的正常态(空闲 / 已完成)。
- */
- import { chromium } from 'playwright';
- import { mkdir } from 'node:fs/promises';
- import { dirname, resolve } from 'node:path';
- import { fileURLToPath } from 'node:url';
- const here = dirname(fileURLToPath(import.meta.url));
- const outDir = resolve(here, '..', 'test-results', 'status-consistency');
- const BASE = process.env.BASE_URL || 'http://127.0.0.1:4300';
- await mkdir(outDir, { recursive: true });
- const browser = await chromium.launch({ channel: 'chrome' });
- const page = await browser.newPage({ viewport: { width: 1440, height: 900 } });
- const errors = [];
- page.on('pageerror', (e) => errors.push(String(e)));
- await page.goto(`${BASE}/desktop/chat`, { waitUntil: 'domcontentloaded' });
- await page.waitForTimeout(8000);
- const s = page.locator('text=使用HTML根据我这个').first();
- if (await s.count()) {
- await s.click();
- await page.waitForTimeout(6000);
- }
- const snap = await page.evaluate(() => {
- const task = document.querySelector('.task-text')?.textContent?.trim() ?? '';
- const sub = document.querySelector('[class*="chat-sub"], .chat-subtitle, header')?.textContent?.trim() ?? '';
- return { task, header: sub.slice(0, 80) };
- });
- await page.screenshot({ path: `${outDir}/header.png` });
- const bad = /状态未同步/.test(snap.task);
- console.log(`顶栏任务行:${snap.task || '(空)'}`);
- console.log(`匹配到「状态未同步」:${bad ? '是 ← 不通过' : '否'}`);
- console.log(`页面错误:${errors.length ? errors.join(' | ') : '无'}`);
- const pass = !bad && errors.length === 0;
- console.log(`\n${pass ? '✓ PASS' : '✗ FAIL'}:顶栏不再误报状态未同步`);
- await browser.close();
- process.exit(pass ? 0 : 1);
|