Files
sam-scenarios/bad-debt-collection.json
light cff20a6c0e refactor: navigation 속성 추가 (targetUrl, urlPattern, menuHints)
- 54개 시나리오 파일에 URL 기반 메뉴 탐색을 위한 navigation 속성 추가
- targetUrl: 정확한 페이지 URL 경로
- urlPattern: ko 버전 포함 URL 패턴 (regex)
- menuHints: 메뉴명 힌트 배열 (fallback용)

메뉴 탐색 실패율 41.8% → URL 기반 방식으로 개선 예정

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 21:47:29 +09:00

1101 lines
31 KiB
JSON

{
"id": "bad-debt-collection",
"name": "대손채권회수 테스트",
"screenshotPolicy": {
"onErrorOnly": true,
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
},
"description": "회계관리 > 대손채권회수 메뉴의 체크박스 선택, 수정 모드, 입력 필드, 메모 추가, 서류 업로드, 이동 버튼 기능 전체 테스트",
"baseUrl": "https://dev.codebridge-x.com",
"url": "/ko/accounting/bad-debt-collection",
"menuNavigation": {
"level1": "회계관리",
"level2": "악성채권추심관리",
"expectedUrl": "/ko/accounting/bad-debt-collection"
},
"navigation": {
"targetUrl": "/accounting/bad-debt-collection",
"urlPattern": "/accounting/bad-debt-collection|/ko/accounting/bad-debt-collection",
"menuHints": ["악성채권추심관리", "대손", "채권", "회계관리"]
},
"menuNavigationEnhanced": {
"strategy": "scroll-and-search",
"sidebarSelector": ".sidebar-scroll, [class*='sidebar'], nav[class*='menu']",
"scrollConfig": {
"scrollStep": 200,
"maxScrollAttempts": 10,
"scrollDelay": 300
},
"level1": {
"text": "회계관리",
"fallbackSelectors": [
"span:has-text('회계관리')",
"[class*='menu-item']:has-text('회계관리')",
"a:has-text('회계관리')"
]
},
"level2": {
"text": "악성채권추심관리",
"fallbackSelectors": [
"span:has-text('악성채권추심관리')",
"[class*='submenu']:has-text('악성채권추심관리')",
"a:has-text('악성채권추심관리')"
]
},
"expectedUrl": "/ko/accounting/bad-debt-collection"
},
"testFocus": {
"primary": "수정 페이지 전체 입력 필드 및 메모/서류 추가 기능 검증",
"description": "체크박스 선택 시 수정 버튼 활성화, 수정 페이지 모든 입력 필드 테스트, 메모 추가/삭제, 추가 서류 업로드, 이동 버튼 동작 확인"
},
"prerequisites": {
"authentication": true,
"testData": {
"vendorName": "테스트거래처",
"businessNumber": "123-45-67890",
"representativeName": "홍길동",
"address": {
"zipCode": "06234",
"address1": "서울특별시 강남구 테헤란로",
"address2": "123호"
},
"contact": {
"phone": "02-1234-5678",
"mobile": "010-1234-5678",
"fax": "02-1234-5679",
"email": "test@example.com"
},
"debtInfo": {
"amount": 5000000,
"overdueDays": 90,
"status": "collecting"
},
"memo": "테스트 메모 내용입니다.",
"file": {
"businessRegistration": "사업자등록증.pdf",
"taxInvoice": "세금계산서.pdf",
"additional": "추가서류1.pdf"
}
}
},
"expectedAPIs": [
{
"method": "GET",
"endpoint": "/api/v1/bad-debts",
"description": "대손채권 목록 조회"
},
{
"method": "GET",
"endpoint": "/api/v1/bad-debts/{id}",
"description": "대손채권 상세 조회"
},
{
"method": "PUT",
"endpoint": "/api/v1/bad-debts/{id}",
"description": "대손채권 수정"
},
{
"method": "POST",
"endpoint": "/api/v1/bad-debts/{id}/memos",
"description": "메모 추가"
},
{
"method": "DELETE",
"endpoint": "/api/v1/bad-debts/{id}/memos/{memoId}",
"description": "메모 삭제"
},
{
"method": "POST",
"endpoint": "/api/v1/bad-debts/{id}/documents",
"description": "서류 업로드"
}
],
"steps": [
{
"id": "step-0",
"name": "사이드바 메뉴 전체 펼치기",
"description": "모두 펼치기 버튼을 클릭하여 전체 메뉴를 펼친 후 메뉴 탐색 준비",
"actions": [
{
"type": "evaluate",
"script": "document.querySelector('.sidebar-scroll, [class*=\"sidebar\"] > div')?.scrollTo({top: 0, behavior: 'instant'})"
},
{ "type": "wait", "duration": 300 },
{
"type": "evaluate",
"script": "Array.from(document.querySelectorAll('button')).find(b => b.innerText?.includes('모두 펼치기'))?.click()"
},
{ "type": "wait", "duration": 2000 }
],
"expected": {
"sidebarReady": true
}
},
{
"id": "step-1",
"name": "2단계 메뉴 진입: 회계관리 > 악성채권추심관리",
"description": "회계관리 > 악성채권추심관리 메뉴로 이동하여 페이지 로드 확인 (scrollAndFind 패턴 사용)",
"navigationPattern": "scrollAndFind",
"actions": [
{
"type": "scrollAndFind",
"target": "회계관리",
"config": {
"scrollContainer": ".sidebar-scroll, [class*='sidebar']",
"scrollStep": 200,
"maxAttempts": 10,
"waitAfterScroll": 300
}
},
{ "type": "click", "target": "회계관리" },
{ "type": "wait", "duration": 500 },
{
"type": "scrollAndFind",
"target": "악성채권추심관리",
"config": {
"scrollContainer": ".sidebar-scroll, [class*='sidebar']",
"scrollStep": 200,
"maxAttempts": 10,
"waitAfterScroll": 300
}
},
{ "type": "click", "target": "악성채권추심관리" },
{ "type": "wait", "target": "페이지 로드 완료" }
],
"expected": {
"url": "/ko/accounting/bad-debt-collection",
"pageTitle": "악성채권추심관리",
"elements": ["통계 카드", "검색창", "필터", "테이블"],
"authenticated": true
}
},
{
"id": "step-2",
"name": "페이지 구조 확인",
"description": "통계 카드, 필터, 테이블 컬럼 구조 확인",
"actions": [
{
"type": "verify",
"target": "페이지 구조"
}
],
"expected": {
"stats": ["총 악성채권", "추심중", "법적조치", "회수완료"],
"filters": ["거래처 필터", "상태 필터", "정렬"],
"tableColumns": ["체크박스", "No.", "거래처", "채권금액", "발생일", "연체일수", "담당자", "상태", "설정", "작업"]
}
},
{
"id": "step-3",
"name": "필터 및 검색 기능 테스트",
"description": "거래처 필터, 상태 필터, 정렬, 검색 기능 동작 확인",
"actions": [
{
"type": "select",
"target": "상태 필터",
"value": "추심중"
},
{
"type": "wait",
"target": "데이터 필터링"
},
{
"type": "verify",
"target": "필터링된 데이터"
}
],
"expected": {
"filterApplied": true,
"dataFiltered": "추심중 상태만 표시"
}
},
{
"id": "step-4",
"name": "체크박스 선택 전 작업 버튼 확인",
"description": "체크박스 미선택 시 수정/삭제 버튼이 표시되지 않는지 확인",
"actions": [
{
"type": "verify",
"target": "작업 컬럼"
}
],
"expected": {
"editButtonVisible": false,
"deleteButtonVisible": false
}
},
{
"id": "step-5",
"name": "첫 번째 행 체크박스 선택",
"description": "첫 번째 행의 체크박스 클릭하여 선택",
"actions": [
{
"type": "click",
"target": "첫 번째 행 체크박스"
},
{
"type": "wait",
"target": "체크박스 선택 반영"
}
],
"expected": {
"checkboxChecked": true,
"rowHighlighted": true
}
},
{
"id": "step-6",
"name": "수정 버튼 표시 확인",
"description": "체크박스 선택 후 작업 컬럼에 수정/삭제 버튼이 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "작업 컬럼 버튼"
}
],
"expected": {
"editButtonVisible": true,
"deleteButtonVisible": true
}
},
{
"id": "step-7",
"name": "수정 버튼 클릭",
"description": "수정 버튼 클릭하여 수정 페이지로 이동",
"actions": [
{
"type": "click",
"target": "수정 버튼"
},
{
"type": "wait",
"target": "페이지 이동"
}
],
"expected": {
"urlPattern": "/accounting/bad-debt-collection/{id}?mode=edit",
"pageTitle": "악성채권추심관리 상세",
"formMode": "edit"
}
},
{
"id": "step-8",
"name": "수정 페이지 구조 확인",
"description": "수정 페이지의 모든 섹션 및 버튼 확인",
"actions": [
{
"type": "verify",
"target": "페이지 섹션 및 버튼"
}
],
"expected": {
"sections": ["기본 정보", "연락처 정보", "담당자 정보", "필요 서류", "악성 채권 정보", "메모"],
"headerButtons": ["취소", "저장"],
"linkButtons": ["수취 어음 현황", "거래처 미수금 현황"]
}
},
{
"id": "step-9",
"name": "기본 정보 섹션 - 사업자등록번호 (읽기전용)",
"description": "사업자등록번호 필드가 읽기 전용인지 확인",
"actions": [
{
"type": "verify",
"target": "사업자등록번호 필드"
}
],
"expected": {
"fieldDisabled": true,
"fieldValue": "존재"
}
},
{
"id": "step-10",
"name": "기본 정보 섹션 - 거래처 코드 (읽기전용)",
"description": "거래처 코드 필드가 읽기 전용인지 확인",
"actions": [
{
"type": "verify",
"target": "거래처 코드 필드"
}
],
"expected": {
"fieldDisabled": true,
"fieldValue": "존재"
}
},
{
"id": "step-11",
"name": "기본 정보 섹션 - 거래처명 입력",
"description": "거래처명 필드에 값 입력 테스트",
"actions": [
{
"type": "clear",
"target": "거래처명 입력 필드"
},
{
"type": "type",
"target": "거래처명 입력 필드",
"value": "수정된 테스트거래처"
}
],
"expected": {
"fieldEditable": true,
"valueUpdated": "수정된 테스트거래처"
}
},
{
"id": "step-12",
"name": "기본 정보 섹션 - 대표자명 입력",
"description": "대표자명 필드에 값 입력 테스트",
"actions": [
{
"type": "clear",
"target": "대표자명 입력 필드"
},
{
"type": "type",
"target": "대표자명 입력 필드",
"value": "홍길동"
}
],
"expected": {
"fieldEditable": true,
"valueUpdated": "홍길동"
}
},
{
"id": "step-13",
"name": "기본 정보 섹션 - 악성채권 등록 토글",
"description": "악성채권 등록 스위치 토글 동작 확인",
"actions": [
{
"type": "click",
"target": "악성채권 등록 Switch"
},
{
"type": "wait",
"target": "스위치 상태 변경"
}
],
"expected": {
"switchToggled": true
}
},
{
"id": "step-14",
"name": "기본 정보 섹션 - 업태/업종 입력",
"description": "업태, 업종 필드에 값 입력 테스트",
"actions": [
{
"type": "clear",
"target": "업태 입력 필드"
},
{
"type": "type",
"target": "업태 입력 필드",
"value": "도소매업"
},
{
"type": "clear",
"target": "업종 입력 필드"
},
{
"type": "type",
"target": "업종 입력 필드",
"value": "전자상거래"
}
],
"expected": {
"businessTypeUpdated": "도소매업",
"businessCategoryUpdated": "전자상거래"
}
},
{
"id": "step-15",
"name": "연락처 정보 섹션 - 우편번호 찾기 버튼",
"description": "우편번호 찾기 버튼 클릭 시 Daum 우편번호 서비스 팝업 표시",
"actions": [
{
"type": "click",
"target": "우편번호 찾기 버튼"
},
{
"type": "wait",
"target": "팝업 표시"
}
],
"expected": {
"popupOpened": true,
"popupType": "Daum 우편번호 서비스"
}
},
{
"id": "step-16",
"name": "연락처 정보 섹션 - 주소 입력",
"description": "기본주소 및 상세주소 입력 테스트 (우편번호 팝업 닫은 후)",
"actions": [
{
"type": "escape",
"target": "팝업 닫기"
},
{
"type": "clear",
"target": "상세주소 입력 필드"
},
{
"type": "type",
"target": "상세주소 입력 필드",
"value": "456호"
}
],
"expected": {
"address2Updated": "456호"
}
},
{
"id": "step-17",
"name": "연락처 정보 섹션 - 전화번호 입력",
"description": "전화번호 필드에 값 입력 테스트",
"actions": [
{
"type": "clear",
"target": "전화번호 입력 필드"
},
{
"type": "type",
"target": "전화번호 입력 필드",
"value": "02-9999-8888"
}
],
"expected": {
"phoneUpdated": "02-9999-8888"
}
},
{
"id": "step-18",
"name": "연락처 정보 섹션 - 모바일 입력",
"description": "모바일 필드에 값 입력 테스트",
"actions": [
{
"type": "clear",
"target": "모바일 입력 필드"
},
{
"type": "type",
"target": "모바일 입력 필드",
"value": "010-9999-8888"
}
],
"expected": {
"mobileUpdated": "010-9999-8888"
}
},
{
"id": "step-19",
"name": "연락처 정보 섹션 - 팩스 입력",
"description": "팩스 필드에 값 입력 테스트",
"actions": [
{
"type": "clear",
"target": "팩스 입력 필드"
},
{
"type": "type",
"target": "팩스 입력 필드",
"value": "02-9999-8889"
}
],
"expected": {
"faxUpdated": "02-9999-8889"
}
},
{
"id": "step-20",
"name": "연락처 정보 섹션 - 이메일 입력",
"description": "이메일 필드에 값 입력 테스트",
"actions": [
{
"type": "clear",
"target": "이메일 입력 필드"
},
{
"type": "type",
"target": "이메일 입력 필드",
"value": "updated@example.com"
}
],
"expected": {
"emailUpdated": "updated@example.com"
}
},
{
"id": "step-21",
"name": "담당자 정보 섹션 - 담당자명 입력",
"description": "담당자명 필드에 값 입력 테스트",
"actions": [
{
"type": "clear",
"target": "담당자명 입력 필드"
},
{
"type": "type",
"target": "담당자명 입력 필드",
"value": "김담당"
}
],
"expected": {
"contactNameUpdated": "김담당"
}
},
{
"id": "step-22",
"name": "담당자 정보 섹션 - 담당자 전화 입력",
"description": "담당자 전화 필드에 값 입력 테스트",
"actions": [
{
"type": "clear",
"target": "담당자 전화 입력 필드"
},
{
"type": "type",
"target": "담당자 전화 입력 필드",
"value": "010-1111-2222"
}
],
"expected": {
"contactPhoneUpdated": "010-1111-2222"
}
},
{
"id": "step-23",
"name": "필요 서류 섹션 - 사업자등록증 업로드 확인",
"description": "사업자등록증 파일 업로드 필드 존재 확인",
"actions": [
{
"type": "verify",
"target": "사업자등록증 파일 입력"
}
],
"expected": {
"fileInputExists": true,
"acceptTypes": ".pdf,.jpg,.jpeg,.png"
}
},
{
"id": "step-24",
"name": "필요 서류 섹션 - 세금계산서 업로드 확인",
"description": "세금계산서 파일 업로드 필드 존재 확인",
"actions": [
{
"type": "verify",
"target": "세금계산서 파일 입력"
}
],
"expected": {
"fileInputExists": true,
"acceptTypes": ".pdf,.jpg,.jpeg,.png"
}
},
{
"id": "step-25",
"name": "필요 서류 섹션 - 추가 서류 추가 버튼 확인",
"description": "추가 서류 섹션에 추가 버튼이 존재하는지 확인",
"actions": [
{
"type": "verify",
"target": "추가 서류 추가 버튼"
}
],
"expected": {
"addButtonExists": true,
"buttonText": "추가"
}
},
{
"id": "step-26",
"name": "악성 채권 정보 섹션 - 미수금 입력",
"description": "미수금 필드에 값 입력 테스트",
"actions": [
{
"type": "clear",
"target": "미수금 입력 필드"
},
{
"type": "type",
"target": "미수금 입력 필드",
"value": "7500000"
}
],
"expected": {
"debtAmountUpdated": 7500000
}
},
{
"id": "step-27",
"name": "악성 채권 정보 섹션 - 상태 선택",
"description": "상태 드롭다운에서 값 선택 테스트",
"actions": [
{
"type": "click",
"target": "상태 드롭다운"
},
{
"type": "select",
"target": "상태 옵션",
"value": "법적조치"
}
],
"expected": {
"statusUpdated": "legalAction",
"optionSelected": "법적조치"
}
},
{
"id": "step-28",
"name": "악성 채권 정보 섹션 - 연체일수 입력",
"description": "연체일수 필드에 값 입력 테스트",
"actions": [
{
"type": "clear",
"target": "연체일수 입력 필드"
},
{
"type": "type",
"target": "연체일수 입력 필드",
"value": "120"
}
],
"expected": {
"overdueDaysUpdated": 120
}
},
{
"id": "step-29",
"name": "악성 채권 정보 섹션 - 본사 담당자 선택",
"description": "본사 담당자 드롭다운에서 값 선택 테스트",
"actions": [
{
"type": "click",
"target": "본사 담당자 드롭다운"
},
{
"type": "select",
"target": "담당자 옵션",
"value": "첫 번째 담당자"
}
],
"expected": {
"managerSelected": true,
"managerName": "존재"
}
},
{
"id": "step-30",
"name": "악성 채권 정보 섹션 - 악성채권 발생일 입력",
"description": "악성채권 발생일 필드에 날짜 입력 테스트",
"actions": [
{
"type": "clear",
"target": "악성채권 발생일 입력 필드"
},
{
"type": "type",
"target": "악성채권 발생일 입력 필드",
"value": "2025-12-01"
}
],
"expected": {
"occurrenceDateUpdated": "2025-12-01"
}
},
{
"id": "step-31",
"name": "악성 채권 정보 섹션 - 악성채권 종료일 입력",
"description": "악성채권 종료일 필드에 날짜 입력 테스트",
"actions": [
{
"type": "clear",
"target": "악성채권 종료일 입력 필드"
},
{
"type": "type",
"target": "악성채권 종료일 입력 필드",
"value": "2026-03-01"
}
],
"expected": {
"endDateUpdated": "2026-03-01"
}
},
{
"id": "step-32",
"name": "이동 버튼 - 수취 어음 현황 버튼 확인",
"description": "수취 어음 현황 버튼 존재 확인",
"actions": [
{
"type": "verify",
"target": "수취 어음 현황 버튼"
}
],
"expected": {
"buttonExists": true,
"buttonText": "수취 어음 현황"
}
},
{
"id": "step-33",
"name": "이동 버튼 - 수취 어음 현황 클릭",
"description": "수취 어음 현황 버튼 클릭 시 해당 페이지로 이동하는지 확인",
"actions": [
{
"type": "click",
"target": "수취 어음 현황 버튼"
},
{
"type": "wait",
"target": "페이지 이동"
}
],
"expected": {
"urlPattern": "/accounting/bills?vendorId={id}&type=received",
"pageChanged": true
}
},
{
"id": "step-34",
"name": "이동 후 뒤로가기 (수취 어음 현황 → 대손채권회수 수정)",
"description": "브라우저 뒤로가기로 대손채권회수 수정 페이지로 복귀",
"actions": [
{
"type": "back",
"target": "브라우저 뒤로가기"
},
{
"type": "wait",
"target": "페이지 로드"
}
],
"expected": {
"urlPattern": "/accounting/bad-debt-collection/{id}?mode=edit",
"pageRestored": true
}
},
{
"id": "step-35",
"name": "이동 버튼 - 거래처 미수금 현황 버튼 확인",
"description": "거래처 미수금 현황 버튼 존재 확인",
"actions": [
{
"type": "verify",
"target": "거래처 미수금 현황 버튼"
}
],
"expected": {
"buttonExists": true,
"buttonText": "거래처 미수금 현황"
}
},
{
"id": "step-36",
"name": "이동 버튼 - 거래처 미수금 현황 클릭",
"description": "거래처 미수금 현황 버튼 클릭 시 해당 페이지로 이동하는지 확인",
"actions": [
{
"type": "click",
"target": "거래처 미수금 현황 버튼"
},
{
"type": "wait",
"target": "페이지 이동"
}
],
"expected": {
"urlPattern": "/accounting/receivables-status?highlight={vendorId}",
"pageChanged": true
}
},
{
"id": "step-37",
"name": "이동 후 뒤로가기 (거래처 미수금 현황 → 대손채권회수 수정)",
"description": "브라우저 뒤로가기로 대손채권회수 수정 페이지로 복귀",
"actions": [
{
"type": "back",
"target": "브라우저 뒤로가기"
},
{
"type": "wait",
"target": "페이지 로드"
}
],
"expected": {
"urlPattern": "/accounting/bad-debt-collection/{id}?mode=edit",
"pageRestored": true
}
},
{
"id": "step-38",
"name": "메모 섹션 - 메모 입력 필드 확인",
"description": "메모 입력 Textarea 존재 확인",
"actions": [
{
"type": "verify",
"target": "메모 입력 Textarea"
}
],
"expected": {
"textareaExists": true,
"placeholder": "메모를 입력하세요..."
}
},
{
"id": "step-39",
"name": "메모 섹션 - 메모 추가 버튼 확인",
"description": "메모 추가 버튼 존재 확인",
"actions": [
{
"type": "verify",
"target": "메모 추가 버튼"
}
],
"expected": {
"buttonExists": true,
"buttonText": "추가"
}
},
{
"id": "step-40",
"name": "메모 섹션 - 메모 입력",
"description": "메모 입력 필드에 텍스트 입력",
"actions": [
{
"type": "clear",
"target": "메모 입력 Textarea"
},
{
"type": "type",
"target": "메모 입력 Textarea",
"value": "이것은 테스트 메모입니다."
}
],
"expected": {
"memoEntered": "이것은 테스트 메모입니다."
}
},
{
"id": "step-41",
"name": "메모 섹션 - 메모 추가 버튼 클릭",
"description": "메모 추가 버튼 클릭하여 메모 추가",
"actions": [
{
"type": "click",
"target": "메모 추가 버튼"
},
{
"type": "wait",
"target": "메모 추가 완료"
}
],
"expected": {
"memoAdded": true,
"memoListUpdated": "메모 카드 표시됨"
}
},
{
"id": "step-42",
"name": "메모 섹션 - 추가된 메모 확인",
"description": "추가된 메모가 메모 리스트에 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "메모 리스트"
}
],
"expected": {
"memoDisplayed": true,
"memoContent": "이것은 테스트 메모입니다."
}
},
{
"id": "step-43",
"name": "메모 섹션 - 추가 메모 입력",
"description": "두 번째 메모 입력 및 추가",
"actions": [
{
"type": "clear",
"target": "메모 입력 Textarea"
},
{
"type": "type",
"target": "메모 입력 Textarea",
"value": "두 번째 테스트 메모"
},
{
"type": "click",
"target": "메모 추가 버튼"
},
{
"type": "wait",
"target": "메모 추가 완료"
}
],
"expected": {
"memoAdded": true,
"memoCount": 2
}
},
{
"id": "step-44",
"name": "메모 섹션 - 메모 삭제 버튼 확인",
"description": "메모 카드에 삭제 버튼(X)이 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "메모 삭제 버튼"
}
],
"expected": {
"deleteButtonExists": true
}
},
{
"id": "step-45",
"name": "메모 섹션 - 메모 삭제",
"description": "첫 번째 메모의 삭제 버튼 클릭하여 삭제",
"actions": [
{
"type": "click",
"target": "첫 번째 메모 삭제 버튼"
},
{
"type": "wait",
"target": "메모 삭제 완료"
}
],
"expected": {
"memoDeleted": true,
"memoCount": 1
}
},
{
"id": "step-46",
"name": "저장 버튼 클릭",
"description": "헤더의 저장 버튼 클릭하여 저장 확인 다이얼로그 표시",
"actions": [
{
"type": "click",
"target": "저장 버튼"
},
{
"type": "wait",
"target": "다이얼로그 표시"
}
],
"expected": {
"dialogOpened": true,
"dialogTitle": "저장 확인",
"dialogMessage": "입력한 내용을 저장하시겠습니까?"
}
},
{
"id": "step-47",
"name": "저장 확인 다이얼로그 - 취소 버튼",
"description": "저장 확인 다이얼로그에서 취소 버튼 클릭",
"actions": [
{
"type": "click",
"target": "다이얼로그 취소 버튼"
},
{
"type": "wait",
"target": "다이얼로그 닫힘"
}
],
"expected": {
"dialogClosed": true,
"pageUnchanged": "여전히 수정 페이지"
}
},
{
"id": "step-48",
"name": "저장 버튼 재클릭 및 확인",
"description": "저장 버튼 다시 클릭 후 저장 버튼 클릭하여 저장 수행",
"actions": [
{
"type": "click",
"target": "저장 버튼"
},
{
"type": "wait",
"target": "다이얼로그 표시"
},
{
"type": "click",
"target": "다이얼로그 저장 버튼"
},
{
"type": "wait",
"target": "저장 처리 및 페이지 이동"
}
],
"expected": {
"apiCall": "PUT /api/v1/bad-debts/{id}",
"apiResponse": "200 OK",
"urlChanged": "/accounting/bad-debt-collection/{id}",
"successToast": "악성채권이 수정되었습니다."
}
},
{
"id": "step-49",
"name": "상세 페이지 확인",
"description": "저장 후 상세 보기 페이지로 이동되었는지 확인",
"actions": [
{
"type": "verify",
"target": "페이지 모드 및 버튼"
}
],
"expected": {
"pageMode": "view",
"headerButtons": ["삭제", "수정"],
"fieldsDisabled": true
}
},
{
"id": "step-50",
"name": "목록으로 돌아가기",
"description": "뒤로가기 버튼 클릭하여 목록 페이지로 복귀",
"actions": [
{
"type": "click",
"target": "뒤로가기 버튼"
},
{
"type": "wait",
"target": "페이지 이동"
}
],
"expected": {
"url": "/accounting/bad-debt-collection",
"pageTitle": "악성채권추심관리"
}
}
],
"cleanup": {
"description": "테스트 후 입력된 데이터는 DB에 저장됨 (필요시 수동 정리)",
"actions": []
},
"notes": [
"체크박스 선택 시 수정/삭제 버튼이 표시되는지 확인",
"수정 페이지의 모든 입력 필드 (기본 정보, 연락처, 담당자, 악성 채권 정보) 입력 테스트",
"메모 추가 버튼 클릭 시 메모 리스트에 추가되는지 확인",
"메모 삭제 버튼(X) 클릭 시 메모가 삭제되는지 확인",
"추가 서류 추가 버튼이 존재하는지 확인 (실제 파일 업로드는 브라우저 제약으로 스킵)",
"수취 어음 현황 버튼 클릭 시 /accounting/bills 페이지로 이동하는지 확인",
"거래처 미수금 현황 버튼 클릭 시 /accounting/receivables-status 페이지로 이동하는지 확인",
"저장 버튼 클릭 시 저장 확인 다이얼로그 표시 및 API 호출 확인",
"저장 완료 후 상세 보기 페이지로 이동하는지 확인"
]
}