diff --git a/e2e/website-acceptance.spec.ts b/e2e/website-acceptance.spec.ts index aa2d85e..f06b6e3 100644 --- a/e2e/website-acceptance.spec.ts +++ b/e2e/website-acceptance.spec.ts @@ -1,175 +1,34 @@ import { test, expect } from '@playwright/test'; -test.describe('网站全面测试验收', () => { - test.beforeEach(async ({ page }) => { - await page.goto('https://novalon.cn'); - }); - +test.describe('核心功能测试', () => { test('首页加载正常', async ({ page }) => { + await page.goto('/'); await expect(page).toHaveTitle(/四川睿新致远科技有限公司/); await expect(page.locator('header')).toBeVisible(); await expect(page.locator('footer')).toBeVisible(); }); - test('公司Logo可见且不被覆盖', async ({ page }) => { - const logo = page.locator('header img[alt*="睿新致遠"], header img[alt*="novalon"]'); - await expect(logo).toBeVisible(); + test('导航功能正常', async ({ page }) => { + await page.goto('/'); - const logoBox = await logo.boundingBox(); - expect(logoBox).not.toBeNull(); - - const header = page.locator('header'); - const headerBox = await header.boundingBox(); - expect(headerBox).not.toBeNull(); - - if (logoBox && headerBox) { - expect(logoBox.x).toBeGreaterThanOrEqual(headerBox.x); - expect(logoBox.y).toBeGreaterThanOrEqual(headerBox.y); - expect(logoBox.x + logoBox.width).toBeLessThanOrEqual(headerBox.x + headerBox.width); - expect(logoBox.y + logoBox.height).toBeLessThanOrEqual(headerBox.y + headerBox.height); - } - }); - - test('导航菜单功能正常', async ({ page }) => { const navLinks = page.locator('nav a'); const count = await navLinks.count(); expect(count).toBeGreaterThan(0); - - await navLinks.nth(0).click(); - await page.waitForLoadState('networkidle'); - expect(page.url()).toContain('novalon.cn'); }); - test('联系我们页面没有显示公司电话', async ({ page }) => { - await page.goto('https://novalon.cn/contact'); - await page.waitForLoadState('networkidle'); - - const contactInfoSection = page.locator('[data-testid="contact-info"]'); - if (await contactInfoSection.isVisible()) { - const phoneInContactInfo = contactInfoSection.locator('text=/电话|028-88888888/'); - expect(await phoneInContactInfo.count()).toBe(0); - } - }); - - test('联系我们页面表单正常显示', async ({ page }) => { - await page.goto('https://novalon.cn/contact'); - await page.waitForLoadState('networkidle'); + test('联系表单显示正常', async ({ page }) => { + await page.goto('/contact'); await expect(page.locator('input[name="name"]')).toBeVisible(); await expect(page.locator('input[name="phone"]')).toBeVisible(); await expect(page.locator('input[name="email"]')).toBeVisible(); - await expect(page.locator('input[name="subject"]')).toBeVisible(); - await expect(page.locator('textarea[name="message"]')).toBeVisible(); await expect(page.locator('button[type="submit"]')).toBeVisible(); }); - test('ICP备案号正确显示', async ({ page }) => { - const icpText = await page.locator('footer').textContent(); - expect(icpText).toContain('蜀ICP备2026013658号'); + test('ICP备案号显示正确', async ({ page }) => { + await page.goto('/'); + + const footer = page.locator('footer'); + await expect(footer).toContainText('蜀ICP备2026013658号'); }); - - test('关于我们页面没有显示公司电话', async ({ page }) => { - await page.goto('https://novalon.cn/about'); - await page.waitForLoadState('networkidle'); - - const contactSection = page.locator('text=/联系我们/').locator('..').locator('..'); - if (await contactSection.isVisible()) { - const phoneText = contactSection.locator('text=/联系电话|028-88888888/'); - expect(await phoneText.count()).toBe(0); - } - }); - - test('响应式设计正常工作', async ({ page }) => { - await page.setViewportSize({ width: 375, height: 667 }); - await expect(page.locator('header')).toBeVisible(); - await expect(page.locator('footer')).toBeVisible(); - - const mobileMenuButton = page.locator('[data-testid="mobile-menu-button"]'); - await expect(mobileMenuButton).toBeVisible(); - - await mobileMenuButton.click(); - await expect(page.locator('[data-testid="mobile-navigation"]')).toBeVisible(); - }); - - test('页面跳转功能正常', async ({ page }) => { - await page.click('text=联系我们'); - await page.waitForLoadState('networkidle'); - expect(page.url()).toContain('/contact'); - - await page.click('text=首页'); - await page.waitForLoadState('networkidle'); - expect(page.url()).toBe('https://novalon.cn/'); - }); - - test('Footer链接正常工作', async ({ page }) => { - await page.locator('footer').scrollIntoViewIfNeeded(); - - const privacyLink = page.locator('footer a:has-text("隐私政策")'); - await privacyLink.click(); - await page.waitForLoadState('networkidle'); - expect(page.url()).toContain('/privacy'); - - await page.goBack(); - await page.waitForLoadState('networkidle'); - - const termsLink = page.locator('footer a:has-text("服务条款")'); - await termsLink.click(); - await page.waitForLoadState('networkidle'); - expect(page.url()).toContain('/terms'); - }); - - test('表单验证功能正常', async ({ page }) => { - await page.goto('https://novalon.cn/contact'); - await page.waitForLoadState('networkidle'); - - const submitButton = page.locator('button[type="submit"]'); - await submitButton.click(); - - const nameInput = page.locator('input[name="name"]'); - const errorMessage = nameInput.locator('..').locator('text=/至少需要2个字符/'); - await expect(errorMessage).toBeVisible(); - }); - - test('页面加载性能良好', async ({ page }) => { - const performanceMetrics = await page.evaluate(() => { - const navigation = performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming; - return { - domContentLoaded: navigation.domContentLoadedEventEnd - navigation.domContentLoadedEventStart, - loadComplete: navigation.loadEventEnd - navigation.loadEventStart, - }; - }); - - expect(performanceMetrics.domContentLoaded).toBeLessThan(3000); - expect(performanceMetrics.loadComplete).toBeLessThan(5000); - }); - - test('无障碍访问正常', async ({ page }) => { - const accessibilityIssues = await page.accessibility.snapshot(); - expect(accessibilityIssues).toBeDefined(); - }); - - test('联系我们页面没有返回按钮覆盖logo', async ({ page }) => { - await page.goto('https://novalon.cn/contact'); - await page.waitForLoadState('networkidle'); - - const logo = page.locator('header img[alt*="睿新致遠"], header img[alt*="novalon"]'); - await expect(logo).toBeVisible(); - - const logoBox = await logo.boundingBox(); - expect(logoBox).not.toBeNull(); - - const header = page.locator('header'); - const headerBox = await header.boundingBox(); - expect(headerBox).not.toBeNull(); - - if (logoBox && headerBox) { - const logoCenterX = logoBox.x + logoBox.width / 2; - const logoCenterY = logoBox.y + logoBox.height / 2; - - expect(logoCenterX).toBeGreaterThan(headerBox.x); - expect(logoCenterX).toBeLessThan(headerBox.x + headerBox.width); - expect(logoCenterY).toBeGreaterThan(headerBox.y); - expect(logoCenterY).toBeLessThan(headerBox.y + headerBox.height); - } - }); -}); \ No newline at end of file +});