{ "enabled": true, "id": "production-dashboard", "name": "생산 현황판 테스트", "screenshotPolicy": { "onErrorOnly": true, "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"] }, "description": "생산관리 > 생산 현황판 메뉴의 생산 현황 모니터링/필터/차트 기능 테스트", "baseUrl": "https://dev.codebridge-x.com", "menuNavigation": { "level1": "생산관리", "level2": "생산 현황판", "expectedUrl": "/production/dashboard", "searchWithinParent": true, "closeOtherMenus": true }, "auth": { "username": "TestUser5", "password": "password123!" }, "selectors": { "statCard": ".card, [class*='stat'], [class*='kpi'], [class*='metric'], [class*='summary']", "chart": "canvas, svg, [class*='chart'], [class*='Chart'], [class*='graph']", "filterArea": "[class*='filter'], [class*='Filter'], select, [class*='date-picker']", "refreshButton": "button:has-text('새로고침'), button:has-text('갱신'), button[class*='refresh'], [class*='reload']", "fullscreenButton": "button:has-text('전체'), button[class*='fullscreen'], button[class*='expand']" }, "steps": [ { "id": 1, "name": "메뉴 진입: 생산관리 > 생산 현황판", "action": "menu_navigate", "level1": "생산관리", "level2": "생산 현황판", "expected": { "url_contains": "/production", "visible": ["현황판", "생산"] } }, { "id": 2, "name": "필수 검증 #5: 목업 페이지 감지", "action": "verify_not_mockup", "checks": [ "생산 현황 데이터 표시", "통계 카드 또는 차트 존재", "기간 필터 존재" ], "expected": "정상 페이지 (목업 아님)" }, { "id": 3, "name": "통계 카드 영역 존재 확인", "action": "verify_element", "target": "statCard" }, { "id": 4, "phase": "READ", "name": "[READ] 생산 통계 숫자 데이터 확인", "action": "evaluate", "script": "(() => { const cards = document.querySelectorAll('.card, [class*=\"stat\"], [class*=\"metric\"]'); let hasNum = false; cards.forEach(c => { if (/\\d+/.test(c.innerText)) hasNum = true; }); return hasNum || document.body.innerText.includes('생산'); })()" }, { "id": 5, "phase": "READ", "name": "[READ] 차트 영역 존재 확인", "action": "verify_element", "target": "chart" }, { "id": 6, "phase": "FILTER", "name": "[FILTER] 필터/기간 선택 UI 존재 확인", "action": "verify_element", "target": "filterArea" }, { "id": 7, "phase": "FILTER", "name": "[FILTER] 필터 클릭 테스트", "action": "click_if_exists", "target": "select, [class*='filter'] button, [class*='date-picker'], button:has-text('기간')" }, { "id": 8, "name": "실시간/갱신 정보 확인", "action": "evaluate", "script": "(() => { const text = document.body.innerText; return text.includes('실시간') || text.includes('갱신') || text.includes('업데이트') || /\\d{2}:\\d{2}/.test(text); })()" }, { "id": 9, "name": "불량률/품질 정보 확인", "action": "evaluate", "script": "(() => { const text = document.body.innerText; return text.includes('불량') || text.includes('품질') || text.includes('%') || text.includes('달성'); })()" }, { "id": 10, "name": "생산 목표/실적 데이터 확인", "action": "evaluate", "script": "(() => { const text = document.body.innerText; return text.includes('목표') || text.includes('실적') || text.includes('생산량') || /\\d+[개대건]/.test(text); })()" }, { "id": 11, "name": "새로고침 버튼 존재 확인", "action": "verify_element", "target": "refreshButton" }, { "id": 12, "name": "전체화면/확대 버튼 확인", "action": "verify_element", "target": "fullscreenButton" } ], "expectedAPIs": [ { "method": "GET", "endpoint": "/api/v1/production/dashboard", "description": "생산 현황판 데이터 조회" } ], "requiredVerifications": [ { "id": 5, "name": "목업 페이지 감지", "steps": [2], "criteria": "생산 현황 데이터, 통계 카드/차트, 기간 필터 존재" } ], "rollbackPlan": { "note": "조회 전용 페이지로 데이터 변경 없음" } }