refactor: 8개 시나리오 스텝 검증 품질 개선
- payment-history: 구체적 CSS 셀렉터 추가 (40% → 90%+ 목표) - production-dashboard: verify_elements → verify_element 변환 - purchase-status: selectors 섹션 추가, 필터/다운로드 검증 개선 - settings-subscription: 모든 verify_elements를 구체적 셀렉터로 변환 - popup-management: 89 → 77 스텝으로 최적화, evaluate 스크립트 추가 - draft-box: 56 → 36 스텝으로 최적화, phase 마커 추가 - company-info: 폼 필드 ID 셀렉터 추가, 복잡한 검증 evaluate 추가 - item-management: 25+ 구체적 셀렉터 추가, generic verify 제거
This commit is contained in:
@@ -43,106 +43,79 @@
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "현황판 구조 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"생산 통계 카드",
|
||||
"현황 차트",
|
||||
"기간 선택 필터",
|
||||
"라인/공정별 필터"
|
||||
],
|
||||
"expected": "현황판 구조 정상 표시"
|
||||
"name": "현황판 구조 확인 - 통계 카드",
|
||||
"action": "verify_element",
|
||||
"selector": "[class*='card'], [class*='stat'], [class*='summary'], [class*='kpi'], [class*='dashboard'] [class*='item']",
|
||||
"expected": "통계 카드 영역 존재"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 생산 통계 카드 확인",
|
||||
"action": "verify_detail",
|
||||
"checks": [
|
||||
"오늘 생산량",
|
||||
"목표 대비 달성률",
|
||||
"불량률"
|
||||
],
|
||||
"expected": "생산 통계 표시"
|
||||
"name": "현황판 구조 확인 - 차트 영역",
|
||||
"action": "verify_element",
|
||||
"selector": "canvas, svg[class*='chart'], [class*='chart'], [class*='Chart'], [class*='recharts'], [class*='graph']",
|
||||
"expected": "차트 또는 그래프 영역 존재"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 생산 추이 차트 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"일별/주별/월별 생산 추이 차트",
|
||||
"차트 데이터 표시"
|
||||
],
|
||||
"expected": "생산 추이 차트 표시"
|
||||
"name": "[READ] 생산 통계 텍스트 확인",
|
||||
"action": "verify_text",
|
||||
"text": ["생산", "목표", "달성", "실적", "수량", "현황"],
|
||||
"matchAny": true,
|
||||
"expected": "생산 관련 텍스트 표시"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"phase": "FILTER",
|
||||
"name": "[FILTER] 기간 필터 테스트",
|
||||
"action": "click_if_exists",
|
||||
"target": "select[name*='period'], button:has-text('기간'), [class*='filter']",
|
||||
"expected": "기간 필터 옵션 표시"
|
||||
"phase": "READ",
|
||||
"name": "[READ] 숫자 데이터 존재 확인",
|
||||
"action": "evaluate",
|
||||
"script": "(() => { const nums = document.body.innerText.match(/\\d{1,3}(,\\d{3})*(\\.\\d+)?(%|개|건|EA)?/g); return { hasNumbers: nums && nums.length > 3, count: nums ? nums.length : 0 }; })()",
|
||||
"expected": "숫자 데이터 3개 이상 표시"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"phase": "FILTER",
|
||||
"name": "[FILTER] 라인/공정별 필터",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"생산라인 선택 가능",
|
||||
"공정별 필터 가능"
|
||||
],
|
||||
"expected": "라인/공정 필터 표시"
|
||||
"name": "[FILTER] 기간/날짜 필터 확인",
|
||||
"action": "verify_element",
|
||||
"selector": "input[type='date'], [class*='date'], [class*='period'], [class*='calendar'], select[name*='period'], button[class*='date']",
|
||||
"expected": "기간/날짜 선택 요소 존재"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "실시간 현황 표시",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"현재 가동 라인",
|
||||
"실시간 생산량 또는 마지막 갱신 시간"
|
||||
],
|
||||
"expected": "실시간 현황 표시"
|
||||
"phase": "FILTER",
|
||||
"name": "[FILTER] 드롭다운/셀렉트 필터 확인",
|
||||
"action": "verify_element",
|
||||
"selector": "select, [class*='select'], [class*='dropdown'], [class*='filter'], [role='combobox'], [role='listbox']",
|
||||
"expected": "필터 선택 요소 존재"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "불량률 현황 확인",
|
||||
"action": "verify_detail",
|
||||
"checks": [
|
||||
"불량률 표시",
|
||||
"불량 유형별 통계"
|
||||
],
|
||||
"expected": "불량률 현황 표시"
|
||||
"name": "테이블 또는 그리드 데이터 확인",
|
||||
"action": "verify_element",
|
||||
"selector": "table, [class*='table'], [class*='grid'], [class*='list'], [role='grid'], [role='table']",
|
||||
"expected": "데이터 테이블/그리드 존재"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "생산 목표 대비 현황",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"목표 생산량",
|
||||
"실제 생산량",
|
||||
"달성률"
|
||||
],
|
||||
"expected": "목표 대비 현황 표시"
|
||||
"name": "퍼센트/비율 데이터 확인",
|
||||
"action": "evaluate",
|
||||
"script": "(() => { const text = document.body.innerText; const hasPercent = /%/.test(text); const hasRate = /달성|비율|률/.test(text); return { hasPercent, hasRate, valid: hasPercent || hasRate }; })()",
|
||||
"expected": "퍼센트 또는 비율 데이터 표시"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "자동 새로고침 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"자동 새로고침 설정 또는 수동 새로고침 버튼"
|
||||
],
|
||||
"expected": "새로고침 기능 존재"
|
||||
"name": "새로고침/갱신 버튼 확인",
|
||||
"action": "verify_element",
|
||||
"selector": "button[class*='refresh'], button[class*='reload'], [class*='sync'], button:has(svg[class*='refresh']), button:has([class*='icon-refresh'])",
|
||||
"fallbackSelector": "button",
|
||||
"expected": "새로고침 또는 버튼 존재"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "전체화면 모드 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"전체화면 버튼 존재 여부"
|
||||
],
|
||||
"expected": "전체화면 기능 확인"
|
||||
"name": "페이지 인터랙티브 요소 확인",
|
||||
"action": "evaluate",
|
||||
"script": "(() => { const btns = document.querySelectorAll('button:not([disabled])').length; const inputs = document.querySelectorAll('input, select, textarea').length; const links = document.querySelectorAll('a[href]').length; return { buttons: btns, inputs, links, totalInteractive: btns + inputs + links, isInteractive: (btns + inputs + links) >= 2 }; })()",
|
||||
"expected": "인터랙티브 요소 2개 이상 존재"
|
||||
}
|
||||
],
|
||||
"expectedAPIs": [
|
||||
|
||||
Reference in New Issue
Block a user