feat: 신규 메뉴 20개 E2E 시나리오 추가
- 회계관리: 세금계산서발행, 세금계산서관리, 상품권관리, 일반전표입력, 일일일보 - 구매관리: 거래처관리, 발주관리, 구매현황, 단가관리 - 기준정보 관리: 공정관리, 단가표관리, 단가배포관리, 점검표관리 - 판매관리: 현장관리 - 자재관리: 배차차량관리 - 품질관리: 실적신고관리 - 게시판: 게시판 테스트 - 고객센터: 1:1 문의 - 설정: 바로빌연동관리, 달력관리 총 시나리오: 184 → 204개 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
31
accounting-daily-report.json
Normal file
31
accounting-daily-report.json
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"id": "accounting-daily-report",
|
||||||
|
"name": "일일 일보 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "회계관리 > 일일 일보 메뉴의 일일 보고서 조회/필터 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "회계관리",
|
||||||
|
"level2": "일일 일보",
|
||||||
|
"expectedUrl": "/accounting/daily-report",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 회계관리 > 일일 일보", "action": "menu_navigate", "level1": "회계관리", "level2": "일일 일보", "expected": { "url_contains": "/accounting", "visible": ["일일", "일보"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["일보 데이터 표시", "필터 또는 날짜 선택 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "통계 카드 확인", "action": "evaluate", "script": "(() => { const cards = document.querySelectorAll('[class*=\"card\"], [class*=\"Card\"], [class*=\"stat\"], [class*=\"summary\"]'); return cards.length > 0 ? 'Stats: ' + cards.length + ' cards' : 'No stat cards (ok)'; })()" },
|
||||||
|
{ "id": 6, "name": "일보 테이블 구조 확인", "action": "verify_table", "checks": ["일보 데이터 컬럼"], "expected": "일보 테이블 표시" },
|
||||||
|
{ "id": 7, "phase": "FILTER", "name": "[FILTER] 날짜 필터", "action": "click_if_exists", "target": "input[type='date']:first-of-type, [class*='datepicker']:first-of-type", "expected": "날짜 선택 열림" },
|
||||||
|
{ "id": 8, "phase": "FILTER", "name": "[FILTER] 조회 버튼", "action": "click_if_exists", "target": "button:has-text('조회'), button:has-text('검색'), button:has-text('적용')", "expected": "필터 적용" },
|
||||||
|
{ "id": 9, "name": "인쇄/다운로드 버튼 확인", "action": "evaluate", "script": "(() => { const btns = Array.from(document.querySelectorAll('button')).filter(b => ['인쇄','엑셀','Excel','다운로드','PDF'].some(t => b.innerText?.includes(t))); return btns.length > 0 ? 'Export buttons: ' + btns.map(b=>b.innerText.trim()).join(', ') : 'No export buttons (ok)'; })()" },
|
||||||
|
{ "id": 10, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 전용 페이지로 데이터 변경 없음" }
|
||||||
|
}
|
||||||
32
accounting-gift-card.json
Normal file
32
accounting-gift-card.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"id": "accounting-gift-card",
|
||||||
|
"name": "상품권관리 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "회계관리 > 상품권관리 메뉴의 상품권 조회/등록/검색 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "회계관리",
|
||||||
|
"level2": "상품권관리",
|
||||||
|
"expectedUrl": "/accounting/gift-card",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 회계관리 > 상품권관리", "action": "menu_navigate", "level1": "회계관리", "level2": "상품권관리", "expected": { "url_contains": "/accounting", "visible": ["상품권"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["상품권 목록 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "상품권 테이블 구조 확인", "action": "verify_table", "checks": ["상품권 데이터 컬럼"], "expected": "상품권 테이블 표시" },
|
||||||
|
{ "id": 6, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 8, "name": "등록 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['등록','신규','추가','발행'].some(t => b.innerText?.includes(t))); return btn ? 'Create button: ' + btn.innerText.trim() : 'No create button (ok)'; })()" },
|
||||||
|
{ "id": 9, "name": "상세 행 클릭", "action": "click_if_exists", "target": "table tbody tr:first-child", "expected": { "detail_view": true } },
|
||||||
|
{ "id": 10, "name": "상세 정보 확인", "action": "verify_detail", "checks": ["상품권 상세 정보 표시 또는 데이터 없음"], "expected": "상세 정보 표시" },
|
||||||
|
{ "id": 11, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
33
accounting-journal-entry.json
Normal file
33
accounting-journal-entry.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"id": "accounting-journal-entry",
|
||||||
|
"name": "일반전표입력 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "회계관리 > 일반전표입력 메뉴의 전표 조회/등록/검색 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "회계관리",
|
||||||
|
"level2": "일반전표입력",
|
||||||
|
"expectedUrl": "/accounting/journal-entry",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 회계관리 > 일반전표입력", "action": "menu_navigate", "level1": "회계관리", "level2": "일반전표입력", "expected": { "url_contains": "/accounting", "visible": ["전표", "일반"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["전표 목록 또는 입력 폼 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "전표 테이블 구조 확인", "action": "verify_table", "checks": ["전표 데이터 컬럼"], "expected": "전표 테이블 표시" },
|
||||||
|
{ "id": 6, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 8, "phase": "FILTER", "name": "[FILTER] 기간 필터", "action": "click_if_exists", "target": "input[type='date']:first-of-type, [class*='datepicker']:first-of-type", "expected": "날짜 선택 열림" },
|
||||||
|
{ "id": 9, "name": "등록 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['등록','신규','추가','입력'].some(t => b.innerText?.includes(t))); return btn ? 'Create button: ' + btn.innerText.trim() : 'No create button (ok)'; })()" },
|
||||||
|
{ "id": 10, "name": "상세 행 클릭", "action": "click_if_exists", "target": "table tbody tr:first-child", "expected": { "detail_view": true } },
|
||||||
|
{ "id": 11, "name": "상세 정보 확인", "action": "verify_detail", "checks": ["전표 상세 정보 표시 또는 데이터 없음"], "expected": "상세 정보 표시" },
|
||||||
|
{ "id": 12, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
33
accounting-tax-issue.json
Normal file
33
accounting-tax-issue.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"id": "accounting-tax-issue",
|
||||||
|
"name": "세금계산서발행 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "회계관리 > 세금계산서발행 메뉴의 세금계산서 발행/조회 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "회계관리",
|
||||||
|
"level2": "세금계산서발행",
|
||||||
|
"expectedUrl": "/accounting/tax-invoice-issue",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 회계관리 > 세금계산서발행", "action": "menu_navigate", "level1": "회계관리", "level2": "세금계산서발행", "expected": { "url_contains": "/accounting", "visible": ["세금계산서", "발행"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["발행 목록 또는 폼 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "세금계산서 테이블 구조 확인", "action": "verify_table", "checks": ["세금계산서 데이터 컬럼"], "expected": "세금계산서 테이블 표시" },
|
||||||
|
{ "id": 6, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 8, "phase": "FILTER", "name": "[FILTER] 기간 필터", "action": "click_if_exists", "target": "input[type='date']:first-of-type, [class*='datepicker']:first-of-type", "expected": "날짜 선택 열림" },
|
||||||
|
{ "id": 9, "name": "발행 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['발행','등록','신규','추가'].some(t => b.innerText?.includes(t))); return btn ? 'Issue button: ' + btn.innerText.trim() : 'No issue button (ok)'; })()" },
|
||||||
|
{ "id": 10, "name": "상세 행 클릭", "action": "click_if_exists", "target": "table tbody tr:first-child", "expected": { "detail_view": true } },
|
||||||
|
{ "id": 11, "name": "상세 정보 확인", "action": "verify_detail", "checks": ["세금계산서 상세 정보 표시 또는 데이터 없음"], "expected": "상세 정보 표시" },
|
||||||
|
{ "id": 12, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
33
accounting-tax-mgmt.json
Normal file
33
accounting-tax-mgmt.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"id": "accounting-tax-mgmt",
|
||||||
|
"name": "세금계산서관리 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "회계관리 > 세금계산서관리 메뉴의 세금계산서 조회/검색/필터 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "회계관리",
|
||||||
|
"level2": "세금계산서관리",
|
||||||
|
"expectedUrl": "/accounting/tax-invoice",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 회계관리 > 세금계산서관리", "action": "menu_navigate", "level1": "회계관리", "level2": "세금계산서관리", "expected": { "url_contains": "/accounting", "visible": ["세금계산서"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["세금계산서 목록 표시", "필터 또는 검색 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "세금계산서 테이블 구조 확인", "action": "verify_table", "checks": ["세금계산서 데이터 컬럼"], "expected": "세금계산서 테이블 표시" },
|
||||||
|
{ "id": 6, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 8, "phase": "FILTER", "name": "[FILTER] 필터 존재 확인", "action": "evaluate", "script": "(() => { const selects = document.querySelectorAll('select, [role=\"combobox\"], button[class*=\"select\"]'); return selects.length > 0 ? 'Filters: ' + selects.length : 'No filters (ok)'; })()" },
|
||||||
|
{ "id": 9, "name": "상세 행 클릭", "action": "click_if_exists", "target": "table tbody tr:first-child", "expected": { "detail_view": true } },
|
||||||
|
{ "id": 10, "name": "상세 정보 확인", "action": "verify_detail", "checks": ["세금계산서 상세 정보 표시 또는 데이터 없음"], "expected": "상세 정보 표시" },
|
||||||
|
{ "id": 11, "name": "엑셀 다운로드 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['엑셀','Excel','다운로드'].some(t => b.innerText?.includes(t))); return btn ? 'Excel button: ' + btn.innerText.trim() : 'No excel button (ok)'; })()" },
|
||||||
|
{ "id": 12, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 전용 페이지로 데이터 변경 없음" }
|
||||||
|
}
|
||||||
34
board-test.json
Normal file
34
board-test.json
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"id": "board-test",
|
||||||
|
"name": "게시판 테스트 페이지 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "게시판 > 게시판 테스트 메뉴의 테스트 게시판 조회/등록/검색 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "게시판",
|
||||||
|
"level2": "게시판 테스트",
|
||||||
|
"expectedUrl": "/boards/test",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 게시판 > 게시판 테스트", "action": "menu_navigate", "level1": "게시판", "level2": "게시판 테스트", "expected": { "url_contains": "/boards", "visible": ["게시판"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["게시글 목록 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "게시판 테이블 구조 확인", "action": "verify_table", "checks": ["제목 컬럼", "작성자 컬럼", "날짜 컬럼"], "expected": "게시판 테이블 표시" },
|
||||||
|
{ "id": 6, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 8, "name": "글쓰기 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['글쓰기','등록','작성','신규'].some(t => b.innerText?.includes(t))); return btn ? 'Write button: ' + btn.innerText.trim() : 'No write button (ok)'; })()" },
|
||||||
|
{ "id": 9, "name": "게시글 행 클릭", "action": "click_if_exists", "target": "table tbody tr:first-child", "expected": { "detail_view": true } },
|
||||||
|
{ "id": 10, "name": "게시글 상세 확인", "action": "verify_detail", "checks": ["게시글 내용 표시 또는 데이터 없음"], "expected": "상세 정보 표시" },
|
||||||
|
{ "id": 11, "name": "목록으로 돌아가기", "action": "click_if_exists", "target": "button:has-text('목록'), a:has-text('목록'), [class*='back']", "expected": "목록 페이지로 복귀" },
|
||||||
|
{ "id": 12, "name": "페이지네이션 확인", "action": "evaluate", "script": "(() => { const p = document.querySelector('[class*=\"pagination\"], [class*=\"Pagination\"]'); return p ? 'Pagination found' : 'No pagination (ok)'; })()" },
|
||||||
|
{ "id": 13, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
33
customer-inquiry.json
Normal file
33
customer-inquiry.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"id": "customer-inquiry",
|
||||||
|
"name": "1:1 문의 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "고객센터 > 1:1 문의 메뉴의 문의 조회/등록/검색 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "고객센터",
|
||||||
|
"level2": "1:1 문의",
|
||||||
|
"expectedUrl": "/customer-center/inquiry",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 고객센터 > 1:1 문의", "action": "menu_navigate", "level1": "고객센터", "level2": "1:1 문의", "expected": { "url_contains": "/customer", "visible": ["문의", "1:1"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["문의 목록 또는 작성 폼 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "문의 목록 구조 확인", "action": "verify_table", "checks": ["제목 컬럼", "상태 컬럼", "날짜 컬럼"], "expected": "문의 목록 표시" },
|
||||||
|
{ "id": 6, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 8, "name": "문의하기 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['문의','작성','등록','신규'].some(t => b.innerText?.includes(t))); return btn ? 'Inquiry button: ' + btn.innerText.trim() : 'No inquiry button (ok)'; })()" },
|
||||||
|
{ "id": 9, "name": "문의 행 클릭", "action": "click_if_exists", "target": "table tbody tr:first-child", "expected": { "detail_view": true } },
|
||||||
|
{ "id": 10, "name": "문의 상세 확인", "action": "verify_detail", "checks": ["문의 내용 표시 또는 데이터 없음"], "expected": "상세 정보 표시" },
|
||||||
|
{ "id": 11, "name": "목록으로 돌아가기", "action": "click_if_exists", "target": "button:has-text('목록'), a:has-text('목록'), [class*='back']", "expected": "목록 페이지로 복귀" },
|
||||||
|
{ "id": 12, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
32
material-dispatch.json
Normal file
32
material-dispatch.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"id": "material-dispatch",
|
||||||
|
"name": "배차차량관리 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "자재관리 > 배차차량관리 메뉴의 배차/차량 조회/등록/검색 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "자재관리",
|
||||||
|
"level2": "배차차량관리",
|
||||||
|
"expectedUrl": "/material/dispatch",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 자재관리 > 배차차량관리", "action": "menu_navigate", "level1": "자재관리", "level2": "배차차량관리", "expected": { "url_contains": "/material", "visible": ["배차", "차량"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["배차/차량 목록 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "배차 테이블 구조 확인", "action": "verify_table", "checks": ["차량/배차 데이터 컬럼"], "expected": "배차 테이블 표시" },
|
||||||
|
{ "id": 6, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 8, "name": "등록 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['등록','신규','추가','배차'].some(t => b.innerText?.includes(t))); return btn ? 'Create button: ' + btn.innerText.trim() : 'No create button (ok)'; })()" },
|
||||||
|
{ "id": 9, "name": "상세 행 클릭", "action": "click_if_exists", "target": "table tbody tr:first-child", "expected": { "detail_view": true } },
|
||||||
|
{ "id": 10, "name": "상세 정보 확인", "action": "verify_detail", "checks": ["배차/차량 상세 정보 표시 또는 데이터 없음"], "expected": "상세 정보 표시" },
|
||||||
|
{ "id": 11, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
34
purchase-order.json
Normal file
34
purchase-order.json
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"id": "purchase-order",
|
||||||
|
"name": "발주관리 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "구매관리 > 발주관리 메뉴의 발주 조회/등록/검색 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "구매관리",
|
||||||
|
"level2": "발주관리",
|
||||||
|
"expectedUrl": "/purchase/order",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 구매관리 > 발주관리", "action": "menu_navigate", "level1": "구매관리", "level2": "발주관리", "expected": { "url_contains": "/purchase", "visible": ["발주"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["발주 목록 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "발주 테이블 구조 확인", "action": "verify_table", "checks": ["발주 데이터 컬럼"], "expected": "발주 테이블 표시" },
|
||||||
|
{ "id": 6, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 8, "phase": "FILTER", "name": "[FILTER] 필터 존재 확인", "action": "evaluate", "script": "(() => { const selects = document.querySelectorAll('select, [role=\"combobox\"], button[class*=\"select\"]'); return selects.length > 0 ? 'Filters: ' + selects.length : 'No filters (ok)'; })()" },
|
||||||
|
{ "id": 9, "name": "등록 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['등록','신규','추가','발주'].some(t => b.innerText?.includes(t))); return btn ? 'Create button: ' + btn.innerText.trim() : 'No create button (ok)'; })()" },
|
||||||
|
{ "id": 10, "name": "상세 행 클릭", "action": "click_if_exists", "target": "table tbody tr:first-child", "expected": { "detail_view": true } },
|
||||||
|
{ "id": 11, "name": "상세 정보 확인", "action": "verify_detail", "checks": ["발주 상세 정보 표시 또는 데이터 없음"], "expected": "상세 정보 표시" },
|
||||||
|
{ "id": 12, "name": "목록으로 돌아가기", "action": "click_if_exists", "target": "button:has-text('목록'), a:has-text('목록'), [class*='back']", "expected": "목록 페이지로 복귀" },
|
||||||
|
{ "id": 13, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
32
purchase-price.json
Normal file
32
purchase-price.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"id": "purchase-price",
|
||||||
|
"name": "구매 단가관리 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "구매관리 > 단가관리 메뉴의 구매 단가 조회/검색 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "구매관리",
|
||||||
|
"level2": "단가관리",
|
||||||
|
"expectedUrl": "/purchase/price",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 구매관리 > 단가관리", "action": "menu_navigate", "level1": "구매관리", "level2": "단가관리", "expected": { "url_contains": "/purchase", "visible": ["단가"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["단가 목록 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "단가 테이블 구조 확인", "action": "verify_table", "checks": ["단가 데이터 컬럼"], "expected": "단가 테이블 표시" },
|
||||||
|
{ "id": 6, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 8, "name": "등록 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['등록','신규','추가'].some(t => b.innerText?.includes(t))); return btn ? 'Create button: ' + btn.innerText.trim() : 'No create button (ok)'; })()" },
|
||||||
|
{ "id": 9, "name": "상세 행 클릭", "action": "click_if_exists", "target": "table tbody tr:first-child", "expected": { "detail_view": true } },
|
||||||
|
{ "id": 10, "name": "상세 정보 확인", "action": "verify_detail", "checks": ["단가 상세 정보 표시 또는 데이터 없음"], "expected": "상세 정보 표시" },
|
||||||
|
{ "id": 11, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
31
purchase-status.json
Normal file
31
purchase-status.json
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"id": "purchase-status",
|
||||||
|
"name": "구매현황 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "구매관리 > 구매현황 메뉴의 구매 현황 조회/필터 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "구매관리",
|
||||||
|
"level2": "구매현황",
|
||||||
|
"expectedUrl": "/purchase/status",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 구매관리 > 구매현황", "action": "menu_navigate", "level1": "구매관리", "level2": "구매현황", "expected": { "url_contains": "/purchase", "visible": ["구매", "현황"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["구매 현황 데이터 표시", "필터 또는 검색 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "통계 카드 확인", "action": "evaluate", "script": "(() => { const cards = document.querySelectorAll('[class*=\"card\"], [class*=\"Card\"], [class*=\"stat\"], [class*=\"summary\"]'); return cards.length > 0 ? 'Stats: ' + cards.length + ' cards' : 'No stat cards (ok)'; })()" },
|
||||||
|
{ "id": 6, "name": "구매현황 테이블 구조 확인", "action": "verify_table", "checks": ["구매 데이터 컬럼"], "expected": "구매현황 테이블 표시" },
|
||||||
|
{ "id": 7, "phase": "FILTER", "name": "[FILTER] 기간 필터", "action": "click_if_exists", "target": "input[type='date']:first-of-type, [class*='datepicker']:first-of-type", "expected": "날짜 선택 열림" },
|
||||||
|
{ "id": 8, "phase": "FILTER", "name": "[FILTER] 조회 버튼", "action": "click_if_exists", "target": "button:has-text('조회'), button:has-text('검색'), button:has-text('적용')", "expected": "필터 적용" },
|
||||||
|
{ "id": 9, "name": "엑셀 다운로드 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['엑셀','Excel','다운로드'].some(t => b.innerText?.includes(t))); return btn ? 'Excel button: ' + btn.innerText.trim() : 'No excel button (ok)'; })()" },
|
||||||
|
{ "id": 10, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 전용 페이지로 데이터 변경 없음" }
|
||||||
|
}
|
||||||
33
purchase-vendor.json
Normal file
33
purchase-vendor.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"id": "purchase-vendor",
|
||||||
|
"name": "구매관리 거래처관리 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "구매관리 > 거래처관리 메뉴의 거래처 조회/등록/검색 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "구매관리",
|
||||||
|
"level2": "거래처관리",
|
||||||
|
"expectedUrl": "/purchase/vendor",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 구매관리 > 거래처관리", "action": "menu_navigate", "level1": "구매관리", "level2": "거래처관리", "expected": { "url_contains": "/purchase", "visible": ["거래처"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["거래처 목록 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "거래처 테이블 구조 확인", "action": "verify_table", "checks": ["거래처명 컬럼", "사업자번호 컬럼"], "expected": "거래처 테이블 표시" },
|
||||||
|
{ "id": 6, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 8, "name": "등록 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['등록','신규','추가'].some(t => b.innerText?.includes(t))); return btn ? 'Create button: ' + btn.innerText.trim() : 'No create button (ok)'; })()" },
|
||||||
|
{ "id": 9, "name": "상세 행 클릭", "action": "click_if_exists", "target": "table tbody tr:first-child", "expected": { "detail_view": true } },
|
||||||
|
{ "id": 10, "name": "상세 정보 확인", "action": "verify_detail", "checks": ["거래처 상세 정보 표시 또는 데이터 없음"], "expected": "상세 정보 표시" },
|
||||||
|
{ "id": 11, "name": "목록으로 돌아가기", "action": "click_if_exists", "target": "button:has-text('목록'), a:has-text('목록'), [class*='back']", "expected": "목록 페이지로 복귀" },
|
||||||
|
{ "id": 12, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
33
quality-performance-report.json
Normal file
33
quality-performance-report.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"id": "quality-performance-report",
|
||||||
|
"name": "실적신고관리 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "품질관리 > 실적신고관리 메뉴의 실적 신고 조회/등록/검색 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "품질관리",
|
||||||
|
"level2": "실적신고관리",
|
||||||
|
"expectedUrl": "/quality/performance-report",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 품질관리 > 실적신고관리", "action": "menu_navigate", "level1": "품질관리", "level2": "실적신고관리", "expected": { "url_contains": "/quality", "visible": ["실적", "신고"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["목록 또는 폼 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "통계 카드 확인", "action": "evaluate", "script": "(() => { const cards = document.querySelectorAll('[class*=\"card\"], [class*=\"Card\"], [class*=\"stat\"], [class*=\"summary\"]'); return cards.length > 0 ? 'Stats: ' + cards.length + ' cards' : 'No stat cards (ok)'; })()" },
|
||||||
|
{ "id": 6, "name": "테이블 구조 확인", "action": "verify_table", "checks": ["실적 데이터 컬럼", "신고 상태 컬럼"], "expected": "실적신고 테이블 표시" },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 8, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 9, "phase": "FILTER", "name": "[FILTER] 필터 존재 확인", "action": "evaluate", "script": "(() => { const selects = document.querySelectorAll('select, [role=\"combobox\"], button[class*=\"select\"]'); return selects.length > 0 ? 'Filters: ' + selects.length : 'No filters (ok)'; })()" },
|
||||||
|
{ "id": 10, "name": "등록/신규 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['등록','신규','추가','작성'].some(t => b.innerText?.includes(t))); return btn ? 'Create button: ' + btn.innerText.trim() : 'No create button (ok)'; })()" },
|
||||||
|
{ "id": 11, "name": "페이지네이션 확인", "action": "evaluate", "script": "(() => { const p = document.querySelector('[class*=\"pagination\"], [class*=\"Pagination\"], nav[aria-label*=\"page\"]'); return p ? 'Pagination found' : 'No pagination (ok)'; })()" },
|
||||||
|
{ "id": 12, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
33
sales-site-mgmt.json
Normal file
33
sales-site-mgmt.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"id": "sales-site-mgmt",
|
||||||
|
"name": "현장관리 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "판매관리 > 현장관리 메뉴의 현장 조회/등록/검색 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "판매관리",
|
||||||
|
"level2": "현장관리",
|
||||||
|
"expectedUrl": "/sales/site",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 판매관리 > 현장관리", "action": "menu_navigate", "level1": "판매관리", "level2": "현장관리", "expected": { "url_contains": "/sales", "visible": ["현장"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["목록 또는 폼 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "현장 테이블 구조 확인", "action": "verify_table", "checks": ["현장 데이터 컬럼"], "expected": "현장 테이블 표시" },
|
||||||
|
{ "id": 6, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 8, "name": "등록/추가 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['등록','신규','추가'].some(t => b.innerText?.includes(t))); return btn ? 'Create button: ' + btn.innerText.trim() : 'No create button (ok)'; })()" },
|
||||||
|
{ "id": 9, "name": "상세 행 클릭", "action": "click_if_exists", "target": "table tbody tr:first-child", "expected": { "detail_view": true } },
|
||||||
|
{ "id": 10, "name": "상세 정보 확인", "action": "verify_detail", "checks": ["현장 상세 정보 표시 또는 데이터 없음"], "expected": "상세 정보 표시" },
|
||||||
|
{ "id": 11, "name": "목록으로 돌아가기", "action": "click_if_exists", "target": "button:has-text('목록'), a:has-text('목록'), [class*='back']", "expected": "목록 페이지로 복귀" },
|
||||||
|
{ "id": 12, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
29
settings-barobill.json
Normal file
29
settings-barobill.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"id": "settings-barobill",
|
||||||
|
"name": "바로빌연동관리 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "설정 > 바로빌연동관리 메뉴의 바로빌 연동 설정 조회/수정 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "설정",
|
||||||
|
"level2": "바로빌연동관리",
|
||||||
|
"expectedUrl": "/settings/barobill",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 설정 > 바로빌연동관리", "action": "menu_navigate", "level1": "설정", "level2": "바로빌연동관리", "expected": { "url_contains": "/settings", "visible": ["바로빌"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["설정 폼 또는 연동 상태 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "페이지 구조 확인", "action": "evaluate", "script": "(() => { const inputs = document.querySelectorAll('input:not([type=\"hidden\"]), select, textarea'); const buttons = document.querySelectorAll('button'); return 'Inputs: ' + inputs.length + ', Buttons: ' + buttons.length; })()" },
|
||||||
|
{ "id": 5, "name": "연동 상태 확인", "action": "verify_detail", "checks": ["연동 상태 또는 설정 정보 표시"], "expected": "바로빌 연동 정보 표시" },
|
||||||
|
{ "id": 6, "name": "설정 필드 확인", "action": "evaluate", "script": "(() => { const labels = Array.from(document.querySelectorAll('label, [class*=\"label\"]')).map(l => l.innerText?.trim()).filter(Boolean).slice(0, 10); return labels.length > 0 ? 'Fields: ' + labels.join(', ') : 'No labeled fields (ok)'; })()" },
|
||||||
|
{ "id": 7, "name": "저장/수정 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['저장','수정','연동','설정'].some(t => b.innerText?.includes(t))); return btn ? 'Action button: ' + btn.innerText.trim() : 'No action button (ok)'; })()" },
|
||||||
|
{ "id": 8, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
29
settings-calendar.json
Normal file
29
settings-calendar.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"id": "settings-calendar",
|
||||||
|
"name": "달력관리 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "설정 > 달력관리 메뉴의 달력/일정 조회/등록 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "설정",
|
||||||
|
"level2": "달력관리",
|
||||||
|
"expectedUrl": "/settings/calendar",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 설정 > 달력관리", "action": "menu_navigate", "level1": "설정", "level2": "달력관리", "expected": { "url_contains": "/settings", "visible": ["달력"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["달력 또는 일정 목록 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "달력 UI 확인", "action": "evaluate", "script": "(() => { const cal = document.querySelector('[class*=\"calendar\"], [class*=\"Calendar\"], [class*=\"schedule\"], table'); return cal ? 'Calendar UI found' : 'No calendar UI (check page structure)'; })()" },
|
||||||
|
{ "id": 5, "name": "페이지 구조 확인", "action": "evaluate", "script": "(() => { const inputs = document.querySelectorAll('input:not([type=\"hidden\"]), select, textarea'); const buttons = document.querySelectorAll('button'); return 'Inputs: ' + inputs.length + ', Buttons: ' + buttons.length; })()" },
|
||||||
|
{ "id": 6, "name": "일정 등록/추가 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['등록','추가','신규','일정'].some(t => b.innerText?.includes(t))); return btn ? 'Action button: ' + btn.innerText.trim() : 'No action button (ok)'; })()" },
|
||||||
|
{ "id": 7, "name": "월/주 전환 확인", "action": "evaluate", "script": "(() => { const nav = Array.from(document.querySelectorAll('button')).filter(b => ['이전','다음','월','주','일','today','오늘'].some(t => b.innerText?.includes(t))); return nav.length > 0 ? 'Nav buttons: ' + nav.map(b=>b.innerText.trim()).join(', ') : 'No nav buttons (ok)'; })()" },
|
||||||
|
{ "id": 8, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
32
standard-checklist.json
Normal file
32
standard-checklist.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"id": "standard-checklist",
|
||||||
|
"name": "점검표 관리 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "기준정보 관리 > 점검표 관리 메뉴의 점검표 조회/등록/검색 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "기준정보 관리",
|
||||||
|
"level2": "점검표 관리",
|
||||||
|
"expectedUrl": "/standard/checklist",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 기준정보 관리 > 점검표 관리", "action": "menu_navigate", "level1": "기준정보 관리", "level2": "점검표 관리", "expected": { "url_contains": "/standard", "visible": ["점검표"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["목록 또는 폼 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "점검표 테이블 구조 확인", "action": "verify_table", "checks": ["점검표 데이터 컬럼"], "expected": "점검표 테이블 표시" },
|
||||||
|
{ "id": 6, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 8, "name": "등록/추가 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['등록','신규','추가'].some(t => b.innerText?.includes(t))); return btn ? 'Create button: ' + btn.innerText.trim() : 'No create button (ok)'; })()" },
|
||||||
|
{ "id": 9, "name": "상세 행 클릭", "action": "click_if_exists", "target": "table tbody tr:first-child", "expected": { "detail_view": true } },
|
||||||
|
{ "id": 10, "name": "상세 정보 확인", "action": "verify_detail", "checks": ["점검표 상세 정보 표시 또는 데이터 없음"], "expected": "상세 정보 표시" },
|
||||||
|
{ "id": 11, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
32
standard-price-distribute.json
Normal file
32
standard-price-distribute.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"id": "standard-price-distribute",
|
||||||
|
"name": "단가배포관리 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "기준정보 관리 > 단가배포관리 메뉴의 단가 배포 조회/검색 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "기준정보 관리",
|
||||||
|
"level2": "단가배포관리",
|
||||||
|
"expectedUrl": "/standard/price-distribute",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 기준정보 관리 > 단가배포관리", "action": "menu_navigate", "level1": "기준정보 관리", "level2": "단가배포관리", "expected": { "url_contains": "/standard", "visible": ["단가", "배포"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["목록 또는 폼 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "단가배포 테이블 구조 확인", "action": "verify_table", "checks": ["배포 데이터 컬럼"], "expected": "단가배포 테이블 표시" },
|
||||||
|
{ "id": 6, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 8, "name": "배포 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['배포','등록','신규','추가'].some(t => b.innerText?.includes(t))); return btn ? 'Action button: ' + btn.innerText.trim() : 'No action button (ok)'; })()" },
|
||||||
|
{ "id": 9, "name": "상세 행 클릭", "action": "click_if_exists", "target": "table tbody tr:first-child", "expected": { "detail_view": true } },
|
||||||
|
{ "id": 10, "name": "상세 정보 확인", "action": "verify_detail", "checks": ["배포 상세 정보 표시 또는 데이터 없음"], "expected": "상세 정보 표시" },
|
||||||
|
{ "id": 11, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
33
standard-process-mgmt.json
Normal file
33
standard-process-mgmt.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"id": "standard-process-mgmt",
|
||||||
|
"name": "공정관리 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "기준정보 관리 > 공정관리 메뉴의 공정 조회/등록/검색 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "기준정보 관리",
|
||||||
|
"level2": "공정관리",
|
||||||
|
"expectedUrl": "/standard/process",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 기준정보 관리 > 공정관리", "action": "menu_navigate", "level1": "기준정보 관리", "level2": "공정관리", "expected": { "url_contains": "/standard", "visible": ["공정"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["목록 또는 폼 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "통계 카드 확인", "action": "evaluate", "script": "(() => { const cards = document.querySelectorAll('[class*=\"card\"], [class*=\"Card\"], [class*=\"stat\"], [class*=\"summary\"]'); return cards.length > 0 ? 'Stats: ' + cards.length + ' cards' : 'No stat cards (ok)'; })()" },
|
||||||
|
{ "id": 6, "name": "공정 테이블 구조 확인", "action": "verify_table", "checks": ["공정 데이터 컬럼"], "expected": "공정 테이블 표시" },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 8, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 9, "name": "등록/추가 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['등록','신규','추가'].some(t => b.innerText?.includes(t))); return btn ? 'Create button: ' + btn.innerText.trim() : 'No create button (ok)'; })()" },
|
||||||
|
{ "id": 10, "name": "상세 행 클릭", "action": "click_if_exists", "target": "table tbody tr:first-child", "expected": { "detail_view": true } },
|
||||||
|
{ "id": 11, "name": "상세 정보 확인", "action": "verify_detail", "checks": ["공정 상세 정보 표시 또는 데이터 없음"], "expected": "상세 정보 표시" },
|
||||||
|
{ "id": 12, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
33
standard-unit-price.json
Normal file
33
standard-unit-price.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"id": "standard-unit-price",
|
||||||
|
"name": "단가표관리 테스트",
|
||||||
|
"screenshotPolicy": {
|
||||||
|
"onErrorOnly": true,
|
||||||
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
||||||
|
},
|
||||||
|
"description": "기준정보 관리 > 단가표관리 메뉴의 단가표 조회/검색/필터 기능 테스트",
|
||||||
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
|
"menuNavigation": {
|
||||||
|
"level1": "기준정보 관리",
|
||||||
|
"level2": "단가표관리",
|
||||||
|
"expectedUrl": "/standard/unit-price",
|
||||||
|
"searchWithinParent": true,
|
||||||
|
"closeOtherMenus": true
|
||||||
|
},
|
||||||
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
|
"steps": [
|
||||||
|
{ "id": 1, "name": "메뉴 진입: 기준정보 관리 > 단가표관리", "action": "menu_navigate", "level1": "기준정보 관리", "level2": "단가표관리", "expected": { "url_contains": "/standard", "visible": ["단가"] } },
|
||||||
|
{ "id": 2, "name": "페이지 로드 대기", "action": "wait", "timeout": 3000 },
|
||||||
|
{ "id": 3, "name": "필수 검증: 목업 페이지 감지", "action": "verify_not_mockup", "checks": ["목록 또는 폼 표시", "버튼 동작 가능"], "expected": "정상 페이지 (목업 아님)" },
|
||||||
|
{ "id": 4, "name": "테이블 로드 대기", "action": "wait_for_table", "timeout": 5000 },
|
||||||
|
{ "id": 5, "name": "단가표 테이블 구조 확인", "action": "verify_table", "checks": ["단가 데이터 컬럼"], "expected": "단가표 테이블 표시" },
|
||||||
|
{ "id": 6, "phase": "SEARCH", "name": "[SEARCH] 검색 기능", "action": "fill", "target": "input[type='search'], input[placeholder*='검색']", "value": "테스트", "submit": true },
|
||||||
|
{ "id": 7, "phase": "SEARCH", "name": "[SEARCH] 검색 결과 확인", "action": "verify_detail", "checks": ["검색 결과 표시 또는 결과 없음 메시지"], "expected": "검색 기능 동작" },
|
||||||
|
{ "id": 8, "phase": "FILTER", "name": "[FILTER] 필터 존재 확인", "action": "evaluate", "script": "(() => { const selects = document.querySelectorAll('select, [role=\"combobox\"], button[class*=\"select\"]'); return selects.length > 0 ? 'Filters: ' + selects.length : 'No filters (ok)'; })()" },
|
||||||
|
{ "id": 9, "name": "등록/추가 버튼 확인", "action": "evaluate", "script": "(() => { const btn = Array.from(document.querySelectorAll('button')).find(b => ['등록','신규','추가'].some(t => b.innerText?.includes(t))); return btn ? 'Create button: ' + btn.innerText.trim() : 'No create button (ok)'; })()" },
|
||||||
|
{ "id": 10, "name": "상세 행 클릭", "action": "click_if_exists", "target": "table tbody tr:first-child", "expected": { "detail_view": true } },
|
||||||
|
{ "id": 11, "name": "상세 정보 확인", "action": "verify_detail", "checks": ["단가 상세 정보 표시 또는 데이터 없음"], "expected": "상세 정보 표시" },
|
||||||
|
{ "id": 12, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
|
],
|
||||||
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user