const { chromium } = require('playwright'); (async () => { const browser = await chromium.launch({ headless: true }); const context = await browser.newContext(); const page = await context.newPage(); // 收集控制台日志 const logs = []; page.on('console', msg => { logs.push(`[${msg.type()}] ${msg.text()}`); }); // 收集网络请求 page.on('request', request => { if (request.url().includes('api')) { console.log('Request:', request.method(), request.url()); } }); page.on('response', response => { if (response.url().includes('api')) { console.log('Response:', response.status(), response.url()); } }); try { // 1. 打开登录页 console.log('=== 1. 打开登录页 ==='); await page.goto('http://localhost:5173/pages/login/index', { waitUntil: 'networkidle', timeout: 30000 }); await page.waitForTimeout(2000); // 2. 截图登录页 await page.screenshot({ path: 'test-login-page.png' }); console.log('登录页截图已保存: test-login-page.png'); // 3. 输入手机号 console.log('=== 2. 输入手机号 ==='); await page.fill('input[type="number"]', '13812341234'); await page.waitForTimeout(500); await page.screenshot({ path: 'test-phone-filled.png' }); // 4. 点击登录按钮(开发环境验证码可为空) console.log('=== 3. 点击登录 ==='); const loginBtn = await page.locator('button.login-btn'); await loginBtn.click(); // 等待登录结果 await page.waitForTimeout(3000); await page.screenshot({ path: 'test-after-login.png' }); // 5. 打印控制台日志 console.log('=== 控制台日志 ==='); logs.forEach(log => console.log(log)); // 6. 获取当前 URL console.log('当前 URL:', page.url()); // 7. 检查 localStorage const storage = await page.evaluate(() => { return { token: localStorage.getItem('token'), userInfo: localStorage.getItem('userInfo') }; }); console.log('LocalStorage:', JSON.stringify(storage)); } catch (error) { console.error('测试失败:', error.message); await page.screenshot({ path: 'test-error.png' }); } await browser.close(); })();