/** * 대시보드 검증 스크립트 * 1. 로그인 * 2. /main으로 강제 이동 (reload) * 3. 대시보드 스크린샷 */ import { chromium } from "playwright"; import * as path from "path"; import * as fs from "fs"; const BASE_URL = "http://localhost:9771"; const SCREENSHOT_DIR = path.join(__dirname, "../verification-screenshots"); async function main() { if (!fs.existsSync(SCREENSHOT_DIR)) { fs.mkdirSync(SCREENSHOT_DIR, { recursive: true }); } const browser = await chromium.launch({ headless: true }); const context = await browser.newContext({ viewport: { width: 1280, height: 800 } }); const page = await context.newPage(); try { // Step 1: 로그인 페이지 접속 console.log("Step 1: 로그인 페이지 접속..."); await page.goto(`${BASE_URL}/login`, { waitUntil: "commit", timeout: 30000 }); await page.waitForTimeout(1000); // Step 2: 로그인 console.log("Step 2: 로그인..."); await page.fill("#userId", "wace"); await page.fill("#password", "qlalfqjsgh11"); await page.click('button[type="submit"]'); // Step 3: 리다이렉트 대기 (최대 15초) console.log("Step 3: 페이지 로드 대기 (최대 15초)..."); await page.waitForURL((url) => !url.pathname.includes("/login"), { timeout: 15000 }).catch(() => {}); await page.waitForTimeout(4000); // 쿠키/토큰 설정 완료 대기 // Step 4: /main으로 강제 이동 (reload) console.log("Step 4: /main으로 강제 이동..."); await page.goto(`${BASE_URL}/main`, { waitUntil: "commit", timeout: 30000 }); await page.waitForTimeout(3000); // 페이지 렌더링 대기 // Step 5: 페이지 내용 검증 및 스크린샷 const heading = await page.locator("h1").first().textContent().catch(() => ""); const url = page.url(); console.log("Step 5: 현재 URL:", url); console.log(" -> h1 제목:", heading?.trim() || "(없음)"); await page.screenshot({ path: path.join(SCREENSHOT_DIR, "main-dashboard.png"), fullPage: true, }); console.log(" -> main-dashboard.png 저장됨"); await browser.close(); console.log("\n검증 완료. 스크린샷:", path.join(SCREENSHOT_DIR, "main-dashboard.png")); } catch (error) { console.error("오류:", error); await page.screenshot({ path: path.join(SCREENSHOT_DIR, "dashboard-error.png"), fullPage: true, }).catch(() => {}); await browser.close(); process.exit(1); } } main();