import { test, expect } from '@playwright/test'; test('로그인 API 호출 추적', async ({ page }) => { console.log('\n╔════════════════════════════════════════════════════╗'); console.log('║ 로그인 API 호출 추적 & 디버깅 ║'); console.log('╚════════════════════════════════════════════════════╝\n'); // 네트워크 요청 추적 const requests: string[] = []; page.on('request', request => { if (request.url().includes('api')) { console.log(`📤 Request: ${request.method()} ${request.url()}`); requests.push(`${request.method()} ${request.url()}`); } }); page.on('response', response => { if (response.url().includes('api')) { console.log(`📥 Response: ${response.status()} ${response.url()}`); } }); // 페이지 접근 console.log('1️⃣ 로그인 페이지 접근...'); await page.goto('http://localhost:5265/login'); await page.waitForLoadState('networkidle'); await page.waitForTimeout(1000); // 입력 및 로그인 console.log('\n2️⃣ 로그인 시도...'); const usernameInput = page.locator('input[type="text"]').first(); const passwordInput = page.locator('input[type="password"]'); const loginButton = page.locator('button:has-text("로그인")'); await usernameInput.fill('admin'); await passwordInput.fill('admin'); console.log('📝 입력 완료: admin / admin'); // 로그인 버튼 클릭 전 요청 모니터 console.log('\n3️⃣ 로그인 버튼 클릭...'); // 네트워크 응답 대기 const [response] = await Promise.all([ page.waitForResponse( response => response.url().includes('/api/auth/login') && (response.status() === 200 || response.status() === 401 || response.status() === 400), { timeout: 10000 } ), loginButton.click() ]).catch(err => { console.log('❌ 응답 대기 실패:', err.message); return [null]; }); if (response) { console.log(`\n✅ 로그인 API 응답: ${response.status()}`); const responseText = await response.text(); console.log(`📄 응답 본문: ${responseText}`); try { const json = JSON.parse(responseText); console.log('🔍 파싱된 JSON:'); console.log(JSON.stringify(json, null, 2)); } catch (e) { console.log('❌ JSON 파싱 실패'); } } else { console.log('❌ 로그인 API 응답 없음'); } // 최종 상태 확인 console.log('\n4️⃣ 최종 상태 확인...'); await page.waitForTimeout(2000); const finalUrl = page.url(); const finalTitle = await page.title(); const bodyText = await page.locator('body').textContent(); console.log(`📍 최종 URL: ${finalUrl}`); console.log(`📄 최종 제목: ${finalTitle}`); console.log(`📝 "대시보드" 포함: ${bodyText?.includes('대시보드') ? '✅ 예' : '❌ 아니오'}`); console.log(`📝 "로그인" 포함: ${bodyText?.includes('로그인') ? '✅ 예' : '❌ 아니오'}`); // 스크린샷 await page.screenshot({ path: 'test-results/debug-login.png', fullPage: true }); console.log('\n📸 스크린샷 저장: test-results/debug-login.png'); console.log('\n╔════════════════════════════════════════════════════╗'); if (finalUrl.includes('/dashboard')) { console.log('║ ✅ 로그인 성공! ║'); } else { console.log('║ ❌ 로그인 실패 ║'); } console.log('╚════════════════════════════════════════════════════╝\n'); });