diff --git a/e2e/playwright.config.ts b/e2e/playwright.config.ts index 95f2635..5a58429 100644 --- a/e2e/playwright.config.ts +++ b/e2e/playwright.config.ts @@ -51,6 +51,10 @@ export default defineConfig({ use: { ...devices['Desktop Chrome'], viewport: { width: 1280, height: 800 }, + // 视觉回归确定性:reducedMotion 让 ScrollReveal/StaggerReveal 走 initial={} 分支 + // 默认可见(不残留 opacity:0),避免全页截图时 below-the-fold 模块因 whileInView + // 未触发而空白。同时使 Hero 粒子场走固定种子的静态降级帧,快照零漂移。 + reducedMotion: 'reduce', }, testMatch: 'visual-regression.spec.ts', }, @@ -59,6 +63,7 @@ export default defineConfig({ use: { ...devices['iPad Pro 11'], viewport: { width: 834, height: 1194 }, + reducedMotion: 'reduce', }, testMatch: 'visual-regression.spec.ts', }, @@ -69,6 +74,7 @@ export default defineConfig({ viewport: { width: 390, height: 844 }, isMobile: true, hasTouch: true, + reducedMotion: 'reduce', }, testMatch: 'visual-regression.spec.ts', }, @@ -78,6 +84,7 @@ export default defineConfig({ ...devices['Desktop Firefox'], viewport: { width: 1280, height: 800 }, storageState: './storageState.firefox.json', + reducedMotion: 'reduce', }, testMatch: 'visual-regression.spec.ts', }, @@ -87,6 +94,7 @@ export default defineConfig({ ...devices['Desktop Safari'], viewport: { width: 1280, height: 800 }, storageState: './storageState.firefox.json', + reducedMotion: 'reduce', }, testMatch: 'visual-regression.spec.ts', }, diff --git a/e2e/visual-regression.spec.ts b/e2e/visual-regression.spec.ts index 73e954d..5bedf87 100644 --- a/e2e/visual-regression.spec.ts +++ b/e2e/visual-regression.spec.ts @@ -21,6 +21,16 @@ const VISUAL_TEST_PAGES = [ async function waitForPageStable(page: Page) { await page.waitForLoadState('networkidle'); await page.waitForTimeout(2000); + + // 触发全页 ScrollReveal / StaggerReveal:先滚到底再回顶,让所有 below-the-fold + // 模块的 whileInView 动画进入最终态,避免全页截图时内容停在 opacity:0 初始态。 + // 视觉回归项目已统一 reducedMotion:'reduce',此滚动作为双保险,覆盖任何媒体查询 + // 在 viewport resize 期间短暂失真的边界情况。 + await page.evaluate(() => window.scrollTo({ top: document.body.scrollHeight, behavior: 'instant' })); + await page.waitForTimeout(800); + await page.evaluate(() => window.scrollTo({ top: 0, behavior: 'instant' })); + await page.waitForTimeout(200); + await page.evaluate(() => { document.querySelectorAll('img').forEach(img => { if (!img.complete) { @@ -103,6 +113,15 @@ test.describe('L2: 组件视觉状态测试', () => { } }); + test('创始团队观点 - 桌面端视觉', async ({ page }) => { + await page.goto('/', { waitUntil: 'domcontentloaded' }); + await waitForPageStable(page); + + const founder = page.locator('[data-testid="founder-quote-section"]'); + await founder.scrollIntoViewIfNeeded(); + await expect(founder).toHaveScreenshot('founder-quote-section.png'); + }); + test('表单输入框 - 默认/聚焦状态', async ({ page }) => { await page.goto('/contact', { waitUntil: 'domcontentloaded' }); await waitForPageStable(page); diff --git a/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/footer-section-visual-chromium-desktop.png b/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/footer-section-visual-chromium-desktop.png index ef1ac12..30960a2 100644 Binary files a/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/footer-section-visual-chromium-desktop.png and b/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/footer-section-visual-chromium-desktop.png differ diff --git a/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/founder-quote-section-visual-chromium-desktop.png b/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/founder-quote-section-visual-chromium-desktop.png new file mode 100644 index 0000000..4989e16 Binary files /dev/null and b/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/founder-quote-section-visual-chromium-desktop.png differ diff --git a/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/home-fullpage-visual-chromium-desktop.png b/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/home-fullpage-visual-chromium-desktop.png index 6f996d9..81690c1 100644 Binary files a/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/home-fullpage-visual-chromium-desktop.png and b/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/home-fullpage-visual-chromium-desktop.png differ diff --git a/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/theme-dark-main-visual-chromium-desktop.png b/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/theme-dark-main-visual-chromium-desktop.png index 7deccc7..b9018ad 100644 Binary files a/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/theme-dark-main-visual-chromium-desktop.png and b/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/theme-dark-main-visual-chromium-desktop.png differ diff --git a/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/theme-light-main-visual-chromium-desktop.png b/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/theme-light-main-visual-chromium-desktop.png index f095483..1c0e7ca 100644 Binary files a/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/theme-light-main-visual-chromium-desktop.png and b/e2e/visual-snapshots/visual-chromium-desktop/visual-regression.spec.ts/theme-light-main-visual-chromium-desktop.png differ diff --git a/src/app/(marketing)/home-content-v15.tsx b/src/app/(marketing)/home-content-v15.tsx index 9c8bf6a..6297dad 100644 --- a/src/app/(marketing)/home-content-v15.tsx +++ b/src/app/(marketing)/home-content-v15.tsx @@ -637,27 +637,29 @@ function FounderQuoteSection({ pageCopy }: { pageCopy?: HomePageCopy | null }) { />
-
-
- - {eyebrow} - -
-
-