# ❌ E2E 테스트 실패: 근태관리 테스트 **테스트 ID**: attendance-management | **실행**: 2026-03-07_22-31-28 | **결과**: FAIL **소요 시간**: 30.8초 ## 테스트 요약 | 전체 | 성공 | 실패 | 경고 | 성공률 | |------|------|------|------|--------| | 25 | 20 | 5 | 0 | 80% | ## 실패 스텝 | # | 스텝 | Phase | 에러 | |---|------|-------|------| | 8 | 모달 열림 대기 | - | Step timeout (>3s): 모달 열림 대기 | | 9 | 대상 사원 선택 | - | Dropdown option "첫번째 사원" not found [context: btn:97,input:1,text:found-on-page] | | 15 | 사유 모달 열림 대기 | - | Step timeout (>3s): 사유 모달 열림 대기 | | 16 | 사유 유형 선택 | - | Dropdown option "출장신청서" not found [context: btn:90,input:1,text:found-on-page] | | 17 | 사유 대상 사원 선택 | - | Dropdown option "첫번째 사원" not found [context: btn:90,input:1,text:found-on-page] | ## 전체 스텝 결과 | # | 스텝 | Phase | 상태 | 소요시간 | 비고 | |---|------|-------|------|---------|------| | 1 | 메뉴 진입: 인사관리 > 근태관리 | - | ✅ | 2508ms | Menu navigation: 인사관리 > 근태관리 | | 2 | 페이지 로드 대기 | - | ✅ | 3002ms | Waited 3000ms | | 3 | URL 검증 | - | ✅ | 0ms | URL verified: https://dev.codebridge-x.com/hr/attendance-management | | 4 | GPS 위치 정보 모킹 | - | ✅ | 0ms | json_fail:Unexpected token 'G', "GPS mocking complete" is not valid JSON/raw:GPS | | 5 | 근태 현황 카드 확인 | - | ✅ | 1ms | Element exists: body | | 6 | 테이블 로드 대기 | - | ✅ | 0ms | Table loaded: 20 rows | | 7 | 근태 등록 버튼 클릭 | - | ✅ | 307ms | Clicked button: 근태 등록 | | 8 | 모달 열림 대기 | - | ❌ | 3001ms | Step timeout (>3s): 모달 열림 대기 | | 9 | 대상 사원 선택 | - | ❌ | 3050ms | Dropdown option "첫번째 사원" not found [context: btn:97,input:1,text:found-on-page] | | 10 | 기준일 기본값 확인 | - | ✅ | 1ms | Element exists: [role='dialog'] | | 11 | 근태 등록 저장 | - | ✅ | 314ms | Clicked button: 저장 | | 12 | 근태 등록 모달 닫기 확인 | - | ✅ | 0ms | No modal open | | 13 | 근태 등록 결과 확인 | - | ✅ | 1ms | Element exists: table tbody tr | | 14 | 사유 등록 버튼 클릭 | - | ✅ | 307ms | Clicked button: 사유 등록 | | 15 | 사유 모달 열림 대기 | - | ❌ | 3012ms | Step timeout (>3s): 사유 모달 열림 대기 | | 16 | 사유 유형 선택 | - | ❌ | 3038ms | Dropdown option "출장신청서" not found [context: btn:90,input:1,text:found-on-page] | | 17 | 사유 대상 사원 선택 | - | ❌ | 3027ms | Dropdown option "첫번째 사원" not found [context: btn:90,input:1,text:found-on-page] | | 18 | 사유 등록 저장 | - | ✅ | 303ms | Clicked button: 등록 | | 19 | 사유 등록 모달 닫기 확인 | - | ✅ | 1ms | No modal open | | 20 | 기간 필터 - 당월 클릭 | - | ✅ | 410ms | Clicked: 당월 | | 21 | 필터 적용 대기 | - | ✅ | 1001ms | Waited 1000ms | | 22 | 검색 기능 테스트 | - | ✅ | 207ms | Filled "input[type='search'], input[placeholder*='검색']" with "홍" | | 23 | 검색 결과 대기 | - | ✅ | 1004ms | Waited 1000ms | | 24 | 검색 초기화 | - | ✅ | 206ms | Cleared: input[type='search'], input[placeholder*='검색'] | | 25 | 엑셀 다운로드 버튼 확인 | - | ✅ | 1ms | Element exists: button:has-text('엑셀 다운로드') | ## API 요약 | 총 호출 | 성공 | 실패 | 평균 응답 | 느린 호출(>2s) | |---------|------|------|----------|--------------| | 5 | 5 | 0 | 144ms | 0 | ## 페이지 건강 검사 | 항목 | 결과 | |------|------| | 상태 | ✅ 정상 | | URL | https://dev.codebridge-x.com/hr/attendance-management | ## 자동 진단 | 항목 | 내용 | |------|------| | 근본 원인 | **element_timeout** | | 스크린샷 | diag_attendance-management_2026-03-07_22-31-28.png | ### 권장 조치 1. 요소 대기 타임아웃. 페이지 로드 지연 또는 셀렉터 불일치 ### 콘솔 에러 (진단) 1. `Create failed: 사용자은(는) 필수 항목입니다.` ### 페이지 상태 | 항목 | 값 | |------|----| | DOM 노드 | 833 | | 테이블 행 | 4 | | API 호출 수 | 5 | | 로딩 스피너 | No |