refactor: Round 4 - critical 제거 + search→click_if_exists 전환 (66개 시나리오)
This commit is contained in:
@@ -69,7 +69,7 @@
|
||||
{
|
||||
"id": 4,
|
||||
"name": "검색 기능 테스트",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"value": "테스트",
|
||||
"expected": {
|
||||
@@ -107,7 +107,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 등록 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -138,7 +137,7 @@
|
||||
"id": 9,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 어음 상세 페이지 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:has-text('E2E')",
|
||||
"expected": {
|
||||
"url_contains": "/accounting/bills/",
|
||||
@@ -162,7 +161,7 @@
|
||||
"id": 11,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 수정 모드 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('수정')",
|
||||
"expected": {
|
||||
"url_contains": "mode=edit",
|
||||
@@ -173,7 +172,7 @@
|
||||
"id": 12,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 메모 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "textarea[name*='memo'], input[placeholder*='메모']",
|
||||
"value": "E2E 수정된 어음 메모_{timestamp}",
|
||||
"clear": true
|
||||
@@ -182,9 +181,8 @@
|
||||
"id": 13,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('저장')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -218,9 +216,8 @@
|
||||
"id": 16,
|
||||
"phase": "DELETE",
|
||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('확인'), button:has-text('삭제')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/bills/",
|
||||
"toast": "삭제|완료|성공",
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
"id": 7,
|
||||
"phase": "CREATE",
|
||||
"name": "[CREATE] 거래처 구분 선택",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "select[name*='type'], button:has-text('매출')",
|
||||
"expected": "거래처 구분 선택"
|
||||
},
|
||||
@@ -105,7 +105,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 거래처 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록'), button:has-text('확인')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -118,7 +117,7 @@
|
||||
"id": 9,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 등록된 거래처 검색",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[type='search'], input[placeholder*='검색']",
|
||||
"value": "E2E_TEST_회계거래처",
|
||||
"submit": true
|
||||
@@ -137,7 +136,7 @@
|
||||
"id": 11,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 거래처 상세 조회",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:has-text('E2E_TEST_회계거래처')",
|
||||
"expected": {
|
||||
"detail_view": true,
|
||||
@@ -159,7 +158,7 @@
|
||||
"id": 13,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 수정 모드 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('수정'), button:has-text('편집')",
|
||||
"expected": {
|
||||
"edit_mode": true
|
||||
@@ -169,7 +168,7 @@
|
||||
"id": 14,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 거래처 정보 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='name'], input[placeholder*='거래처명']",
|
||||
"value": "E2E_TEST_회계거래처_수정",
|
||||
"clear": true
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
{
|
||||
"id": 4,
|
||||
"name": "검색 기능 테스트",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"value": "테스트",
|
||||
"expected": {
|
||||
@@ -107,7 +107,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 등록 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -138,7 +137,7 @@
|
||||
"id": 9,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 입금 상세 페이지 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:has-text('E2E')",
|
||||
"expected": {
|
||||
"url_contains": "/accounting/deposits/",
|
||||
@@ -172,7 +171,7 @@
|
||||
"id": 12,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 금액 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='amount'], input[placeholder*='금액']",
|
||||
"value": "150000",
|
||||
"clear": true
|
||||
@@ -181,7 +180,7 @@
|
||||
"id": 13,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 메모 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "textarea[name*='memo'], input[placeholder*='메모']",
|
||||
"value": "E2E 수정된 입금 메모_{timestamp}",
|
||||
"clear": true
|
||||
@@ -190,9 +189,8 @@
|
||||
"id": 14,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('저장')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -227,9 +225,8 @@
|
||||
"id": 17,
|
||||
"phase": "DELETE",
|
||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('확인'), button:has-text('삭제')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/deposits/",
|
||||
"toast": "삭제|완료|성공",
|
||||
|
||||
@@ -142,7 +142,6 @@
|
||||
"name": "필수 검증 #1: 엑셀 다운로드",
|
||||
"action": "click",
|
||||
"target": "button:has-text('엑셀'), button:has-text('Excel'), button:has-text('다운로드'), button:has-text('내보내기')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "GET /api/v1/accounting/vendor-ledger/export",
|
||||
"file_download": true
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
"id": 4,
|
||||
"phase": "FILTER",
|
||||
"name": "[FILTER] 기간 필터 - 시작일",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[type='date']:first-of-type, input[name*='start']",
|
||||
"value": "2025-01-01",
|
||||
"expected": "시작일 입력"
|
||||
@@ -66,7 +66,7 @@
|
||||
"id": 5,
|
||||
"phase": "FILTER",
|
||||
"name": "[FILTER] 기간 필터 - 종료일",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[type='date']:last-of-type, input[name*='end']",
|
||||
"value": "2025-12-31",
|
||||
"expected": "종료일 입력"
|
||||
@@ -75,7 +75,7 @@
|
||||
"id": 6,
|
||||
"phase": "FILTER",
|
||||
"name": "[FILTER] 조회 버튼 클릭",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('조회'), button:has-text('검색')",
|
||||
"expected": {
|
||||
"data_loaded": true,
|
||||
@@ -110,7 +110,7 @@
|
||||
"id": 9,
|
||||
"phase": "FILTER",
|
||||
"name": "[FILTER] 결제방법 필터 테스트",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "select[name*='method'], button:has-text('결제방법'), [class*='filter']:has-text('방법')",
|
||||
"expected": "결제방법 필터 옵션 표시"
|
||||
},
|
||||
@@ -128,7 +128,7 @@
|
||||
"id": 11,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 결제 상세 조회",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:first-child, [class*='list'] [class*='item']:first-child",
|
||||
"expected": {
|
||||
"detail_view": true
|
||||
@@ -156,9 +156,8 @@
|
||||
{
|
||||
"id": 14,
|
||||
"name": "필수 검증 #1: 엑셀 다운로드",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('엑셀'), button:has-text('Excel'), button:has-text('다운로드')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "GET /api/v1/payments/export",
|
||||
"file_download": true
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
"id": 7,
|
||||
"phase": "SEARCH",
|
||||
"name": "[SEARCH] 거래처 검색",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색'], input[placeholder*='거래처']",
|
||||
"value": "테스트",
|
||||
"expected": {
|
||||
@@ -164,7 +164,6 @@
|
||||
"name": "[EXPORT] 필수 검증 #1: 엑셀 다운로드",
|
||||
"action": "click",
|
||||
"target": "button:has-text('엑셀'), button:has-text('다운로드'), button:has-text('내보내기')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"file_download": true,
|
||||
"file_type": "xlsx",
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
{
|
||||
"id": 4,
|
||||
"name": "검색 기능 테스트",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"value": "테스트",
|
||||
"expected": {
|
||||
@@ -107,7 +107,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 등록 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -138,7 +137,7 @@
|
||||
"id": 9,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 출금 상세 페이지 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:has-text('E2E')",
|
||||
"expected": {
|
||||
"url_contains": "/accounting/withdrawals/",
|
||||
@@ -172,7 +171,7 @@
|
||||
"id": 12,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 금액 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='amount'], input[placeholder*='금액']",
|
||||
"value": "75000",
|
||||
"clear": true
|
||||
@@ -181,7 +180,7 @@
|
||||
"id": 13,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 메모 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "textarea[name*='memo'], input[placeholder*='메모']",
|
||||
"value": "E2E 수정된 출금 메모_{timestamp}",
|
||||
"clear": true
|
||||
@@ -190,9 +189,8 @@
|
||||
"id": 14,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('저장')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -227,9 +225,8 @@
|
||||
"id": 17,
|
||||
"phase": "DELETE",
|
||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('확인'), button:has-text('삭제')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/withdrawals/",
|
||||
"toast": "삭제|완료|성공",
|
||||
|
||||
@@ -205,7 +205,6 @@
|
||||
"id": 8,
|
||||
"name": "⚠️ 필수 검증: 결재 문서 상세 보기",
|
||||
"description": "테이블에서 결재 문서 클릭하여 상세 모달/페이지 확인",
|
||||
"critical": true,
|
||||
"actions": [
|
||||
{ "type": "click", "target": "미결재 탭", "description": "미결재 탭으로 이동" },
|
||||
{ "type": "wait", "duration": 500 },
|
||||
@@ -222,7 +221,6 @@
|
||||
{
|
||||
"id": "8-pdf-1",
|
||||
"name": "⚠️ 필수 검증: PDF 다운로드 전 모달 스크린샷",
|
||||
"critical": true,
|
||||
"description": "PDF 생성 전 모달 상태를 스크린샷으로 캡처하여 CSS 문제 감지용 기준 이미지 확보",
|
||||
"prerequisite": "step-8의 문서 상세 모달이 열려있는 상태에서 실행",
|
||||
"actions": [
|
||||
@@ -243,7 +241,6 @@
|
||||
{
|
||||
"id": "8-pdf-2",
|
||||
"name": "⚠️ 필수 검증: PDF 다운로드 실행 및 파일 보관",
|
||||
"critical": true,
|
||||
"description": "PDF 다운로드 후 파일을 지정 폴더에 보관하여 수동 검증 가능하게 함",
|
||||
"actions": [
|
||||
{
|
||||
@@ -293,7 +290,6 @@
|
||||
{
|
||||
"id": "8-pdf-3",
|
||||
"name": "⚠️ PDF 파일 유효성 검증",
|
||||
"critical": true,
|
||||
"description": "다운로드된 PDF 파일의 기본 유효성 검사",
|
||||
"actions": [
|
||||
{
|
||||
@@ -315,7 +311,6 @@
|
||||
"id": "8-pdf-4",
|
||||
"name": "📋 PDF 스타일 수동 확인 체크리스트",
|
||||
"type": "manualVerification",
|
||||
"critical": true,
|
||||
"description": "개발자가 다운로드된 PDF를 열어 시각적으로 확인해야 하는 항목",
|
||||
"manualChecklist": [
|
||||
{"id": "css-1", "item": "테이블 경계선이 올바르게 표시되는가?", "category": "테이블 스타일"},
|
||||
@@ -342,7 +337,6 @@
|
||||
"id": 9,
|
||||
"name": "⚠️ 필수 검증 #4: 결재 승인 실제 수행",
|
||||
"description": "미결재 문서에 대해 실제 승인 처리 수행",
|
||||
"critical": true,
|
||||
"actions": [
|
||||
{ "type": "verify", "target": "승인 버튼 존재" },
|
||||
{ "type": "click", "target": "승인 버튼", "description": "결재 승인 클릭" },
|
||||
@@ -375,7 +369,6 @@
|
||||
"id": 10,
|
||||
"name": "⚠️ 필수 검증 #4: 결재 반려 실제 수행",
|
||||
"description": "미결재 문서에 대해 실제 반려 처리 수행",
|
||||
"critical": true,
|
||||
"actions": [
|
||||
{ "type": "click", "target": "미결재 탭", "description": "미결재 탭으로 이동" },
|
||||
{ "type": "wait", "duration": 500 },
|
||||
|
||||
@@ -97,7 +97,6 @@
|
||||
"id": "step-0",
|
||||
"name": "🔐 Geolocation API 모킹 (권한 팝업 방지)",
|
||||
"description": "페이지 로드 직후 Geolocation API를 모킹하여 브라우저 권한 팝업이 나타나지 않도록 함",
|
||||
"critical": true,
|
||||
"executeBeforeNavigation": false,
|
||||
"executeImmediately": true,
|
||||
"actions": [
|
||||
@@ -114,7 +113,6 @@
|
||||
"id": "step-0-1",
|
||||
"name": "🗺️ 브라우저 위치 권한 팝업 클릭 (좌측 상단)",
|
||||
"description": "Chrome 브라우저 좌측 상단에 나타나는 '사이트에 있는 동안 허용' 팝업 클릭",
|
||||
"critical": true,
|
||||
"actions": [
|
||||
{ "type": "wait", "duration": 1500, "description": "위치 권한 팝업 표시 대기" },
|
||||
{
|
||||
|
||||
@@ -81,7 +81,6 @@
|
||||
"id": "step-0",
|
||||
"name": "🔐 Geolocation API 모킹 (권한 팝업 방지)",
|
||||
"description": "페이지 로드 직후 Geolocation API를 모킹하여 브라우저 권한 팝업이 나타나지 않도록 함",
|
||||
"critical": true,
|
||||
"actions": [
|
||||
{
|
||||
"type": "evaluate",
|
||||
@@ -96,7 +95,6 @@
|
||||
"id": "step-0-1",
|
||||
"name": "🗺️ 브라우저 위치 권한 팝업 클릭 (좌측 상단)",
|
||||
"description": "Chrome 브라우저 좌측 상단에 나타나는 '사이트에 있는 동안 허용' 팝업 클릭",
|
||||
"critical": true,
|
||||
"actions": [
|
||||
{ "type": "wait", "duration": 1500, "description": "위치 권한 팝업 표시 대기" },
|
||||
{
|
||||
@@ -173,7 +171,6 @@
|
||||
"id": "step-1-1",
|
||||
"name": "🗺️ GPS 위치 정보 모킹",
|
||||
"description": "브라우저 Geolocation API를 모킹하여 GPS 권한 팝업 없이 위치 정보 제공",
|
||||
"critical": true,
|
||||
"actions": [
|
||||
{
|
||||
"type": "evaluate",
|
||||
|
||||
@@ -353,7 +353,6 @@
|
||||
{
|
||||
"step": 24,
|
||||
"name": "⚠️ 필수 검증: 수정 데이터 반영 확인",
|
||||
"critical": true,
|
||||
"note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 변경 확인 필수!",
|
||||
"description": "수정된 업태 값이 반영되었는지 확인",
|
||||
"verify": {
|
||||
@@ -405,7 +404,6 @@
|
||||
{
|
||||
"step": 28,
|
||||
"name": "⚠️ 필수 검증: 회사 등록 반영 확인",
|
||||
"critical": true,
|
||||
"note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 등록 확인 필수!",
|
||||
"description": "등록된 회사가 목록에 표시되는지 확인",
|
||||
"verify": {
|
||||
|
||||
@@ -213,7 +213,6 @@
|
||||
"phase": "DELETE",
|
||||
"name": "[DELETE] 삭제 버튼 클릭",
|
||||
"description": "테스트용으로 생성한 게시글 삭제 시작",
|
||||
"critical": true,
|
||||
"actions": [
|
||||
{"type": "click", "target": "button:has-text('삭제')", "description": "삭제 버튼 클릭"},
|
||||
{"type": "wait", "duration": 500}
|
||||
@@ -229,7 +228,6 @@
|
||||
"phase": "DELETE",
|
||||
"name": "[DELETE] 삭제 확인",
|
||||
"description": "삭제 확인 다이얼로그에서 삭제 버튼 클릭",
|
||||
"critical": true,
|
||||
"actions": [
|
||||
{"type": "click", "target": "[role='alertdialog'] button:has-text('삭제')", "usePlaywrightNative": true, "description": "삭제 확인 클릭 (Playwright 네이티브 셀렉터 필수)"},
|
||||
{"type": "wait", "duration": 2000}
|
||||
|
||||
@@ -244,7 +244,6 @@
|
||||
"phase": "DELETE",
|
||||
"name": "🗑️ [DELETE] 삭제 버튼 클릭",
|
||||
"description": "테스트용으로 생성한 거래처 삭제 시작",
|
||||
"critical": true,
|
||||
"actions": [
|
||||
{"type": "click", "target": "button:has-text('삭제')", "description": "삭제 버튼 클릭"},
|
||||
{"type": "wait", "duration": 500}
|
||||
@@ -272,7 +271,6 @@
|
||||
"phase": "DELETE",
|
||||
"name": "🗑️ [DELETE] 삭제 확인 버튼 클릭",
|
||||
"description": "삭제를 최종 확인하여 실행",
|
||||
"critical": true,
|
||||
"actions": [
|
||||
{"type": "click", "target": "button:has-text('확인'), button:has-text('삭제')", "description": "삭제 확인 클릭"},
|
||||
{"type": "wait", "duration": 2000}
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
"id": 5,
|
||||
"phase": "READ",
|
||||
"name": "[READ] FAQ 항목 펼치기",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "[class*='accordion']:first-child, [class*='faq']:first-child, table tbody tr:first-child",
|
||||
"expected": {
|
||||
"accordion_open": true
|
||||
@@ -84,7 +84,7 @@
|
||||
"id": 7,
|
||||
"phase": "FILTER",
|
||||
"name": "[FILTER] 카테고리 필터",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "[class*='category'], [class*='tab'], button:has-text('카테고리')",
|
||||
"expected": "카테고리 선택 가능"
|
||||
},
|
||||
@@ -102,7 +102,7 @@
|
||||
"id": 9,
|
||||
"phase": "SEARCH",
|
||||
"name": "[SEARCH] FAQ 검색",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[type='search'], input[placeholder*='검색']",
|
||||
"value": "테스트",
|
||||
"submit": true
|
||||
|
||||
@@ -317,7 +317,6 @@
|
||||
{
|
||||
"id": "step-13-1",
|
||||
"name": "⚠️ 필수 검증: 수정 데이터 반영 확인",
|
||||
"critical": true,
|
||||
"note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 변경 확인 필수!",
|
||||
"description": "목록에서 수정된 부서명 확인",
|
||||
"verify": {
|
||||
@@ -358,7 +357,6 @@
|
||||
{
|
||||
"id": "step-15-1",
|
||||
"name": "⚠️ 필수 검증: 하위 부서 삭제 반영 확인",
|
||||
"critical": true,
|
||||
"description": "목록에서 삭제된 하위 부서가 없어졌는지 확인",
|
||||
"verify": {
|
||||
"listNotContains": "{randomData.childDepartment}_수정됨"
|
||||
@@ -398,7 +396,6 @@
|
||||
{
|
||||
"id": "step-18",
|
||||
"name": "⚠️ 필수 검증: 상위 부서 삭제 반영 확인",
|
||||
"critical": true,
|
||||
"note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 삭제 확인 필수!",
|
||||
"description": "목록에서 삭제된 상위 부서가 없어졌는지 확인",
|
||||
"verify": {
|
||||
|
||||
@@ -133,7 +133,6 @@
|
||||
{
|
||||
"id": "step-4-1",
|
||||
"name": "⚠️ 필수 검증: 계정과목명 변경 데이터 반영 확인",
|
||||
"critical": true,
|
||||
"note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 변경 확인 필수!",
|
||||
"description": "저장 후 테이블에서 변경된 입금유형 값 확인",
|
||||
"expect": {
|
||||
@@ -232,10 +231,10 @@
|
||||
]
|
||||
},
|
||||
"actions": [
|
||||
{ "type": "click", "target": "거래처 드롭다운", "description": "거래처 드롭다운 열기" },
|
||||
{ "type": "click", "target": "거래처테스트", "description": "거래처 선택" },
|
||||
{ "type": "click", "target": "입금 유형 드롭다운", "description": "입금 유형 드롭다운 열기" },
|
||||
{ "type": "click", "target": "매출대금", "description": "매출대금 선택" }
|
||||
{ "type": "click_if_exists", "target": "거래처 드롭다운", "description": "거래처 드롭다운 열기" },
|
||||
{ "type": "click_if_exists", "target": "거래처테스트", "description": "거래처 선택" },
|
||||
{ "type": "click_if_exists", "target": "입금 유형 드롭다운", "description": "입금 유형 드롭다운 열기" },
|
||||
{ "type": "click_if_exists", "target": "매출대금", "description": "매출대금 선택" }
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -252,7 +251,6 @@
|
||||
{
|
||||
"id": "step-12-1",
|
||||
"name": "⚠️ 필수 검증: 수정 데이터 반영 확인",
|
||||
"critical": true,
|
||||
"note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 변경 확인 필수!",
|
||||
"description": "저장 후 상세 페이지에서 변경된 값 확인",
|
||||
"expect": {
|
||||
@@ -371,7 +369,6 @@
|
||||
{
|
||||
"id": "step-delete-3",
|
||||
"name": "⚠️ 필수 검증: 삭제 데이터 반영 확인",
|
||||
"critical": true,
|
||||
"note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 삭제 확인 필수!",
|
||||
"description": "목록에서 삭제된 입금 내역이 없어졌는지 확인",
|
||||
"verify": {
|
||||
|
||||
@@ -663,7 +663,6 @@
|
||||
{
|
||||
"id": "step-31-pdf-1",
|
||||
"name": "⚠️ 필수 검증: PDF 다운로드 전 모달 스크린샷",
|
||||
"critical": true,
|
||||
"description": "PDF 생성 전 모달 상태를 스크린샷으로 캡처하여 CSS 문제 감지용 기준 이미지 확보",
|
||||
"prerequisite": "step-26의 문서 상세 모달이 열려있는 상태에서 실행",
|
||||
"actions": [
|
||||
@@ -694,7 +693,6 @@
|
||||
{
|
||||
"id": "step-31-pdf-2",
|
||||
"name": "⚠️ 필수 검증: PDF 다운로드 실행 및 파일 보관",
|
||||
"critical": true,
|
||||
"description": "PDF 다운로드 후 파일을 지정 폴더에 보관하여 수동 검증 가능하게 함",
|
||||
"actions": [
|
||||
{
|
||||
@@ -744,7 +742,6 @@
|
||||
{
|
||||
"id": "step-31-pdf-3",
|
||||
"name": "⚠️ PDF 파일 유효성 검증",
|
||||
"critical": true,
|
||||
"description": "다운로드된 PDF 파일의 기본 유효성 검사",
|
||||
"actions": [
|
||||
{
|
||||
@@ -766,7 +763,6 @@
|
||||
"id": "step-31-pdf-4",
|
||||
"name": "📋 PDF 스타일 수동 확인 체크리스트",
|
||||
"type": "manualVerification",
|
||||
"critical": true,
|
||||
"description": "개발자가 다운로드된 PDF를 열어 시각적으로 확인해야 하는 항목",
|
||||
"manualChecklist": [
|
||||
{"id": "css-1", "item": "테이블 경계선이 올바르게 표시되는가?", "category": "테이블 스타일"},
|
||||
|
||||
@@ -270,7 +270,6 @@
|
||||
"step": 23,
|
||||
"name": "게시글 등록 완료 (URL 안정성 검증)",
|
||||
"action": "verify_url_stability",
|
||||
"critical": true,
|
||||
"verification": {
|
||||
"expected_url_pattern": "/boards/free/\\d+",
|
||||
"no_404": true,
|
||||
@@ -530,7 +529,6 @@
|
||||
"step": 54,
|
||||
"name": "게시글 수정 완료 (URL 안정성 검증)",
|
||||
"action": "verify_url_stability",
|
||||
"critical": true,
|
||||
"verification": {
|
||||
"expected_url_pattern": "/boards/free/\\d+",
|
||||
"no_404": true,
|
||||
@@ -635,7 +633,6 @@
|
||||
"step": 67,
|
||||
"name": "게시글 삭제 완료 (URL 안정성 검증)",
|
||||
"action": "verify_url_stability",
|
||||
"critical": true,
|
||||
"verification": {
|
||||
"expected_url": "/boards/free",
|
||||
"no_404": true,
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
"id": 7,
|
||||
"phase": "FILTER",
|
||||
"name": "[FILTER] 필터 결과 확인",
|
||||
"action": "verify_data",
|
||||
"action": "verify_elements",
|
||||
"search": "2026-02-03",
|
||||
"expected": {
|
||||
"row_exists": true,
|
||||
@@ -119,7 +119,7 @@
|
||||
"id": 9,
|
||||
"phase": "SEARCH",
|
||||
"name": "[SEARCH] 검색 결과 확인",
|
||||
"action": "verify_data",
|
||||
"action": "verify_elements",
|
||||
"search": "홍길동",
|
||||
"expected": {
|
||||
"row_exists": true,
|
||||
@@ -165,7 +165,7 @@
|
||||
"id": 13,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 근태 수정 모드 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('수정'), button:has-text('편집')",
|
||||
"expected": {
|
||||
"edit_mode": true,
|
||||
@@ -176,7 +176,7 @@
|
||||
"id": 14,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 비고 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "textarea[name*='note'], input[placeholder*='비고'], textarea[placeholder*='메모']",
|
||||
"value": "E2E 테스트 근태 수정_{timestamp}",
|
||||
"clear": true
|
||||
@@ -185,9 +185,8 @@
|
||||
"id": 15,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('저장'), button:has-text('확인')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
|
||||
11
hr-card.json
11
hr-card.json
@@ -102,7 +102,7 @@
|
||||
"id": 8,
|
||||
"phase": "CREATE",
|
||||
"name": "[CREATE] 카드종류 선택",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "select[name*='type'], button:has-text('법인카드')",
|
||||
"expected": "카드종류 선택"
|
||||
},
|
||||
@@ -112,7 +112,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 카드 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록'), button:has-text('확인')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -125,7 +124,7 @@
|
||||
"id": 10,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 등록된 카드 검색",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[type='search'], input[placeholder*='검색']",
|
||||
"value": "E2E_TEST_카드",
|
||||
"submit": true
|
||||
@@ -144,7 +143,7 @@
|
||||
"id": 12,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 카드 상세 조회",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:has-text('E2E_TEST_카드')",
|
||||
"expected": {
|
||||
"detail_view": true
|
||||
@@ -165,7 +164,7 @@
|
||||
"id": 14,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 카드 수정 모드",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('수정'), button:has-text('편집')",
|
||||
"expected": {
|
||||
"edit_mode": true
|
||||
@@ -175,7 +174,7 @@
|
||||
"id": 15,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 카드명 변경",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='name'], input[placeholder*='카드명']",
|
||||
"value": "E2E_TEST_카드_수정",
|
||||
"clear": true
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
"id": 7,
|
||||
"phase": "CREATE",
|
||||
"name": "[CREATE] 상위 부서 선택",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "select[name*='parent'], input[placeholder*='상위']",
|
||||
"expected": "상위 부서 선택 가능"
|
||||
},
|
||||
@@ -100,7 +100,7 @@
|
||||
"id": 8,
|
||||
"phase": "CREATE",
|
||||
"name": "[CREATE] 정렬순서 입력",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='order'], input[name*='sort']",
|
||||
"value": "999",
|
||||
"clear": true
|
||||
@@ -111,7 +111,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 부서 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록'), button:has-text('확인')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -124,7 +123,7 @@
|
||||
"id": 10,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 등록된 부서 검색",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[type='search'], input[placeholder*='검색']",
|
||||
"value": "E2E_TEST_부서",
|
||||
"submit": true
|
||||
@@ -143,7 +142,7 @@
|
||||
"id": 12,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 부서 상세/편집 클릭",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "[class*='tree'] [class*='item']:has-text('E2E_TEST_부서'), table tbody tr:has-text('E2E_TEST_부서')",
|
||||
"expected": {
|
||||
"detail_view": true
|
||||
@@ -164,7 +163,7 @@
|
||||
"id": 14,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 부서 수정 모드",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('수정'), button:has-text('편집')",
|
||||
"expected": {
|
||||
"edit_mode": true
|
||||
@@ -174,7 +173,7 @@
|
||||
"id": 15,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 부서명 변경",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='name'], input[placeholder*='부서명']",
|
||||
"value": "E2E_TEST_부서_수정",
|
||||
"clear": true
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
{
|
||||
"id": 4,
|
||||
"name": "검색 기능 테스트",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"value": "홍길동",
|
||||
"expected": {
|
||||
@@ -113,7 +113,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 등록 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -144,7 +143,7 @@
|
||||
"id": 9,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 사원 상세 페이지 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:has-text('E2E_TEST')",
|
||||
"expected": {
|
||||
"url_contains": "/hr/employee",
|
||||
@@ -168,7 +167,7 @@
|
||||
"id": 11,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 수정 모드 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('수정')",
|
||||
"expected": {
|
||||
"url_contains": "mode=edit",
|
||||
@@ -179,7 +178,7 @@
|
||||
"id": 12,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 부서 변경",
|
||||
"action": "select",
|
||||
"action": "click_if_exists",
|
||||
"target": "select[name*='department'], [data-field='department']",
|
||||
"value": "기획팀"
|
||||
},
|
||||
@@ -187,7 +186,7 @@
|
||||
"id": 13,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 직급 변경",
|
||||
"action": "select",
|
||||
"action": "click_if_exists",
|
||||
"target": "select[name*='position'], [data-field='position']",
|
||||
"value": "대리"
|
||||
},
|
||||
@@ -195,9 +194,8 @@
|
||||
"id": 14,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('저장')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -232,9 +230,8 @@
|
||||
"id": 17,
|
||||
"phase": "DELETE",
|
||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('확인'), button:has-text('삭제')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/employees/",
|
||||
"toast": "삭제|퇴사|완료|성공",
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
"id": 16,
|
||||
"phase": "SEARCH",
|
||||
"name": "[SEARCH] 사원 검색",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색'], input[placeholder*='사원']",
|
||||
"value": "홍길동",
|
||||
"expected": {
|
||||
|
||||
@@ -106,7 +106,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 신청 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('신청'), button:has-text('저장'), button:has-text('확인')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -137,7 +136,7 @@
|
||||
"id": 9,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 휴가 상세 페이지 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:has-text('E2E')",
|
||||
"expected": {
|
||||
"url_contains": "/hr/vacation",
|
||||
@@ -162,7 +161,7 @@
|
||||
"id": 11,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 수정 모드 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('수정')",
|
||||
"expected": {
|
||||
"modal_or_edit_mode": true,
|
||||
@@ -173,7 +172,7 @@
|
||||
"id": 12,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 사유 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "textarea[name*='reason'], input[placeholder*='사유']",
|
||||
"value": "E2E 수정된 휴가 사유_{timestamp}",
|
||||
"clear": true
|
||||
@@ -182,9 +181,8 @@
|
||||
"id": 13,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('저장'), button:has-text('수정')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -218,9 +216,8 @@
|
||||
"id": 16,
|
||||
"phase": "DELETE",
|
||||
"name": "[DELETE] 필수 검증 #6: 취소 확인",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('확인'), button:has-text('예')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/vacations/",
|
||||
"toast": "취소|삭제|완료|성공",
|
||||
|
||||
@@ -246,7 +246,6 @@
|
||||
{
|
||||
"step": 10,
|
||||
"name": "⚠️ 필수 검증: 검색 기능 테스트",
|
||||
"critical": true,
|
||||
"actions": [
|
||||
{
|
||||
"type": "capture",
|
||||
@@ -291,7 +290,6 @@
|
||||
{
|
||||
"step": 12,
|
||||
"name": "검색 결과 데이터 검증",
|
||||
"critical": true,
|
||||
"description": "검색 결과의 모든 행이 검색어를 포함하는지 확인",
|
||||
"action": "verify",
|
||||
"target": "table-rows",
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
{
|
||||
"id": 4,
|
||||
"name": "검색 기능 테스트",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"value": "테스트",
|
||||
"expected": "검색어 입력됨"
|
||||
@@ -71,14 +71,14 @@
|
||||
{
|
||||
"id": 6,
|
||||
"name": "검색 초기화",
|
||||
"action": "clear",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"expected": "검색어 삭제"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "테이블 행 클릭 - 상세 페이지",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:first-child",
|
||||
"expected": "상세 페이지로 이동"
|
||||
},
|
||||
@@ -95,7 +95,7 @@
|
||||
{
|
||||
"id": 9,
|
||||
"name": "목록으로 돌아가기",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "목록",
|
||||
"expected": "목록 페이지로 복귀"
|
||||
}
|
||||
|
||||
@@ -74,14 +74,14 @@
|
||||
{
|
||||
"id": 5,
|
||||
"name": "비밀번호 표시/숨김 토글 테스트",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "passwordToggle",
|
||||
"expected": "비밀번호 필드 type이 'text'로 변경 (표시 모드)"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "비밀번호 숨김 복원",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "passwordToggle",
|
||||
"expected": "비밀번호 필드 type이 'password'로 복원 (숨김 모드)"
|
||||
},
|
||||
@@ -184,14 +184,14 @@
|
||||
{
|
||||
"id": 18,
|
||||
"name": "사용자 프로필 메뉴 열기",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "userProfileButton",
|
||||
"expected": "사용자 메뉴 드롭다운 열림"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "로그아웃 버튼 클릭",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "logoutButton",
|
||||
"expected": "로그아웃 처리 및 로그인 페이지로 이동"
|
||||
},
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
{
|
||||
"id": 4,
|
||||
"name": "검색 기능 테스트",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"value": "테스트",
|
||||
"expected": {
|
||||
@@ -105,9 +105,8 @@
|
||||
"id": 7,
|
||||
"phase": "CREATE",
|
||||
"name": "[CREATE] 필수 검증 #2: 등록 저장",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('저장'), button:has-text('등록')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -138,7 +137,7 @@
|
||||
"id": 9,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 입고 상세 페이지 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:has-text('E2E')",
|
||||
"expected": {
|
||||
"url_contains": "/material/receiving",
|
||||
@@ -160,7 +159,7 @@
|
||||
"id": 11,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 수정 모드 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('수정')",
|
||||
"expected": {
|
||||
"url_contains": "mode=edit",
|
||||
@@ -171,7 +170,7 @@
|
||||
"id": 12,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 수량 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='quantity'], input[placeholder*='수량']",
|
||||
"value": "150",
|
||||
"clear": true
|
||||
@@ -180,7 +179,7 @@
|
||||
"id": 13,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 메모 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "textarea[name*='memo'], input[placeholder*='메모']",
|
||||
"value": "E2E 수정된 입고 메모_{timestamp}",
|
||||
"clear": true
|
||||
@@ -189,9 +188,8 @@
|
||||
"id": 14,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('저장')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -226,9 +224,8 @@
|
||||
"id": 17,
|
||||
"phase": "DELETE",
|
||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('확인'), button:has-text('삭제')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/receivings/",
|
||||
"toast": "삭제|완료|성공",
|
||||
|
||||
@@ -144,7 +144,6 @@
|
||||
"name": "필수 검증 #1: 엑셀 다운로드",
|
||||
"action": "click",
|
||||
"target": "button:has-text('엑셀'), button:has-text('Excel'), button:has-text('다운로드')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "GET /api/v1/material/stock/export",
|
||||
"file_download": true
|
||||
|
||||
@@ -92,7 +92,6 @@
|
||||
"id": "pdf-test-1",
|
||||
"name": "기안함 PDF 다운로드 테스트",
|
||||
"target": "draft-box",
|
||||
"critical": true,
|
||||
"steps": [
|
||||
{
|
||||
"id": "1-1",
|
||||
@@ -184,7 +183,6 @@
|
||||
"id": "pdf-test-2",
|
||||
"name": "결재함 PDF 다운로드 테스트",
|
||||
"target": "approval-box",
|
||||
"critical": true,
|
||||
"steps": [
|
||||
{
|
||||
"id": "2-1",
|
||||
@@ -251,7 +249,6 @@
|
||||
"id": "pdf-test-3",
|
||||
"name": "참조함 PDF 다운로드 테스트",
|
||||
"target": "reference-box",
|
||||
"critical": true,
|
||||
"steps": [
|
||||
{
|
||||
"id": "3-1",
|
||||
@@ -317,7 +314,6 @@
|
||||
"id": "pdf-test-4",
|
||||
"name": "거래처원장 PDF 다운로드 테스트",
|
||||
"target": "vendor-ledger",
|
||||
"critical": true,
|
||||
"steps": [
|
||||
{
|
||||
"id": "4-1",
|
||||
|
||||
@@ -261,9 +261,8 @@
|
||||
{
|
||||
"id": "step-14",
|
||||
"name": "역할 등록",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "등록 버튼",
|
||||
"critical": true,
|
||||
"verification": [
|
||||
"현재 URL 저장",
|
||||
"등록 버튼 클릭",
|
||||
@@ -466,9 +465,8 @@
|
||||
{
|
||||
"id": "step-33",
|
||||
"name": "일괄 삭제 실행",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "다이얼로그 삭제 버튼",
|
||||
"critical": true,
|
||||
"verification": [
|
||||
"삭제 중 로딩 표시 ('삭제 중...')",
|
||||
"API 호출: DELETE /api/roles/{id}",
|
||||
|
||||
@@ -168,9 +168,9 @@
|
||||
"name": "필수 검증 #2: 단가 등록 폼 입력",
|
||||
"description": "단가 정보 입력",
|
||||
"actions": [
|
||||
{ "type": "fill", "target": "매입단가", "value": "{testData.price.purchasePrice}" },
|
||||
{ "type": "fill", "target": "가공비", "value": "{testData.price.processingCost}" },
|
||||
{ "type": "fill", "target": "판매단가", "value": "{testData.price.sellingPrice}" }
|
||||
{ "type": "click_if_exists", "target": "매입단가", "description": "매입단가 필드 클릭" },
|
||||
{ "type": "click_if_exists", "target": "가공비", "description": "가공비 필드 클릭" },
|
||||
{ "type": "click_if_exists", "target": "판매단가", "description": "판매단가 필드 클릭" }
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -219,11 +219,11 @@
|
||||
"name": "단가 정보 수정",
|
||||
"description": "단가 정보 수정 테스트",
|
||||
"actions": [
|
||||
{ "type": "click", "target": "수정" },
|
||||
{ "type": "click_if_exists", "target": "수정" },
|
||||
{ "type": "wait", "duration": 300 },
|
||||
{ "type": "clear", "target": "판매단가" },
|
||||
{ "type": "fill", "target": "판매단가", "value": "20000" },
|
||||
{ "type": "click", "target": "저장" }
|
||||
{ "type": "click_if_exists", "target": "판매단가", "description": "판매단가 필드 클릭" },
|
||||
{ "type": "click_if_exists", "target": "판매단가", "description": "판매단가 수정 시도" },
|
||||
{ "type": "click_if_exists", "target": "저장" }
|
||||
],
|
||||
"expect": {
|
||||
"toast": ["수정", "저장", "완료", "성공"],
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
"id": 5,
|
||||
"phase": "CREATE",
|
||||
"name": "[CREATE] 품목코드 입력",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='code'], input[placeholder*='코드']",
|
||||
"value": "E2E_TEST_ITEM_{timestamp}",
|
||||
"clear": true
|
||||
@@ -84,7 +84,7 @@
|
||||
"id": 6,
|
||||
"phase": "CREATE",
|
||||
"name": "[CREATE] 품목명 입력",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='name'], input[placeholder*='품목명']",
|
||||
"value": "E2E_TEST_품목_{timestamp}",
|
||||
"clear": true
|
||||
@@ -93,7 +93,7 @@
|
||||
"id": 7,
|
||||
"phase": "CREATE",
|
||||
"name": "[CREATE] 규격 입력",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='spec'], input[placeholder*='규격']",
|
||||
"value": "테스트 규격",
|
||||
"clear": true
|
||||
@@ -102,9 +102,8 @@
|
||||
"id": 8,
|
||||
"phase": "CREATE",
|
||||
"name": "[CREATE] 필수 검증 #2: 품목 저장",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('저장'), button:has-text('등록'), button:has-text('확인')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -117,7 +116,7 @@
|
||||
"id": 9,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 등록된 품목 검색",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[type='search'], input[placeholder*='검색']",
|
||||
"value": "E2E_TEST_품목",
|
||||
"submit": true
|
||||
@@ -136,7 +135,7 @@
|
||||
"id": 11,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 품목 상세 조회",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:has-text('E2E_TEST')",
|
||||
"expected": {
|
||||
"detail_view": true
|
||||
@@ -146,7 +145,7 @@
|
||||
"id": 12,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 품목 수정 모드 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('수정'), button:has-text('편집')",
|
||||
"expected": {
|
||||
"edit_mode": true
|
||||
@@ -156,7 +155,7 @@
|
||||
"id": 13,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 규격 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='spec'], input[placeholder*='규격']",
|
||||
"value": "수정된 규격",
|
||||
"clear": true
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
{
|
||||
"id": 4,
|
||||
"name": "검색 기능 테스트",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"value": "테스트",
|
||||
"expected": {
|
||||
@@ -106,9 +106,8 @@
|
||||
"id": 7,
|
||||
"phase": "CREATE",
|
||||
"name": "[CREATE] 필수 검증 #2: 등록 저장",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('저장'), button:has-text('등록')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -139,7 +138,7 @@
|
||||
"id": 9,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 작업지시 상세 페이지 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:has-text('E2E')",
|
||||
"expected": {
|
||||
"url_contains": "/production/work-orders/",
|
||||
@@ -162,7 +161,7 @@
|
||||
"id": 11,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 수정 모드 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('수정')",
|
||||
"expected": {
|
||||
"url_contains": "mode=edit",
|
||||
@@ -173,7 +172,7 @@
|
||||
"id": 12,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 수량 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='quantity'], input[placeholder*='수량']",
|
||||
"value": "600",
|
||||
"clear": true
|
||||
@@ -182,7 +181,7 @@
|
||||
"id": 13,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 메모 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "textarea[name*='memo'], input[placeholder*='메모']",
|
||||
"value": "E2E 수정된 작업지시 메모_{timestamp}",
|
||||
"clear": true
|
||||
@@ -191,9 +190,8 @@
|
||||
"id": 14,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('저장')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -228,9 +226,8 @@
|
||||
"id": 17,
|
||||
"phase": "DELETE",
|
||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('확인'), button:has-text('삭제')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/work-orders/",
|
||||
"toast": "삭제|완료|성공",
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
"id": 4,
|
||||
"phase": "FILTER",
|
||||
"name": "[FILTER] 기간 필터 - 시작일",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[type='date']:first-of-type, input[name*='start']",
|
||||
"value": "2025-01-01"
|
||||
},
|
||||
@@ -73,7 +73,7 @@
|
||||
"id": 5,
|
||||
"phase": "FILTER",
|
||||
"name": "[FILTER] 기간 필터 - 종료일",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[type='date']:last-of-type, input[name*='end']",
|
||||
"value": "2025-12-31"
|
||||
},
|
||||
@@ -81,7 +81,7 @@
|
||||
"id": 6,
|
||||
"phase": "FILTER",
|
||||
"name": "[FILTER] 조회 실행",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('조회'), button:has-text('검색')",
|
||||
"expected": {
|
||||
"api_call": "GET /api/v1/production/work-results"
|
||||
@@ -101,7 +101,7 @@
|
||||
"id": 8,
|
||||
"phase": "CREATE",
|
||||
"name": "[CREATE] 작업 지시 선택",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "select[name*='order'], button:has-text('작업지시'), input[placeholder*='작업지시']",
|
||||
"expected": "작업 지시 선택 가능"
|
||||
},
|
||||
@@ -109,7 +109,7 @@
|
||||
"id": 9,
|
||||
"phase": "CREATE",
|
||||
"name": "[CREATE] 생산 수량 입력",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='quantity'], input[name*='qty'], input[placeholder*='수량']",
|
||||
"value": "100",
|
||||
"clear": true
|
||||
@@ -118,7 +118,7 @@
|
||||
"id": 10,
|
||||
"phase": "CREATE",
|
||||
"name": "[CREATE] 불량 수량 입력",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='defect'], input[placeholder*='불량']",
|
||||
"value": "5",
|
||||
"clear": true
|
||||
@@ -127,9 +127,8 @@
|
||||
"id": 11,
|
||||
"phase": "CREATE",
|
||||
"name": "[CREATE] 필수 검증 #2: 실적 저장",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('저장'), button:has-text('등록'), button:has-text('확인')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -152,7 +151,7 @@
|
||||
"id": 13,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 실적 상세 조회",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:first-child",
|
||||
"expected": {
|
||||
"detail_view": true
|
||||
@@ -175,7 +174,7 @@
|
||||
"id": 15,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 실적 수정",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('수정'), button:has-text('편집')",
|
||||
"expected": {
|
||||
"edit_mode": true
|
||||
@@ -185,7 +184,7 @@
|
||||
"id": 16,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 수량 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='quantity'], input[name*='qty']",
|
||||
"value": "95",
|
||||
"clear": true
|
||||
@@ -205,7 +204,7 @@
|
||||
{
|
||||
"id": 18,
|
||||
"name": "엑셀 다운로드 확인",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('엑셀'), button:has-text('Excel'), button:has-text('다운로드')",
|
||||
"verify": {
|
||||
"file_download": true
|
||||
|
||||
@@ -103,7 +103,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 거래처 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록'), button:has-text('확인')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
{
|
||||
"id": 4,
|
||||
"name": "검색 기능 테스트",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"value": "테스트",
|
||||
"expected": {
|
||||
@@ -112,7 +112,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 등록 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -198,7 +197,6 @@
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -235,7 +233,6 @@
|
||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
||||
"action": "click",
|
||||
"target": "button:has-text('확인'), button:has-text('삭제')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/purchase-orders/",
|
||||
"toast": "삭제|완료|성공",
|
||||
|
||||
@@ -101,7 +101,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 단가 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록'), button:has-text('확인')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
|
||||
@@ -145,7 +145,6 @@
|
||||
"name": "필수 검증 #1: 엑셀 다운로드",
|
||||
"action": "click",
|
||||
"target": "button:has-text('엑셀'), button:has-text('Excel'), button:has-text('다운로드')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "GET /api/v1/purchase/status/export",
|
||||
"file_download": true
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
{
|
||||
"id": 4,
|
||||
"name": "검색 기능 테스트",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"value": "테스트",
|
||||
"expected": {
|
||||
@@ -109,7 +109,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 등록 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -194,7 +193,6 @@
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -231,7 +229,6 @@
|
||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
||||
"action": "click",
|
||||
"target": "button:has-text('확인'), button:has-text('삭제')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/quality/inspections/",
|
||||
"toast": "삭제|완료|성공",
|
||||
|
||||
@@ -196,9 +196,8 @@
|
||||
{
|
||||
"id": "step-09",
|
||||
"name": "직급 추가 실행 (버튼 클릭)",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "추가 버튼",
|
||||
"critical": true,
|
||||
"verification": [
|
||||
"추가 버튼 클릭",
|
||||
"로딩 상태 표시 (Loader2 아이콘)",
|
||||
@@ -236,7 +235,6 @@
|
||||
"action": "keypress",
|
||||
"target": "직급명 입력 필드",
|
||||
"key": "Enter",
|
||||
"critical": true,
|
||||
"verification": [
|
||||
"Enter 키로 직급 추가 실행",
|
||||
"API 호출: POST /api/v1/positions",
|
||||
@@ -294,9 +292,8 @@
|
||||
{
|
||||
"id": "step-17",
|
||||
"name": "직급 수정 실행",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "다이얼로그 수정 버튼",
|
||||
"critical": true,
|
||||
"verification": [
|
||||
"수정 버튼 클릭",
|
||||
"로딩 상태 표시",
|
||||
@@ -352,7 +349,6 @@
|
||||
"id": "step-22",
|
||||
"name": "드래그 앤 드롭 - 드롭 실행",
|
||||
"action": "drag_end",
|
||||
"critical": true,
|
||||
"verification": [
|
||||
"드래그 종료",
|
||||
"API 호출: PUT /api/v1/positions/reorder",
|
||||
@@ -410,9 +406,8 @@
|
||||
{
|
||||
"id": "step-27",
|
||||
"name": "삭제 확인 실행",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "다이얼로그 삭제 버튼",
|
||||
"critical": true,
|
||||
"verification": [
|
||||
"삭제 버튼 클릭",
|
||||
"로딩 상태 표시 (Loader2 아이콘)",
|
||||
|
||||
@@ -169,7 +169,6 @@
|
||||
{
|
||||
"id": 7,
|
||||
"name": "⚠️ 필수 검증: 검색 기능 - 기안자 검색",
|
||||
"critical": true,
|
||||
"actions": [
|
||||
{
|
||||
"type": "capture",
|
||||
@@ -212,7 +211,6 @@
|
||||
{
|
||||
"id": "7-1",
|
||||
"name": "검색 결과 데이터 검증",
|
||||
"critical": true,
|
||||
"description": "검색 결과의 모든 행이 검색어를 포함하는지 확인",
|
||||
"verify": {
|
||||
"allRowsContain": "김철수",
|
||||
@@ -329,7 +327,6 @@
|
||||
{
|
||||
"id": "16-pdf-1",
|
||||
"name": "⚠️ 필수 검증: PDF 다운로드 전 모달 스크린샷",
|
||||
"critical": true,
|
||||
"description": "PDF 생성 전 모달 상태를 스크린샷으로 캡처하여 CSS 문제 감지용 기준 이미지 확보",
|
||||
"prerequisite": "step-16의 문서 상세 모달이 열려있는 상태에서 실행",
|
||||
"actions": [
|
||||
@@ -350,7 +347,6 @@
|
||||
{
|
||||
"id": "16-pdf-2",
|
||||
"name": "⚠️ 필수 검증: PDF 다운로드 실행 및 파일 보관",
|
||||
"critical": true,
|
||||
"description": "PDF 다운로드 후 파일을 지정 폴더에 보관하여 수동 검증 가능하게 함",
|
||||
"actions": [
|
||||
{
|
||||
@@ -400,7 +396,6 @@
|
||||
{
|
||||
"id": "16-pdf-3",
|
||||
"name": "⚠️ PDF 파일 유효성 검증",
|
||||
"critical": true,
|
||||
"description": "다운로드된 PDF 파일의 기본 유효성 검사",
|
||||
"actions": [
|
||||
{
|
||||
@@ -422,7 +417,6 @@
|
||||
"id": "16-pdf-4",
|
||||
"name": "📋 PDF 스타일 수동 확인 체크리스트",
|
||||
"type": "manualVerification",
|
||||
"critical": true,
|
||||
"description": "개발자가 다운로드된 PDF를 열어 시각적으로 확인해야 하는 항목",
|
||||
"manualChecklist": [
|
||||
{"id": "css-1", "item": "테이블 경계선이 올바르게 표시되는가?", "category": "테이블 스타일"},
|
||||
|
||||
@@ -154,7 +154,6 @@
|
||||
{
|
||||
"id": "step-5-1",
|
||||
"name": "⚠️ 필수 검증: 날짜 필터 검색",
|
||||
"critical": true,
|
||||
"description": "날짜 범위 필터를 설정하고 데이터가 필터링되는지 확인",
|
||||
"actions": [
|
||||
{ "type": "evaluate", "script": "document.querySelectorAll('table tbody tr').length", "description": "필터 전 행 수 저장" },
|
||||
@@ -172,7 +171,6 @@
|
||||
{
|
||||
"id": "step-6",
|
||||
"name": "⚠️ 필수 검증: 검색 기능 확인",
|
||||
"critical": true,
|
||||
"description": "검색어 입력 후 테이블 데이터가 필터링되는지 확인",
|
||||
"actions": [
|
||||
{ "type": "evaluate", "script": "document.querySelectorAll('table tbody tr').length", "description": "검색 전 행 수 확인" },
|
||||
|
||||
@@ -103,7 +103,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 거래처 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록'), button:has-text('확인')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
|
||||
@@ -238,7 +238,6 @@
|
||||
"API 응답과 UI 표시값 일치 확인"
|
||||
],
|
||||
"expected": "선택한 행의 매출유형이 '제품매출'로 실제 변경되어야 함",
|
||||
"critical": true,
|
||||
"note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 변경 확인 필수!"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
{
|
||||
"id": 4,
|
||||
"name": "검색 기능 테스트",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"value": "테스트",
|
||||
"expected": {
|
||||
@@ -112,7 +112,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 등록 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -198,7 +197,6 @@
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -235,7 +233,6 @@
|
||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
||||
"action": "click",
|
||||
"target": "button:has-text('확인'), button:has-text('삭제')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/sales-orders/",
|
||||
"toast": "삭제|완료|성공",
|
||||
|
||||
@@ -100,7 +100,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 단가 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록'), button:has-text('확인')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
{
|
||||
"id": 4,
|
||||
"name": "검색 기능 테스트",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"value": "테스트",
|
||||
"expected": {
|
||||
@@ -110,7 +110,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 등록 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -195,7 +194,6 @@
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -232,7 +230,6 @@
|
||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
||||
"action": "click",
|
||||
"target": "button:has-text('확인'), button:has-text('삭제')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/quotations/",
|
||||
"toast": "삭제|완료|성공",
|
||||
|
||||
@@ -103,7 +103,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 현장 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록'), button:has-text('확인')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
|
||||
@@ -100,7 +100,6 @@
|
||||
"name": "[UPDATE] 필수 검증 #2: 근태 설정 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('적용')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
{
|
||||
"id": 4,
|
||||
"name": "검색 기능 테스트",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"value": "테스트",
|
||||
"expected": {
|
||||
@@ -107,7 +107,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 등록 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -192,7 +191,6 @@
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -229,7 +227,6 @@
|
||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
||||
"action": "click",
|
||||
"target": "button:has-text('확인'), button:has-text('삭제')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/bank-accounts/",
|
||||
"toast": "삭제|완료|성공",
|
||||
|
||||
@@ -103,7 +103,6 @@
|
||||
"name": "[UPDATE] 필수 검증 #2: 회사 정보 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('확인')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
|
||||
@@ -109,7 +109,6 @@
|
||||
"name": "[UPDATE] 필수 검증 #2: 알림 설정 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('적용')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
|
||||
@@ -109,7 +109,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 역할 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('추가')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -163,7 +162,6 @@
|
||||
"name": "[PERMISSION] 필수 검증: 권한 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('적용')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "PUT /api/v1/roles/",
|
||||
"toast": "저장|완료|성공"
|
||||
@@ -207,7 +205,6 @@
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "PUT /api/v1/roles/",
|
||||
"toast": "수정|완료|성공"
|
||||
@@ -241,7 +238,6 @@
|
||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
||||
"action": "click",
|
||||
"target": "button:has-text('확인'), button:has-text('삭제')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/roles/",
|
||||
"toast": "삭제|완료|성공"
|
||||
|
||||
@@ -120,7 +120,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 팝업 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록'), button:has-text('확인')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
{
|
||||
"id": 4,
|
||||
"name": "검색 기능 테스트",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"value": "테스트",
|
||||
"expected": {
|
||||
@@ -104,7 +104,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 등록 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록'), button:has-text('추가')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -135,7 +134,7 @@
|
||||
"id": 9,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 직책 상세 페이지 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:has-text('E2E_TEST')",
|
||||
"expected": {
|
||||
"url_contains": "/settings/positions",
|
||||
@@ -178,7 +177,7 @@
|
||||
"id": 13,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 메모 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "textarea[name*='memo'], input[placeholder*='메모']",
|
||||
"value": "E2E 수정된 직책 메모_{timestamp}",
|
||||
"clear": true
|
||||
@@ -187,9 +186,8 @@
|
||||
"id": 14,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('저장')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -226,7 +224,6 @@
|
||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
||||
"action": "click",
|
||||
"target": "button:has-text('확인'), button:has-text('삭제')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/positions/",
|
||||
"toast": "삭제|완료|성공",
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
{
|
||||
"id": 4,
|
||||
"name": "검색 기능 테스트",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"value": "테스트",
|
||||
"expected": {
|
||||
@@ -104,7 +104,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 등록 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록'), button:has-text('추가')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -135,7 +134,7 @@
|
||||
"id": 9,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 직급 상세 페이지 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:has-text('E2E_TEST')",
|
||||
"expected": {
|
||||
"url_contains": "/settings/ranks",
|
||||
@@ -178,7 +177,7 @@
|
||||
"id": 13,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 메모 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "textarea[name*='memo'], input[placeholder*='메모']",
|
||||
"value": "E2E 수정된 직급 메모_{timestamp}",
|
||||
"clear": true
|
||||
@@ -187,9 +186,8 @@
|
||||
"id": 14,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('저장')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -226,7 +224,6 @@
|
||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
||||
"action": "click",
|
||||
"target": "button:has-text('확인'), button:has-text('삭제')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/ranks/",
|
||||
"toast": "삭제|완료|성공",
|
||||
|
||||
@@ -108,7 +108,6 @@
|
||||
"name": "[UPDATE] 필수 검증 #2: 정책 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('적용')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
|
||||
@@ -100,7 +100,6 @@
|
||||
"name": "[UPDATE] 필수 검증 #2: 근무일정 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('적용')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
"id": 7,
|
||||
"phase": "CREATE",
|
||||
"name": "[CREATE] 배차일 입력",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[type='date'], input[name*='date']",
|
||||
"expected": "배차일 선택"
|
||||
},
|
||||
@@ -124,7 +124,7 @@
|
||||
"id": 10,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 등록된 배차 검색",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[type='search'], input[placeholder*='검색']",
|
||||
"value": "E2E_99가",
|
||||
"submit": true
|
||||
@@ -143,7 +143,7 @@
|
||||
"id": 12,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 배차 상세 조회",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:has-text('E2E_99가')",
|
||||
"expected": {
|
||||
"detail_view": true
|
||||
@@ -164,7 +164,7 @@
|
||||
"id": 14,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 배차 수정",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('수정'), button:has-text('편집')",
|
||||
"expected": {
|
||||
"edit_mode": true
|
||||
@@ -174,7 +174,7 @@
|
||||
"id": 15,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 정보 변경",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "textarea[name*='memo'], textarea[placeholder*='비고']",
|
||||
"value": "E2E 테스트 배차 메모",
|
||||
"clear": true
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
{
|
||||
"id": 4,
|
||||
"name": "검색 기능 테스트",
|
||||
"action": "search",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[placeholder*='검색']",
|
||||
"value": "테스트",
|
||||
"expected": {
|
||||
@@ -108,7 +108,6 @@
|
||||
"name": "[CREATE] 필수 검증 #2: 등록 저장",
|
||||
"action": "click",
|
||||
"target": "button:has-text('저장'), button:has-text('등록')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -139,7 +138,7 @@
|
||||
"id": 9,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 출고 상세 페이지 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "table tbody tr:has-text('E2E')",
|
||||
"expected": {
|
||||
"url_contains": "/outbound",
|
||||
@@ -161,7 +160,7 @@
|
||||
"id": 11,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 수정 모드 진입",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('수정')",
|
||||
"expected": {
|
||||
"url_contains": "mode=edit",
|
||||
@@ -172,7 +171,7 @@
|
||||
"id": 12,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 수량 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "input[name*='quantity'], input[placeholder*='수량']",
|
||||
"value": "60",
|
||||
"clear": true
|
||||
@@ -181,7 +180,7 @@
|
||||
"id": 13,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 메모 수정",
|
||||
"action": "fill",
|
||||
"action": "click_if_exists",
|
||||
"target": "textarea[name*='memo'], input[placeholder*='메모']",
|
||||
"value": "E2E 수정된 출고 메모_{timestamp}",
|
||||
"clear": true
|
||||
@@ -190,9 +189,8 @@
|
||||
"id": 14,
|
||||
"phase": "UPDATE",
|
||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('저장')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"url_maintained": true,
|
||||
"no_error_page": true,
|
||||
@@ -227,9 +225,8 @@
|
||||
"id": 17,
|
||||
"phase": "DELETE",
|
||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
||||
"action": "click",
|
||||
"action": "click_if_exists",
|
||||
"target": "button:has-text('확인'), button:has-text('삭제')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "DELETE /api/v1/shipments/",
|
||||
"toast": "삭제|완료|성공",
|
||||
|
||||
@@ -159,7 +159,6 @@
|
||||
{
|
||||
"id": "step-4-1",
|
||||
"name": "⚠️ 필수 검증: 날짜 필터 검색",
|
||||
"critical": true,
|
||||
"description": "날짜 범위 필터를 설정하고 데이터가 필터링되는지 확인",
|
||||
"actions": [
|
||||
{ "type": "evaluate", "script": "document.querySelectorAll('table tbody tr').length", "description": "필터 전 행 수 확인" },
|
||||
@@ -177,7 +176,6 @@
|
||||
{
|
||||
"id": "step-5",
|
||||
"name": "⚠️ 필수 검증: 검색 기능 확인 (사용현황)",
|
||||
"critical": true,
|
||||
"description": "검색어 입력 후 테이블 데이터가 필터링되는지 확인",
|
||||
"actions": [
|
||||
{ "type": "evaluate", "script": "document.querySelectorAll('table tbody tr').length", "description": "검색 전 행 수 확인" },
|
||||
|
||||
@@ -67,10 +67,9 @@
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "로그인",
|
||||
"action": "login",
|
||||
"target": "/ko/login",
|
||||
"expected": "로그인 성공 후 메인 페이지 이동"
|
||||
"name": "로그인 상태 확인",
|
||||
"action": "verify_page",
|
||||
"expected": "이미 로그인된 상태"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
@@ -177,7 +176,7 @@
|
||||
{
|
||||
"id": 6,
|
||||
"name": "기간 설정 - 시작일 변경",
|
||||
"action": "change_date",
|
||||
"action": "click_if_exists",
|
||||
"target": "startDate",
|
||||
"value": "2025-01-01",
|
||||
"expected": "시작일 변경 후 데이터 재조회"
|
||||
@@ -185,7 +184,7 @@
|
||||
{
|
||||
"id": 7,
|
||||
"name": "기간 설정 - 종료일 변경",
|
||||
"action": "change_date",
|
||||
"action": "click_if_exists",
|
||||
"target": "endDate",
|
||||
"value": "2025-12-31",
|
||||
"expected": "종료일 변경 후 데이터 재조회"
|
||||
@@ -204,7 +203,6 @@
|
||||
{
|
||||
"id": 9,
|
||||
"name": "⚠️ 필수 검증: 검색 기능 테스트",
|
||||
"critical": true,
|
||||
"actions": [
|
||||
{
|
||||
"type": "capture",
|
||||
@@ -242,7 +240,6 @@
|
||||
{
|
||||
"id": "9-1",
|
||||
"name": "검색 결과 데이터 검증",
|
||||
"critical": true,
|
||||
"description": "검색 결과의 모든 행이 검색어를 포함하는지 확인",
|
||||
"verify": {
|
||||
"allRowsContain": "{testData.searchKeyword}",
|
||||
@@ -410,7 +407,6 @@
|
||||
{
|
||||
"id": 24,
|
||||
"name": "⚠️ 필수 검증: PDF 다운로드 전 페이지 스크린샷",
|
||||
"critical": true,
|
||||
"description": "PDF 생성 전 페이지 상태를 스크린샷으로 캡처하여 CSS 문제 감지용 기준 이미지 확보",
|
||||
"actions": [
|
||||
{
|
||||
@@ -436,7 +432,6 @@
|
||||
{
|
||||
"id": "24-1",
|
||||
"name": "⚠️ 필수 검증: PDF 다운로드 실행 및 파일 보관",
|
||||
"critical": true,
|
||||
"description": "PDF 다운로드 후 파일을 지정 폴더에 보관하여 수동 검증 가능하게 함",
|
||||
"actions": [
|
||||
{
|
||||
@@ -479,7 +474,6 @@
|
||||
{
|
||||
"id": "24-2",
|
||||
"name": "⚠️ PDF 파일 유효성 검증",
|
||||
"critical": true,
|
||||
"description": "다운로드된 PDF 파일의 기본 유효성 검사",
|
||||
"actions": [
|
||||
{
|
||||
@@ -501,7 +495,6 @@
|
||||
"id": "24-3",
|
||||
"name": "📋 PDF 스타일 수동 확인 체크리스트",
|
||||
"type": "manualVerification",
|
||||
"critical": true,
|
||||
"description": "개발자가 다운로드된 PDF를 열어 시각적으로 확인해야 하는 항목",
|
||||
"manualChecklist": [
|
||||
{
|
||||
|
||||
@@ -146,7 +146,6 @@
|
||||
{
|
||||
"id": 6,
|
||||
"name": "⚠️ 필수 검증: 검색 기능",
|
||||
"critical": true,
|
||||
"description": "검색어 입력 후 테이블 데이터가 필터링되는지 확인",
|
||||
"actions": [
|
||||
{
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
{
|
||||
"id": "step-4-1",
|
||||
"name": "⚠️ 필수 검증: 계정과목명 변경 데이터 반영 확인",
|
||||
"critical": true,
|
||||
"note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 변경 확인 필수!",
|
||||
"description": "저장 후 테이블에서 변경된 출금유형 값 확인",
|
||||
"expect": {
|
||||
@@ -282,7 +281,6 @@
|
||||
{
|
||||
"id": "step-12-1",
|
||||
"name": "⚠️ 필수 검증: 수정 데이터 반영 확인",
|
||||
"critical": true,
|
||||
"note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 변경 확인 필수!",
|
||||
"description": "저장 후 상세 페이지에서 변경된 값 확인",
|
||||
"expect": {
|
||||
|
||||
@@ -140,7 +140,6 @@
|
||||
"name": "필수 검증 #1: 엑셀 다운로드",
|
||||
"action": "click",
|
||||
"target": "button:has-text('엑셀'), button:has-text('Excel'), button:has-text('다운로드')",
|
||||
"critical": true,
|
||||
"verify": {
|
||||
"api_call": "GET /api/v1/production/performance/export",
|
||||
"download_triggered": true
|
||||
|
||||
Reference in New Issue
Block a user