| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- import assert from 'node:assert/strict';
- import { mkdir, readFile, writeFile } from 'node:fs/promises';
- import { chromium } from 'playwright';
- // 由真实业务与 TLS 接收器准备记录;仅从公开页面检查所选投递及详情滚动。
- const data = JSON.parse(await readFile(process.env.DELIVERY_CASE_FILE, 'utf8'));
- const base = process.env.FRONTEND_URL || 'http://127.0.0.1:18765';
- const browser = await chromium.launch({ headless: true, executablePath: process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE || 'C:/Users/Administrator/AppData/Local/ms-playwright/chromium-1228/chrome-win64/chrome.exe' });
- const page = await browser.newPage({ viewport: { width: 1440, height: 1000 } });
- const errors = [];
- page.on('pageerror', error => errors.push(error.message));
- try {
- await page.goto(`${base}/#/platform/login`);
- await page.getByLabel('员工账户', { exact: true }).fill(data.username);
- await page.getByLabel('密码', { exact: true }).fill(data.password);
- await page.getByRole('button', { name: '登录', exact: true }).click();
- await page.waitForURL(url => !url.hash.endsWith('/login'));
- await page.goto(`${base}/#/platform/deliveries`);
- await page.locator('.platform-pages > [role="status"]').waitFor({ state: 'hidden' });
- for (const size of [{ width: 1440, height: 1000 }, { width: 390, height: 844 }]) {
- await page.setViewportSize(size);
- for (const delivery of data.deliveries) {
- const row = page.locator('.platform-pages tr').filter({ has: page.locator('.platform-identifier').filter({ hasText: delivery.event }) });
- await row.getByRole('button', { name: '查看详情', exact: true }).click();
- const dialog = page.getByRole('dialog', { name: '投递详情', exact: true });
- await dialog.getByText(delivery.id, { exact: true }).waitFor();
- await dialog.getByText(delivery.event, { exact: true }).waitFor();
- await dialog.getByText(delivery.eventType, { exact: true }).waitFor();
- await dialog.getByText('接收端已确认 HTTP 204', { exact: true }).waitFor();
- const details = dialog.locator('.platform-delivery-detail');
- const height = (await details.boundingBox()).height;
- assert.ok(height <= Math.min(560, size.height * 0.6) + 1);
- const receipt = dialog.getByText(delivery.result, { exact: true });
- await receipt.scrollIntoViewIfNeeded();
- const geometry = await receipt.boundingBox();
- assert.ok(geometry.y >= 0 && geometry.y + geometry.height <= size.height + 1);
- await dialog.getByRole('button', { name: '关闭详情', exact: true }).click();
- await dialog.waitFor({ state: 'hidden' });
- }
- }
- assert.deepEqual(errors, []);
- const report = { records: data.deliveries.length, widths: [1440, 390], realTlsReceipts: data.deliveries.length, browserErrors: errors, generatedModelCalls: 0, screenshots: 0 };
- await mkdir(new URL('../../.work/frontend-verification/', import.meta.url), { recursive: true });
- await writeFile(new URL('../../.work/frontend-verification/platform-delivery-presentation.json', import.meta.url), JSON.stringify(report, null, 2));
- console.log(JSON.stringify(report));
- } finally {
- await browser.close();
- }
|