diff --git a/test-framework/dev-audit/accessibility/accessibility.spec.ts b/test-framework/dev-audit/accessibility/accessibility.spec.ts new file mode 100644 index 0000000..d9efb30 --- /dev/null +++ b/test-framework/dev-audit/accessibility/accessibility.spec.ts @@ -0,0 +1,29 @@ +import { test, expect } from '@playwright/test'; +import { HomePage, AboutPage, ContactPage } from '../../shared/pages'; +import { AccessibilityTester } from '../../shared/utils/accessibility/AccessibilityTester'; +import { accessibilityThresholds } from '../../shared/config/test-data'; +import { getPageConfig } from '../../shared/config/test-pages'; + +test.describe('可访问性测试', () => { + const pages = [ + { name: '首页', PageClass: HomePage }, + { name: '关于我们', PageClass: AboutPage }, + { name: '联系我们', PageClass: ContactPage } + ]; + + pages.forEach(({ name, PageClass }) => { + test(`${name} - 可访问性验证`, async ({ page }) => { + const pageConfig = getPageConfig(name === '首页' ? 'home' : name === '关于我们' ? 'about' : 'contact'); + const pageObj = new PageClass(page); + const tester = new AccessibilityTester(page); + + await pageObj.navigate(); + const result = await tester.runAxeScan(pageConfig.name, pageConfig.url); + + console.log(`${name} 可访问性结果:`, result); + + expect(result.score).toBeGreaterThanOrEqual(accessibilityThresholds.score); + expect(result.violations.length).toBeLessThanOrEqual(accessibilityThresholds.maxViolations); + }); + }); +}); diff --git a/test-framework/dev-audit/forms/forms.spec.ts b/test-framework/dev-audit/forms/forms.spec.ts new file mode 100644 index 0000000..902e47d --- /dev/null +++ b/test-framework/dev-audit/forms/forms.spec.ts @@ -0,0 +1,48 @@ +import { test, expect } from '@playwright/test'; +import { ContactPage } from '../../shared/pages'; +import { formData } from '../../shared/config/test-data'; + +test.describe('表单验证测试', () => { + test('联系表单 - 有效数据提交', async ({ page }) => { + const contactPage = new ContactPage(page); + + await contactPage.navigate(); + await contactPage.fillContactForm(formData.valid); + await contactPage.submitForm(); + + const successMessage = await contactPage.getFormSuccessMessage(); + expect(successMessage).toContain('成功'); + }); + + test('联系表单 - 必填字段验证', async ({ page }) => { + const contactPage = new ContactPage(page); + + await contactPage.navigate(); + await contactPage.fillContactForm({ + name: '', + email: '', + phone: '', + message: '' + }); + await contactPage.submitForm(); + + const errorMessage = await contactPage.getFormErrorMessage(); + expect(errorMessage).toBeTruthy(); + }); + + test('联系表单 - 邮箱格式验证', async ({ page }) => { + const contactPage = new ContactPage(page); + + await contactPage.navigate(); + await contactPage.fillContactForm({ + name: '测试用户', + email: formData.invalid.email, + phone: '13800138000', + message: '测试消息' + }); + await contactPage.submitForm(); + + const errorMessage = await contactPage.getFormErrorMessage(); + expect(errorMessage).toContain('邮箱'); + }); +}); diff --git a/test-framework/dev-audit/performance/performance.spec.ts b/test-framework/dev-audit/performance/performance.spec.ts new file mode 100644 index 0000000..115a962 --- /dev/null +++ b/test-framework/dev-audit/performance/performance.spec.ts @@ -0,0 +1,31 @@ +import { test, expect } from '@playwright/test'; +import { HomePage, AboutPage, ContactPage, ProductsPage, ServicesPage, CasesPage, NewsPage } from '../../shared/pages'; +import { PerformanceMonitor } from '../../shared/utils/performance/PerformanceMonitor'; +import { performanceThresholds } from '../../shared/config/test-data'; + +test.describe('性能审计测试', () => { + const pages = [ + { name: '首页', PageClass: HomePage }, + { name: '关于我们', PageClass: AboutPage }, + { name: '联系我们', PageClass: ContactPage }, + { name: '产品', PageClass: ProductsPage }, + { name: '服务', PageClass: ServicesPage }, + { name: '案例', PageClass: CasesPage }, + { name: '新闻', PageClass: NewsPage } + ]; + + pages.forEach(({ name, PageClass }) => { + test(`${name} - 页面加载性能`, async ({ page }) => { + const pageObj = new PageClass(page); + const monitor = new PerformanceMonitor(page); + + await pageObj.navigate(); + const metrics = await monitor.measurePageLoad(); + + console.log(`${name} 性能指标:`, metrics); + + expect(metrics.loadTime).toBeLessThan(performanceThresholds.loadTime); + expect(metrics.domContentLoaded).toBeLessThan(performanceThresholds.domContentLoaded); + }); + }); +}); diff --git a/test-framework/dev-audit/seo/seo.spec.ts b/test-framework/dev-audit/seo/seo.spec.ts new file mode 100644 index 0000000..a997dc4 --- /dev/null +++ b/test-framework/dev-audit/seo/seo.spec.ts @@ -0,0 +1,28 @@ +import { test, expect } from '@playwright/test'; +import { HomePage, AboutPage, ContactPage } from '../../shared/pages'; +import { SEOValidator } from '../../shared/utils/seo/SEOValidator'; +import { seoThresholds } from '../../shared/config/test-data'; + +test.describe('SEO检查测试', () => { + const pages = [ + { name: '首页', PageClass: HomePage }, + { name: '关于我们', PageClass: AboutPage }, + { name: '联系我们', PageClass: ContactPage } + ]; + + pages.forEach(({ name, PageClass }) => { + test(`${name} - SEO验证`, async ({ page }) => { + const pageObj = new PageClass(page); + const validator = new SEOValidator(page); + + await pageObj.navigate(); + const result = await validator.validateSEO(); + + console.log(`${name} SEO结果:`, result); + + expect(result.score).toBeGreaterThanOrEqual(seoThresholds.score); + expect(result.metaTags.title).toBe(true); + expect(result.metaTags.description).toBe(true); + }); + }); +});