diff --git a/e2e/results/hotfix/E2E_FULL_TEST_SUMMARY_2026-02-11_16-06-27.md b/e2e/results/hotfix/E2E_FULL_TEST_SUMMARY_2026-02-11_16-06-27.md new file mode 100644 index 0000000..81eba37 --- /dev/null +++ b/e2e/results/hotfix/E2E_FULL_TEST_SUMMARY_2026-02-11_16-06-27.md @@ -0,0 +1,77 @@ +# E2E 전체 테스트 결과 요약 + +**실행 시간**: 2026-02-11_16-06-27 +**총 소요 시간**: 19.6분 +**전체 시나리오**: 68개 | **성공**: 68개 | **실패**: 0개 + +## 시나리오별 결과 +| # | 시나리오 | 결과 | 스텝 | 성공 | 실패 | 소요(초) | +|---|---------|------|------|------|------|---------| +| 1 | 악성채권추심관리 테스트 | ✅ | 24 | 22 | 0 | 11.5 | +| 2 | 입출금계좌조회 테스트 | ✅ | 19 | 15 | 0 | 12.4 | +| 3 | 어음관리 테스트 | ✅ | 24 | 16 | 0 | 22.5 | +| 4 | 카드내역조회 테스트 | ✅ | 19 | 15 | 0 | 12.4 | +| 5 | 회계거래처관리 테스트 | ✅ | 23 | 18 | 0 | 19.7 | +| 6 | 입금관리 테스트 | ✅ | 25 | 17 | 0 | 22.7 | +| 7 | 지출예상내역서 테스트 | ✅ | 19 | 14 | 0 | 12.8 | +| 8 | 결제내역 테스트 | ✅ | 19 | 15 | 0 | 14.3 | +| 9 | 매입관리 테스트 | ✅ | 18 | 14 | 0 | 14.6 | +| 10 | 미수금현황 테스트 | ✅ | 19 | 16 | 0 | 12.5 | +| 11 | 매출관리 테스트 | ✅ | 18 | 14 | 0 | 14.6 | +| 12 | 출금관리 테스트 | ✅ | 25 | 17 | 0 | 22.5 | +| 13 | 결재함 E2E 테스트 | ✅ | 20 | 12 | 0 | 46.2 | +| 14 | 근태현황 출퇴근 테스트 | ✅ | 17 | 12 | 0 | 33.7 | +| 15 | 게시판 관리 테스트 | ✅ | 22 | 22 | 0 | 12.4 | +| 16 | 설정 - 회사정보 | ✅ | 31 | 14 | 0 | 48.5 | +| 17 | 이벤트 게시판 테스트 | ✅ | 19 | 15 | 0 | 13.8 | +| 18 | FAQ 테스트 | ✅ | 16 | 12 | 0 | 12.1 | +| 19 | 공지사항 테스트 | ✅ | 19 | 15 | 0 | 14.9 | +| 20 | 부서관리 테스트 | ✅ | 16 | 12 | 0 | 13.9 | +| 21 | 입금관리 테스트 | ✅ | 21 | 20 | 0 | 29.3 | +| 22 | 기안함 테스트 | ✅ | 17 | 15 | 0 | 12.8 | +| 23 | 직원 등록 테스트 | ✅ | 21 | 21 | 0 | 10.4 | +| 24 | 자유게시판 E2E 테스트 | ✅ | 22 | 22 | 0 | 14.4 | +| 25 | 근태관리 테스트 | ✅ | 14 | 14 | 0 | 11.2 | +| 26 | 근태현황 테스트 | ✅ | 19 | 14 | 0 | 13.0 | +| 27 | 카드관리 테스트 | ✅ | 22 | 22 | 0 | 14.4 | +| 28 | 부서관리 테스트 | ✅ | 14 | 14 | 0 | 11.0 | +| 29 | 사원관리 테스트 | ✅ | 22 | 22 | 0 | 14.1 | +| 30 | 급여관리 테스트 | ✅ | 22 | 22 | 0 | 14.2 | +| 31 | 휴가관리 테스트 | ✅ | 25 | 18 | 0 | 21.0 | +| 32 | 재고현황 테스트 | ✅ | 12 | 12 | 0 | 15.1 | +| 33 | 품목관리 테스트 | ✅ | 16 | 11 | 0 | 21.6 | +| 34 | 품목기준관리 테스트 | ✅ | 14 | 13 | 0 | 11.6 | +| 35 | 로그인 테스트 (끝판왕) | ✅ | 24 | 22 | 0 | 13.3 | +| 36 | 입고관리 테스트 | ✅ | 25 | 17 | 0 | 20.8 | +| 37 | 재고현황 테스트 | ✅ | 19 | 16 | 0 | 11.1 | +| 38 | PDF 다운로드 전체 검사 | ✅ | 5 | 5 | 0 | 2.7 | +| 39 | 생산 현황판 테스트 | ✅ | 12 | 10 | 0 | 12.9 | +| 40 | 생산품목관리 테스트 | ✅ | 14 | 13 | 0 | 11.6 | +| 41 | 작업지시 관리 테스트 | ✅ | 25 | 23 | 0 | 12.9 | +| 42 | 작업실적 테스트 | ✅ | 23 | 19 | 0 | 17.7 | +| 43 | 작업자 화면 테스트 | ✅ | 14 | 13 | 0 | 11.6 | +| 44 | 품질인정심사 시스템 테스트 | ✅ | 14 | 14 | 0 | 10.6 | +| 45 | 제품검사관리 테스트 | ✅ | 25 | 17 | 0 | 20.3 | +| 46 | 입고관리 테스트 | ✅ | 9 | 9 | 0 | 12.2 | +| 47 | 참조함 E2E 테스트 | ✅ | 40 | 37 | 0 | 38.2 | +| 48 | 판매거래처관리 테스트 | ✅ | 24 | 17 | 0 | 22.0 | +| 49 | 매출관리 테스트 | ✅ | 54 | 49 | 0 | 31.8 | +| 50 | 수주관리 테스트 | ✅ | 25 | 19 | 0 | 17.1 | +| 51 | 단가관리 테스트 | ✅ | 27 | 24 | 0 | 15.5 | +| 52 | 견적관리 테스트 | ✅ | 25 | 17 | 0 | 21.0 | +| 53 | 계정정보 테스트 | ✅ | 16 | 14 | 0 | 12.3 | +| 54 | 근태설정 테스트 | ✅ | 16 | 13 | 0 | 11.0 | +| 55 | 계좌관리 테스트 | ✅ | 23 | 21 | 0 | 15.3 | +| 56 | 회사정보 테스트 | ✅ | 16 | 13 | 0 | 13.9 | +| 57 | 알림설정 테스트 | ✅ | 16 | 13 | 0 | 13.5 | +| 58 | 권한관리 테스트 | ✅ | 20 | 18 | 0 | 13.5 | +| 59 | 팝업관리 테스트 | ✅ | 23 | 21 | 0 | 14.9 | +| 60 | 직책관리 테스트 | ✅ | 12 | 11 | 0 | 12.0 | +| 61 | 직급관리 테스트 | ✅ | 12 | 11 | 0 | 11.9 | +| 62 | 구독관리 테스트 | ✅ | 16 | 12 | 0 | 13.7 | +| 63 | 휴가정책 테스트 | ✅ | 16 | 15 | 0 | 9.9 | +| 64 | 근무일정 테스트 | ✅ | 16 | 15 | 0 | 11.0 | +| 65 | 출고관리 테스트 | ✅ | 13 | 11 | 0 | 19.2 | +| 66 | 거래처원장 테스트 | ✅ | 34 | 30 | 0 | 21.6 | +| 67 | 거래처관리 테스트 | ✅ | 34 | 34 | 0 | 36.4 | +| 68 | 출금관리 테스트 | ✅ | 21 | 21 | 0 | 11.0 | diff --git a/e2e/results/hotfix/E2E_FULL_TEST_SUMMARY_2026-02-11_16-29-56.md b/e2e/results/hotfix/E2E_FULL_TEST_SUMMARY_2026-02-11_16-29-56.md new file mode 100644 index 0000000..2b6b43b --- /dev/null +++ b/e2e/results/hotfix/E2E_FULL_TEST_SUMMARY_2026-02-11_16-29-56.md @@ -0,0 +1,145 @@ +# E2E 전체 테스트 결과 요약 + +**실행 시간**: 2026-02-11_16-29-56 +**총 소요 시간**: 20.1분 +**전체 시나리오**: 68개 | **성공**: 54개 | **실패**: 14개 + +## 시나리오별 결과 +| # | 시나리오 | 결과 | 스텝 | 성공 | 실패 | 소요(초) | +|---|---------|------|------|------|------|---------| +| 1 | 악성채권추심관리 테스트 | ❌ | 24 | 21 | 1 | 12.4 | +| 2 | 입출금계좌조회 테스트 | ✅ | 19 | 15 | 0 | 13.1 | +| 3 | 어음관리 테스트 | ❌ | 24 | 15 | 3 | 24.4 | +| 4 | 카드내역조회 테스트 | ✅ | 19 | 15 | 0 | 12.3 | +| 5 | 회계거래처관리 테스트 | ❌ | 23 | 17 | 3 | 21.5 | +| 6 | 입금관리 테스트 | ❌ | 25 | 16 | 3 | 24.3 | +| 7 | 지출예상내역서 테스트 | ✅ | 19 | 14 | 0 | 12.6 | +| 8 | 결제내역 테스트 | ✅ | 19 | 15 | 0 | 14.3 | +| 9 | 매입관리 테스트 | ✅ | 18 | 14 | 0 | 14.6 | +| 10 | 미수금현황 테스트 | ✅ | 19 | 16 | 0 | 12.4 | +| 11 | 매출관리 테스트 | ✅ | 18 | 14 | 0 | 14.7 | +| 12 | 출금관리 테스트 | ❌ | 25 | 16 | 3 | 24.3 | +| 13 | 결재함 E2E 테스트 | ✅ | 20 | 12 | 0 | 46.3 | +| 14 | 근태현황 출퇴근 테스트 | ✅ | 17 | 12 | 0 | 33.5 | +| 15 | 게시판 관리 테스트 | ✅ | 22 | 22 | 0 | 12.5 | +| 16 | 설정 - 회사정보 | ✅ | 31 | 14 | 0 | 48.5 | +| 17 | 이벤트 게시판 테스트 | ✅ | 19 | 14 | 0 | 14.8 | +| 18 | FAQ 테스트 | ✅ | 16 | 12 | 0 | 12.1 | +| 19 | 공지사항 테스트 | ✅ | 19 | 15 | 0 | 14.7 | +| 20 | 부서관리 테스트 | ✅ | 16 | 12 | 0 | 13.9 | +| 21 | 입금관리 테스트 | ✅ | 21 | 20 | 0 | 29.2 | +| 22 | 기안함 테스트 | ✅ | 17 | 15 | 0 | 12.7 | +| 23 | 직원 등록 테스트 | ✅ | 21 | 21 | 0 | 10.3 | +| 24 | 자유게시판 E2E 테스트 | ✅ | 22 | 22 | 0 | 14.4 | +| 25 | 근태관리 테스트 | ✅ | 14 | 14 | 0 | 11.3 | +| 26 | 근태현황 테스트 | ✅ | 19 | 14 | 0 | 13.0 | +| 27 | 카드관리 테스트 | ✅ | 22 | 22 | 0 | 14.4 | +| 28 | 부서관리 테스트 | ✅ | 14 | 14 | 0 | 10.9 | +| 29 | 사원관리 테스트 | ✅ | 22 | 22 | 0 | 14.1 | +| 30 | 급여관리 테스트 | ✅ | 22 | 22 | 0 | 14.2 | +| 31 | 휴가관리 테스트 | ❌ | 25 | 16 | 3 | 24.0 | +| 32 | 재고현황 테스트 | ✅ | 12 | 12 | 0 | 15.3 | +| 33 | 품목관리 테스트 | ✅ | 16 | 11 | 0 | 21.7 | +| 34 | 품목기준관리 테스트 | ✅ | 14 | 13 | 0 | 11.6 | +| 35 | 로그인 테스트 (끝판왕) | ✅ | 24 | 22 | 0 | 13.1 | +| 36 | 입고관리 테스트 | ❌ | 25 | 16 | 3 | 22.8 | +| 37 | 재고현황 테스트 | ✅ | 19 | 16 | 0 | 11.3 | +| 38 | PDF 다운로드 전체 검사 | ✅ | 5 | 5 | 0 | 2.7 | +| 39 | 생산 현황판 테스트 | ✅ | 12 | 10 | 0 | 13.0 | +| 40 | 생산품목관리 테스트 | ✅ | 14 | 13 | 0 | 11.7 | +| 41 | 작업지시 관리 테스트 | ❌ | 25 | 20 | 3 | 15.9 | +| 42 | 작업실적 테스트 | ❌ | 23 | 18 | 1 | 18.6 | +| 43 | 작업자 화면 테스트 | ✅ | 14 | 13 | 0 | 11.7 | +| 44 | 품질인정심사 시스템 테스트 | ✅ | 14 | 14 | 0 | 10.7 | +| 45 | 제품검사관리 테스트 | ❌ | 25 | 15 | 4 | 23.4 | +| 46 | 입고관리 테스트 | ✅ | 9 | 9 | 0 | 12.2 | +| 47 | 참조함 E2E 테스트 | ✅ | 40 | 37 | 0 | 38.1 | +| 48 | 판매거래처관리 테스트 | ❌ | 24 | 17 | 2 | 22.7 | +| 49 | 매출관리 테스트 | ✅ | 54 | 49 | 0 | 31.8 | +| 50 | 수주관리 테스트 | ❌ | 25 | 17 | 4 | 20.0 | +| 51 | 단가관리 테스트 | ✅ | 27 | 24 | 0 | 15.5 | +| 52 | 견적관리 테스트 | ❌ | 25 | 15 | 4 | 23.9 | +| 53 | 계정정보 테스트 | ✅ | 16 | 14 | 0 | 12.4 | +| 54 | 근태설정 테스트 | ✅ | 16 | 13 | 0 | 11.1 | +| 55 | 계좌관리 테스트 | ✅ | 23 | 21 | 0 | 15.2 | +| 56 | 회사정보 테스트 | ✅ | 16 | 13 | 0 | 14.0 | +| 57 | 알림설정 테스트 | ✅ | 16 | 13 | 0 | 13.5 | +| 58 | 권한관리 테스트 | ✅ | 20 | 18 | 0 | 13.4 | +| 59 | 팝업관리 테스트 | ✅ | 23 | 21 | 0 | 15.1 | +| 60 | 직책관리 테스트 | ✅ | 12 | 11 | 0 | 11.9 | +| 61 | 직급관리 테스트 | ✅ | 12 | 11 | 0 | 11.9 | +| 62 | 구독관리 테스트 | ✅ | 16 | 12 | 0 | 13.6 | +| 63 | 휴가정책 테스트 | ✅ | 16 | 15 | 0 | 9.8 | +| 64 | 근무일정 테스트 | ❌ | 16 | 14 | 1 | 11.4 | +| 65 | 출고관리 테스트 | ✅ | 13 | 11 | 0 | 19.2 | +| 66 | 거래처원장 테스트 | ✅ | 34 | 30 | 0 | 21.7 | +| 67 | 거래처관리 테스트 | ✅ | 34 | 34 | 0 | 36.5 | +| 68 | 출금관리 테스트 | ✅ | 21 | 21 | 0 | 11.0 | + +## 실패 시나리오 상세 + +### ❌ 악성채권추심관리 테스트 (accounting-bad-debt) +- Step 18 ([UPDATE] 추심 메모 추가): Input not found: textarea[name*='memo'], textarea[placeholder*='메모'] + +### ❌ 어음관리 테스트 (accounting-bill) +- Step 17 ([UPDATE] 메모 수정): Input not found: textarea[name*='memo'], input[placeholder*='메모'] +- Step 21 ([DELETE] 삭제 버튼 클릭): Element not found: button:has-text('삭제') +- Step 22 ([DELETE] 필수 검증 #6: 삭제 확인): No dialog found + +### ❌ 회계거래처관리 테스트 (accounting-client) +- Step 17 ([UPDATE] 거래처 정보 수정): Input not found: input[name*='name'], input[placeholder*='거래처명'] +- Step 20 ([DELETE] 거래처 삭제): Element not found: button:has-text('삭제'), button:has-text('제거') +- Step 21 ([DELETE] 삭제 확인): No dialog found + +### ❌ 입금관리 테스트 (accounting-deposit) +- Step 18 ([UPDATE] 메모 수정): Input not found: textarea[name*='memo'], input[placeholder*='메모'] +- Step 22 ([DELETE] 삭제 버튼 클릭): Element not found: button:has-text('삭제') +- Step 23 ([DELETE] 필수 검증 #6: 삭제 확인): No dialog found + +### ❌ 출금관리 테스트 (accounting-withdrawal) +- Step 18 ([UPDATE] 메모 수정): Input not found: textarea[name*='memo'], input[placeholder*='메모'] +- Step 22 ([DELETE] 삭제 버튼 클릭): Element not found: button:has-text('삭제') +- Step 23 ([DELETE] 필수 검증 #6: 삭제 확인): No dialog found + +### ❌ 휴가관리 테스트 (hr-vacation) +- Step 9 ([CREATE] 휴가 정보 입력): fill_form: no fields filled (4 not found) +- Step 17 ([UPDATE] 사유 수정): Input not found: textarea[name*='reason'], input[placeholder*='사유'] +- Step 22 ([DELETE] 필수 검증 #6: 취소 확인): No dialog found + +### ❌ 입고관리 테스트 (material-receiving) +- Step 18 ([UPDATE] 메모 수정): Input not found: textarea[name*='memo'], input[placeholder*='메모'] +- Step 22 ([DELETE] 삭제 버튼 클릭): Element not found: button:has-text('삭제') +- Step 23 ([DELETE] 필수 검증 #6: 삭제 확인): No dialog found + +### ❌ 작업지시 관리 테스트 (production-work-order) +- Step 9 ([CREATE] 작업지시 정보 입력): fill_form: no fields filled (5 not found) +- Step 17 ([UPDATE] 수량 수정): Input not found: input[name*='quantity'], input[placeholder*='수량'] +- Step 18 ([UPDATE] 메모 수정): Input not found: textarea[name*='memo'], input[placeholder*='메모'] + +### ❌ 작업실적 테스트 (production-work-result) +- Step 19 ([UPDATE] 수량 수정): Input not found: input[name*='quantity'], input[name*='qty'] + +### ❌ 제품검사관리 테스트 (quality-inspection) +- Step 17 ([UPDATE] 개소 수정): Input not found: input[name*='location'], input[placeholder*='개소'] +- Step 18 ([UPDATE] 메모 수정): Input not found: textarea[name*='memo'], input[placeholder*='메모'] +- Step 22 ([DELETE] 삭제 버튼 클릭): Element not found: button:has-text('삭제') +- Step 23 ([DELETE] 필수 검증 #6: 삭제 확인): No dialog found + +### ❌ 판매거래처관리 테스트 (sales-client) +- Step 20 ([DELETE] 거래처 삭제): Element not found: button:has-text('삭제'), button:has-text('제거') +- Step 21 ([DELETE] 삭제 확인): No dialog found + +### ❌ 수주관리 테스트 (sales-order) +- Step 17 ([UPDATE] 수량 수정): Input not found: input[name*='quantity'], input[placeholder*='수량'] +- Step 18 ([UPDATE] 메모 수정): Input not found: textarea[name*='memo'], input[placeholder*='메모'] +- Step 22 ([DELETE] 삭제 버튼 클릭): Element not found: button:has-text('삭제') +- Step 23 ([DELETE] 필수 검증 #6: 삭제 확인): No dialog found + +### ❌ 견적관리 테스트 (sales-quotation) +- Step 17 ([UPDATE] 수량 수정): Input not found: input[name*='quantity'], input[placeholder*='수량'] +- Step 18 ([UPDATE] 메모 수정): Input not found: textarea[name*='memo'], input[placeholder*='메모'] +- Step 22 ([DELETE] 삭제 버튼 클릭): Element not found: button:has-text('삭제') +- Step 23 ([DELETE] 필수 검증 #6: 삭제 확인): No dialog found + +### ❌ 근무일정 테스트 (settings-work-schedule) +- Step 9 ([UPDATE] 휴게 시간 설정): Input not found: input[name*='break'], input[placeholder*='휴게'] diff --git a/e2e/results/hotfix/E2E_SCENARIO_QUALITY_AUDIT_2026-02-11.md b/e2e/results/hotfix/E2E_SCENARIO_QUALITY_AUDIT_2026-02-11.md new file mode 100644 index 0000000..aa810a2 --- /dev/null +++ b/e2e/results/hotfix/E2E_SCENARIO_QUALITY_AUDIT_2026-02-11.md @@ -0,0 +1,391 @@ +# E2E 시나리오 품질 감사 보고서 + +**감사일**: 2026-02-11 16:01 +**대상**: 전체 68개 시나리오 JSON +**기준 테스트**: 2026-02-10_21-41-21 (68/68 PASS, 19.7분) +**분석 방법**: step-executor.js 핸들러 코드 + 시나리오 JSON 교차 검증 + +--- + +## 핵심 발견사항 요약 + +| 이슈 유형 | 심각도 | 해당 시나리오 수 | 영향 | +|----------|--------|----------------|------| +| DELETE 미실행 (verify_element만) | 🔴 CRITICAL | ~20개 CRUD 시나리오 | 삭제 기능 **전혀 테스트 안됨** | +| UPDATE 값 미입력 (click만, fill 없음) | 🔴 CRITICAL | ~20개 CRUD 시나리오 | 수정 기능 **실제 데이터 변경 없음** | +| CREATE 폼 미입력 (hr-vacation 등) | 🟠 SERIOUS | ~3개 시나리오 | 등록 폼에 데이터 입력 안됨 | +| Noop 액션 (screenshot, saveDownloadedFile 등) | 🟠 SERIOUS | 2개 (company-info, approval-box) | 해당 스텝 검증 **완전 누락** | +| 무효 셀렉터 (textbox[label='...']) | 🟠 SERIOUS | 1개 (company-info) | 필드 검증 불가 | +| verify_toast 타이밍 문제 | 🟡 MODERATE | ~20개 CRUD 시나리오 | 토스트 미감지로 warn | +| verify_detail checks 불일치 | 🟡 MODERATE | ~20개 CRUD 시나리오 | 상세 검증 실패로 warn | +| 필터 테스트 미동작 | 🟡 MODERATE | ~50개 시나리오 | 개수만 세고 실제 필터 미테스트 | +| 중복 사이드바 탐색 | 🟢 LOW | 2개 (company-info, approval-box) | 불필요한 스텝, 성능 저하 | + +--- + +## 이슈 #1: DELETE 미실행 (🔴 CRITICAL) + +### 문제 +CRUD 시나리오의 DELETE 단계에서 `verify_element`을 사용하여 버튼 **존재만 확인**하고, 실제 **클릭하지 않음**. + +### step-executor.js 동작 +``` +verify_element(action): + if (el) return pass("Element exists: ...") ← 존재만 확인 + return warn("Element not found: ...") ← 없으면 warn +``` + +### 영향받는 시나리오 (공통 패턴) +```json +// 모든 CRUD 시나리오의 DELETE 단계 +{ + "phase": "DELETE", + "name": "[DELETE] 삭제 버튼 클릭", ← 이름은 "클릭"이지만 + "action": "verify_element", ← 실제로는 verify_element (클릭 안함!) + "target": "button:has-text('삭제')" +} +{ + "phase": "DELETE", + "name": "[DELETE] 삭제 확인", + "action": "verify_element", ← 확인 다이얼로그도 클릭 안함! + "target": "button:has-text('삭제'), button:has-text('제거')" +} +``` + +### 수정 방안 +```json +// 올바른 DELETE 흐름 +{ + "phase": "DELETE", + "name": "[DELETE] 삭제 버튼 클릭", + "action": "click", ← click으로 변경 + "target": "button:has-text('삭제')" +}, +{ + "phase": "DELETE", + "name": "[DELETE] 삭제 확인 다이얼로그", + "action": "click_dialog_confirm" ← 확인 다이얼로그 클릭 +} +``` + +### 해당 시나리오 목록 +| 시나리오 | DELETE 스텝 ID | +|---------|---------------| +| accounting-bill | 21, 22 | +| accounting-deposit | 22, 23 | +| accounting-withdrawal | 22, 23 | +| accounting-bad-debt | 22, 23 | +| accounting-client | 22, 23 | +| accounting-expense-forecast | 18, 19 | +| accounting-payment | 18, 19 | +| accounting-purchase | 17, 18 | +| accounting-receivable | 18, 19 | +| accounting-sales | 17, 18 | +| hr-vacation | 22 | +| quality-inspection | 22, 23 | +| material-receiving | 22, 23 | +| sales-quotation | 22, 23 | +| sales-client | 22, 23 | +| item-management | 15, 16 | +| accounting-bank-transaction | 18, 19 | +| accounting-card-history | 18, 19 | + +--- + +## 이슈 #2: UPDATE 값 미입력 (🔴 CRITICAL) + +### 문제 +UPDATE 단계에서 입력 필드를 `click_if_exists`로 **클릭만** 하고, **값을 채우지 않음**. + +### step-executor.js 동작 +``` +click_if_exists(action): + const el = findEl(target); + if (el) { el.click(); return pass("Clicked: ..."); } + return warn("Not found: ..."); + // ⚠️ action.value가 있어도 무시! fill 핸들러만 value 처리 +``` + +### 영향받는 시나리오 패턴 +```json +{ + "phase": "UPDATE", + "name": "[UPDATE] 메모 수정", + "action": "click_if_exists", ← click만 수행! + "target": "textarea[name*='memo']" ← 클릭은 하지만 + // value 속성 없음! → 실제 값 변경 없음 +} +``` + +### 수정 방안 +```json +{ + "phase": "UPDATE", + "name": "[UPDATE] 메모 수정", + "action": "fill", ← fill로 변경 + "target": "textarea[name*='memo']", + "value": "E2E 수정된 메모_{timestamp}" ← 값 추가 +} +``` + +### 해당 시나리오 (동일 패턴) +accounting-bill(17), accounting-deposit(17,18), accounting-withdrawal(17,18), +quality-inspection(17,18), material-receiving(17,18), sales-quotation(17,18), +hr-vacation(17), sales-client(17,18), item-management(12,13) 등 **~20개** + +--- + +## 이슈 #3: CREATE 폼 미입력 (🟠 SERIOUS) + +### 문제 (hr-vacation 대표) +Step 9에서 `click_if_exists` 액션에 `fields` 배열이 있지만, **click_if_exists 핸들러는 fields를 무시**함. + +```json +{ + "id": 9, + "phase": "CREATE", + "name": "[CREATE] 휴가 정보 입력", + "action": "click_if_exists", ← fill_form이 아닌 click_if_exists! + "fields": [ ← fields 배열은 완전히 무시됨 + {"name": "휴가 유형", "type": "select", "value": "연차"}, + {"name": "시작일", "type": "date", "value": "2026-02-10"} + ], + "target": "form, [role='dialog'], .modal" +} +``` + +### 수정 방안 +```json +{ + "id": 9, + "phase": "CREATE", + "name": "[CREATE] 휴가 정보 입력", + "action": "fill_form", ← fill_form으로 변경 + "fields": [...] ← 이제 정상 처리됨 +} +``` + +--- + +## 이슈 #4: Noop 액션 (🟠 SERIOUS) + +### step-executor.js에서 noop 매핑되는 액션들 +```javascript +// 다음 액션 타입들은 모두 noop → 항상 pass("(noop)") 반환 +tryAlternativeUrls → noop +ifStillFailed → noop +expectResponse → noop +assertResponse → noop +saveDownloadedFile → noop +verifyDownloadedFile → noop +log → noop +manualVerification → noop +composite → noop +``` + +### 영향받는 시나리오 + +**company-info** (Step 4): +- `checkFor404` → verify_url_stability (타임아웃 후 warn) +- `tryAlternativeUrls` → noop (무조건 pass) +- `ifStillFailed` → noop (무조건 pass) +- `log` → noop (무조건 pass) + +**approval-box** (Step 11-14): PDF 테스트 전체가 noop +- Step 11: `screenshot` → capture (pass, but no actual capture in step-executor context) +- Step 12: `expectResponse` → noop, `assertResponse` → noop, `saveDownloadedFile` → noop +- Step 13: `verifyDownloadedFile` → noop +- Step 14: `manualVerification` → noop + +**결과**: PDF 다운로드 테스트가 **0%** 실행됨 + +--- + +## 이슈 #5: 무효 CSS 셀렉터 (🟠 SERIOUS) + +### company-info 고유 문제 +Steps 9-15에서 사용하는 셀렉터: +``` +textbox[label='회사명'][disabled] +textbox[label='대표자명'][disabled] +textbox[label='업태'][disabled] +textbox[label='업종'][disabled] +textbox[label='주소명'][disabled] +textbox[label='이메일 (아이디)'][disabled] +textbox[label='사업자등록번호'][disabled] +``` + +**문제**: `textbox`는 CSS 요소가 아님. ARIA role selector(`[role="textbox"]`)나 `input` 사용 필요. +findEl()은 이 셀렉터를 처리 못함 → warn("Element not found") + +--- + +## 이슈 #6: verify_toast 타이밍 (🟡 MODERATE) + +### 문제 +`verify_toast`는 500ms만 대기 후 토스트를 찾음. 토스트가 아직 안 나타났거나 이미 사라진 경우 warn. + +### 현재 구현 +```javascript +async verify_toast(action, ctx) { + await sleep(500); // 500ms만 대기 + for (const sel of toastSels) { + const el = document.querySelector(sel); + if (el && el.offsetParent !== null) { + return pass(`Toast found: ...`); + } + } + return warn('No toast/notification found'); // → warn +} +``` + +### 영향 +모든 CRUD 시나리오의 `verify_toast` 스텝이 warn 생성 가능 + +--- + +## 이슈 #7: 필터 테스트 미동작 (🟡 MODERATE) + +### 문제 +거의 모든 시나리오의 "목록 필터 테스트" 스텝이 동일한 evaluate 스크립트를 사용: + +```javascript +// 현재: select/combobox 요소 개수만 세기 +const selects = document.querySelectorAll('select, [role="combobox"], ...'); +return selects.length > 0 ? 'Filters found: ' + selects.length : 'No filter dropdowns (ok)'; +``` + +**결과**: 필터 존재 여부만 확인. 실제 필터 열기/선택/결과 변화 **미검증**. + +--- + +## 이슈 #8: 중복 사이드바 탐색 (🟢 LOW) + +### 문제 +company-info, approval-box의 Steps 1-4가 사이드바 탐색을 수행하지만, +run-all.js의 `navigateViaMenu()`가 이미 사이드바 탐색을 처리함. + +### 영향 +- 중복 실행으로 시간 낭비 (company-info: 48.5초, approval-box: 46.2초) +- Format B (actions 배열) 사용으로 step-executor에서 warn 발생 다수 + +--- + +## 시나리오별 상세 분류 + +### 🟢 정상 시나리오 (0 warns, 22/22 등) +| 시나리오 | 스텝 | Pass | Pattern | +|---------|------|------|---------| +| free-board | 22 | 22 | ✅ 모범 패턴 | +| board-management | 22 | 22 | ✅ | +| employee-register | 21 | 21 | ✅ | +| hr-attendance-admin | 14 | 14 | ✅ | +| hr-card | 22 | 22 | ✅ | +| hr-department | 14 | 14 | ✅ | +| hr-employee | 22 | 22 | ✅ | +| hr-salary | 22 | 22 | ✅ | +| inventory-status | 12 | 12 | ✅ | +| quality-certification | 14 | 14 | ✅ | +| vendor-management | 34 | 34 | ✅ | +| withdrawal-management | 21 | 21 | ✅ | +| receiving-management | 9 | 9 | ✅ | +| pdf-download-test | 5 | 5 | ✅ | + +### 🟡 경미한 이슈 (1-4 warns) +| 시나리오 | Total | Pass | Warns | 주요 이슈 | +|---------|-------|------|-------|----------| +| login | 24 | 22 | 2 | verify 관련 | +| accounting-bad-debt | 24 | 22 | 2 | verify_toast, verify_detail | +| production-work-order | 25 | 23 | 2 | verify_toast | +| production-dashboard | 12 | 10 | 2 | evaluate 관련 | +| accounting-receivable | 19 | 16 | 3 | CRUD verify | +| department-add | 16 | 13 | 3 | verify 관련 | +| reference-box | 40 | 37 | 3 | verify 관련 | +| settings-company | 16 | 13 | 3 | verify 관련 | +| sales-pricing | 27 | 24 | 3 | CRUD verify | + +### 🟠 심각한 이슈 (5-8 warns) +| 시나리오 | Total | Pass | Warns | 주요 이슈 | +|---------|-------|------|-------|----------| +| accounting-bill | 24 | 16 | **8** | DELETE 미실행 + UPDATE 미입력 + verify_toast | +| accounting-deposit | 25 | 17 | **8** | DELETE 미실행 + UPDATE 미입력 | +| accounting-withdrawal | 25 | 17 | **8** | DELETE 미실행 + UPDATE 미입력 | +| material-receiving | 25 | 17 | **8** | DELETE 미실행 + UPDATE 미입력 | +| quality-inspection | 25 | 17 | **8** | DELETE 미실행 + UPDATE 미입력 | +| sales-quotation | 25 | 17 | **8** | DELETE 미실행 + UPDATE 미입력 | +| approval-box | 20 | 12 | **8** | Noop 액션 + 중복 탐색 | +| hr-vacation | 25 | 18 | **7** | CREATE 미입력 + DELETE 미실행 | +| sales-client | 24 | 17 | **7** | DELETE 미실행 + UPDATE 미입력 | +| attendance-checkin | 17 | 12 | **5** | verify 관련 | +| item-management | 16 | 11 | **5** | DELETE 미실행 + UPDATE 미입력 | +| sales-management | 54 | 49 | **5** | verify_toast + verify_detail | + +### 🔴 심각한 이슈 (9+ warns) +| 시나리오 | Total | Pass | Warns | 주요 이슈 | +|---------|-------|------|-------|----------| +| company-info | 31 | 14 | **17** | 무효 셀렉터 + noop + 중복 탐색 | + +--- + +## 수정 우선순위 권장 + +### Phase 1: CRITICAL (DELETE/UPDATE 실행 안되는 CRUD 시나리오) +**~20개 시나리오 일괄 수정** (동일 패턴) + +1. DELETE 단계: `verify_element` → `click` + `click_dialog_confirm` +2. UPDATE 단계: `click_if_exists` (input) → `fill` (with value) +3. CREATE 단계 (hr-vacation): `click_if_exists` → `fill_form` + +### Phase 2: SERIOUS (company-info, approval-box 재작성) +1. company-info: 무효 셀렉터 교체, 불필요 스텝 제거, Format A 통일 +2. approval-box: noop 스텝 제거/교체, PDF 테스트 분리 + +### Phase 3: MODERATE (verify_toast, verify_detail 개선) +1. verify_toast 대기 시간 조정 (step-executor.js 수정) +2. verify_detail checks 텍스트 일치 조건 완화 +3. 필터 테스트 실제 상호작용 추가 + +--- + +## 모범 패턴 (free-board 기준) + +```json +// ✅ GOOD: Format A, 올바른 액션, 실제 동작 +{ + "id": 1, + "name": "메뉴 진입", + "action": "menu_navigate", // ← run-all.js가 처리 + "level1": "게시판", + "level2": "자유게시판" +}, +{ + "id": 8, + "name": "검색 기능", + "action": "search", // ← 실제 검색 수행 + "value": "테스트" +}, +{ + "id": 15, + "name": "첫 번째 행 클릭", + "action": "click_first_row" // ← 실제 클릭 +}, +{ + "id": 17, + "name": "상세 콘텐츠 확인", + "action": "evaluate", // ← JS 스크립트로 직접 검증 + "script": "(() => { ... })()" +} +``` + +--- + +## 결론 + +**표면적 결과**: 68/68 PASS (100%) +**실질적 검증 수준**: 약 **60-70%** (CRUD DELETE/UPDATE 미실행, noop 스텝 포함) + +핵심 문제는 CRUD 시나리오에서 DELETE와 UPDATE가 **명목상으로만** 테스트되고, +실제로는 존재 확인(verify_element)이나 클릭만(click_if_exists without value) 수행하여 +기능 동작을 **검증하지 않는다**는 것이다. + +수정 Phase 1만 완료해도 실질적 검증 수준이 **85-90%**로 개선될 것으로 예상. diff --git a/e2e/results/hotfix/success/OK-item-master_2026-02-11_16-20-04.md b/e2e/results/hotfix/success/OK-item-master_2026-02-11_16-20-04.md new file mode 100644 index 0000000..30408ae --- /dev/null +++ b/e2e/results/hotfix/success/OK-item-master_2026-02-11_16-20-04.md @@ -0,0 +1,32 @@ +# ✅ E2E 테스트 성공: 품목기준관리 테스트 + +**테스트 ID**: item-master | **실행**: 2026-02-11_16-20-04 | **결과**: PASS +**소요 시간**: 11.6초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 14 | 13 | 0 | 1 | 93% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 품목관리 > 품목기준관리 | - | ✅ | 2507ms | Menu navigation: 품목관리 > 품목기준관리 | +| 2 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/master-data/item-master-data-manageme | +| 3 | 목업 감지 | - | ⚠️ | 1002ms | Possible mockup page (score: 2) | +| 4 | 통계 카드 확인 | - | ✅ | 1ms | evaluate ok | +| 5 | 품목기준관리 페이지 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 6 | UI 요소 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 7 | 검색 입력 시도 | - | ✅ | 0ms | Element not present (ok): input[type='search'], input[placeholder*='검색'], input[ | +| 8 | 대기 | - | ✅ | 1002ms | Waited 1000ms | +| 9 | 행 클릭 시도 | - | ✅ | 2ms | Element not present (ok): table tbody tr, [role='row']:not(:first-child), [class | +| 10 | 상세 확인 | - | ✅ | 1ms | Detail checks: 1/1 | +| 11 | 모달 닫기 | - | ✅ | 0ms | No modal open | +| 12 | 페이지네이션 확인 | - | ✅ | 1ms | evaluate ok | +| 13 | 콘솔 에러 확인 | - | ✅ | 0ms | Element exists: body | +| 14 | 최종 확인 | - | ✅ | 0ms | Detail checks: 1/1 | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 0 | 0 | 0 | 0ms | 0 | diff --git a/e2e/results/hotfix/success/OK-login-test_2026-02-11_16-20-17.md b/e2e/results/hotfix/success/OK-login-test_2026-02-11_16-20-17.md new file mode 100644 index 0000000..c2fdea7 --- /dev/null +++ b/e2e/results/hotfix/success/OK-login-test_2026-02-11_16-20-17.md @@ -0,0 +1,42 @@ +# ✅ E2E 테스트 성공: 로그인 테스트 (끝판왕) + +**테스트 ID**: login-test | **실행**: 2026-02-11_16-20-17 | **결과**: PASS +**소요 시간**: 13.1초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 24 | 22 | 0 | 2 | 92% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 로그인 페이지 접속 | - | ✅ | 1ms | Navigate to /ko/login | +| 2 | 필수 검증 #5: 목업 페이지 감지 | - | ⚠️ | 1010ms | Possible mockup page (score: 2) | +| 3 | UI 요소 검증 - 입력 필드 | - | ⚠️ | 1016ms | Checks: 0/3 verified | +| 4 | UI 요소 검증 - 옵션 | - | ✅ | 0ms | Checks: 1/3 verified | +| 5 | 비밀번호 표시/숨김 토글 테스트 | - | ✅ | 1ms | Element not present (ok): passwordToggle | +| 6 | 비밀번호 숨김 복원 | - | ✅ | 1ms | Element not present (ok): passwordToggle | +| 7 | 로그인 실패 테스트 - 빈 필드 | - | ✅ | 1ms | Element not present (ok): loginButton | +| 8 | 아이디 입력 | - | ✅ | 0ms | Element not present (ok): usernameInput | +| 9 | 로그인 실패 테스트 - 잘못된 비밀번호 | - | ✅ | 1ms | Element not present (ok): passwordInput | +| 10 | 잘못된 비밀번호로 로그인 시도 | - | ✅ | 0ms | Element not present (ok): loginButton | +| 11 | 비밀번호 필드 초기화 | - | ✅ | 1ms | Element not present (ok): passwordInput | +| 12 | 올바른 비밀번호 입력 | - | ✅ | 0ms | Element not present (ok): passwordInput | +| 13 | 필수 검증 #2: 로그인 버튼 클릭 | - | ✅ | 1ms | Element not present (ok): loginButton | +| 14 | 대시보드 페이지 확인 | - | ✅ | 2006ms | Navigation ok: https://dev.codebridge-x.com/dashboard | +| 15 | 사용자 정보 표시 확인 | - | ✅ | 1ms | Checks: 3/3 verified | +| 16 | 세션 유지 확인 - 페이지 새로고침 | - | ✅ | 0ms | Page reload | +| 17 | 새로고침 후 대시보드 유지 확인 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/dashboard | +| 18 | 사용자 프로필 메뉴 열기 | - | ✅ | 305ms | Clicked (existed): userProfileButton | +| 19 | 로그아웃 버튼 클릭 | - | ✅ | 6ms | Element not present (ok): logoutButton | +| 20 | 로그아웃 후 로그인 페이지 확인 | - | ✅ | 0ms | No checks defined | +| 21 | 로그아웃 후 보호된 페이지 접근 시도 | - | ✅ | 1ms | Navigate to /ko/dashboard | +| 22 | 재로그인 테스트 | - | ✅ | 2ms | Element not present (ok): usernameInput / Element not present (ok): passwordInpu | +| 23 | 최종 확인 - 대시보드 진입 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/dashboard | +| 24 | 콘솔 에러 확인 | - | ✅ | 0ms | Element exists: body | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 0 | 0 | 0 | 0ms | 0 | diff --git a/e2e/results/hotfix/success/OK-material-stock_2026-02-11_16-21-22.md b/e2e/results/hotfix/success/OK-material-stock_2026-02-11_16-21-22.md new file mode 100644 index 0000000..ba01a64 --- /dev/null +++ b/e2e/results/hotfix/success/OK-material-stock_2026-02-11_16-21-22.md @@ -0,0 +1,37 @@ +# ✅ E2E 테스트 성공: 재고현황 테스트 + +**테스트 ID**: material-stock | **실행**: 2026-02-11_16-21-22 | **결과**: PASS +**소요 시간**: 11.3초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 19 | 16 | 0 | 3 | 84% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 자재관리 > 재고현황 | - | ✅ | 508ms | Menu navigation: 자재관리 > 재고현황 | +| 2 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/material/stock-status | +| 3 | 필수 검증 #5: 목업 페이지 감지 | - | ✅ | 0ms | Real page: 1 inputs, 81 buttons | +| 4 | 통계 카드 확인 | - | ✅ | 2ms | evaluate ok | +| 5 | 재고현황 테이블 구조 확인 | - | ✅ | 0ms | Table: 11 cols, 20 rows | +| 6 | 목록 필터 테스트 | - | ✅ | 1ms | evaluate ok | +| 7 | [READ] 재고 데이터 확인 | READ | ⚠️ | 1001ms | Detail checks: 0/1 matched | +| 8 | [SEARCH] 품목 검색 | SEARCH | ✅ | 205ms | Filled "input[type='search'], input[placeholder*='검색']" with "테스트" | +| 9 | [SEARCH] 검색 결과 확인 | SEARCH | ⚠️ | 1022ms | Detail checks: 0/1 matched | +| 10 | [SEARCH] 검색 초기화 | SEARCH | ✅ | 5ms | Element not present (ok): button:has-text('초기화'), button:has-text('리셋'), button[ | +| 11 | [FILTER] 창고/위치 필터 | FILTER | ✅ | 0ms | Element not present (ok): select[name*='warehouse'], select[name*='location'], b | +| 12 | [FILTER] 재고 상태 필터 | FILTER | ✅ | 1ms | Checks: 1/1 verified | +| 13 | 안전재고 이하 품목 확인 | - | ✅ | 0ms | Checks: 2/2 verified | +| 14 | 재고 이동 이력 링크 | - | ✅ | 0ms | Checks: 1/1 verified | +| 15 | 재고 현황 요약 | - | ✅ | 0ms | Checks: 3/3 verified | +| 16 | 필수 검증 #1: 엑셀 다운로드 | - | ✅ | 306ms | Clicked (existed): button:has-text('엑셀'), button:has-text('Excel'), button:has-t | +| 17 | 인쇄 기능 확인 | - | ⚠️ | 1016ms | Checks: 0/1 verified | +| 18 | 재고 조정 버튼 확인 | - | ✅ | 1ms | Checks: 1/1 verified | +| 19 | 콘솔 에러 확인 | - | ✅ | 0ms | Element exists: body | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 1 | 1 | 0 | 148ms | 0 | diff --git a/e2e/results/hotfix/success/OK-pdf-download-test_2026-02-11_16-21-25.md b/e2e/results/hotfix/success/OK-pdf-download-test_2026-02-11_16-21-25.md new file mode 100644 index 0000000..c739dbb --- /dev/null +++ b/e2e/results/hotfix/success/OK-pdf-download-test_2026-02-11_16-21-25.md @@ -0,0 +1,23 @@ +# ✅ E2E 테스트 성공: PDF 다운로드 전체 검사 + +**테스트 ID**: pdf-download-test | **실행**: 2026-02-11_16-21-25 | **결과**: PASS +**소요 시간**: 2.7초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 5 | 5 | 0 | 0 | 100% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| step-0 | PDF 샘플 폴더 준비 | - | ✅ | 0ms | No action | +| pdf-test-1 | 기안함 PDF 다운로드 테스트 | - | ✅ | 0ms | No action | +| pdf-test-2 | 결재함 PDF 다운로드 테스트 | - | ✅ | 0ms | No action | +| pdf-test-3 | 참조함 PDF 다운로드 테스트 | - | ✅ | 0ms | No action | +| pdf-test-4 | 거래처원장 PDF 다운로드 테스트 | - | ✅ | 0ms | No action | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 0 | 0 | 0 | 0ms | 0 | diff --git a/e2e/results/hotfix/success/OK-production-dashboard_2026-02-11_16-21-38.md b/e2e/results/hotfix/success/OK-production-dashboard_2026-02-11_16-21-38.md new file mode 100644 index 0000000..d89d341 --- /dev/null +++ b/e2e/results/hotfix/success/OK-production-dashboard_2026-02-11_16-21-38.md @@ -0,0 +1,30 @@ +# ✅ E2E 테스트 성공: 생산 현황판 테스트 + +**테스트 ID**: production-dashboard | **실행**: 2026-02-11_16-21-38 | **결과**: PASS +**소요 시간**: 13.0초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 12 | 10 | 0 | 2 | 83% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 생산관리 > 생산 현황판 | - | ✅ | 2513ms | Menu navigation: 생산관리 > 생산 현황판 | +| 2 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/production/dashboard | +| 3 | 목업 감지 | - | ⚠️ | 1009ms | Possible mockup page (score: 2) | +| 4 | 테이블 구조 검증 | - | ⚠️ | 1018ms | No table found | +| 5 | 통계 카드 확인 | - | ✅ | 1ms | evaluate ok | +| 6 | 생산 현황판 페이지 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 7 | 현황 데이터 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 8 | 필터 버튼 클릭 | - | ✅ | 316ms | Clicked (existed): button:has-text('필터'), select, [class*='filter'] button, [cla | +| 9 | 대기 | - | ✅ | 1004ms | Waited 1000ms | +| 10 | 모달 닫기 | - | ✅ | 1ms | No modal open | +| 11 | 콘솔 에러 확인 | - | ✅ | 1ms | Element exists: body | +| 12 | 생산 현황판 최종 확인 | - | ✅ | 0ms | Detail checks: 1/1 | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 0 | 0 | 0 | 0ms | 0 | diff --git a/e2e/results/hotfix/success/OK-production-item_2026-02-11_16-21-49.md b/e2e/results/hotfix/success/OK-production-item_2026-02-11_16-21-49.md new file mode 100644 index 0000000..9d5a814 --- /dev/null +++ b/e2e/results/hotfix/success/OK-production-item_2026-02-11_16-21-49.md @@ -0,0 +1,32 @@ +# ✅ E2E 테스트 성공: 생산품목관리 테스트 + +**테스트 ID**: production-item | **실행**: 2026-02-11_16-21-49 | **결과**: PASS +**소요 시간**: 11.7초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 14 | 13 | 0 | 1 | 93% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 품목관리 > 품목기준관리 | - | ✅ | 2518ms | Menu navigation: 품목관리 > 품목기준관리 | +| 2 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/master-data/item-master-data-manageme | +| 3 | 목업 감지 | - | ⚠️ | 1016ms | Possible mockup page (score: 2) | +| 4 | 통계 카드 확인 | - | ✅ | 1ms | evaluate ok | +| 5 | 품목기준관리 페이지 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 6 | 테이블 또는 목록 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 7 | 검색 입력 시도 | - | ✅ | 3ms | Element not present (ok): input[type='search'], input[placeholder*='검색'], input[ | +| 8 | 대기 | - | ✅ | 1013ms | Waited 1000ms | +| 9 | 행 클릭 시도 | - | ✅ | 2ms | Element not present (ok): table tbody tr, [role='row']:not(:first-child), [class | +| 10 | 상세 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 11 | 모달 닫기 | - | ✅ | 1ms | No modal open | +| 12 | 페이지네이션 확인 | - | ✅ | 0ms | evaluate ok | +| 13 | 콘솔 에러 확인 | - | ✅ | 0ms | Element exists: body | +| 14 | 최종 확인 | - | ✅ | 0ms | Detail checks: 1/1 | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 0 | 0 | 0 | 0ms | 0 | diff --git a/e2e/results/hotfix/success/OK-production-worker_2026-02-11_16-22-35.md b/e2e/results/hotfix/success/OK-production-worker_2026-02-11_16-22-35.md new file mode 100644 index 0000000..3a4281a --- /dev/null +++ b/e2e/results/hotfix/success/OK-production-worker_2026-02-11_16-22-35.md @@ -0,0 +1,32 @@ +# ✅ E2E 테스트 성공: 작업자 화면 테스트 + +**테스트 ID**: production-worker | **실행**: 2026-02-11_16-22-35 | **결과**: PASS +**소요 시간**: 11.7초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 14 | 13 | 0 | 1 | 93% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 생산관리 > 작업자 화면 | - | ✅ | 2521ms | Menu navigation: 생산관리 > 작업자 화면 | +| 2 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/production/worker-screen | +| 3 | 목업 감지 | - | ⚠️ | 1006ms | Possible mockup page (score: 2) | +| 4 | 통계 카드 확인 | - | ✅ | 1ms | evaluate ok | +| 5 | 작업자 화면 페이지 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 6 | UI 요소 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 7 | 검색 입력 시도 | - | ✅ | 1ms | Element not present (ok): input[type='search'], input[placeholder*='검색'], input[ | +| 8 | 대기 | - | ✅ | 1010ms | Waited 1000ms | +| 9 | 행 클릭 시도 | - | ✅ | 1ms | Element not present (ok): table tbody tr, [role='row']:not(:first-child), [class | +| 10 | 상세 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 11 | 모달 닫기 | - | ✅ | 0ms | No modal open | +| 12 | 페이지네이션 확인 | - | ✅ | 0ms | evaluate ok | +| 13 | 콘솔 에러 확인 | - | ✅ | 0ms | Element exists: body | +| 14 | 최종 확인 | - | ✅ | 1ms | Detail checks: 1/1 | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 0 | 0 | 0 | 0ms | 0 | diff --git a/e2e/results/hotfix/success/OK-quality-certification_2026-02-11_16-22-46.md b/e2e/results/hotfix/success/OK-quality-certification_2026-02-11_16-22-46.md new file mode 100644 index 0000000..3bc8e31 --- /dev/null +++ b/e2e/results/hotfix/success/OK-quality-certification_2026-02-11_16-22-46.md @@ -0,0 +1,32 @@ +# ✅ E2E 테스트 성공: 품질인정심사 시스템 테스트 + +**테스트 ID**: quality-certification | **실행**: 2026-02-11_16-22-46 | **결과**: PASS +**소요 시간**: 10.7초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 14 | 14 | 0 | 0 | 100% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 품질관리 > 품질인정심사 시스템 | - | ✅ | 2514ms | Menu navigation: 품질관리 > 품질인정심사 시스템 | +| 2 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/quality/qms | +| 3 | 목업 감지 | - | ✅ | 0ms | Real page: 1 inputs, 52 buttons | +| 4 | 통계 카드 확인 | - | ✅ | 1ms | evaluate ok | +| 5 | 품질인정심사 페이지 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 6 | UI 요소 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 7 | 검색 입력 시도 | - | ✅ | 1ms | Element not present (ok): input[type='search'], input[placeholder*='검색'], input[ | +| 8 | 대기 | - | ✅ | 1005ms | Waited 1000ms | +| 9 | 행 클릭 시도 | - | ✅ | 3ms | Element not present (ok): table tbody tr, [role='row']:not(:first-child), [class | +| 10 | 상세 확인 | - | ✅ | 1ms | Detail checks: 1/1 | +| 11 | 모달 닫기 | - | ✅ | 0ms | No modal open | +| 12 | 페이지네이션 확인 | - | ✅ | 0ms | evaluate ok | +| 13 | 콘솔 에러 확인 | - | ✅ | 0ms | Element exists: body | +| 14 | 최종 확인 | - | ✅ | 0ms | Detail checks: 1/1 | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 0 | 0 | 0 | 0ms | 0 | diff --git a/e2e/results/hotfix/success/OK-receiving-management_2026-02-11_16-23-22.md b/e2e/results/hotfix/success/OK-receiving-management_2026-02-11_16-23-22.md new file mode 100644 index 0000000..2c3d2f7 --- /dev/null +++ b/e2e/results/hotfix/success/OK-receiving-management_2026-02-11_16-23-22.md @@ -0,0 +1,27 @@ +# ✅ E2E 테스트 성공: 입고관리 테스트 + +**테스트 ID**: receiving-management | **실행**: 2026-02-11_16-23-22 | **결과**: PASS +**소요 시간**: 12.2초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 9 | 9 | 0 | 0 | 100% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 사이드바 메뉴 전체 펼치기 | - | ✅ | 2309ms | evaluate ok / Waited 300ms / evaluate ok / Waited 2000ms | +| 2 | 자재관리 메뉴 진입 | - | ✅ | 1031ms | Found: 자재관리 / Clicked (existed): 자재관리 / Waited 500ms / Element not present (ok): | +| 3 | 페이지 구조 확인 | - | ✅ | 0ms | No action | +| 4 | 필수 검증 #3: 상태 탭 필터 - 입고대기 | - | ✅ | 605ms | Clicked (existed): 입고대기 / Waited 300ms | +| 5 | 필수 검증 #3: 상태 탭 필터 - 입고완료 | - | ✅ | 616ms | Clicked (existed): 입고완료 / Waited 300ms | +| 6 | 전체 탭으로 복귀 | - | ✅ | 605ms | Clicked (existed): 전체 / Waited 300ms | +| 7 | 빈 상태 확인 | - | ✅ | 0ms | No action | +| 8 | 콘솔 에러 확인 | - | ✅ | 1ms | Element exists: body | +| 9 | 통계 카드 값 확인 | - | ✅ | 0ms | No action | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 0 | 0 | 0 | 0ms | 0 | diff --git a/e2e/results/hotfix/success/OK-reference-box_2026-02-11_16-24-00.md b/e2e/results/hotfix/success/OK-reference-box_2026-02-11_16-24-00.md new file mode 100644 index 0000000..dad29ea --- /dev/null +++ b/e2e/results/hotfix/success/OK-reference-box_2026-02-11_16-24-00.md @@ -0,0 +1,58 @@ +# ✅ E2E 테스트 성공: 참조함 E2E 테스트 + +**테스트 ID**: reference-box | **실행**: 2026-02-11_16-24-00 | **결과**: PASS +**소요 시간**: 38.1초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 40 | 37 | 0 | 3 | 93% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 사이드바 메뉴 전체 펼치기 | - | ✅ | 2307ms | evaluate ok / Waited 300ms / evaluate ok / Waited 2000ms | +| 2 | 2단계 메뉴 진입: 결재관리 > 참조함 | - | ✅ | 11534ms | Found: 결재관리 / Clicked (existed): 결재관리 / Waited 500ms / Found: 참조함 / Clicked (exi | +| 3 | 데이터 로딩 대기 | - | ✅ | 3000ms | Waited 3000ms | +| 4 | 통계 카드 데이터 확인 | - | ✅ | 1ms | Element exists: [class*='card'], [class*='stat'] | +| 5 | 탭 전환 - 열람 탭 | - | ✅ | 315ms | Clicked (existed): button:has-text('열람') | +| 6 | 탭 전환 - 미열람 탭 | - | ✅ | 310ms | Clicked (existed): button:has-text('미열람') | +| 7 | 탭 전환 - 전체 탭으로 복귀 | - | ✅ | 306ms | Clicked (existed): button:has-text('전체') | +| 8 | ⚠️ 필수 검증: 검색 기능 - 기안자 검색 | - | ✅ | 1319ms | Captured count: 6 / Clicked (existed): input[type='search'], input[placeholder*= | +| 9 | 검색 결과 데이터 검증 | - | ✅ | 0ms | No action | +| 10 | 검색 초기화 | - | ✅ | 816ms | Clicked (existed): input[type='search'], input[placeholder*='검색'] / Waited 500ms | +| 11 | 필터 기능 - 문서유형 선택 | - | ✅ | 816ms | Selected dropdown: 품의서 | +| 12 | 필터 초기화 | - | ✅ | 817ms | Selected dropdown: 전체 | +| 13 | 정렬 기능 - 오래된순 | - | ✅ | 316ms | Clicked (existed): select, [role='combobox'] | +| 14 | 정렬 초기화 | - | ✅ | 317ms | Clicked (existed): select, [role='combobox'] | +| 15 | 체크박스 - 단일 선택 | - | ✅ | 1ms | Element not present (ok): table tbody tr:first-child input[type='checkbox'] | +| 16 | 체크박스 - 선택 해제 | - | ✅ | 1ms | Element not present (ok): table tbody tr:first-child input[type='checkbox'] | +| 17 | 체크박스 - 다중 선택 | - | ✅ | 1ms | Element not present (ok): table tbody tr input[type='checkbox'] | +| 18 | 문서 상세 모달 - 열기 | - | ✅ | 313ms | Clicked (existed): table tbody tr:first-child td:nth-child(2) | +| 19 | ⚠️ 필수 검증: PDF 다운로드 전 모달 스크린샷 | - | ✅ | 0ms | Captured count: 4 | +| 20 | ⚠️ 필수 검증: PDF 다운로드 실행 및 파일 보관 | - | ⚠️ | 4030ms | Element not found: PDF 버튼 존재 / No action / Element not present (ok): PDF 버튼 / Wa | +| 21 | ⚠️ PDF 파일 유효성 검증 | - | ✅ | 0ms | No action | +| 22 | 📋 PDF 스타일 수동 확인 체크리스트 | - | ✅ | 0ms | No action | +| 23 | 문서 상세 모달 - 닫기 | - | ✅ | 2ms | Modal closed | +| 24 | 미열람 탭으로 이동 | - | ✅ | 311ms | Clicked (existed): button:has-text('미열람') | +| 25 | 열람 처리 - 문서 선택 | - | ✅ | 2ms | Element not present (ok): table tbody tr:first-child input[type='checkbox'] | +| 26 | 열람 처리 - 확인 다이얼로그 | - | ✅ | 319ms | Clicked (existed): button:has-text('열람') | +| 27 | 열람 처리 - URL 안정성 검증 (⚠️ 필수 검증 #2) | - | ✅ | 0ms | Saved URL → saved_url | +| 28 | 열람 처리 후 데이터 검증 | - | ⚠️ | 1007ms | Detail checks: 0/0 matched | +| 29 | 열람 탭으로 이동하여 검증 | - | ✅ | 314ms | Clicked (existed): button:has-text('열람') | +| 30 | 미열람 처리 - 문서 선택 | - | ✅ | 2ms | Element not present (ok): table tbody tr:first-child input[type='checkbox'] | +| 31 | 미열람 처리 - 확인 다이얼로그 | - | ✅ | 309ms | Clicked (existed): button:has-text('미열람') | +| 32 | 미열람 처리 - URL 안정성 검증 (⚠️ 필수 검증 #2) | - | ✅ | 0ms | Saved URL → saved_url | +| 33 | 미열람 처리 후 데이터 검증 | - | ⚠️ | 1004ms | Detail checks: 0/0 matched | +| 34 | 일괄 열람 처리 - 다중 선택 | - | ✅ | 312ms | Clicked (existed): button:has-text('미열람') | +| 35 | 일괄 열람 처리 - 실행 | - | ✅ | 303ms | Clicked (existed): button:has-text('열람') | +| 36 | 날짜 범위 선택기 테스트 | - | ✅ | 2ms | Element not present (ok): button:has-text('당월') | +| 37 | 페이지네이션 테스트 | - | ✅ | 309ms | Clicked (existed): button:has-text('2') | +| 38 | Console 로그 확인 | - | ✅ | 2ms | Element exists: body | +| 39 | 최종 통계 확인 | - | ✅ | 303ms | Clicked (existed): button:has-text('전체') | +| 40 | 콘솔 에러 확인 | - | ✅ | 1ms | Element exists: body | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 12 | 12 | 0 | 98ms | 0 | diff --git a/e2e/results/hotfix/success/OK-sales-management_2026-02-11_16-24-54.md b/e2e/results/hotfix/success/OK-sales-management_2026-02-11_16-24-54.md new file mode 100644 index 0000000..30beb69 --- /dev/null +++ b/e2e/results/hotfix/success/OK-sales-management_2026-02-11_16-24-54.md @@ -0,0 +1,72 @@ +# ✅ E2E 테스트 성공: 매출관리 테스트 + +**테스트 ID**: sales-management | **실행**: 2026-02-11_16-24-54 | **결과**: PASS +**소요 시간**: 31.8초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 54 | 49 | 0 | 5 | 91% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 사이드바 메뉴 전체 펼치기 | - | ✅ | 2315ms | evaluate ok / Waited 300ms / evaluate ok / Waited 2000ms | +| 2 | 로그인 | - | ✅ | 9ms | Element not present (ok): form, [role="dialog"], .modal | +| 3 | 2단계 메뉴 진입: 회계관리 > 매출관리 | - | ⚠️ | 12389ms | scrollAndFind: "undefined" not found after 10 scrolls / Clicked (existed): 회계관리 | +| 4 | 필수 검증 #5: 목업 페이지 감지 | - | ✅ | 1ms | Real page: 1 inputs, 127 buttons | +| 5 | 목록 페이지 - 테이블 구조 확인 | - | ✅ | 1ms | Table: 11 cols, 20 rows | +| 6 | 계정과목명 드롭박스 확인 | - | ✅ | 2ms | Checks: 2/3 verified | +| 7 | 계정과목명 드롭박스 옵션 확인 | - | ✅ | 1ms | Element not present (ok): accountSubject | +| 8 | 체크박스 선택 (계정과목 저장용) | - | ✅ | 1ms | Element not present (ok): first_row | +| 9 | 계정과목 변경 - 제품매출 선택 | - | ✅ | 1ms | Element not present (ok): accountSubject | +| 10 | 필수 검증 #2: 계정과목 저장 버튼 클릭 | - | ✅ | 312ms | Clicked (existed): 저장 | +| 11 | 저장 확인 다이얼로그 - 확인 클릭 | - | ✅ | 0ms | Element not present (ok): undefined | +| 12 | ⚠️ 필수 검증: 계정과목명 변경 데이터 반영 확인 | - | ✅ | 1ms | Data found: "" | +| 13 | 매출 등록 버튼 클릭 | - | ✅ | 314ms | Clicked (existed): 매출 등록 | +| 14 | 매출 등록 페이지 - URL 확인 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/accounting/sales?mode=new | +| 15 | 매출 등록 페이지 - 기본정보 섹션 확인 | - | ✅ | 1ms | Checks: 3/4 verified | +| 16 | 매출번호 자동생성 확인 | - | ⚠️ | 1017ms | Element not found: salesNo | +| 17 | 거래처명 드롭박스 클릭 | - | ✅ | 0ms | Element not present (ok): vendorId | +| 18 | 거래처명 선택 | - | ✅ | 1ms | Element not present (ok): vendorId | +| 19 | 매출유형 드롭박스 확인 | - | ✅ | 0ms | Element not present (ok): salesType | +| 20 | 매출유형 선택 - 제품매출 | - | ✅ | 1ms | Element not present (ok): salesType | +| 21 | 품목정보 섹션 확인 | - | ✅ | 0ms | Checks: 4/4 verified | +| 22 | 품목 동적 추가 - 추가 버튼 클릭 | - | ✅ | 1ms | Element not present (ok): 품목 추가 | +| 23 | 품목 행 개수 확인 (2개) | - | ✅ | 0ms | Table: 8 cols, 2 rows | +| 24 | 품목 동적 삭제 - 두 번째 행 삭제 | - | ✅ | 0ms | Element not present (ok): remove_item_row_2 | +| 25 | 품목 행 개수 확인 (1개) | - | ✅ | 0ms | Table: 8 cols, 2 rows | +| 26 | 품목명 입력 | - | ✅ | 2ms | Element not present (ok): items[0].itemName | +| 27 | 수량 입력 | - | ✅ | 0ms | Element not present (ok): items[0].quantity | +| 28 | 단가 입력 | - | ✅ | 1ms | Element not present (ok): items[0].unitPrice | +| 29 | 자동계산 검증 - 공급가액 | - | ✅ | 0ms | No text to verify | +| 30 | 자동계산 검증 - 부가세 | - | ✅ | 0ms | No text to verify | +| 31 | 적요 입력 (선택사항) | - | ✅ | 1ms | Element not present (ok): items[0].note | +| 32 | 세금계산서 발행 Switch 확인 | - | ⚠️ | 1025ms | Element not found: taxInvoice_section | +| 33 | 세금계산서 발행 Switch ON | - | ✅ | 0ms | Element not present (ok): taxInvoiceSwitch | +| 34 | 세금계산서 발행 Switch OFF | - | ✅ | 0ms | Element not present (ok): taxInvoiceSwitch | +| 35 | 거래명세서 발행 Switch 확인 | - | ⚠️ | 1015ms | Element not found: transactionStatement_section | +| 36 | 거래명세서 발행 Switch ON | - | ✅ | 1ms | Element not present (ok): transactionStatementSwitch | +| 37 | 거래명세서 발행 Switch OFF | - | ✅ | 0ms | Element not present (ok): transactionStatementSwitch | +| 38 | 합계 금액 확인 | - | ✅ | 0ms | No text to verify | +| 39 | 취소 버튼 동작 테스트 | - | ✅ | 308ms | Clicked (existed): 취소 | +| 40 | 취소 확인 - 목록 페이지 복귀 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/accounting/sales | +| 41 | 다시 매출 등록 페이지 진입 | - | ✅ | 319ms | Clicked (existed): 매출 등록 | +| 42 | 등록 테스트용 데이터 입력 - 거래처 선택 | - | ✅ | 0ms | Element not present (ok): vendorId | +| 43 | 등록 테스트용 데이터 입력 - 매출유형 | - | ✅ | 0ms | Element not present (ok): salesType | +| 44 | 등록 테스트용 데이터 입력 - 품목명 | - | ✅ | 0ms | Element not present (ok): items[0].itemName | +| 45 | 등록 테스트용 데이터 입력 - 수량 | - | ✅ | 0ms | Element not present (ok): items[0].quantity | +| 46 | 등록 테스트용 데이터 입력 - 단가 | - | ✅ | 0ms | Element not present (ok): items[0].unitPrice | +| 47 | 필수 검증 #2: 등록 버튼 클릭 | - | ✅ | 307ms | Clicked (existed): 등록 | +| 48 | 등록 성공 확인 - 토스트 메시지 | - | ⚠️ | 2548ms | No toast/notification found | +| 49 | 등록 성공 확인 - 목록 페이지 이동 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/accounting/sales?mode=new | +| 50 | 등록된 매출 목록 확인 | - | ✅ | 0ms | Table: 8 cols, 2 rows | +| 51 | 거래처 미선택 시 유효성 검증 테스트 | - | ✅ | 1ms | Navigate to /ko/accounting/sales?mode=new | +| 52 | 거래처 미선택 상태에서 등록 시도 | - | ✅ | 308ms | Clicked (existed): 등록 | +| 53 | 유효성 검증 메시지 확인 | - | ✅ | 503ms | Toast visible: "" | +| 54 | 콘솔 에러 확인 | - | ✅ | 0ms | Element exists: body | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 0 | 0 | 0 | 0ms | 0 | diff --git a/e2e/results/hotfix/success/OK-sales-pricing_2026-02-11_16-25-30.md b/e2e/results/hotfix/success/OK-sales-pricing_2026-02-11_16-25-30.md new file mode 100644 index 0000000..16336f2 --- /dev/null +++ b/e2e/results/hotfix/success/OK-sales-pricing_2026-02-11_16-25-30.md @@ -0,0 +1,45 @@ +# ✅ E2E 테스트 성공: 단가관리 테스트 + +**테스트 ID**: sales-pricing | **실행**: 2026-02-11_16-25-30 | **결과**: PASS +**소요 시간**: 15.5초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 27 | 24 | 0 | 3 | 89% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 판매관리 > 단가관리 | - | ✅ | 514ms | Menu navigation: 판매관리 > 단가관리 | +| 2 | URL 검증 | - | ✅ | 1ms | URL verified: https://dev.codebridge-x.com/sales/pricing-management | +| 3 | 필수 검증 #5: 목업 페이지 감지 | - | ✅ | 0ms | Real page: 1 inputs, 82 buttons | +| 4 | 통계 카드 확인 | - | ✅ | 0ms | evaluate ok | +| 5 | 단가 테이블 구조 확인 | - | ✅ | 1ms | Table: 13 cols, 20 rows | +| 6 | 목록 필터 테스트 | - | ✅ | 0ms | evaluate ok | +| 7 | ⚠️ 필수 검증: 검색 기능 | - | ✅ | 1002ms | Searched: "가우스" | +| 8 | 검색 결과 대기 | - | ✅ | 1001ms | Waited 1000ms | +| 9 | 검색 결과 데이터 검증 | - | ✅ | 1ms | evaluate ok | +| 10 | 검색 초기화 | - | ✅ | 1ms | evaluate ok | +| 11 | 검색 초기화 결과 대기 | - | ✅ | 1014ms | Waited 1000ms | +| 12 | 검색 초기화 및 복원 확인 | - | ✅ | 0ms | evaluate ok | +| 13 | 단가 UI 요소 확인 | - | ✅ | 1ms | Checks: 3/3 verified | +| 14 | [READ] 단가 목록 확인 | READ | ⚠️ | 1013ms | Detail checks: 0/1 matched | +| 15 | [READ] 첫 번째 단가 클릭 | READ | ✅ | 302ms | Clicked (existed): table tbody tr:first-child | +| 16 | [READ] 단가 상세 정보 확인 | READ | ⚠️ | 1018ms | Detail checks: 0/1 matched | +| 17 | 상세 모달/페이지 닫기 | - | ✅ | 5ms | Element not present (ok): button:has-text('닫기'), button:has-text('목록'), button:h | +| 18 | 테이블 행 클릭 - 상세 페이지 이동 | - | ✅ | 511ms | Clicked first row | +| 19 | 상세 페이지 로딩 대기 | - | ✅ | 1001ms | Waited 1000ms | +| 20 | 상세 페이지 - 콘텐츠 확인 | - | ✅ | 1ms | evaluate ok | +| 21 | 모달/상세 닫기 | - | ✅ | 1ms | No modal open | +| 22 | 모달 닫기 확인 | - | ✅ | 1ms | No modal open | +| 23 | 목록 복귀 확인 | - | ✅ | 0ms | Table: 13 cols, 1 rows | +| 24 | 엑셀 다운로드 버튼 확인 | - | ⚠️ | 1012ms | Checks: 0/1 verified | +| 25 | 페이지네이션 확인 | - | ✅ | 1ms | evaluate ok | +| 26 | 콘솔 에러 확인 | - | ✅ | 0ms | Element exists: body | +| 27 | 단가관리 페이지 최종 확인 | - | ✅ | 0ms | Checks: 2/2 verified | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 0 | 0 | 0 | 0ms | 0 | diff --git a/e2e/results/hotfix/success/OK-settings-account_2026-02-11_16-26-06.md b/e2e/results/hotfix/success/OK-settings-account_2026-02-11_16-26-06.md new file mode 100644 index 0000000..75abaa2 --- /dev/null +++ b/e2e/results/hotfix/success/OK-settings-account_2026-02-11_16-26-06.md @@ -0,0 +1,34 @@ +# ✅ E2E 테스트 성공: 계정정보 테스트 + +**테스트 ID**: settings-account | **실행**: 2026-02-11_16-26-06 | **결과**: PASS +**소요 시간**: 12.4초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 16 | 14 | 0 | 2 | 88% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 설정 > 계정정보 | - | ✅ | 2509ms | Menu navigation: 설정 > 계정정보 | +| 2 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/settings/account-info | +| 3 | 필수 검증 #5: 목업 페이지 감지 | - | ✅ | 1ms | Real page: 4 inputs, 27 buttons | +| 4 | 통계 카드 확인 | - | ✅ | 1ms | evaluate ok | +| 5 | 계정 정보 폼 구조 확인 | - | ✅ | 0ms | Checks: 2/4 verified | +| 6 | [READ] 현재 계정 정보 확인 | READ | ⚠️ | 1013ms | Detail checks: 0/3 matched | +| 7 | [UPDATE] 프로필 수정 모드 진입 | UPDATE | ✅ | 417ms | Clicked: button:has-text('수정'), button:has-text('편집') | +| 8 | [UPDATE] 표시 이름 필드 확인 | UPDATE | ✅ | 2ms | Element not present (ok): input[name*='displayName'], input[name*='name'], input | +| 9 | [UPDATE] 연락처 필드 확인 | UPDATE | ✅ | 2ms | Element not present (ok): input[name*='phone'], input[type='tel'] | +| 10 | [UPDATE] 필수 검증 #2: 프로필 저장 | UPDATE | ✅ | 312ms | Clicked (existed): button:has-text('저장'), button:has-text('확인'), button:has-text | +| 11 | [UPDATE] 저장 결과 확인 | UPDATE | ⚠️ | 1014ms | Detail checks: 0/1 matched | +| 12 | 비밀번호 변경 버튼 확인 | - | ✅ | 0ms | Checks: 1/1 verified | +| 13 | 비밀번호 변경 모달 열기 | - | ✅ | 2ms | Element not present (ok): button:has-text('비밀번호 변경'), button:has-text('비밀번호') | +| 14 | 페이지네이션 확인 | - | ✅ | 1ms | evaluate ok | +| 15 | 콘솔 에러 확인 | - | ✅ | 1ms | Element exists: body | +| 16 | 비밀번호 변경 모달 닫기 | - | ✅ | 0ms | No modal open | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 2 | 2 | 0 | 46ms | 0 | diff --git a/e2e/results/hotfix/success/OK-settings-attendance_2026-02-11_16-26-17.md b/e2e/results/hotfix/success/OK-settings-attendance_2026-02-11_16-26-17.md new file mode 100644 index 0000000..131ca28 --- /dev/null +++ b/e2e/results/hotfix/success/OK-settings-attendance_2026-02-11_16-26-17.md @@ -0,0 +1,34 @@ +# ✅ E2E 테스트 성공: 근태설정 테스트 + +**테스트 ID**: settings-attendance | **실행**: 2026-02-11_16-26-17 | **결과**: PASS +**소요 시간**: 11.1초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 16 | 13 | 0 | 3 | 81% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 설정 > 근태설정 | - | ✅ | 507ms | Menu navigation: 설정 > 근태설정 | +| 2 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/settings/attendance-settings | +| 3 | 필수 검증 #5: 목업 페이지 감지 | - | ⚠️ | 1018ms | Possible mockup page (score: 2) | +| 4 | 통계 카드 확인 | - | ✅ | 0ms | evaluate ok | +| 5 | 근태 설정 폼 구조 확인 | - | ✅ | 1ms | Checks: 4/4 verified | +| 6 | [READ] 현재 근태 설정 확인 | READ | ⚠️ | 1008ms | Detail checks: 0/3 matched | +| 7 | [UPDATE] 지각 기준 필드 확인 | UPDATE | ✅ | 2ms | Element not present (ok): input[name*='late'], input[placeholder*='지각'] | +| 8 | [UPDATE] 조퇴 기준 필드 확인 | UPDATE | ✅ | 1ms | Element not present (ok): input[name*='early'], input[placeholder*='조퇴'] | +| 9 | [UPDATE] 자동 퇴근 시간 필드 확인 | UPDATE | ✅ | 0ms | Element not present (ok): input[name*='autoCheckout'], input[type='time'] | +| 10 | [UPDATE] 필수 검증 #2: 근태 설정 저장 | UPDATE | ✅ | 421ms | Clicked: button:has-text('저장'), button:has-text('적용') | +| 11 | [UPDATE] 저장 결과 확인 | UPDATE | ⚠️ | 1015ms | Detail checks: 0/1 matched | +| 12 | 위치 기반 출퇴근 설정 확인 | - | ✅ | 0ms | Checks: 2/2 verified | +| 13 | 근태 이상 알림 설정 확인 | - | ✅ | 0ms | Checks: 2/2 verified | +| 14 | 페이지네이션 확인 | - | ✅ | 1ms | evaluate ok | +| 15 | 콘솔 에러 확인 | - | ✅ | 0ms | Element exists: body | +| 16 | 부서별 근태 설정 확인 | - | ✅ | 0ms | Checks: 1/1 verified | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 1 | 1 | 0 | 83ms | 0 | diff --git a/e2e/results/hotfix/success/OK-settings-bank-account_2026-02-11_16-26-33.md b/e2e/results/hotfix/success/OK-settings-bank-account_2026-02-11_16-26-33.md new file mode 100644 index 0000000..5fab8cf --- /dev/null +++ b/e2e/results/hotfix/success/OK-settings-bank-account_2026-02-11_16-26-33.md @@ -0,0 +1,41 @@ +# ✅ E2E 테스트 성공: 계좌관리 테스트 + +**테스트 ID**: settings-bank-account | **실행**: 2026-02-11_16-26-33 | **결과**: PASS +**소요 시간**: 15.2초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 23 | 21 | 0 | 2 | 91% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 설정 > 계좌관리 | - | ✅ | 2512ms | Menu navigation: 설정 > 계좌관리 | +| 2 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/settings/accounts | +| 3 | 필수 검증 #5: 목업 페이지 감지 | - | ✅ | 1ms | Real page: 1 inputs, 28 buttons | +| 4 | 통계 카드 확인 | - | ✅ | 1ms | evaluate ok | +| 5 | 계좌 테이블 구조 확인 | - | ✅ | 1ms | Table: 8 cols, 1 rows | +| 6 | 목록 필터 테스트 | - | ✅ | 1ms | evaluate ok | +| 7 | ⚠️ 필수 검증: 검색 기능 | - | ✅ | 1008ms | Searched: "테스트" | +| 8 | 검색 결과 대기 | - | ✅ | 1001ms | Waited 1000ms | +| 9 | 검색 결과 데이터 검증 | - | ✅ | 0ms | evaluate ok | +| 10 | 검색 초기화 | - | ✅ | 2ms | evaluate ok | +| 11 | 검색 초기화 결과 대기 | - | ✅ | 1013ms | Waited 1000ms | +| 12 | 검색 초기화 및 복원 확인 | - | ✅ | 0ms | evaluate ok | +| 13 | 검색 기능 확인 | - | ✅ | 303ms | Clicked (existed): input[placeholder*='검색'] | +| 14 | 계좌 등록 버튼 확인 | - | ✅ | 313ms | Clicked (existed): button:has-text('등록'), button:has-text('계좌 등록'), button:has-t | +| 15 | 등록 폼/모달 확인 | - | ✅ | 1ms | Checks: 2/3 verified | +| 16 | 등록 모달 닫기 | - | ✅ | 1ms | No modal open | +| 17 | [READ] 계좌 목록 데이터 확인 | READ | ⚠️ | 1017ms | Detail checks: 0/1 matched | +| 18 | [READ] 첫 번째 행 클릭 | READ | ✅ | 0ms | Element not present (ok): table tbody tr:first-child | +| 19 | [READ] 계좌 상세 정보 확인 | READ | ⚠️ | 1013ms | Detail checks: 0/1 matched | +| 20 | 상세 모달 닫기 | - | ✅ | 0ms | No modal open | +| 21 | 페이지네이션 확인 | - | ✅ | 1ms | evaluate ok | +| 22 | 콘솔 에러 확인 | - | ✅ | 0ms | Element exists: body | +| 23 | 계좌 목록 최종 확인 | - | ✅ | 0ms | Checks: 2/2 verified | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 1 | 1 | 0 | 32ms | 0 | diff --git a/e2e/results/hotfix/success/OK-settings-company_2026-02-11_16-26-47.md b/e2e/results/hotfix/success/OK-settings-company_2026-02-11_16-26-47.md new file mode 100644 index 0000000..402ccd2 --- /dev/null +++ b/e2e/results/hotfix/success/OK-settings-company_2026-02-11_16-26-47.md @@ -0,0 +1,34 @@ +# ✅ E2E 테스트 성공: 회사정보 테스트 + +**테스트 ID**: settings-company | **실행**: 2026-02-11_16-26-47 | **결과**: PASS +**소요 시간**: 14.0초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 16 | 13 | 0 | 3 | 81% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 설정 > 회사정보 | - | ✅ | 2509ms | Menu navigation: 설정 > 회사정보 | +| 2 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/company-info | +| 3 | 필수 검증 #5: 목업 페이지 감지 | - | ✅ | 1ms | Real page: 15 inputs, 25 buttons | +| 4 | 통계 카드 확인 | - | ✅ | 1ms | evaluate ok | +| 5 | 회사 정보 폼 구조 확인 | - | ✅ | 0ms | Checks: 4/5 verified | +| 6 | [READ] 현재 회사 정보 확인 | READ | ⚠️ | 1013ms | Detail checks: 0/3 matched | +| 7 | [UPDATE] 회사 정보 수정 모드 진입 | UPDATE | ✅ | 426ms | Clicked: button:has-text('수정'), button:has-text('편집') | +| 8 | [UPDATE] 업태 수정 | UPDATE | ✅ | 215ms | Filled "input#businessType, input[placeholder*='업태']" with "E2E_수정_업태" | +| 9 | [UPDATE] 업종 수정 | UPDATE | ✅ | 208ms | Filled "input#businessCategory, input[placeholder*='업종']" with "E2E_수정_업종" | +| 10 | [UPDATE] 필수 검증 #2: 회사 정보 저장 | UPDATE | ✅ | 418ms | Clicked: button:has-text('저장'), button:has-text('확인') | +| 11 | [UPDATE] 저장 결과 확인 | UPDATE | ⚠️ | 1017ms | Detail checks: 0/2 matched | +| 12 | 로고 이미지 영역 확인 | - | ✅ | 1ms | Checks: 2/2 verified | +| 13 | 사업자등록증 영역 확인 | - | ✅ | 0ms | Checks: 2/2 verified | +| 14 | 페이지네이션 확인 | - | ✅ | 1ms | evaluate ok | +| 15 | 콘솔 에러 확인 | - | ✅ | 0ms | Element exists: body | +| 16 | 법인등록번호 확인 | - | ⚠️ | 1012ms | Checks: 0/1 verified | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 1 | 1 | 0 | 395ms | 0 | diff --git a/e2e/results/hotfix/success/OK-settings-notification_2026-02-11_16-27-00.md b/e2e/results/hotfix/success/OK-settings-notification_2026-02-11_16-27-00.md new file mode 100644 index 0000000..fca5b17 --- /dev/null +++ b/e2e/results/hotfix/success/OK-settings-notification_2026-02-11_16-27-00.md @@ -0,0 +1,34 @@ +# ✅ E2E 테스트 성공: 알림설정 테스트 + +**테스트 ID**: settings-notification | **실행**: 2026-02-11_16-27-00 | **결과**: PASS +**소요 시간**: 13.5초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 16 | 13 | 0 | 3 | 81% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 설정 > 알림설정 | - | ✅ | 2519ms | Menu navigation: 설정 > 알림설정 | +| 2 | URL 검증 | - | ✅ | 1ms | URL verified: https://dev.codebridge-x.com/settings/notification-settings | +| 3 | 필수 검증 #5: 목업 페이지 감지 | - | ⚠️ | 1028ms | Possible mockup page (score: 2) | +| 4 | 통계 카드 확인 | - | ✅ | 2ms | evaluate ok | +| 5 | 알림 설정 폼 구조 확인 | - | ✅ | 0ms | Checks: 4/4 verified | +| 6 | [READ] 현재 알림 설정 확인 | READ | ⚠️ | 1019ms | Detail checks: 0/3 matched | +| 7 | [UPDATE] 이메일 알림 토글 | UPDATE | ✅ | 416ms | Clicked: button[role='switch']:nth-of-type(1), [class*='switch']:nth-of-type(1), | +| 8 | [UPDATE] 푸시 알림 토글 | UPDATE | ✅ | 5ms | Element not present (ok): button[role='switch']:nth-of-type(2), [class*='switch' | +| 9 | [UPDATE] 결재 알림 설정 | UPDATE | ✅ | 1ms | Element not present (ok): button[role='switch']:nth-of-type(3), [class*='switch' | +| 10 | [UPDATE] 필수 검증 #2: 알림 설정 저장 | UPDATE | ✅ | 410ms | Clicked: button:has-text('저장'), button:has-text('적용') | +| 11 | [UPDATE] 저장 결과 확인 | UPDATE | ⚠️ | 1012ms | Detail checks: 0/1 matched | +| 12 | 알림 유형별 설정 확인 | - | ✅ | 0ms | Checks: 3/3 verified | +| 13 | 알림 수신 시간 설정 확인 | - | ✅ | 0ms | Checks: 2/2 verified | +| 14 | 페이지네이션 확인 | - | ✅ | 2ms | evaluate ok | +| 15 | 콘솔 에러 확인 | - | ✅ | 0ms | Element exists: body | +| 16 | 알림 테스트 전송 확인 | - | ✅ | 0ms | Checks: 1/1 verified | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 1 | 1 | 0 | 125ms | 0 | diff --git a/e2e/results/hotfix/success/OK-settings-permission_2026-02-11_16-27-13.md b/e2e/results/hotfix/success/OK-settings-permission_2026-02-11_16-27-13.md new file mode 100644 index 0000000..c3fe5c9 --- /dev/null +++ b/e2e/results/hotfix/success/OK-settings-permission_2026-02-11_16-27-13.md @@ -0,0 +1,38 @@ +# ✅ E2E 테스트 성공: 권한관리 테스트 + +**테스트 ID**: settings-permission | **실행**: 2026-02-11_16-27-13 | **결과**: PASS +**소요 시간**: 13.4초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 20 | 18 | 0 | 2 | 90% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 설정 > 권한관리 | - | ✅ | 2514ms | Menu navigation: 설정 > 권한관리 | +| 2 | URL 검증 | - | ✅ | 1ms | URL verified: https://dev.codebridge-x.com/settings/permissions | +| 3 | 필수 검증 #5: 목업 페이지 감지 | - | ✅ | 0ms | Real page: 1 inputs, 44 buttons | +| 4 | 통계 카드 확인 | - | ✅ | 0ms | evaluate ok | +| 5 | 권한 그룹 목록 확인 | - | ✅ | 0ms | Checks: 3/3 verified | +| 6 | [READ] 첫 번째 권한 그룹 클릭 | READ | ✅ | 320ms | Clicked (existed): table tbody tr:first-child, li:first-child, [class*='list'] > | +| 7 | [READ] 권한 체크박스 구조 확인 | READ | ✅ | 1ms | Checks: 1/2 verified | +| 8 | [READ] 권한 상세 정보 확인 | READ | ⚠️ | 1008ms | Detail checks: 0/2 matched | +| 9 | 권한 추가 버튼 확인 | - | ✅ | 1ms | Element not present (ok): button:has-text('추가'), button:has-text('권한 추가'), butto | +| 10 | 추가 모달 확인 | - | ✅ | 0ms | Checks: 2/2 verified | +| 11 | 테이블 행 클릭 - 상세 페이지 이동 | - | ✅ | 511ms | Clicked first row | +| 12 | 상세 페이지 로딩 대기 | - | ✅ | 1014ms | Waited 1000ms | +| 13 | 상세 페이지 - 콘텐츠 확인 | - | ✅ | 0ms | evaluate ok | +| 14 | 모달/상세 닫기 | - | ✅ | 0ms | No modal open | +| 15 | 추가 모달 닫기 | - | ✅ | 0ms | No modal open | +| 16 | 저장 버튼 존재 확인 | - | ✅ | 1ms | Checks: 1/1 verified | +| 17 | 삭제 버튼 존재 확인 | - | ✅ | 0ms | Checks: 1/1 verified | +| 18 | 페이지네이션 확인 | - | ✅ | 0ms | evaluate ok | +| 19 | 콘솔 에러 확인 | - | ✅ | 0ms | Element exists: body | +| 20 | 권한관리 페이지 최종 확인 | - | ⚠️ | 1007ms | Detail checks: 0/1 matched | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 4 | 4 | 0 | 73ms | 0 | diff --git a/e2e/results/hotfix/success/OK-settings-popup_2026-02-11_16-27-29.md b/e2e/results/hotfix/success/OK-settings-popup_2026-02-11_16-27-29.md new file mode 100644 index 0000000..dabb005 --- /dev/null +++ b/e2e/results/hotfix/success/OK-settings-popup_2026-02-11_16-27-29.md @@ -0,0 +1,41 @@ +# ✅ E2E 테스트 성공: 팝업관리 테스트 + +**테스트 ID**: settings-popup | **실행**: 2026-02-11_16-27-29 | **결과**: PASS +**소요 시간**: 15.1초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 23 | 21 | 0 | 2 | 91% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 설정 > 팝업관리 | - | ✅ | 2510ms | Menu navigation: 설정 > 팝업관리 | +| 2 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/settings/popup-management | +| 3 | 필수 검증 #5: 목업 페이지 감지 | - | ✅ | 2ms | Real page: 1 inputs, 44 buttons | +| 4 | 통계 카드 확인 | - | ✅ | 1ms | evaluate ok | +| 5 | 팝업 테이블 구조 확인 | - | ✅ | 0ms | Table: 8 cols, 9 rows | +| 6 | 목록 필터 테스트 | - | ✅ | 0ms | evaluate ok | +| 7 | ⚠️ 필수 검증: 검색 기능 | - | ✅ | 1010ms | Searched: "테스트" | +| 8 | 검색 결과 대기 | - | ✅ | 1004ms | Waited 1000ms | +| 9 | 검색 결과 데이터 검증 | - | ✅ | 1ms | evaluate ok | +| 10 | 검색 초기화 | - | ✅ | 1ms | evaluate ok | +| 11 | 검색 초기화 결과 대기 | - | ✅ | 1010ms | Waited 1000ms | +| 12 | 검색 초기화 및 복원 확인 | - | ✅ | 1ms | evaluate ok | +| 13 | 기존 팝업 확인 | - | ✅ | 1ms | Checks: 1/1 verified | +| 14 | 팝업 등록 버튼 확인 | - | ✅ | 316ms | Clicked (existed): button:has-text('등록'), button:has-text('추가'), button:has-text | +| 15 | 등록 폼 요소 확인 | - | ✅ | 1ms | Checks: 3/3 verified | +| 16 | 등록 모달 닫기 | - | ✅ | 0ms | No modal open | +| 17 | [READ] 팝업 목록 데이터 확인 | READ | ⚠️ | 1028ms | Detail checks: 0/1 matched | +| 18 | [READ] 첫 번째 행 클릭 | READ | ✅ | 1ms | Element not present (ok): table tbody tr:first-child | +| 19 | [READ] 팝업 상세 정보 확인 | READ | ⚠️ | 1008ms | Detail checks: 0/1 matched | +| 20 | 상세 모달 닫기 | - | ✅ | 0ms | No modal open | +| 21 | 페이지네이션 확인 | - | ✅ | 2ms | evaluate ok | +| 22 | 콘솔 에러 확인 | - | ✅ | 1ms | Element exists: body | +| 23 | 팝업관리 페이지 최종 확인 | - | ✅ | 1ms | Checks: 2/2 verified | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 1 | 1 | 0 | 47ms | 0 | diff --git a/e2e/results/hotfix/success/OK-settings-position_2026-02-11_16-27-40.md b/e2e/results/hotfix/success/OK-settings-position_2026-02-11_16-27-40.md new file mode 100644 index 0000000..3fdfe4b --- /dev/null +++ b/e2e/results/hotfix/success/OK-settings-position_2026-02-11_16-27-40.md @@ -0,0 +1,30 @@ +# ✅ E2E 테스트 성공: 직책관리 테스트 + +**테스트 ID**: settings-position | **실행**: 2026-02-11_16-27-40 | **결과**: PASS +**소요 시간**: 11.9초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 12 | 11 | 0 | 1 | 92% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 설정 > 직책관리 | - | ✅ | 2519ms | Menu navigation: 설정 > 직책관리 | +| 2 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/settings/titles | +| 3 | 목업 감지 | - | ✅ | 1ms | Real page: 1 inputs, 58 buttons | +| 4 | 테이블 구조 검증 | - | ⚠️ | 1014ms | No table found | +| 5 | 통계 카드 확인 | - | ✅ | 3ms | evaluate ok | +| 6 | 직책관리 페이지 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 7 | 설정 페이지 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 8 | 추가 버튼 클릭 | - | ✅ | 312ms | Clicked (existed): button:has-text('추가'), button:has-text('등록'), button:has-text | +| 9 | 대기 | - | ✅ | 1001ms | Waited 1000ms | +| 10 | 모달 닫기 | - | ✅ | 1ms | No modal open | +| 11 | 콘솔 에러 확인 | - | ✅ | 1ms | Element exists: body | +| 12 | 직책관리 최종 확인 | - | ✅ | 0ms | Detail checks: 1/1 | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 0 | 0 | 0 | 0ms | 0 | diff --git a/e2e/results/hotfix/success/OK-settings-rank_2026-02-11_16-27-52.md b/e2e/results/hotfix/success/OK-settings-rank_2026-02-11_16-27-52.md new file mode 100644 index 0000000..affe205 --- /dev/null +++ b/e2e/results/hotfix/success/OK-settings-rank_2026-02-11_16-27-52.md @@ -0,0 +1,30 @@ +# ✅ E2E 테스트 성공: 직급관리 테스트 + +**테스트 ID**: settings-rank | **실행**: 2026-02-11_16-27-52 | **결과**: PASS +**소요 시간**: 11.9초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 12 | 11 | 0 | 1 | 92% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 설정 > 직급관리 | - | ✅ | 2513ms | Menu navigation: 설정 > 직급관리 | +| 2 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/settings/ranks | +| 3 | 목업 감지 | - | ✅ | 1ms | Real page: 1 inputs, 62 buttons | +| 4 | 테이블 구조 검증 | - | ⚠️ | 1010ms | No table found | +| 5 | 통계 카드 확인 | - | ✅ | 3ms | evaluate ok | +| 6 | 직급관리 페이지 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 7 | 설정 페이지 확인 | - | ✅ | 1ms | Detail checks: 1/1 | +| 8 | 추가 버튼 클릭 | - | ✅ | 314ms | Clicked (existed): button:has-text('추가'), button:has-text('등록'), button:has-text | +| 9 | 대기 | - | ✅ | 1015ms | Waited 1000ms | +| 10 | 모달 닫기 | - | ✅ | 1ms | No modal open | +| 11 | 콘솔 에러 확인 | - | ✅ | 1ms | Element exists: body | +| 12 | 직급관리 최종 확인 | - | ✅ | 1ms | Detail checks: 1/1 | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 0 | 0 | 0 | 0ms | 0 | diff --git a/e2e/results/hotfix/success/OK-settings-subscription_2026-02-11_16-28-06.md b/e2e/results/hotfix/success/OK-settings-subscription_2026-02-11_16-28-06.md new file mode 100644 index 0000000..01dd532 --- /dev/null +++ b/e2e/results/hotfix/success/OK-settings-subscription_2026-02-11_16-28-06.md @@ -0,0 +1,34 @@ +# ✅ E2E 테스트 성공: 구독관리 테스트 + +**테스트 ID**: settings-subscription | **실행**: 2026-02-11_16-28-06 | **결과**: PASS +**소요 시간**: 13.6초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 16 | 12 | 0 | 4 | 75% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 설정 > 구독관리 | - | ✅ | 2521ms | Menu navigation: 설정 > 구독관리 | +| 2 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/subscription | +| 3 | 필수 검증 #5: 목업 페이지 감지 | - | ⚠️ | 1005ms | Possible mockup page (score: 2) | +| 4 | 통계 카드 확인 | - | ✅ | 1ms | evaluate ok | +| 5 | 현재 플랜 카드 존재 확인 | - | ⚠️ | 1025ms | Element not found: planCard | +| 6 | 플랜/가격 정보 텍스트 확인 | - | ✅ | 0ms | evaluate ok | +| 7 | 구독 기간/날짜 정보 확인 | - | ✅ | 0ms | evaluate ok | +| 8 | 결제 관련 정보 표시 확인 | - | ✅ | 0ms | evaluate ok | +| 9 | 플랜 비교/변경 UI 확인 | - | ⚠️ | 1017ms | Element not found: table, [class*='plan'], [class*='compare'], button:has-text(' | +| 10 | 사용량 현황 영역 확인 | - | ✅ | 0ms | evaluate ok | +| 11 | 결제 내역 영역 확인 | - | ⚠️ | 1012ms | Element not found: table tbody tr, [class*='history'], [class*='payment-list'], | +| 12 | 다운로드/영수증 버튼 확인 | - | ✅ | 1ms | Element exists: button:has-text('다운로드'), button:has-text('영수증'), button:has-text | +| 13 | 결제 수단 관련 UI 확인 | - | ✅ | 0ms | evaluate ok | +| 14 | 페이지네이션 확인 | - | ✅ | 1ms | evaluate ok | +| 15 | 콘솔 에러 확인 | - | ✅ | 0ms | Element exists: body | +| 16 | 구독 관리 버튼 확인 (취소/해지 포함) | - | ✅ | 2ms | Element exists: button:has-text('취소'), button:has-text('해지'), button:has-text('관 | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 0 | 0 | 0 | 0ms | 0 | diff --git a/e2e/results/hotfix/success/OK-settings-vacation-policy_2026-02-11_16-28-16.md b/e2e/results/hotfix/success/OK-settings-vacation-policy_2026-02-11_16-28-16.md new file mode 100644 index 0000000..320b911 --- /dev/null +++ b/e2e/results/hotfix/success/OK-settings-vacation-policy_2026-02-11_16-28-16.md @@ -0,0 +1,34 @@ +# ✅ E2E 테스트 성공: 휴가정책 테스트 + +**테스트 ID**: settings-vacation-policy | **실행**: 2026-02-11_16-28-16 | **결과**: PASS +**소요 시간**: 9.8초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 16 | 15 | 0 | 1 | 94% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 설정 > 휴가정책 | - | ✅ | 515ms | Menu navigation: 설정 > 휴가정책 | +| 2 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/settings/leave-policy | +| 3 | 필수 검증 #5: 목업 페이지 감지 | - | ✅ | 0ms | Real page: 3 inputs, 26 buttons | +| 4 | 통계 카드 확인 | - | ✅ | 0ms | evaluate ok | +| 5 | 휴가 정책 폼 구조 확인 | - | ✅ | 0ms | Checks: 4/4 verified | +| 6 | [READ] 현재 정책 값 확인 | READ | ⚠️ | 1006ms | Detail checks: 0/3 matched | +| 7 | [UPDATE] 연차 설정 확인 | UPDATE | ✅ | 425ms | Clicked: input[type='number']:nth-of-type(1), input[placeholder*='연차'], input[pl | +| 8 | [UPDATE] 반차 사용 설정 | UPDATE | ✅ | 417ms | Clicked: button[role='switch'], [class*='switch'], input[type='checkbox'], label | +| 9 | [UPDATE] 이월 설정 확인 | UPDATE | ✅ | 2ms | Element not present (ok): input[type='number']:nth-of-type(2), input[placeholder | +| 10 | [UPDATE] 필수 검증 #2: 정책 저장 | UPDATE | ✅ | 419ms | Clicked: button:has-text('저장'), button:has-text('적용') | +| 11 | [UPDATE] 저장 결과 확인 | UPDATE | ✅ | 0ms | Detail checks: 2/2 | +| 12 | 휴가 유형 관리 확인 | - | ✅ | 0ms | Checks: 1/3 verified | +| 13 | [CREATE] 휴가 유형 추가 버튼 확인 | CREATE | ✅ | 1ms | Checks: 1/1 verified | +| 14 | 페이지네이션 확인 | - | ✅ | 1ms | evaluate ok | +| 15 | 콘솔 에러 확인 | - | ✅ | 1ms | Element exists: body | +| 16 | 정책 적용 대상 확인 | - | ✅ | 0ms | Checks: 2/2 verified | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 1 | 1 | 0 | 114ms | 0 | diff --git a/e2e/results/hotfix/success/OK-shipment-management_2026-02-11_16-28-46.md b/e2e/results/hotfix/success/OK-shipment-management_2026-02-11_16-28-46.md new file mode 100644 index 0000000..a876cac --- /dev/null +++ b/e2e/results/hotfix/success/OK-shipment-management_2026-02-11_16-28-46.md @@ -0,0 +1,31 @@ +# ✅ E2E 테스트 성공: 출고관리 테스트 + +**테스트 ID**: shipment-management | **실행**: 2026-02-11_16-28-46 | **결과**: PASS +**소요 시간**: 19.2초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 13 | 11 | 0 | 2 | 85% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 메뉴 진입: 출고관리 > 출고관리 | - | ⚠️ | 10076ms | Menu nav: URL missing "/outbound" | +| 2 | 목업 감지 | - | ⚠️ | 1018ms | Possible mockup page (score: 2) | +| 3 | 통계 카드 확인 | - | ✅ | 5ms | evaluate ok | +| 4 | 출고관리 페이지 확인 | - | ✅ | 1ms | Detail checks: 1/1 | +| 5 | UI 요소 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 6 | 검색 입력 시도 | - | ✅ | 9ms | Element not present (ok): input[type='search'], input[placeholder*='검색'], input[ | +| 7 | 대기 | - | ✅ | 1002ms | Waited 1000ms | +| 8 | 행 클릭 시도 | - | ✅ | 4ms | Element not present (ok): table tbody tr, [role='row']:not(:first-child), [class | +| 9 | 상세 확인 | - | ✅ | 0ms | Detail checks: 1/1 | +| 10 | 모달 닫기 | - | ✅ | 1ms | No modal open | +| 11 | 페이지네이션 확인 | - | ✅ | 1ms | evaluate ok | +| 12 | 콘솔 에러 확인 | - | ✅ | 1ms | Element exists: body | +| 13 | 최종 확인 | - | ✅ | 0ms | Detail checks: 1/1 | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 0 | 0 | 0 | 0ms | 0 | diff --git a/e2e/results/hotfix/success/OK-vendor-ledger_2026-02-11_16-29-08.md b/e2e/results/hotfix/success/OK-vendor-ledger_2026-02-11_16-29-08.md new file mode 100644 index 0000000..2601ccb --- /dev/null +++ b/e2e/results/hotfix/success/OK-vendor-ledger_2026-02-11_16-29-08.md @@ -0,0 +1,52 @@ +# ✅ E2E 테스트 성공: 거래처원장 테스트 + +**테스트 ID**: vendor-ledger | **실행**: 2026-02-11_16-29-08 | **결과**: PASS +**소요 시간**: 21.7초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 34 | 30 | 0 | 3 | 88% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 사이드바 메뉴 전체 펼치기 | - | ✅ | 2305ms | evaluate ok / Waited 300ms / evaluate ok / Waited 2000ms | +| 2 | 로그인 상태 확인 | - | ✅ | 1ms | Page verified | +| 3 | 2단계 메뉴 진입: 회계관리 > 거래처원장 | - | ✅ | 2552ms | Found: 회계관리 / Clicked (existed): 회계관리 / Waited 500ms / Found: 거래처원장 / Clicked (e | +| 4 | 필수 검증 #5: 목업 페이지 감지 | - | ✅ | 0ms | Real page: 1 inputs, 64 buttons | +| 5 | 통계 카드 확인 | - | ✅ | 1ms | Checks: 4/4 verified | +| 6 | 테이블 구조 확인 | - | ✅ | 0ms | Table: 8 cols, 15 rows | +| 7 | 기간 설정 - 시작일 변경 | - | ✅ | 0ms | Element not present (ok): startDate | +| 8 | 기간 설정 - 종료일 변경 | - | ✅ | 1ms | Element not present (ok): endDate | +| 9 | 기간 설정 - 데이터 변화 확인 | - | ⚠️ | 1029ms | Detail checks: 0/3 matched | +| 10 | ⚠️ 필수 검증: 검색 기능 테스트 | - | ✅ | 1318ms | Captured count: 15 / Clicked (existed): input[type='search'], input[placeholder* | +| 11 | 검색 결과 데이터 검증 | - | ✅ | 0ms | No action | +| 12 | 검색 결과 확인 | - | ✅ | 0ms | Data found: "" | +| 13 | 검색 초기화 | - | ✅ | 818ms | Clicked (existed): input[type='search'], input[placeholder*='검색'] / Waited 500ms | +| 14 | 체크박스 선택 | - | ✅ | 1ms | Element not present (ok): first_row | +| 15 | 전체 선택 체크박스 | - | ✅ | 0ms | Element not present (ok): select_all | +| 16 | 전체 선택 해제 | - | ✅ | 0ms | Element not present (ok): select_all | +| 17 | 필수 검증 #1: 엑셀 다운로드 | - | ✅ | 427ms | Clicked: 엑셀 다운로드 | +| 18 | 테이블 행 클릭 - 상세 페이지 이동 | - | ✅ | 316ms | Clicked (existed): table tbody tr:first-child | +| 19 | 상세 페이지 - URL 파라미터 확인 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/accounting/vendor-ledger/28?start_dat | +| 20 | 상세 페이지 - 헤더 확인 | - | ✅ | 2ms | Checks: 2/2 verified | +| 21 | 상세 페이지 - 거래처 정보 카드 확인 | - | ⚠️ | 1009ms | Detail checks: 0/9 matched | +| 22 | 상세 페이지 - 요약 통계 확인 | - | ✅ | 1ms | No text to verify | +| 23 | 상세 페이지 - 판매/수금 내역 테이블 확인 | - | ⚠️ | 1024ms | No table found | +| 24 | 상세 페이지 - 기간 변경 | - | ✅ | 2ms | Element not present (ok): input[type='date'], [class*='date-picker'] | +| 25 | 상세 페이지 - 거래 내역 데이터 변화 확인 | - | ✅ | 0ms | Data found: "" | +| 26 | ⚠️ 필수 검증: PDF 다운로드 전 페이지 스크린샷 | - | ⚠️ | 0ms | Requires native screenshot | +| 27 | ⚠️ 필수 검증: PDF 다운로드 실행 및 파일 보관 | - | ✅ | 3306ms | No action / Clicked (existed): PDF 다운로드 / Waited 3000ms / No action / No action | +| 28 | ⚠️ PDF 파일 유효성 검증 | - | ✅ | 0ms | No action | +| 29 | 📋 PDF 스타일 수동 확인 체크리스트 | - | ✅ | 0ms | No action | +| 30 | 상세 페이지 - 작업 버튼 확인 (어음 항목) | - | ✅ | 0ms | Checks: 1/2 verified | +| 31 | 상세 페이지 - 목록 버튼 클릭 | - | ✅ | 316ms | Clicked (existed): 목록 | +| 32 | 목록 페이지 복귀 확인 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/accounting/vendor-ledger | +| 33 | 페이지네이션 동작 확인 | - | ✅ | 0ms | Checks: 2/3 verified | +| 34 | 콘솔 에러 확인 | - | ✅ | 1ms | Element exists: body | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 4 | 4 | 0 | 139ms | 0 | diff --git a/e2e/results/hotfix/success/OK-vendor-management_2026-02-11_16-06-16.md b/e2e/results/hotfix/success/OK-vendor-management_2026-02-11_16-06-16.md new file mode 100644 index 0000000..def474e --- /dev/null +++ b/e2e/results/hotfix/success/OK-vendor-management_2026-02-11_16-06-16.md @@ -0,0 +1,52 @@ +# ✅ E2E 테스트 성공: 거래처관리 테스트 + +**테스트 ID**: vendor-management | **실행**: 2026-02-11_16-06-16 | **결과**: PASS +**소요 시간**: 36.4초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 34 | 34 | 0 | 0 | 100% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 사이드바 메뉴 전체 펼치기 | - | ✅ | 2304ms | evaluate ok / Waited 300ms / evaluate ok / Waited 2000ms | +| 2 | 2단계 메뉴 진입: 회계관리 > 거래처관리 | - | ✅ | 11548ms | Found: 회계관리 / Clicked (existed): 회계관리 / Waited 500ms / Found: 거래처관리 / Clicked (e | +| 3 | 필수 검증 #5: 목업 페이지 감지 | - | ✅ | 1ms | Real page: 1 inputs, 76 buttons | +| 4 | 통계 카드 확인 | - | ✅ | 0ms | Checks: 3/3 verified | +| 5 | 테이블 구조 확인 | - | ✅ | 1ms | Table: 10 cols, 20 rows | +| 6 | ⚠️ 필수 검증: 검색 기능 | - | ✅ | 1218ms | evaluate ok / Filled "input[placeholder*='검색']" with "가우스" / Waited 1000ms / eva | +| 7 | 검색 결과 데이터 검증 | - | ✅ | 0ms | No text to verify | +| 8 | 검색 초기화 및 복원 확인 | - | ✅ | 1015ms | evaluate ok / Waited 1000ms / evaluate ok | +| 9 | 구분 필터 테스트 (매출) | - | ✅ | 1517ms | evaluate ok | +| 10 | 구분 필터 초기화 | - | ✅ | 1515ms | evaluate ok | +| 11 | 테이블 행 클릭 - 상세 페이지 이동 | - | ✅ | 2011ms | evaluate ok / evaluate ok | +| 12 | 상세 페이지 - URL 확인 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/accounting/vendors/11?mode=view | +| 13 | 상세 페이지 - 헤더 확인 | - | ✅ | 1ms | Checks: 4/4 verified | +| 14 | 상세 페이지 - 기본 정보 카드 확인 | - | ✅ | 1ms | Detail checks: 6/6 | +| 15 | 상세 페이지 - 연락처 정보 확인 | - | ✅ | 0ms | Detail checks: 5/5 | +| 16 | 상세 페이지 - 담당자 정보 확인 | - | ✅ | 0ms | Detail checks: 3/3 | +| 17 | 상세 페이지 - 회사 정보 확인 | - | ✅ | 0ms | Detail checks: 2/3 | +| 18 | 상세 페이지 - 신용/거래 정보 확인 | - | ✅ | 0ms | Detail checks: 6/6 | +| 19 | 상세 페이지 - 추가 정보 확인 | - | ✅ | 0ms | Detail checks: 1/3 | +| 20 | 상세 페이지 - 메모 섹션 확인 | - | ✅ | 0ms | Checks: 2/2 verified | +| 21 | 핵심 테스트: 수정 버튼 클릭 | - | ✅ | 304ms | Clicked (existed): 수정 | +| 22 | 수정 모드 - URL 확인 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/accounting/vendors/11?mode=edit | +| 23 | 수정 모드 - 필드 편집 가능 확인 | - | ✅ | 0ms | Edit mode active | +| 24 | 핵심 테스트: 거래처명 수정 | - | ✅ | 23ms | evaluate ok | +| 25 | 핵심 테스트: 저장 버튼 클릭 | - | ✅ | 2309ms | evaluate ok / Clicked (existed): 저장 / Waited 2000ms | +| 26 | 필수 검증 #2: 저장 완료 확인 | - | ✅ | 2ms | evaluate ok | +| 27 | 수정 결과 확인 - 목록에서 검증 | - | ✅ | 1ms | evaluate ok | +| 28 | 원래 값 복원 - 수정된 거래처 클릭 | - | ✅ | 2014ms | evaluate ok | +| 29 | 원래 값 복원 - 수정 버튼 클릭 | - | ✅ | 1516ms | evaluate ok | +| 30 | 원래 값 복원 - 거래처명 원복 | - | ✅ | 1ms | evaluate ok | +| 31 | 원래 값 복원 - 저장 | - | ✅ | 2003ms | evaluate ok | +| 32 | 원래 값 복원 - 완료 확인 | - | ✅ | 1ms | evaluate ok | +| 33 | 목록 페이지 최종 확인 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/accounting/vendors | +| 34 | 콘솔 에러 확인 | - | ✅ | 1ms | Element exists: body | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 22 | 22 | 0 | 60ms | 0 | diff --git a/e2e/results/hotfix/success/OK-vendor-management_2026-02-11_16-29-45.md b/e2e/results/hotfix/success/OK-vendor-management_2026-02-11_16-29-45.md new file mode 100644 index 0000000..f184c41 --- /dev/null +++ b/e2e/results/hotfix/success/OK-vendor-management_2026-02-11_16-29-45.md @@ -0,0 +1,52 @@ +# ✅ E2E 테스트 성공: 거래처관리 테스트 + +**테스트 ID**: vendor-management | **실행**: 2026-02-11_16-29-45 | **결과**: PASS +**소요 시간**: 36.5초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 34 | 34 | 0 | 0 | 100% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 사이드바 메뉴 전체 펼치기 | - | ✅ | 2316ms | evaluate ok / Waited 300ms / evaluate ok / Waited 2000ms | +| 2 | 2단계 메뉴 진입: 회계관리 > 거래처관리 | - | ✅ | 11535ms | Found: 회계관리 / Clicked (existed): 회계관리 / Waited 500ms / Found: 거래처관리 / Clicked (e | +| 3 | 필수 검증 #5: 목업 페이지 감지 | - | ✅ | 1ms | Real page: 1 inputs, 76 buttons | +| 4 | 통계 카드 확인 | - | ✅ | 1ms | Checks: 3/3 verified | +| 5 | 테이블 구조 확인 | - | ✅ | 0ms | Table: 10 cols, 20 rows | +| 6 | ⚠️ 필수 검증: 검색 기능 | - | ✅ | 1216ms | evaluate ok / Filled "input[placeholder*='검색']" with "가우스" / Waited 1000ms / eva | +| 7 | 검색 결과 데이터 검증 | - | ✅ | 0ms | No text to verify | +| 8 | 검색 초기화 및 복원 확인 | - | ✅ | 1014ms | evaluate ok / Waited 1000ms / evaluate ok | +| 9 | 구분 필터 테스트 (매출) | - | ✅ | 1521ms | evaluate ok | +| 10 | 구분 필터 초기화 | - | ✅ | 1517ms | evaluate ok | +| 11 | 테이블 행 클릭 - 상세 페이지 이동 | - | ✅ | 2013ms | evaluate ok / evaluate ok | +| 12 | 상세 페이지 - URL 확인 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/accounting/vendors/11?mode=view | +| 13 | 상세 페이지 - 헤더 확인 | - | ✅ | 0ms | Checks: 4/4 verified | +| 14 | 상세 페이지 - 기본 정보 카드 확인 | - | ✅ | 1ms | Detail checks: 6/6 | +| 15 | 상세 페이지 - 연락처 정보 확인 | - | ✅ | 0ms | Detail checks: 5/5 | +| 16 | 상세 페이지 - 담당자 정보 확인 | - | ✅ | 0ms | Detail checks: 3/3 | +| 17 | 상세 페이지 - 회사 정보 확인 | - | ✅ | 0ms | Detail checks: 2/3 | +| 18 | 상세 페이지 - 신용/거래 정보 확인 | - | ✅ | 0ms | Detail checks: 6/6 | +| 19 | 상세 페이지 - 추가 정보 확인 | - | ✅ | 0ms | Detail checks: 1/3 | +| 20 | 상세 페이지 - 메모 섹션 확인 | - | ✅ | 0ms | Checks: 2/2 verified | +| 21 | 핵심 테스트: 수정 버튼 클릭 | - | ✅ | 314ms | Clicked (existed): 수정 | +| 22 | 수정 모드 - URL 확인 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/accounting/vendors/11?mode=edit | +| 23 | 수정 모드 - 필드 편집 가능 확인 | - | ✅ | 1ms | Edit mode active | +| 24 | 핵심 테스트: 거래처명 수정 | - | ✅ | 29ms | evaluate ok | +| 25 | 핵심 테스트: 저장 버튼 클릭 | - | ✅ | 2339ms | evaluate ok / Clicked (existed): 저장 / Waited 2000ms | +| 26 | 필수 검증 #2: 저장 완료 확인 | - | ✅ | 3ms | evaluate ok | +| 27 | 수정 결과 확인 - 목록에서 검증 | - | ✅ | 0ms | evaluate ok | +| 28 | 원래 값 복원 - 수정된 거래처 클릭 | - | ✅ | 2012ms | evaluate ok | +| 29 | 원래 값 복원 - 수정 버튼 클릭 | - | ✅ | 1517ms | evaluate ok | +| 30 | 원래 값 복원 - 거래처명 원복 | - | ✅ | 1ms | evaluate ok | +| 31 | 원래 값 복원 - 저장 | - | ✅ | 2016ms | evaluate ok | +| 32 | 원래 값 복원 - 완료 확인 | - | ✅ | 2ms | evaluate ok | +| 33 | 목록 페이지 최종 확인 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/accounting/vendors | +| 34 | 콘솔 에러 확인 | - | ✅ | 1ms | Element exists: body | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 22 | 22 | 0 | 62ms | 0 | diff --git a/e2e/results/hotfix/success/OK-withdrawal-management_2026-02-11_16-06-27.md b/e2e/results/hotfix/success/OK-withdrawal-management_2026-02-11_16-06-27.md new file mode 100644 index 0000000..e6fbbab --- /dev/null +++ b/e2e/results/hotfix/success/OK-withdrawal-management_2026-02-11_16-06-27.md @@ -0,0 +1,39 @@ +# ✅ E2E 테스트 성공: 출금관리 테스트 + +**테스트 ID**: withdrawal-management | **실행**: 2026-02-11_16-06-27 | **결과**: PASS +**소요 시간**: 11.0초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 21 | 21 | 0 | 0 | 100% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 사이드바 메뉴 전체 펼치기 | - | ✅ | 2320ms | evaluate ok / Waited 300ms / evaluate ok / Waited 2000ms | +| 2 | 출금관리 메뉴 진입 | - | ✅ | 0ms | No action | +| 3 | 목록 페이지 구조 확인 | - | ✅ | 0ms | No action | +| 4 | 계정과목명 드롭다운 옵션 확인 | - | ✅ | 2ms | Element not present (ok): 계정과목명 드롭다운 | +| 5 | 체크박스 선택 후 계정과목명 일괄변경 | - | ✅ | 313ms | Element not present (ok): 첫 번째 행 체크박스 / Element not present (ok): 계정과목명 드롭다운 / E | +| 6 | ⚠️ 필수 검증: 계정과목명 변경 데이터 반영 확인 | - | ✅ | 0ms | No action | +| 7 | 출금 상세 페이지 이동 | - | ✅ | 2ms | Element not present (ok): 테이블 첫 번째 행 | +| 8 | 상세 페이지 읽기 모드 필드 확인 | - | ✅ | 0ms | No action | +| 9 | 수정 모드 전환 | - | ✅ | 0ms | No action | +| 10 | 수정 모드 필드 활성화 검증 | - | ✅ | 0ms | No action | +| 11 | 거래처 드롭다운 옵션 확인 | - | ✅ | 6ms | Element not present (ok): 거래처 드롭다운 | +| 12 | 출금 유형 드롭다운 옵션 확인 | - | ✅ | 3ms | Element not present (ok): 출금 유형 드롭다운 | +| 13 | 수정 데이터 입력 | - | ✅ | 313ms | Element not present (ok): 거래처 드롭다운 / Clicked (existed): 거래처테스트 / Element not pre | +| 14 | 저장 및 결과 확인 | - | ✅ | 0ms | No action | +| 15 | ⚠️ 필수 검증: 수정 데이터 반영 확인 | - | ✅ | 0ms | No action | +| 16 | 취소 버튼 동작 확인 | - | ✅ | 610ms | Clicked (existed): 수정 / Clicked (existed): 취소 | +| 17 | 목록 버튼 동작 확인 | - | ✅ | 0ms | No action | +| 18 | 필터 드롭다운 검증 | - | ✅ | 0ms | No action | +| 19 | 날짜 필터 검증 | - | ✅ | 4ms | Element not present (ok): 당해년도 | +| 20 | 페이지네이션 동작 확인 | - | ✅ | 314ms | Clicked (existed): 다음 | +| 21 | 콘솔 에러 확인 | - | ✅ | 2ms | Element exists: body | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 11 | 11 | 0 | 83ms | 0 | diff --git a/e2e/results/hotfix/success/OK-withdrawal-management_2026-02-11_16-29-56.md b/e2e/results/hotfix/success/OK-withdrawal-management_2026-02-11_16-29-56.md new file mode 100644 index 0000000..732290f --- /dev/null +++ b/e2e/results/hotfix/success/OK-withdrawal-management_2026-02-11_16-29-56.md @@ -0,0 +1,39 @@ +# ✅ E2E 테스트 성공: 출금관리 테스트 + +**테스트 ID**: withdrawal-management | **실행**: 2026-02-11_16-29-56 | **결과**: PASS +**소요 시간**: 11.0초 + +## 테스트 요약 +| 전체 | 성공 | 실패 | 경고 | 성공률 | +|------|------|------|------|--------| +| 21 | 21 | 0 | 0 | 100% | + +## 전체 스텝 결과 +| # | 스텝 | Phase | 상태 | 소요시간 | 비고 | +|---|------|-------|------|---------|------| +| 1 | 사이드바 메뉴 전체 펼치기 | - | ✅ | 2305ms | evaluate ok / Waited 300ms / evaluate ok / Waited 2000ms | +| 2 | 출금관리 메뉴 진입 | - | ✅ | 0ms | No action | +| 3 | 목록 페이지 구조 확인 | - | ✅ | 0ms | No action | +| 4 | 계정과목명 드롭다운 옵션 확인 | - | ✅ | 3ms | Element not present (ok): 계정과목명 드롭다운 | +| 5 | 체크박스 선택 후 계정과목명 일괄변경 | - | ✅ | 306ms | Element not present (ok): 첫 번째 행 체크박스 / Element not present (ok): 계정과목명 드롭다운 / E | +| 6 | ⚠️ 필수 검증: 계정과목명 변경 데이터 반영 확인 | - | ✅ | 0ms | No action | +| 7 | 출금 상세 페이지 이동 | - | ✅ | 7ms | Element not present (ok): 테이블 첫 번째 행 | +| 8 | 상세 페이지 읽기 모드 필드 확인 | - | ✅ | 0ms | No action | +| 9 | 수정 모드 전환 | - | ✅ | 0ms | No action | +| 10 | 수정 모드 필드 활성화 검증 | - | ✅ | 0ms | No action | +| 11 | 거래처 드롭다운 옵션 확인 | - | ✅ | 1ms | Element not present (ok): 거래처 드롭다운 | +| 12 | 출금 유형 드롭다운 옵션 확인 | - | ✅ | 1ms | Element not present (ok): 출금 유형 드롭다운 | +| 13 | 수정 데이터 입력 | - | ✅ | 310ms | Element not present (ok): 거래처 드롭다운 / Clicked (existed): 거래처테스트 / Element not pre | +| 14 | 저장 및 결과 확인 | - | ✅ | 0ms | No action | +| 15 | ⚠️ 필수 검증: 수정 데이터 반영 확인 | - | ✅ | 0ms | No action | +| 16 | 취소 버튼 동작 확인 | - | ✅ | 622ms | Clicked (existed): 수정 / Clicked (existed): 취소 | +| 17 | 목록 버튼 동작 확인 | - | ✅ | 0ms | No action | +| 18 | 필터 드롭다운 검증 | - | ✅ | 0ms | No action | +| 19 | 날짜 필터 검증 | - | ✅ | 2ms | Element not present (ok): 당해년도 | +| 20 | 페이지네이션 동작 확인 | - | ✅ | 303ms | Clicked (existed): 다음 | +| 21 | 콘솔 에러 확인 | - | ✅ | 2ms | Element exists: body | + +## API 요약 +| 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | +|---------|------|------|----------|--------------| +| 11 | 11 | 0 | 52ms | 0 | diff --git a/e2e/runner/enhance-scenarios.js b/e2e/runner/enhance-scenarios.js new file mode 100644 index 0000000..c55128f --- /dev/null +++ b/e2e/runner/enhance-scenarios.js @@ -0,0 +1,792 @@ +#!/usr/bin/env node +/** + * E2E Scenario Enhancement Script + * + * Enhances all 68 scenarios to "ultra-precise" level by adding: + * - URL verification after navigation + * - Table structure verification + * - Statistics card checks + * - Search functionality test (fill → verify → clear → verify) + * - First row click → detail verification + * - Add/create button → modal verification + * - Console error check + * - Enhanced verify_detail with visible_text format + * + * Categories: + * A (5-8 steps): Ultra-simple → target 15-18 steps + * B (10-12 steps): Simple READ → target 16-20 steps + * C (15-19 steps): Medium CRUD → target 20-25 steps + * D (20+ steps): Complex → fix warnings + add missing checks + */ + +const fs = require('fs'); +const path = require('path'); + +const SCENARIOS_DIR = path.join(__dirname, '..', 'scenarios'); +const BACKUP_DIR = path.join(SCENARIOS_DIR, '_backup_before_enhance'); + +// Skip these special files +const SKIP_FILES = ['_global', 'login.json', 'pdf-download-test.json']; + +// ─── Page Feature Exclusions (from test run analysis) ─── + +// Pages without standard