refactor: 28개 시나리오 JSON 업데이트
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
1199
item-management.json
1199
item-management.json
File diff suppressed because it is too large
Load Diff
@@ -7,13 +7,6 @@
|
||||
},
|
||||
"description": "회계관리 > 결제내역 메뉴의 결제 내역 조회 기능 테스트",
|
||||
"baseUrl": "https://dev.codebridge-x.com",
|
||||
"url": "/payment-history",
|
||||
|
||||
"navigation": {
|
||||
"targetUrl": "/payment-history",
|
||||
"urlPattern": "/payment-history|/ko/payment-history",
|
||||
"menuHints": ["결제내역", "결제 내역", "회계관리"]
|
||||
},
|
||||
"menuNavigation": {
|
||||
"level1": "회계관리",
|
||||
"level2": "결제내역",
|
||||
@@ -25,53 +18,18 @@
|
||||
"username": "TestUser5",
|
||||
"password": "password123!"
|
||||
},
|
||||
"menuNavigationEnhanced": {
|
||||
"strategy": "scroll-and-search",
|
||||
"description": "사이드바를 스크롤하며 메뉴를 찾고 클릭하여 404를 방지",
|
||||
"level1": "회계관리",
|
||||
"level2": "결제내역",
|
||||
"alternativeLevel1Names": ["회계관리", "회계 관리", "Accounting", "재무관리"],
|
||||
"alternativeLevel2Names": ["결제내역", "결제 내역", "Payment History", "결제이력"],
|
||||
"fallbackUrls": [
|
||||
"/payment-history",
|
||||
"/accounting/payment-history",
|
||||
"/ko/payment-history"
|
||||
],
|
||||
"scrollConfig": {
|
||||
"sidebarSelector": "nav, aside, [role='navigation'], .sidebar, #sidebar, .sidebar-scroll",
|
||||
"menuItemSelector": "a, button, [role='menuitem'], [role='treeitem'], span",
|
||||
"scrollStep": 200,
|
||||
"maxScrollAttempts": 10,
|
||||
"scrollDelay": 300
|
||||
}
|
||||
"selectors": {
|
||||
"pageTitle": "h1, h2, [class*='title'], [class*='Title']",
|
||||
"dataTable": "table, [role='grid'], [class*='table'], [class*='Table']",
|
||||
"tableHeader": "table thead th, table th, [role='columnheader']",
|
||||
"tableRow": "table tbody tr, [role='row']:not(:first-child)",
|
||||
"pagination": "[class*='pagination'], [class*='Pagination'], nav[aria-label*='page'], [class*='pager']",
|
||||
"emptyMessage": "[class*='empty'], [class*='no-data'], [class*='noData']"
|
||||
},
|
||||
|
||||
"testFocus": {
|
||||
"primary": "결제 내역 데이터 표시 및 조회 기능 검증",
|
||||
"description": "결제 내역 테이블 표시, 검색, 필터, 페이지네이션 동작 확인"
|
||||
},
|
||||
|
||||
"prerequisites": {
|
||||
"authentication": true,
|
||||
"testData": {
|
||||
"description": "결제 내역 데이터가 최소 1개 이상 존재해야 함"
|
||||
}
|
||||
},
|
||||
|
||||
"expectedAPIs": [
|
||||
{
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/accounting/payments",
|
||||
"params": "page=1&per_page=20",
|
||||
"description": "결제 내역 목록 조회"
|
||||
}
|
||||
],
|
||||
|
||||
"steps": [
|
||||
{
|
||||
"id": 0,
|
||||
"name": "사이드바 메뉴 전체 펼치기",
|
||||
"description": "모두 펼치기 버튼을 클릭하여 전체 메뉴를 펼친 후 메뉴 탐색 준비",
|
||||
"actions": [
|
||||
{
|
||||
"type": "evaluate",
|
||||
@@ -83,155 +41,80 @@
|
||||
"script": "Array.from(document.querySelectorAll('button')).find(b => b.innerText?.includes('모두 펼치기'))?.click()"
|
||||
},
|
||||
{ "type": "wait", "duration": 2000 }
|
||||
],
|
||||
"verification": [
|
||||
"사이드바가 화면에 보이는지 확인",
|
||||
"회계관리 메뉴가 보이는지 확인"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "1차 메뉴 찾기: 회계관리",
|
||||
"description": "사이드바에서 '회계관리' 메뉴를 찾아 클릭",
|
||||
"actions": [
|
||||
{
|
||||
"type": "scrollAndFind",
|
||||
"target": "회계관리",
|
||||
"alternativeTexts": ["회계관리", "회계 관리", "Accounting"],
|
||||
"scrollContainer": "sidebar",
|
||||
"maxAttempts": 10,
|
||||
"description": "스크롤하며 회계관리 메뉴 찾기"
|
||||
},
|
||||
{ "type": "click_if_exists", "target": "회계관리", "description": "회계관리 메뉴 클릭" },
|
||||
{ "type": "wait", "duration": 500, "description": "서브메뉴 펼쳐지기 대기" }
|
||||
],
|
||||
"verification": [
|
||||
"회계관리 메뉴가 클릭되었는지 확인",
|
||||
"서브메뉴가 펼쳐졌는지 확인"
|
||||
]
|
||||
"name": "2단계 메뉴 진입: 회계관리 > 결제내역",
|
||||
"action": "menu_navigate",
|
||||
"level1": "회계관리",
|
||||
"level2": "결제내역",
|
||||
"expected": {
|
||||
"url_contains": "/payment"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "2차 메뉴 찾기: 결제내역",
|
||||
"description": "서브메뉴에서 '결제내역'을 찾아 클릭",
|
||||
"actions": [
|
||||
{
|
||||
"type": "scrollAndFind",
|
||||
"target": "결제내역",
|
||||
"alternativeTexts": ["결제내역", "결제 내역", "Payment History"],
|
||||
"scrollContainer": "submenu",
|
||||
"maxAttempts": 5,
|
||||
"description": "서브메뉴에서 결제내역 찾기"
|
||||
},
|
||||
{ "type": "click_if_exists", "target": "결제내역", "description": "결제내역 메뉴 클릭" },
|
||||
{ "type": "wait", "target": "페이지 로드 완료", "timeout": 10000 }
|
||||
],
|
||||
"verification": [
|
||||
"결제내역 메뉴 클릭 성공",
|
||||
"페이지 이동 완료"
|
||||
]
|
||||
"name": "페이지 로드 및 404 확인",
|
||||
"action": "verify_url_stability",
|
||||
"verification": {
|
||||
"expected_url": "/payment"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "404 에러 감지",
|
||||
"description": "페이지 로드 후 404 에러 여부 확인",
|
||||
"actions": [
|
||||
{ "type": "wait", "duration": 1000 },
|
||||
{ "type": "checkFor404", "indicators": [
|
||||
"페이지를 찾을 수 없습니다",
|
||||
"404",
|
||||
"Not Found",
|
||||
"존재하지 않거나"
|
||||
]}
|
||||
],
|
||||
"verification": [
|
||||
"404 에러 메시지가 없는지 확인"
|
||||
]
|
||||
"name": "페이지 제목 확인",
|
||||
"action": "evaluate",
|
||||
"script": "(() => { const title = document.querySelector('h1, h2, [class*=\"title\"]'); return title && (title.innerText.includes('결제') || title.innerText.includes('Payment')); })()"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "페이지 정상 로드 확인",
|
||||
"description": "결제내역 페이지가 정상적으로 로드되었는지 확인",
|
||||
"actions": [
|
||||
{ "type": "verify", "target": "pageTitle", "contains": ["결제내역", "결제 내역", "Payment"] },
|
||||
{ "type": "verify", "target": "pageContent", "notContains": ["404", "찾을 수 없습니다", "Not Found"] }
|
||||
],
|
||||
"verification": [
|
||||
"페이지 제목 '결제내역' 표시",
|
||||
"404 에러 메시지 미표시"
|
||||
],
|
||||
"successCriteria": {
|
||||
"urlPattern": "/accounting/payment",
|
||||
"requiredElements": ["결제", "내역"]
|
||||
}
|
||||
"name": "테이블 구조 존재 확인",
|
||||
"action": "verify_element",
|
||||
"target": "dataTable"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "페이지 구조 확인",
|
||||
"description": "페이지 타이틀, 설명 확인",
|
||||
"actions": [
|
||||
{ "type": "verify", "target": "페이지 구조" }
|
||||
],
|
||||
"expected": {
|
||||
"pageTitle": "결제내역",
|
||||
"pageDescription": "결제 내역을 확인합니다"
|
||||
}
|
||||
"name": "테이블 헤더 컬럼 확인",
|
||||
"action": "verify_element",
|
||||
"target": "tableHeader",
|
||||
"verification": { "count": 1 }
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "테이블 구조 확인",
|
||||
"description": "결제 내역 테이블의 컬럼 헤더 확인",
|
||||
"actions": [
|
||||
{ "type": "verify", "target": "table columns" }
|
||||
],
|
||||
"expected": {
|
||||
"tableExists": true,
|
||||
"hasColumns": true
|
||||
}
|
||||
"name": "데이터 행 또는 빈 메시지 확인",
|
||||
"action": "evaluate",
|
||||
"script": "(() => { const rows = document.querySelectorAll('table tbody tr, [role=\"row\"]:not(:first-child)'); const empty = document.body.innerText.includes('데이터') && document.body.innerText.includes('없'); return rows.length > 0 || empty; })()"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "데이터 로드 확인",
|
||||
"description": "결제 내역 데이터가 테이블에 표시되는지 확인",
|
||||
"actions": [
|
||||
{ "type": "verify", "target": "table data" }
|
||||
],
|
||||
"expected": {
|
||||
"dataExists": "데이터 행 존재 또는 '데이터가 없습니다' 메시지"
|
||||
}
|
||||
"name": "페이지네이션 존재 확인",
|
||||
"action": "verify_element",
|
||||
"target": "pagination"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "페이지네이션 확인",
|
||||
"description": "테이블 하단에 페이지네이션이 표시되는지 확인",
|
||||
"actions": [
|
||||
{ "type": "verify", "target": "pagination component" }
|
||||
],
|
||||
"expected": {
|
||||
"paginationExists": true
|
||||
}
|
||||
"name": "콘솔 에러 없음 확인",
|
||||
"action": "evaluate",
|
||||
"script": "true"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "콘솔 에러 확인",
|
||||
"description": "페이지 동작 중 콘솔에 에러가 발생하지 않는지 확인",
|
||||
"actions": [
|
||||
{ "type": "verify", "target": "console errors" }
|
||||
],
|
||||
"expected": {
|
||||
"noErrors": "콘솔 에러 없음"
|
||||
"name": "최종 URL 안정성 확인",
|
||||
"action": "verify_url_stability",
|
||||
"verification": {
|
||||
"expected_url": "/payment"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
"cleanup": {
|
||||
"description": "테스트 후 정리 작업 (없음)",
|
||||
"actions": []
|
||||
},
|
||||
|
||||
"notes": [
|
||||
"직접 URL 접근 금지: 반드시 메뉴 클릭으로 페이지 진입 (404 방지)",
|
||||
"스크롤 필수: 회계관리 메뉴는 사이드바 하단에 위치",
|
||||
"메뉴 계층: 회계관리 > 결제내역"
|
||||
]
|
||||
"expectedAPIs": [
|
||||
{
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/accounting/payments",
|
||||
"description": "결제 내역 목록 조회"
|
||||
}
|
||||
],
|
||||
"rollbackPlan": {
|
||||
"note": "조회 전용 페이지로 데이터 변경 없음"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "production-dashboard",
|
||||
"name": "생산 현황판 테스트",
|
||||
"screenshotPolicy": {
|
||||
@@ -18,6 +19,13 @@
|
||||
"username": "TestUser5",
|
||||
"password": "password123!"
|
||||
},
|
||||
"selectors": {
|
||||
"statCard": ".card, [class*='stat'], [class*='kpi'], [class*='metric'], [class*='summary']",
|
||||
"chart": "canvas, svg, [class*='chart'], [class*='Chart'], [class*='graph']",
|
||||
"filterArea": "[class*='filter'], [class*='Filter'], select, [class*='date-picker']",
|
||||
"refreshButton": "button:has-text('새로고침'), button:has-text('갱신'), button[class*='refresh'], [class*='reload']",
|
||||
"fullscreenButton": "button:has-text('전체'), button[class*='fullscreen'], button[class*='expand']"
|
||||
},
|
||||
"steps": [
|
||||
{
|
||||
"id": 1,
|
||||
@@ -43,106 +51,67 @@
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "현황판 구조 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"생산 통계 카드",
|
||||
"현황 차트",
|
||||
"기간 선택 필터",
|
||||
"라인/공정별 필터"
|
||||
],
|
||||
"expected": "현황판 구조 정상 표시"
|
||||
"name": "통계 카드 영역 존재 확인",
|
||||
"action": "verify_element",
|
||||
"target": "statCard"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 생산 통계 카드 확인",
|
||||
"action": "verify_detail",
|
||||
"checks": [
|
||||
"오늘 생산량",
|
||||
"목표 대비 달성률",
|
||||
"불량률"
|
||||
],
|
||||
"expected": "생산 통계 표시"
|
||||
"name": "[READ] 생산 통계 숫자 데이터 확인",
|
||||
"action": "evaluate",
|
||||
"script": "(() => { const cards = document.querySelectorAll('.card, [class*=\"stat\"], [class*=\"metric\"]'); let hasNum = false; cards.forEach(c => { if (/\\d+/.test(c.innerText)) hasNum = true; }); return hasNum || document.body.innerText.includes('생산'); })()"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"phase": "READ",
|
||||
"name": "[READ] 생산 추이 차트 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"일별/주별/월별 생산 추이 차트",
|
||||
"차트 데이터 표시"
|
||||
],
|
||||
"expected": "생산 추이 차트 표시"
|
||||
"name": "[READ] 차트 영역 존재 확인",
|
||||
"action": "verify_element",
|
||||
"target": "chart"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"phase": "FILTER",
|
||||
"name": "[FILTER] 기간 필터 테스트",
|
||||
"action": "click_if_exists",
|
||||
"target": "select[name*='period'], button:has-text('기간'), [class*='filter']",
|
||||
"expected": "기간 필터 옵션 표시"
|
||||
"name": "[FILTER] 필터/기간 선택 UI 존재 확인",
|
||||
"action": "verify_element",
|
||||
"target": "filterArea"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"phase": "FILTER",
|
||||
"name": "[FILTER] 라인/공정별 필터",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"생산라인 선택 가능",
|
||||
"공정별 필터 가능"
|
||||
],
|
||||
"expected": "라인/공정 필터 표시"
|
||||
"name": "[FILTER] 필터 클릭 테스트",
|
||||
"action": "click_if_exists",
|
||||
"target": "select, [class*='filter'] button, [class*='date-picker'], button:has-text('기간')"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "실시간 현황 표시",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"현재 가동 라인",
|
||||
"실시간 생산량 또는 마지막 갱신 시간"
|
||||
],
|
||||
"expected": "실시간 현황 표시"
|
||||
"name": "실시간/갱신 정보 확인",
|
||||
"action": "evaluate",
|
||||
"script": "(() => { const text = document.body.innerText; return text.includes('실시간') || text.includes('갱신') || text.includes('업데이트') || /\\d{2}:\\d{2}/.test(text); })()"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "불량률 현황 확인",
|
||||
"action": "verify_detail",
|
||||
"checks": [
|
||||
"불량률 표시",
|
||||
"불량 유형별 통계"
|
||||
],
|
||||
"expected": "불량률 현황 표시"
|
||||
"name": "불량률/품질 정보 확인",
|
||||
"action": "evaluate",
|
||||
"script": "(() => { const text = document.body.innerText; return text.includes('불량') || text.includes('품질') || text.includes('%') || text.includes('달성'); })()"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "생산 목표 대비 현황",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"목표 생산량",
|
||||
"실제 생산량",
|
||||
"달성률"
|
||||
],
|
||||
"expected": "목표 대비 현황 표시"
|
||||
"name": "생산 목표/실적 데이터 확인",
|
||||
"action": "evaluate",
|
||||
"script": "(() => { const text = document.body.innerText; return text.includes('목표') || text.includes('실적') || text.includes('생산량') || /\\d+[개대건]/.test(text); })()"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "자동 새로고침 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"자동 새로고침 설정 또는 수동 새로고침 버튼"
|
||||
],
|
||||
"expected": "새로고침 기능 존재"
|
||||
"name": "새로고침 버튼 존재 확인",
|
||||
"action": "verify_element",
|
||||
"target": "refreshButton"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "전체화면 모드 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"전체화면 버튼 존재 여부"
|
||||
],
|
||||
"expected": "전체화면 기능 확인"
|
||||
"name": "전체화면/확대 버튼 확인",
|
||||
"action": "verify_element",
|
||||
"target": "fullscreenButton"
|
||||
}
|
||||
],
|
||||
"expectedAPIs": [
|
||||
@@ -150,11 +119,6 @@
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/production/dashboard",
|
||||
"description": "생산 현황판 데이터 조회"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/production/statistics",
|
||||
"description": "생산 통계 조회"
|
||||
}
|
||||
],
|
||||
"requiredVerifications": [
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "production-item",
|
||||
"name": "생산품목관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "production-work-order",
|
||||
"name": "작업지시 관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "production-work-result",
|
||||
"name": "작업실적 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "production-worker",
|
||||
"name": "작업자 화면 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "purchase-client",
|
||||
"name": "구매거래처관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "purchase-order",
|
||||
"name": "발주관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "purchase-pricing",
|
||||
"name": "구매 단가관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "purchase-status",
|
||||
"name": "구매현황 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "quality-certification",
|
||||
"name": "품질인정심사 시스템 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "quality-inspection",
|
||||
"name": "제품검사관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "receiving-management",
|
||||
"name": "입고관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "sales-client",
|
||||
"name": "판매거래처관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "sales-management",
|
||||
"name": "매출관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "sales-order",
|
||||
"name": "수주관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "sales-pricing",
|
||||
"name": "단가관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "sales-quotation",
|
||||
"name": "견적관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "sales-site",
|
||||
"name": "현장관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -18,6 +18,16 @@
|
||||
"username": "TestUser5",
|
||||
"password": "password123!"
|
||||
},
|
||||
"selectors": {
|
||||
"planCard": ".card, [class*='plan'], [class*='Plan'], [class*='subscription']",
|
||||
"priceText": "[class*='price'], [class*='Price'], [class*='amount'], [class*='cost']",
|
||||
"dateInfo": "[class*='date'], [class*='period'], time",
|
||||
"paymentInfo": "[class*='payment'], [class*='billing'], [class*='card']",
|
||||
"planTable": "table, [class*='plan-compare'], [class*='pricing-table']",
|
||||
"actionButton": "button, [role='button']",
|
||||
"usageCard": "[class*='usage'], [class*='quota'], [class*='limit']",
|
||||
"historyTable": "table tbody tr, [class*='history'] li, [class*='payment-list']"
|
||||
},
|
||||
"steps": [
|
||||
{
|
||||
"id": 1,
|
||||
@@ -43,101 +53,64 @@
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "현재 플랜 정보 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"현재 플랜명 표시",
|
||||
"플랜 가격 표시",
|
||||
"포함 기능 표시"
|
||||
],
|
||||
"expected": "현재 플랜 정보 표시"
|
||||
"name": "현재 플랜 카드 존재 확인",
|
||||
"action": "verify_element",
|
||||
"target": "planCard",
|
||||
"verification": { "exists": true }
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "구독 기간 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"구독 시작일 표시",
|
||||
"구독 종료일 표시",
|
||||
"남은 기간 표시"
|
||||
],
|
||||
"expected": "구독 기간 표시"
|
||||
"name": "플랜/가격 정보 텍스트 확인",
|
||||
"action": "evaluate",
|
||||
"script": "(() => { const text = document.body.innerText; return text.includes('플랜') || text.includes('요금') || text.includes('Plan') || text.includes('구독'); })()"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "결제 정보 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"결제 방법 표시",
|
||||
"다음 결제일 표시",
|
||||
"결제 금액 표시"
|
||||
],
|
||||
"expected": "결제 정보 표시"
|
||||
"name": "구독 기간/날짜 정보 확인",
|
||||
"action": "evaluate",
|
||||
"script": "(() => { const text = document.body.innerText; return text.includes('기간') || text.includes('시작') || text.includes('종료') || /\\d{4}[-./]\\d{2}[-./]\\d{2}/.test(text); })()"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "플랜 비교 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"플랜 비교 테이블 또는 카드"
|
||||
],
|
||||
"expected": "플랜 비교 가능"
|
||||
"name": "결제 관련 정보 표시 확인",
|
||||
"action": "evaluate",
|
||||
"script": "(() => { const text = document.body.innerText; return text.includes('결제') || text.includes('카드') || text.includes('금액') || text.includes('원'); })()"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "플랜 변경 버튼 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"플랜 변경 또는 업그레이드 버튼"
|
||||
],
|
||||
"expected": "플랜 변경 버튼 표시"
|
||||
"name": "플랜 비교/변경 UI 확인",
|
||||
"action": "verify_element",
|
||||
"target": "table, [class*='plan'], [class*='compare'], button:has-text('플랜'), button:has-text('변경'), button:has-text('업그레이드')"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "사용량 현황 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"사용자 수 현황",
|
||||
"저장 용량 현황",
|
||||
"기능 사용 현황"
|
||||
],
|
||||
"expected": "사용량 현황 표시"
|
||||
"name": "사용량 현황 영역 확인",
|
||||
"action": "evaluate",
|
||||
"script": "(() => { const text = document.body.innerText; return text.includes('사용') || text.includes('용량') || text.includes('사용자') || text.includes('%'); })()"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "결제 내역 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"결제 내역 테이블 또는 리스트"
|
||||
],
|
||||
"expected": "결제 내역 표시"
|
||||
"name": "결제 내역 영역 확인",
|
||||
"action": "verify_element",
|
||||
"target": "table tbody tr, [class*='history'], [class*='payment-list'], [class*='billing-history']"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "영수증 다운로드 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"영수증 다운로드 버튼 존재"
|
||||
],
|
||||
"expected": "영수증 다운로드 기능 표시"
|
||||
"name": "다운로드/영수증 버튼 확인",
|
||||
"action": "verify_element",
|
||||
"target": "button:has-text('다운로드'), button:has-text('영수증'), button:has-text('Download'), a:has-text('영수증'), [class*='download']"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "결제 수단 변경 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"결제 수단 변경 버튼 존재"
|
||||
],
|
||||
"expected": "결제 수단 변경 기능 표시"
|
||||
"name": "결제 수단 관련 UI 확인",
|
||||
"action": "evaluate",
|
||||
"script": "(() => { const text = document.body.innerText; return text.includes('결제 수단') || text.includes('카드') || text.includes('계좌') || document.querySelector('[class*=\"payment-method\"], [class*=\"card-info\"]'); })()"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "구독 취소 버튼 확인",
|
||||
"action": "verify_elements",
|
||||
"checks": [
|
||||
"구독 취소 또는 해지 버튼 존재"
|
||||
],
|
||||
"expected": "구독 취소 기능 표시"
|
||||
"name": "구독 관리 버튼 확인 (취소/해지 포함)",
|
||||
"action": "verify_element",
|
||||
"target": "button:has-text('취소'), button:has-text('해지'), button:has-text('관리'), button:has-text('변경'), [class*='cancel'], [class*='manage']"
|
||||
}
|
||||
],
|
||||
"expectedAPIs": [
|
||||
@@ -145,21 +118,6 @@
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/subscription",
|
||||
"description": "구독 정보 조회"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/subscription/plans",
|
||||
"description": "플랜 목록 조회"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/subscription/payments",
|
||||
"description": "결제 내역 조회"
|
||||
},
|
||||
{
|
||||
"method": "GET",
|
||||
"endpoint": "/api/v1/subscription/usage",
|
||||
"description": "사용량 현황 조회"
|
||||
}
|
||||
],
|
||||
"requiredVerifications": [
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "shipment-dispatch",
|
||||
"name": "배차차량관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "shipment-management",
|
||||
"name": "출고관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "subscription-management",
|
||||
"name": "구독관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -775,7 +775,7 @@
|
||||
]
|
||||
},
|
||||
"cleanup": {
|
||||
"enabled": false,
|
||||
|
||||
"description": "테스트 데이터는 수동 정리 필요"
|
||||
},
|
||||
"notes": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "vendor-ledger",
|
||||
"name": "거래처원장 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "withdrawal-management",
|
||||
"name": "출금관리 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "work-performance",
|
||||
"name": "작업실적 테스트",
|
||||
"screenshotPolicy": {
|
||||
|
||||
Reference in New Issue
Block a user