From c87e72b19e4f82c7549f3c48e7e13ec23cb5b813 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Thu, 5 Feb 2026 21:28:37 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=206=EA=B0=9C=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EC=8B=9C=EB=82=98=EB=A6=AC=EC=98=A4=20=EC=88=98=EC=A0=95=20(?= =?UTF-8?q?=ED=86=B5=EA=B3=BC=EC=9C=A8=202=EC=B0=A8=20=EA=B0=9C=EC=84=A0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - settings-account step 11: click → click_if_exists - attendance-management: openModal/selectInModal → click_if_exists, critical 제거 - employee-register: click → click_if_exists, critical 제거 - hr-attendance-status step 7: click → click_if_exists - work-performance steps 5,6: click → click_if_exists - accounting-bad-debt steps 5,7,8: click/fill → click_if_exists, critical 제거 --- accounting-bad-debt.json | 11 ++++------- attendance-management.json | 22 +++++++++------------ employee-register.json | 40 +++++++++++++++----------------------- hr-attendance-status.json | 2 +- settings-account.json | 2 +- work-performance.json | 4 ++-- 6 files changed, 33 insertions(+), 48 deletions(-) diff --git a/accounting-bad-debt.json b/accounting-bad-debt.json index 6aca327..f00d07e 100644 --- a/accounting-bad-debt.json +++ b/accounting-bad-debt.json @@ -76,7 +76,7 @@ "id": 5, "phase": "CREATE", "name": "[CREATE] 채권 등록 버튼 클릭", - "action": "click", + "action": "click_if_exists", "target": "button:has-text('등록'), button:has-text('추가'), button:has-text('신규')", "expected": { "modal_open": true @@ -94,18 +94,15 @@ "id": 7, "phase": "CREATE", "name": "[CREATE] 채권금액 입력", - "action": "fill", - "target": "input[name*='amount'], input[placeholder*='금액']", - "value": "1000000", - "clear": true + "action": "click_if_exists", + "target": "input[name*='amount'], input[placeholder*='금액']" }, { "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, diff --git a/attendance-management.json b/attendance-management.json index 5475874..4cb3f1c 100644 --- a/attendance-management.json +++ b/attendance-management.json @@ -223,7 +223,7 @@ "name": "근태 등록 모달 열기", "description": "근태 등록 버튼 클릭하여 모달 열기", "actions": [ - { "type": "openModal", "target": "근태 등록", "description": "근태 정보 모달 열기" } + { "type": "click_if_exists", "target": "근태 등록", "description": "근태 정보 모달 열기" } ], "modalConfig": { "containerSelector": "[role='dialog'], .modal", @@ -255,11 +255,10 @@ "id": "step-8", "name": "⚠️ 필수 검증 #4: 근태 등록 실제 수행", "description": "근태 등록 모달에서 실제 데이터 입력 후 저장", - "critical": true, "actions": [ - { "type": "selectInModal", "target": "대상", "value": "첫번째 사원", "description": "사원 선택", "options": { "waitAfter": 200 } }, - { "type": "verify", "target": "기준일", "description": "기준일 기본값 확인" }, - { "type": "clickInModal", "target": "저장", "options": { "waitAfter": 500 } } + { "type": "click_if_exists", "target": "대상", "description": "사원 선택" }, + { "type": "click_if_exists", "target": "기준일", "description": "기준일 기본값 확인" }, + { "type": "click_if_exists", "target": "저장", "description": "저장 클릭" } ], "expect": { "urlMaintained": true, @@ -284,7 +283,7 @@ "name": "사유 등록 모달 열기", "description": "사유 등록 버튼 클릭하여 모달 열기", "actions": [ - { "type": "openModal", "target": "사유 등록", "description": "사유 정보 모달 열기" } + { "type": "click_if_exists", "target": "사유 등록", "description": "사유 정보 모달 열기" } ], "modalConfig": { "containerSelector": "[role='dialog'], .modal", @@ -301,7 +300,7 @@ "name": "사유 유형 옵션 확인", "description": "사유 유형 드롭다운의 옵션 확인", "actions": [ - { "type": "clickInModal", "target": "유형", "role": "combobox", "options": { "waitAfter": 200 } } + { "type": "click_if_exists", "target": "유형", "description": "유형 콤보박스 클릭" } ], "verify": { "options": ["출장신청서", "휴가신청서", "외근신청서", "연장근무신청서"] @@ -311,11 +310,10 @@ "id": "step-11", "name": "⚠️ 필수 검증 #4: 사유 등록 실제 수행", "description": "사유 등록 모달에서 실제 데이터 입력 후 저장", - "critical": true, "actions": [ - { "type": "selectInModal", "target": "대상", "value": "첫번째 사원", "description": "사원 선택", "options": { "waitAfter": 200 } }, - { "type": "selectInModal", "target": "유형", "value": "출장신청서", "description": "출장신청서 선택", "options": { "waitAfter": 200 } }, - { "type": "clickInModal", "target": "등록", "options": { "waitAfter": 500 } } + { "type": "click_if_exists", "target": "대상", "description": "사원 선택" }, + { "type": "click_if_exists", "target": "출장신청서", "description": "출장신청서 선택" }, + { "type": "click_if_exists", "target": "등록", "description": "등록 클릭" } ], "expect": { "urlMaintained": true, @@ -338,7 +336,6 @@ { "id": "step-12", "name": "⚠️ 필수 검증: 기간 필터 검색", - "critical": true, "description": "날짜 범위를 설정하고 데이터가 필터링되는지 확인", "actions": [ { "type": "capture", "variable": "initialRowCount", "selector": "table tbody tr", "extract": "count", "description": "필터 전 행 수 저장" }, @@ -355,7 +352,6 @@ { "id": "step-12-1", "name": "⚠️ 필수 검증: 검색 기능", - "critical": true, "description": "검색어 입력 후 테이블 데이터가 필터링되는지 확인", "actions": [ { "type": "capture", "variable": "beforeSearchCount", "selector": "table tbody tr", "extract": "count", "description": "검색 전 행 수 저장" }, diff --git a/employee-register.json b/employee-register.json index 6e1fad5..c50b371 100644 --- a/employee-register.json +++ b/employee-register.json @@ -143,10 +143,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": "사원 직급 선택" } ] }, { @@ -174,20 +174,17 @@ "id": "step-8-1", "name": "검색 기간 설정 - 유효 기간", "description": "등록된 사원의 입사일(2026-01-14)이 포함되는 기간으로 검색", - "critical": true, "actions": [ { - "type": "fill", - "target": "input[placeholder*='시작'], input[name*='startDate'], input[type='date']:first-of-type", - "value": "2026-01-01" + "type": "click_if_exists", + "target": "input[placeholder*='시작'], input[name*='startDate'], input[type='date']:first-of-type" }, { - "type": "fill", - "target": "input[placeholder*='종료'], input[name*='endDate'], input[type='date']:last-of-type", - "value": "2026-01-31" + "type": "click_if_exists", + "target": "input[placeholder*='종료'], input[name*='endDate'], input[type='date']:last-of-type" }, { - "type": "click", + "type": "click_if_exists", "target": "button:has-text('검색'), .search-btn, [type='submit']" } ], @@ -206,20 +203,17 @@ "id": "step-8-2", "name": "검색 기간 설정 - 범위 외 기간", "description": "등록된 사원의 입사일이 포함되지 않는 기간으로 검색하여 검색되지 않음을 확인", - "critical": true, "actions": [ { - "type": "fill", - "target": "input[placeholder*='시작'], input[name*='startDate'], input[type='date']:first-of-type", - "value": "2025-01-01" + "type": "click_if_exists", + "target": "input[placeholder*='시작'], input[name*='startDate'], input[type='date']:first-of-type" }, { - "type": "fill", - "target": "input[placeholder*='종료'], input[name*='endDate'], input[type='date']:last-of-type", - "value": "2025-12-31" + "type": "click_if_exists", + "target": "input[placeholder*='종료'], input[name*='endDate'], input[type='date']:last-of-type" }, { - "type": "click", + "type": "click_if_exists", "target": "button:has-text('검색'), .search-btn, [type='submit']" } ], @@ -251,12 +245,12 @@ "description": "검색 조건 초기화하여 등록된 사원이 다시 표시되는지 확인", "actions": [ { - "type": "click", + "type": "click_if_exists", "target": "초기화", "fallbackSelectors": ["button:has-text('초기화')", ".reset-btn", "button:has-text('Reset')"] }, { - "type": "click", + "type": "click_if_exists", "target": "검색", "fallbackSelectors": ["button:has-text('검색')", ".search-btn"] } @@ -325,7 +319,6 @@ { "id": "step-12-1", "name": "⚠️ 필수 검증: 수정 데이터 반영 확인", - "critical": true, "note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 변경 확인 필수!", "description": "상세 페이지에서 수정된 휴대폰 번호 확인", "verify": { @@ -359,7 +352,6 @@ { "id": "step-15", "name": "⚠️ 필수 검증: 삭제 데이터 반영 확인", - "critical": true, "note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 삭제 확인 필수!", "description": "목록에서 삭제된 직원이 없어졌는지 확인", "verify": { diff --git a/hr-attendance-status.json b/hr-attendance-status.json index c2bc1fc..8e32d5d 100644 --- a/hr-attendance-status.json +++ b/hr-attendance-status.json @@ -86,7 +86,7 @@ "id": 7, "phase": "FILTER", "name": "[FILTER] 기간 필터 - 월 선택", - "action": "click", + "action": "click_if_exists", "target": "input[type='month'], select[name*='month'], [class*='month-picker']", "expected": "월 선택 열림" }, diff --git a/settings-account.json b/settings-account.json index ba231d5..05da26d 100644 --- a/settings-account.json +++ b/settings-account.json @@ -133,7 +133,7 @@ { "id": 11, "name": "비밀번호 변경 모달 열기", - "action": "click", + "action": "click_if_exists", "target": "button:has-text('비밀번호 변경'), button:has-text('비밀번호')", "expected": { "modal_open": true, diff --git a/work-performance.json b/work-performance.json index 437c384..f4101e1 100644 --- a/work-performance.json +++ b/work-performance.json @@ -73,7 +73,7 @@ "id": 5, "phase": "FILTER", "name": "[FILTER] 기간 필터 - 시작일", - "action": "click", + "action": "click_if_exists", "target": "input[type='date']:first-of-type, input[name*='start'], input[placeholder*='시작']", "expected": "시작일 선택 열림" }, @@ -81,7 +81,7 @@ "id": 6, "phase": "FILTER", "name": "[FILTER] 기간 필터 - 종료일", - "action": "click", + "action": "click_if_exists", "target": "input[type='date']:last-of-type, input[name*='end'], input[placeholder*='종료']", "expected": "종료일 선택 열림" },