- 54개 시나리오 파일에 URL 기반 메뉴 탐색을 위한 navigation 속성 추가 - targetUrl: 정확한 페이지 URL 경로 - urlPattern: ko 버전 포함 URL 패턴 (regex) - menuHints: 메뉴명 힌트 배열 (fallback용) 메뉴 탐색 실패율 41.8% → URL 기반 방식으로 개선 예정 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
451 lines
16 KiB
JSON
451 lines
16 KiB
JSON
{
|
|
"id": "bank-transactions",
|
|
"name": "은행거래 테스트",
|
|
"screenshotPolicy": {
|
|
"onErrorOnly": true,
|
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
|
},
|
|
"description": "은행거래 목록 조회 및 기간별 데이터 필터링 E2E 테스트",
|
|
"baseUrl": "https://dev.codebridge-x.com",
|
|
"url": "/ko/accounting/bank-transactions",
|
|
"menuNavigation": {
|
|
"level1": "회계관리",
|
|
"level2": "입출금계좌조회",
|
|
"expectedUrl": "/ko/accounting/bank-transactions"
|
|
},
|
|
"navigation": {
|
|
"targetUrl": "/accounting/bank-transactions",
|
|
"urlPattern": "/accounting/bank-transactions|/ko/accounting/bank-transactions",
|
|
"menuHints": ["입출금계좌조회", "은행거래", "입출금", "회계관리"]
|
|
},
|
|
"menuNavigationEnhanced": {
|
|
"strategy": "scroll-and-search",
|
|
"sidebarSelector": ".sidebar-scroll, [class*='sidebar'], nav[class*='menu']",
|
|
"scrollConfig": {
|
|
"scrollToTopFirst": true,
|
|
"scrollStep": 200,
|
|
"maxScrollAttempts": 10,
|
|
"scrollDelay": 300
|
|
},
|
|
"level1": {
|
|
"text": "회계관리",
|
|
"fallbackSelectors": [
|
|
"//span[contains(text(),'회계관리')]",
|
|
"//div[contains(text(),'회계관리')]",
|
|
"[data-menu='accounting']"
|
|
]
|
|
},
|
|
"level2": {
|
|
"text": "입출금계좌조회",
|
|
"fallbackSelectors": [
|
|
"//span[contains(text(),'입출금계좌조회')]",
|
|
"//a[contains(text(),'입출금계좌조회')]",
|
|
"[href*='bank-transactions']"
|
|
]
|
|
},
|
|
"verification": {
|
|
"expectedUrl": "/ko/accounting/bank-transactions",
|
|
"timeout": 5000
|
|
}
|
|
},
|
|
"timeout": 60000,
|
|
"tags": ["accounting", "bank", "filter", "date-range"],
|
|
|
|
"login": {
|
|
"url": "https://dev.codebridge-x.com/login",
|
|
"credentials": {
|
|
"id": "TestUser5",
|
|
"password": "password123!"
|
|
},
|
|
"successIndicator": "대시보드"
|
|
},
|
|
|
|
"testFocus": {
|
|
"primary": "기간별 데이터 조회 검증",
|
|
"description": "각 기간 버튼 클릭 및 직접 날짜 입력 시 해당 기간의 데이터가 정확히 조회되는지 확인"
|
|
},
|
|
|
|
"steps": [
|
|
{
|
|
"id": "step-0",
|
|
"name": "사이드바 메뉴 전체 펼치기",
|
|
"description": "모두 펼치기 버튼을 클릭하여 전체 메뉴를 펼친 후 메뉴 탐색 준비",
|
|
"actions": [
|
|
{
|
|
"type": "evaluate",
|
|
"script": "document.querySelector('.sidebar-scroll, [class*=\"sidebar\"] > div, nav[class*=\"menu\"]')?.scrollTo({top: 0, behavior: 'instant'})",
|
|
"description": "사이드바 스크롤 최상단 이동"
|
|
},
|
|
{ "type": "wait", "duration": 300 },
|
|
{
|
|
"type": "evaluate",
|
|
"script": "Array.from(document.querySelectorAll('button')).find(b => b.innerText?.includes('모두 펼치기'))?.click()",
|
|
"description": "모두 펼치기 버튼 클릭"
|
|
},
|
|
{
|
|
"type": "wait",
|
|
"duration": 2000,
|
|
"description": "메뉴 펼침 완료 대기"
|
|
}
|
|
],
|
|
"expect": {
|
|
"sidebarReady": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-1",
|
|
"name": "은행거래 메뉴 진입",
|
|
"description": "회계관리 > 은행거래 메뉴로 이동 (scrollAndFind 패턴 사용)",
|
|
"menuNavigation": {
|
|
"method": "scrollAndFind",
|
|
"level1": {
|
|
"text": "회계관리",
|
|
"scrollSearch": true,
|
|
"clickAction": "expand"
|
|
},
|
|
"level2": {
|
|
"text": "입출금계좌조회",
|
|
"scrollSearch": true,
|
|
"clickAction": "navigate"
|
|
},
|
|
"fallbackUrl": "/ko/accounting/bank-transactions"
|
|
},
|
|
"expect": {
|
|
"url": "/accounting/bank-transactions",
|
|
"visible": ["입출금계좌조회"]
|
|
}
|
|
},
|
|
{
|
|
"id": "step-2",
|
|
"name": "목록 페이지 구조 확인",
|
|
"description": "테이블 컬럼 및 UI 요소 확인",
|
|
"expect": {
|
|
"visible": ["거래일", "계좌", "입금", "출금", "잔액", "적요"],
|
|
"elements": {
|
|
"dateFilter": {
|
|
"startDate": "시작일 입력 필드",
|
|
"endDate": "종료일 입력 필드"
|
|
},
|
|
"periodButtons": ["당해년도", "전전월", "전월", "당월", "어제", "오늘"],
|
|
"pagination": true
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "step-3",
|
|
"name": "기본 데이터 확인",
|
|
"description": "초기 로드된 데이터 및 현재 날짜 필터 상태 확인",
|
|
"actions": [
|
|
{ "type": "capture", "target": "dateRange", "description": "현재 설정된 날짜 범위 기록" },
|
|
{ "type": "capture", "target": "dataCount", "description": "현재 조회된 데이터 건수 기록" }
|
|
],
|
|
"expect": {
|
|
"dataLoaded": true,
|
|
"dateRangeVisible": true
|
|
}
|
|
},
|
|
{
|
|
"id": "step-4",
|
|
"name": "당해년도 버튼 클릭 테스트",
|
|
"description": "당해년도 버튼 클릭 시 해당 기간 데이터 조회 확인",
|
|
"actions": [
|
|
{ "type": "click", "target": "당해년도", "description": "당해년도 버튼 클릭" }
|
|
],
|
|
"expect": {
|
|
"dateRange": {
|
|
"startDate": "2026-01-01",
|
|
"endDate": "2026-12-31"
|
|
},
|
|
"buttonActive": "당해년도",
|
|
"dataRefreshed": true
|
|
},
|
|
"validation": {
|
|
"type": "dateRangeMatch",
|
|
"description": "조회된 데이터의 거래일이 2026년 범위 내인지 확인"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-5",
|
|
"name": "전전월 버튼 클릭 테스트",
|
|
"description": "전전월 버튼 클릭 시 해당 기간 데이터 조회 확인",
|
|
"actions": [
|
|
{ "type": "click", "target": "전전월", "description": "전전월 버튼 클릭" }
|
|
],
|
|
"expect": {
|
|
"dateRange": {
|
|
"startDate": "2025-11-01",
|
|
"endDate": "2025-11-30",
|
|
"note": "현재 날짜 기준 전전월 (2026-01-15 기준 → 2025년 11월)"
|
|
},
|
|
"buttonActive": "전전월",
|
|
"dataRefreshed": true
|
|
},
|
|
"validation": {
|
|
"type": "dateRangeMatch",
|
|
"description": "조회된 데이터의 거래일이 전전월 범위 내인지 확인"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-6",
|
|
"name": "전월 버튼 클릭 테스트",
|
|
"description": "전월 버튼 클릭 시 해당 기간 데이터 조회 확인",
|
|
"actions": [
|
|
{ "type": "click", "target": "전월", "description": "전월 버튼 클릭" }
|
|
],
|
|
"expect": {
|
|
"dateRange": {
|
|
"startDate": "2025-12-01",
|
|
"endDate": "2025-12-31",
|
|
"note": "현재 날짜 기준 전월 (2026-01-15 기준 → 2025년 12월)"
|
|
},
|
|
"buttonActive": "전월",
|
|
"dataRefreshed": true
|
|
},
|
|
"validation": {
|
|
"type": "dateRangeMatch",
|
|
"description": "조회된 데이터의 거래일이 전월 범위 내인지 확인"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-7",
|
|
"name": "당월 버튼 클릭 테스트",
|
|
"description": "당월 버튼 클릭 시 해당 기간 데이터 조회 확인",
|
|
"actions": [
|
|
{ "type": "click", "target": "당월", "description": "당월 버튼 클릭" }
|
|
],
|
|
"expect": {
|
|
"dateRange": {
|
|
"startDate": "2026-01-01",
|
|
"endDate": "2026-01-31",
|
|
"note": "현재 날짜 기준 당월 (2026년 1월)"
|
|
},
|
|
"buttonActive": "당월",
|
|
"dataRefreshed": true
|
|
},
|
|
"validation": {
|
|
"type": "dateRangeMatch",
|
|
"description": "조회된 데이터의 거래일이 당월 범위 내인지 확인"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-8",
|
|
"name": "어제 버튼 클릭 테스트",
|
|
"description": "어제 버튼 클릭 시 해당 날짜 데이터 조회 확인",
|
|
"actions": [
|
|
{ "type": "click", "target": "어제", "description": "어제 버튼 클릭" }
|
|
],
|
|
"expect": {
|
|
"dateRange": {
|
|
"startDate": "2026-01-14",
|
|
"endDate": "2026-01-14",
|
|
"note": "현재 날짜 기준 어제 (2026-01-15 기준 → 2026-01-14)"
|
|
},
|
|
"buttonActive": "어제",
|
|
"dataRefreshed": true
|
|
},
|
|
"validation": {
|
|
"type": "dateRangeMatch",
|
|
"description": "조회된 데이터의 거래일이 어제인지 확인"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-9",
|
|
"name": "오늘 버튼 클릭 테스트",
|
|
"description": "오늘 버튼 클릭 시 해당 날짜 데이터 조회 확인",
|
|
"actions": [
|
|
{ "type": "click", "target": "오늘", "description": "오늘 버튼 클릭" }
|
|
],
|
|
"expect": {
|
|
"dateRange": {
|
|
"startDate": "2026-01-15",
|
|
"endDate": "2026-01-15",
|
|
"note": "현재 날짜 (2026-01-15)"
|
|
},
|
|
"buttonActive": "오늘",
|
|
"dataRefreshed": true
|
|
},
|
|
"validation": {
|
|
"type": "dateRangeMatch",
|
|
"description": "조회된 데이터의 거래일이 오늘인지 확인"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-10",
|
|
"name": "직접 날짜 입력 테스트 - 특정 기간",
|
|
"description": "시작일/종료일 직접 입력 후 데이터 조회 확인",
|
|
"actions": [
|
|
{ "type": "clear", "target": "startDate", "description": "시작일 필드 초기화" },
|
|
{ "type": "type", "target": "startDate", "value": "2025-10-01", "description": "시작일 입력" },
|
|
{ "type": "clear", "target": "endDate", "description": "종료일 필드 초기화" },
|
|
{ "type": "type", "target": "endDate", "value": "2025-10-31", "description": "종료일 입력" },
|
|
{ "type": "click", "target": "새로고침 또는 검색", "description": "데이터 새로고침" }
|
|
],
|
|
"expect": {
|
|
"dateRange": {
|
|
"startDate": "2025-10-01",
|
|
"endDate": "2025-10-31"
|
|
},
|
|
"dataRefreshed": true
|
|
},
|
|
"validation": {
|
|
"type": "dateRangeMatch",
|
|
"description": "조회된 데이터의 거래일이 2025-10-01 ~ 2025-10-31 범위 내인지 확인"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-11",
|
|
"name": "직접 날짜 입력 테스트 - 단일 날짜",
|
|
"description": "시작일/종료일 동일하게 입력하여 특정 날짜 데이터만 조회",
|
|
"actions": [
|
|
{ "type": "clear", "target": "startDate", "description": "시작일 필드 초기화" },
|
|
{ "type": "type", "target": "startDate", "value": "2025-12-25", "description": "시작일 입력" },
|
|
{ "type": "clear", "target": "endDate", "description": "종료일 필드 초기화" },
|
|
{ "type": "type", "target": "endDate", "value": "2025-12-25", "description": "종료일 입력" },
|
|
{ "type": "click", "target": "새로고침 또는 검색", "description": "데이터 새로고침" }
|
|
],
|
|
"expect": {
|
|
"dateRange": {
|
|
"startDate": "2025-12-25",
|
|
"endDate": "2025-12-25"
|
|
},
|
|
"dataRefreshed": true
|
|
},
|
|
"validation": {
|
|
"type": "dateRangeMatch",
|
|
"description": "조회된 데이터의 거래일이 2025-12-25인지 확인"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-12",
|
|
"name": "데이터 없는 기간 조회 테스트",
|
|
"description": "데이터가 없는 기간 조회 시 빈 상태 표시 확인",
|
|
"actions": [
|
|
{ "type": "clear", "target": "startDate", "description": "시작일 필드 초기화" },
|
|
{ "type": "type", "target": "startDate", "value": "2020-01-01", "description": "시작일 입력 (과거)" },
|
|
{ "type": "clear", "target": "endDate", "description": "종료일 필드 초기화" },
|
|
{ "type": "type", "target": "endDate", "value": "2020-01-31", "description": "종료일 입력 (과거)" },
|
|
{ "type": "click", "target": "새로고침 또는 검색", "description": "데이터 새로고침" }
|
|
],
|
|
"expect": {
|
|
"emptyState": true,
|
|
"message": "검색 결과가 없습니다"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-13",
|
|
"name": "넓은 기간 조회 테스트",
|
|
"description": "전체 데이터 조회를 위한 넓은 기간 설정",
|
|
"actions": [
|
|
{ "type": "clear", "target": "startDate", "description": "시작일 필드 초기화" },
|
|
{ "type": "type", "target": "startDate", "value": "2025-01-01", "description": "시작일 입력" },
|
|
{ "type": "clear", "target": "endDate", "description": "종료일 필드 초기화" },
|
|
{ "type": "type", "target": "endDate", "value": "2025-12-31", "description": "종료일 입력" },
|
|
{ "type": "click", "target": "새로고침 또는 검색", "description": "데이터 새로고침" }
|
|
],
|
|
"expect": {
|
|
"dataLoaded": true,
|
|
"dataCountGreaterThan": 0
|
|
},
|
|
"validation": {
|
|
"type": "dateRangeMatch",
|
|
"description": "조회된 모든 데이터의 거래일이 2025년도 범위 내인지 확인"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-14",
|
|
"name": "테이블 데이터 검증",
|
|
"description": "조회된 데이터의 거래일이 설정된 기간 내인지 상세 검증",
|
|
"actions": [
|
|
{ "type": "verify", "target": "tableRows", "description": "테이블의 모든 행 거래일 확인" }
|
|
],
|
|
"expect": {
|
|
"allRowsWithinDateRange": true
|
|
},
|
|
"validation": {
|
|
"type": "rowByRowCheck",
|
|
"description": "각 행의 거래일 컬럼 값이 설정된 시작일~종료일 범위 내인지 확인"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-15",
|
|
"name": "페이지네이션과 날짜 필터 연동 확인",
|
|
"description": "페이지 이동 시에도 날짜 필터가 유지되는지 확인",
|
|
"precondition": "데이터가 여러 페이지에 걸쳐 있는 경우",
|
|
"actions": [
|
|
{ "type": "click", "target": "다음 페이지", "description": "다음 페이지 이동" }
|
|
],
|
|
"expect": {
|
|
"dateRangePreserved": true,
|
|
"dataWithinRange": true
|
|
},
|
|
"validation": {
|
|
"type": "dateRangeMatch",
|
|
"description": "다음 페이지의 데이터도 설정된 기간 내인지 확인"
|
|
}
|
|
}
|
|
],
|
|
|
|
"assertions": [
|
|
{
|
|
"type": "url",
|
|
"expected": "/accounting/bank-transactions",
|
|
"message": "은행거래 페이지 URL 확인"
|
|
},
|
|
{
|
|
"type": "element",
|
|
"target": "dateFilter",
|
|
"expected": "존재",
|
|
"message": "날짜 필터 요소가 존재해야 함"
|
|
},
|
|
{
|
|
"type": "element",
|
|
"target": "periodButtons",
|
|
"expected": ["당해년도", "전전월", "전월", "당월", "어제", "오늘"],
|
|
"message": "기간 버튼 6개가 존재해야 함"
|
|
}
|
|
],
|
|
|
|
"validationRules": {
|
|
"dateRangeMatch": {
|
|
"description": "테이블의 모든 거래일이 설정된 시작일~종료일 범위 내인지 확인",
|
|
"method": "각 행의 거래일 컬럼 값 추출 후 날짜 범위 비교",
|
|
"passCondition": "모든 행의 거래일이 범위 내 / 데이터 없음 (빈 상태)"
|
|
},
|
|
"buttonActiveState": {
|
|
"description": "클릭된 기간 버튼이 활성화(active) 상태인지 확인",
|
|
"method": "버튼의 active 속성 또는 스타일 확인"
|
|
},
|
|
"dateInputSync": {
|
|
"description": "기간 버튼 클릭 시 날짜 입력 필드가 동기화되는지 확인",
|
|
"method": "버튼 클릭 후 시작일/종료일 입력 필드 값 확인"
|
|
}
|
|
},
|
|
|
|
"testData": {
|
|
"expectedPeriodButtons": [
|
|
{ "name": "당해년도", "range": "해당 년도 1월 1일 ~ 12월 31일" },
|
|
{ "name": "전전월", "range": "현재 월 기준 2개월 전 1일 ~ 말일" },
|
|
{ "name": "전월", "range": "현재 월 기준 1개월 전 1일 ~ 말일" },
|
|
{ "name": "당월", "range": "현재 월 1일 ~ 말일" },
|
|
{ "name": "어제", "range": "어제 날짜 (단일)" },
|
|
{ "name": "오늘", "range": "오늘 날짜 (단일)" }
|
|
],
|
|
"testDateRanges": [
|
|
{ "start": "2025-10-01", "end": "2025-10-31", "description": "특정 월 조회" },
|
|
{ "start": "2025-12-25", "end": "2025-12-25", "description": "단일 날짜 조회" },
|
|
{ "start": "2020-01-01", "end": "2020-01-31", "description": "데이터 없는 기간" },
|
|
{ "start": "2025-01-01", "end": "2025-12-31", "description": "전체 연도 조회" }
|
|
]
|
|
},
|
|
|
|
"notes": {
|
|
"testPriority": "High",
|
|
"mainObjective": "기간별 필터링이 정확히 동작하는지 검증",
|
|
"criticalValidation": [
|
|
"기간 버튼 클릭 시 날짜 입력 필드 자동 변경",
|
|
"설정된 기간 내 데이터만 조회되는지 확인",
|
|
"날짜 범위 외 데이터가 표시되지 않는지 확인"
|
|
]
|
|
}
|
|
}
|