import { test } from '@playwright/test'; test('로그인 화면 최종 스크린샷 - 스타일 검증', async ({ page }) => { console.log('\n╔════════════════════════════════════════════════════╗'); console.log('║ 로그인 화면 스타일 최종 검증 ║'); console.log('╚════════════════════════════════════════════════════╝\n'); // 1️⃣ 페이지 로드 console.log('1️⃣ 로그인 페이지 로드...'); await page.goto('http://localhost:5265/login', { waitUntil: 'networkidle' }); await page.waitForTimeout(3000); console.log(' ✓ 페이지 로드 완료'); // 2️⃣ 계산된 스타일 검증 console.log('\n2️⃣ 계산된 스타일 검증...'); const bodyStyle = await page.evaluate(() => { const body = document.body; return { backgroundColor: window.getComputedStyle(body).backgroundColor, color: window.getComputedStyle(body).color, fontFamily: window.getComputedStyle(body).fontFamily }; }); console.log(` Body Background: ${bodyStyle.backgroundColor}`); console.log(` Body Text Color: ${bodyStyle.color}`); console.log(` Font Family: ${bodyStyle.fontFamily}`); // 3️⃣ 로그인 카드 스타일 console.log('\n3️⃣ 로그인 카드 스타일...'); const cardStyle = await page.locator('.login-card').evaluate((el: any) => ({ display: window.getComputedStyle(el).display, background: window.getComputedStyle(el).backgroundColor, border: window.getComputedStyle(el).border, borderRadius: window.getComputedStyle(el).borderRadius, padding: window.getComputedStyle(el).padding, width: window.getComputedStyle(el).width })); console.log(` Display: ${cardStyle.display}`); console.log(` Background: ${cardStyle.background}`); console.log(` Border: ${cardStyle.border}`); console.log(` Border Radius: ${cardStyle.borderRadius}`); console.log(` Width: ${cardStyle.width}`); // 4️⃣ 입력 필드 스타일 console.log('\n4️⃣ 입력 필드 스타일...'); const inputStyle = await page.locator('input[type="text"], input[type="password"]').first().evaluate((el: any) => ({ display: window.getComputedStyle(el).display, backgroundColor: window.getComputedStyle(el).backgroundColor, color: window.getComputedStyle(el).color, border: window.getComputedStyle(el).border, padding: window.getComputedStyle(el).padding, fontSize: window.getComputedStyle(el).fontSize })); console.log(` Display: ${inputStyle.display}`); console.log(` Background: ${inputStyle.backgroundColor}`); console.log(` Text Color: ${inputStyle.color}`); console.log(` Border: ${inputStyle.border}`); console.log(` Padding: ${inputStyle.padding}`); console.log(` Font Size: ${inputStyle.fontSize}`); // 5️⃣ 로그인 버튼 스타일 console.log('\n5️⃣ 로그인 버튼 스타일...'); const buttonStyle = await page.locator('button:has-text("로그인")').first().evaluate((el: any) => ({ display: window.getComputedStyle(el).display, backgroundColor: window.getComputedStyle(el).backgroundColor, color: window.getComputedStyle(el).color, padding: window.getComputedStyle(el).padding, fontSize: window.getComputedStyle(el).fontSize, cursor: window.getComputedStyle(el).cursor })); console.log(` Display: ${buttonStyle.display}`); console.log(` Background: ${buttonStyle.backgroundColor}`); console.log(` Text Color: ${buttonStyle.color}`); console.log(` Padding: ${buttonStyle.padding}`); console.log(` Font Size: ${buttonStyle.fontSize}`); // 6️⃣ 전체 페이지 스크린샷 console.log('\n6️⃣ 스크린샷 캡처...'); await page.screenshot({ path: 'test-results/login-final-validation.png', fullPage: true }); console.log(' ✅ test-results/login-final-validation.png'); // 7️⃣ 모바일 뷰 스크린샷 await page.setViewportSize({ width: 375, height: 667 }); await page.screenshot({ path: 'test-results/login-mobile-view.png', fullPage: true }); console.log(' ✅ test-results/login-mobile-view.png'); // 8️⃣ 최종 검증 console.log('\n8️⃣ 스타일 검증 완료!'); console.log(' ✅ 모든 스크린샷이 생성되었습니다'); console.log(' ✅ test-results/ 폴더에서 확인하세요'); });