# ✅ E2E 테스트 성공: 결재함 E2E 테스트 **테스트 ID**: approval-box | **실행**: 2026-03-08_11-45-41 | **결과**: PASS **소요 시간**: 26.3초 ## 테스트 요약 | 전체 | 성공 | 실패 | 경고 | 성공률 | |------|------|------|------|--------| | 25 | 23 | 0 | 2 | 92% | ## 전체 스텝 결과 | # | 스텝 | Phase | 상태 | 소요시간 | 비고 | |---|------|-------|------|---------|------| | 1 | 사이드바 메뉴 전체 펼치기 | - | ✅ | 2326ms | json_fail:Unexpected token 'M', "Menu expanded" is not valid JSON/raw:Menu expan | | 2 | 결재관리 > 결재함 메뉴 진입 | - | ✅ | 2526ms | Menu navigation: 결재관리 > 결재함 | | 3 | 메뉴 도착 확인 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/approval/inbox | | 4 | 404 에러 감지 | - | ✅ | 1007ms | json_fail:Unexpected token 'P', "PASS: No 404 error" is not valid JSON/raw:PASS: | | 5 | 페이지 정상 로드 확인 | - | ✅ | 1ms | json_fail:Unexpected token 'P', "PASS: Page"... is not valid JSON/raw:PASS: Page | | 6 | 통계 카드 확인 | - | ✅ | 0ms | Element exists: [class*='card'], [class*='stat'] | | 7 | 탭 구조 확인 | - | ⚠️ | 1506ms | Element not found: [role='tab'], button[role='tab'] | | 8 | 테이블 데이터 확인 | - | ✅ | 1ms | Table: 9 cols, 1 rows | | 9 | 목록 필터 테스트 | - | ✅ | 0ms | json_fail:Unexpected token 'F', "Filters found: 4" is not valid JSON/raw:Filters | | 10 | [APPROVAL] 탭 카운트 캡처 (승인 전 기준) | APPROVAL | ✅ | 0ms | TAB_COUNT_BEFORE | | 11 | 필수 검증: 결재 문서 상세 보기 | - | ✅ | 1508ms | json_fail:Unexpected token 'P', "PASS: Deta"... is not valid JSON/raw:PASS: Deta | | 12 | PDF 다운로드 전 모달 상태 확인 | - | ✅ | 0ms | json_fail:Unexpected token 'W', "WARN: No m"... is not valid JSON/raw:WARN: No m | | 13 | 필수 검증: PDF 다운로드 실행 | - | ⚠️ | 1504ms | evaluate error: Failed to execute 'querySelector' on 'Document': 'button:has-tex | | 14 | PDF 파일 유효성 + content-type 검증 | VERIFY | ✅ | 0ms | WARN: PDF API call not in logs - skip validation | | 15 | PDF 스타일 수동 확인 체크리스트 | - | ✅ | 0ms | json_fail:Unexpected token 'M', "Manual che"... is not valid JSON/raw:Manual che | | 16 | 필수 검증: 결재 승인 실제 수행 | - | ✅ | 1ms | json_fail:Unexpected token 'W', "WARN: Appr"... is not valid JSON/raw:WARN: Appr | | 17 | [APPROVAL] 승인 후 탭 카운트 변화 검증 | VERIFY | ✅ | 1506ms | TAB_COUNT_AFTER_APPROVE / pass: pending 0->0 / pass: completed 0->0 | | 18 | [APPROVAL] 결재완료 탭 이동 + 승인 문서 확인 | VERIFY | ✅ | 1506ms | STATE_TRANSITION_APPROVE / pass: 결재완료 탭에 1건 존재 / rows:1 | | 19 | [APPROVAL] 승인 후 결재 버튼 비활성 확인 | VERIFY | ✅ | 1506ms | APPROVE_BTN_DISABLED / warn: approve button still active on completed document | | 20 | [REJECT] 미결재 탭 이동 + 문서 선택 | REJECT | ✅ | 2019ms | json_fail:Unexpected token 'P', "PASS: Docu"... is not valid JSON/raw:PASS: Docu | | 21 | [REJECT] 반려 버튼 클릭 + 사유 입력 | REJECT | ✅ | 1318ms | REJECT_WITH_REASON / WARN: reason textarea not found | | 22 | [REJECT] 결재반려 탭 이동 + 반려 문서 확인 | VERIFY | ✅ | 1504ms | STATE_TRANSITION_REJECT / pass: 결재반려 탭에 1건 존재 / rows:1 | | 23 | 검색 기능 테스트 | - | ✅ | 516ms | json_fail:Unexpected token 'S', "Search tes"... is not valid JSON/raw:Search tes | | 24 | [VERIFY] 콘솔 에러 확인 | VERIFY | ✅ | 0ms | CONSOLE_CHECK / pass: 0 JS console errors | | 25 | [VERIFY] API 호출 요약 | VERIFY | ✅ | 0ms | API_SUMMARY / API total=5 success=5 failed=0 avg=64ms slow=0 | ## API 요약 | 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | |---------|------|------|----------|--------------| | 5 | 5 | 0 | 64ms | 0 | ## 페이지 건강 검사 | 항목 | 결과 | |------|------| | 상태 | ✅ 정상 | | URL | https://dev.codebridge-x.com/approval/inbox |