import { chromium, FullConfig } from '@playwright/test'; import { getEnvironment } from './src/config/environments'; import { TestHistoryManager } from './src/utils/test-history'; const env = getEnvironment(); const historyManager = new TestHistoryManager(); async function globalSetup(config: FullConfig) { console.log('🚀 开始E2E测试全局设置...'); console.log('📍 Base URL:', env.baseURL); const browser = await chromium.launch(); const page = await browser.newPage(); try { console.log('📝 访问登录页面...'); await page.goto(`${env.baseURL}/admin/login`, { waitUntil: 'networkidle' }); console.log('⏳ 等待页面加载...'); await page.waitForLoadState('domcontentloaded', { timeout: 10000 }); await page.waitForTimeout(2000); console.log('🔑 填写登录信息...'); await page.waitForSelector('#email', { timeout: 10000 }); await page.locator('#email').fill('admin@novalon.cn'); await page.locator('#password').fill('admin123456'); console.log('🖱️ 点击登录按钮...'); await page.locator('button[type="submit"]').click(); console.log('⏳ 等待登录成功...'); console.log('🔍 当前URL:', page.url()); try { await page.waitForURL(/\/admin(?!\/login)/, { timeout: 15000 }); console.log('✅ 登录成功,当前URL:', page.url()); } catch (error) { console.log('❌ 登录超时,当前URL:', page.url()); console.log('📸 截图保存...'); await page.screenshot({ path: 'test-results/login-failure.png', fullPage: true }); throw error; } console.log('💾 保存认证状态...'); await page.context().storageState({ path: '.auth/admin.json' }); console.log('✅ 全局设置完成'); } catch (error) { console.error('❌ 全局设置失败:', error); await page.screenshot({ path: 'test-results/setup-error.png' }); throw error; } finally { await browser.close(); } } export default globalSetup;