Files
sam-hotfix/TC_ATTENDANCE_MANAGEMENT_Report_2026-01-30T03-54-59.md

234 lines
17 KiB
Markdown
Raw Permalink Normal View History

# TC 근태관리 테스트 실행 결과
## 📊 실행 요약
- **테스트명**: TC 근태관리 전체 테스트
- **실행 시간**: 2026. 1. 30. 오후 12:54:59
- **총 테스트**: 21개
- **성공**: 18개
- **실패**: 3개
- **성공률**: 85.7%
- **실행 시간**: 2026-01-30T03:52:13.568Z ~ 2026-01-30T03:54:59.420Z
## 📋 카테고리별 결과
### 1. 페이지 로딩 및 기본 UI
- **통과**: 3/3
- **상세 결과**:
- ✅ L-001: 페이지 접근 테스트
- ✅ L-002: 대시보드 카드 표시 확인
- ✅ L-010: 테이블 컬럼 구성 확인
### 2. 기간 필터 테스트
- **통과**: 3/3
- **상세 결과**:
- ✅ L-020: 당해년도 필터
- ✅ L-023: 당월 필터
- ✅ L-025: 오늘 필터
### 3. 상태 탭 필터 테스트
- **통과**: 3/3
- **상세 결과**:
- ✅ L-040: 전체 탭
- ✅ L-041: 미출근 탭
- ✅ L-042: 정시 출근 탭
### 4. 검색 기능 테스트
- **통과**: 2/2
- **상세 결과**:
- ✅ L-050: 이름 검색
- ✅ L-052: 검색어 지우기
### 5. 근태 등록 모달 테스트
- **통과**: 2/4
- **상세 결과**:
- ✅ D-001: 근태 등록 모달 열기
- ✅ D-010: 모달 필드 확인
- ❌ D-020: 근태 데이터 입력 (elementHandle.click: Timeout 30000ms exceeded.
Call log:
 - attempting click action
 2 × waiting for element to be visible, enabled and stable
 - element is visible, enabled and stable
 - scrolling into view if needed
 - done scrolling
 - <div role="dialog" tabindex="-1" id="radix-_r_1n_" data-state="open" data-slot="dialog-content" aria-labelledby="radix-_r_1o_" aria-describedby="radix-_r_1p_" class="bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-></div> intercepts pointer events
 - retrying click action
 - waiting 20ms
 2 × waiting for element to be visible, enabled and stable
 - element is visible, enabled and stable
 - scrolling into view if needed
 - done scrolling
 - <div role="dialog" tabindex="-1" id="radix-_r_1n_" data-state="open" data-slot="dialog-content" aria-labelledby="radix-_r_1o_" aria-describedby="radix-_r_1p_" class="bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-></div> intercepts pointer events
 - retrying click action
 - waiting 100ms
 57 × waiting for element to be visible, enabled and stable
 - element is visible, enabled and stable
 - scrolling into view if needed
 - done scrolling
 - <div role="dialog" tabindex="-1" id="radix-_r_1n_" data-state="open" data-slot="dialog-content" aria-labelledby="radix-_r_1o_" aria-describedby="radix-_r_1p_" class="bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-></div> intercepts pointer events
 - retrying click action
 - waiting 500ms
)
- ❌ D-024: 근태 등록 저장 (page.click: Timeout 30000ms exceeded.
Call log:
 - waiting for locator('button:has-text("저장"), button:has-text("등록"), button[type="submit"]')
 - locator resolved to 3 elements. Proceeding with the first one: <button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border bg-background text-fo></button>
 - attempting click action
 2 × waiting for element to be visible, enabled and stable
 - element is visible, enabled and stable
 - scrolling into view if needed
 - done scrolling
 - <div class="flex items-center justify-between"></div> from <div role="dialog" tabindex="-1" id="radix-_r_1n_" data-state="open" data-slot="dialog-content" aria-labelledby="radix-_r_1o_" aria-describedby="radix-_r_1p_" class="bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-></div> subtree intercepts pointer events
 - retrying click action
 - waiting 20ms
 2 × waiting for element to be visible, enabled and stable
 - element is visible, enabled and stable
 - scrolling into view if needed
 - done scrolling
 - <div class="flex items-center justify-between"></div> from <div role="dialog" tabindex="-1" id="radix-_r_1n_" data-state="open" data-slot="dialog-content" aria-labelledby="radix-_r_1o_" aria-describedby="radix-_r_1p_" class="bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-></div> subtree intercepts pointer events
 - retrying click action
 - waiting 100ms
 57 × waiting for element to be visible, enabled and stable
 - element is visible, enabled and stable
 - scrolling into view if needed
 - done scrolling
 - <div class="flex items-center justify-between"></div> from <div role="dialog" tabindex="-1" id="radix-_r_1n_" data-state="open" data-slot="dialog-content" aria-labelledby="radix-_r_1o_" aria-describedby="radix-_r_1p_" class="bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-></div> subtree intercepts pointer events
 - retrying click action
 - waiting 500ms
)
### 6. 사유 등록 모달 테스트
- **통과**: 3/4
- **상세 결과**:
- ✅ R-001: 사유 등록 모달 열기
- ✅ R-020: 사유 유형 옵션 확인
- ❌ R-030: 사유 데이터 입력 (page.click: Timeout 30000ms exceeded.
Call log:
 - waiting for locator('text=첫 번째 직원')
)
- ✅ R-033: 사유 등록 저장
### 7. 엑셀 다운로드 테스트
- **통과**: 2/2
- **상세 결과**:
- ✅ E-001: 엑셀 다운로드 버튼 확인
- ✅ E-002: 엑셀 다운로드 실행
## 📸 스크린샷
- L-001: L-001_2026-01-30T03-52-21-654Z.png (before_navigate_and_verify)
- L-001: L-001_2026-01-30T03-52-23-263Z.png (after_navigate_and_verify)
- L-002: L-002_2026-01-30T03-52-24-643Z.png (before_verify_dashboard_cards)
- L-002: L-002_2026-01-30T03-52-24-852Z.png (after_verify_dashboard_cards)
- L-010: L-010_2026-01-30T03-52-26-012Z.png (before_verify_table_columns)
- L-010: L-010_2026-01-30T03-52-26-225Z.png (after_verify_table_columns)
- L-020: L-020_2026-01-30T03-52-27-396Z.png (before_click_filter_button)
- L-020: L-020_2026-01-30T03-52-27-658Z.png (after_click_filter_button)
- L-023: L-023_2026-01-30T03-52-28-910Z.png (before_click_filter_button)
- L-023: L-023_2026-01-30T03-52-29-317Z.png (after_click_filter_button)
- L-025: L-025_2026-01-30T03-52-30-649Z.png (before_click_filter_button)
- L-025: L-025_2026-01-30T03-52-30-957Z.png (after_click_filter_button)
- L-040: L-040_2026-01-30T03-52-32-271Z.png (before_click_tab)
- L-040: L-040_2026-01-30T03-52-32-474Z.png (after_click_tab)
- L-041: L-041_2026-01-30T03-52-33-766Z.png (before_click_tab)
- L-041: L-041_2026-01-30T03-52-34-077Z.png (after_click_tab)
- L-042: L-042_2026-01-30T03-52-35-355Z.png (before_click_tab)
- L-042: L-042_2026-01-30T03-52-35-590Z.png (after_click_tab)
- L-050: L-050_2026-01-30T03-52-36-801Z.png (before_search)
- L-050: L-050_2026-01-30T03-52-36-947Z.png (after_search)
- L-052: L-052_2026-01-30T03-52-38-160Z.png (before_clear_search)
- L-052: L-052_2026-01-30T03-52-38-338Z.png (after_clear_search)
- D-001: D-001_2026-01-30T03-52-39-516Z.png (before_click_button)
- D-001: D-001_2026-01-30T03-52-40-840Z.png (after_click_button)
- D-010: D-010_2026-01-30T03-52-41-999Z.png (before_verify_form_fields)
- D-010: D-010_2026-01-30T03-52-42-162Z.png (after_verify_form_fields)
- D-020: D-020_2026-01-30T03-52-43-293Z.png (before_fill_attendance_form)
- D-020: D-020_2026-01-30T03-53-13-447Z.png (error_fill_attendance_form)
- D-024: D-024_2026-01-30T03-53-13-581Z.png (before_click_save)
- D-024: D-024_2026-01-30T03-53-43-746Z.png (error_click_save)
- R-001: R-001_2026-01-30T03-53-43-893Z.png (before_click_button)
- R-001: R-001_2026-01-30T03-53-52-217Z.png (after_click_button)
- R-020: R-020_2026-01-30T03-53-53-481Z.png (before_verify_reason_types)
- R-020: R-020_2026-01-30T03-53-53-667Z.png (after_verify_reason_types)
- R-030: R-030_2026-01-30T03-53-54-826Z.png (before_fill_reason_form)
- R-030: R-030_2026-01-30T03-54-25-102Z.png (error_fill_reason_form)
- R-033: R-033_2026-01-30T03-54-25-281Z.png (before_click_save)
- R-033: R-033_2026-01-30T03-54-25-635Z.png (after_click_save)
- E-001: E-001_2026-01-30T03-54-26-859Z.png (before_verify_button_exists)
- E-001: E-001_2026-01-30T03-54-26-986Z.png (after_verify_button_exists)
- E-002: E-002_2026-01-30T03-54-28-125Z.png (before_click_and_verify_download)
- E-002: E-002_2026-01-30T03-54-58-259Z.png (after_click_and_verify_download)
## 📈 분석
### ⚠️ 실패한 테스트
- **D-020**: 근태 데이터 입력 - elementHandle.click: Timeout 30000ms exceeded.
Call log:
 - attempting click action
 2 × waiting for element to be visible, enabled and stable
 - element is visible, enabled and stable
 - scrolling into view if needed
 - done scrolling
 - <div role="dialog" tabindex="-1" id="radix-_r_1n_" data-state="open" data-slot="dialog-content" aria-labelledby="radix-_r_1o_" aria-describedby="radix-_r_1p_" class="bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-></div> intercepts pointer events
 - retrying click action
 - waiting 20ms
 2 × waiting for element to be visible, enabled and stable
 - element is visible, enabled and stable
 - scrolling into view if needed
 - done scrolling
 - <div role="dialog" tabindex="-1" id="radix-_r_1n_" data-state="open" data-slot="dialog-content" aria-labelledby="radix-_r_1o_" aria-describedby="radix-_r_1p_" class="bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-></div> intercepts pointer events
 - retrying click action
 - waiting 100ms
 57 × waiting for element to be visible, enabled and stable
 - element is visible, enabled and stable
 - scrolling into view if needed
 - done scrolling
 - <div role="dialog" tabindex="-1" id="radix-_r_1n_" data-state="open" data-slot="dialog-content" aria-labelledby="radix-_r_1o_" aria-describedby="radix-_r_1p_" class="bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-></div> intercepts pointer events
 - retrying click action
 - waiting 500ms
- **D-024**: 근태 등록 저장 - page.click: Timeout 30000ms exceeded.
Call log:
 - waiting for locator('button:has-text("저장"), button:has-text("등록"), button[type="submit"]')
 - locator resolved to 3 elements. Proceeding with the first one: <button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border bg-background text-fo></button>
 - attempting click action
 2 × waiting for element to be visible, enabled and stable
 - element is visible, enabled and stable
 - scrolling into view if needed
 - done scrolling
 - <div class="flex items-center justify-between"></div> from <div role="dialog" tabindex="-1" id="radix-_r_1n_" data-state="open" data-slot="dialog-content" aria-labelledby="radix-_r_1o_" aria-describedby="radix-_r_1p_" class="bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-></div> subtree intercepts pointer events
 - retrying click action
 - waiting 20ms
 2 × waiting for element to be visible, enabled and stable
 - element is visible, enabled and stable
 - scrolling into view if needed
 - done scrolling
 - <div class="flex items-center justify-between"></div> from <div role="dialog" tabindex="-1" id="radix-_r_1n_" data-state="open" data-slot="dialog-content" aria-labelledby="radix-_r_1o_" aria-describedby="radix-_r_1p_" class="bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-></div> subtree intercepts pointer events
 - retrying click action
 - waiting 100ms
 57 × waiting for element to be visible, enabled and stable
 - element is visible, enabled and stable
 - scrolling into view if needed
 - done scrolling
 - <div class="flex items-center justify-between"></div> from <div role="dialog" tabindex="-1" id="radix-_r_1n_" data-state="open" data-slot="dialog-content" aria-labelledby="radix-_r_1o_" aria-describedby="radix-_r_1p_" class="bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-></div> subtree intercepts pointer events
 - retrying click action
 - waiting 500ms
- **R-030**: 사유 데이터 입력 - page.click: Timeout 30000ms exceeded.
Call log:
 - waiting for locator('text=첫 번째 직원')
### 📋 TC 커버리지
이 테스트는 TC_ATTENDANCE_MANAGEMENT.md의 81개 테스트케이스 중 핵심 기능을 선별하여 실행했습니다.
---
*Generated by SAM TC Test Runner*