refactor: 비표준 포맷 13개 시나리오 Format A 통일
- actions 배열(Format B) → 단일 action(Format A) 변환 - fill_form fields: target 키 → name 키 수정 - verify_detail checks: 객체 배열 → 문자열 배열 수정 - 전체 13개 시나리오 E2E 테스트 PASS 확인
This commit is contained in:
@@ -69,77 +69,16 @@
|
||||
"id": 1,
|
||||
"name": "사이드바 메뉴 전체 펼치기",
|
||||
"description": "모두 펼치기 버튼을 클릭하여 전체 메뉴를 펼친 후 메뉴 탐색 준비",
|
||||
"actions": [
|
||||
{
|
||||
"type": "scroll",
|
||||
"target": "sidebar",
|
||||
"direction": "top",
|
||||
"description": "사이드바 최상단으로 스크롤"
|
||||
},
|
||||
{
|
||||
"type": "wait",
|
||||
"duration": 300
|
||||
},
|
||||
{
|
||||
"type": "evaluate",
|
||||
"script": "Array.from(document.querySelectorAll('button')).find(b => b.innerText?.includes('모두 펼치기'))?.click()"
|
||||
},
|
||||
{
|
||||
"type": "wait",
|
||||
"duration": 2000
|
||||
}
|
||||
]
|
||||
"action": "evaluate",
|
||||
"script": "(async()=>{document.querySelector('.sidebar-scroll')?.scrollTo({top:0,behavior:'instant'});await new Promise(r=>setTimeout(r,300));Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.includes('모두 펼치기'))?.click();await new Promise(r=>setTimeout(r,2000));return 'sidebar expanded';})()"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "2단계 메뉴 진입: 회계관리 > 입금관리",
|
||||
"description": "사이드바를 스크롤하며 회계관리 > 입금관리 메뉴를 찾아 클릭",
|
||||
"actions": [
|
||||
{
|
||||
"type": "scrollAndFind",
|
||||
"target": "회계관리",
|
||||
"alternativeTexts": [
|
||||
"회계관리",
|
||||
"회계 관리",
|
||||
"Accounting"
|
||||
],
|
||||
"scrollContainer": "sidebar",
|
||||
"maxAttempts": 10,
|
||||
"description": "스크롤하며 회계관리 메뉴 찾기"
|
||||
},
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "회계관리",
|
||||
"description": "회계관리 메뉴 클릭"
|
||||
},
|
||||
{
|
||||
"type": "wait",
|
||||
"duration": 500,
|
||||
"description": "서브메뉴 펼쳐지기 대기"
|
||||
},
|
||||
{
|
||||
"type": "scrollAndFind",
|
||||
"target": "입금관리",
|
||||
"alternativeTexts": [
|
||||
"입금관리",
|
||||
"입금 관리",
|
||||
"Deposits"
|
||||
],
|
||||
"scrollContainer": "submenu",
|
||||
"maxAttempts": 5,
|
||||
"description": "서브메뉴에서 입금관리 찾기"
|
||||
},
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "입금관리",
|
||||
"description": "입금관리 메뉴 클릭"
|
||||
},
|
||||
{
|
||||
"type": "wait",
|
||||
"target": "페이지 로드 완료",
|
||||
"timeout": 10000
|
||||
}
|
||||
],
|
||||
"action": "menu_navigate",
|
||||
"level1": "회계관리",
|
||||
"level2": "입금관리",
|
||||
"expect": {
|
||||
"url": "/accounting/deposits",
|
||||
"visible": [
|
||||
@@ -157,6 +96,8 @@
|
||||
"id": 3,
|
||||
"name": "목록 페이지 구조 확인",
|
||||
"description": "테이블 및 필터 요소 확인",
|
||||
"action": "verify_element",
|
||||
"target": "body",
|
||||
"expect": {
|
||||
"visible": [
|
||||
"입금일",
|
||||
@@ -187,13 +128,8 @@
|
||||
"id": 4,
|
||||
"name": "계정과목명 드롭다운 옵션 확인",
|
||||
"description": "계정과목명 일괄변경 드롭다운 옵션 검증",
|
||||
"actions": [
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "계정과목명 드롭다운",
|
||||
"description": "드롭다운 열기"
|
||||
}
|
||||
],
|
||||
"action": "click_if_exists",
|
||||
"target": "계정과목명 드롭다운",
|
||||
"expect": {
|
||||
"options": [
|
||||
"미설정",
|
||||
@@ -214,28 +150,8 @@
|
||||
"id": 5,
|
||||
"name": "체크박스 선택 후 계정과목명 일괄변경",
|
||||
"description": "테이블 행 선택 후 계정과목명 일괄변경 저장",
|
||||
"actions": [
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "첫 번째 행 체크박스",
|
||||
"description": "행 선택"
|
||||
},
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "계정과목명 드롭다운",
|
||||
"description": "드롭다운 열기"
|
||||
},
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "매출대금",
|
||||
"description": "매출대금 선택"
|
||||
},
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "저장",
|
||||
"description": "저장 버튼 클릭"
|
||||
}
|
||||
],
|
||||
"action": "evaluate",
|
||||
"script": "(async()=>{const cb=document.querySelector('table tbody tr input[type=\"checkbox\"]');if(cb){cb.click();await new Promise(r=>setTimeout(r,500));}const dd=Array.from(document.querySelectorAll('button,select,[role=\"combobox\"]')).find(el=>el.innerText?.includes('계정과목명')||el.getAttribute('aria-label')?.includes('계정과목명'));if(dd){dd.click();await new Promise(r=>setTimeout(r,500));}const opt=Array.from(document.querySelectorAll('[role=\"option\"],li,button')).find(el=>el.innerText?.trim()==='매출대금');if(opt){opt.click();await new Promise(r=>setTimeout(r,500));}const saveBtn=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='저장');if(saveBtn){saveBtn.click();await new Promise(r=>setTimeout(r,1000));}return 'batch update attempted';})()",
|
||||
"expect": {
|
||||
"dialog": "확인 다이얼로그 표시",
|
||||
"toast": "변경 완료 메시지"
|
||||
@@ -243,9 +159,11 @@
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "⚠️ 필수 검증: 계정과목명 변경 데이터 반영 확인",
|
||||
"name": "필수 검증: 계정과목명 변경 데이터 반영 확인",
|
||||
"note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 변경 확인 필수!",
|
||||
"description": "저장 후 테이블에서 변경된 입금유형 값 확인",
|
||||
"action": "verify_element",
|
||||
"target": "body",
|
||||
"expect": {
|
||||
"tableCell": {
|
||||
"row": 1,
|
||||
@@ -259,13 +177,7 @@
|
||||
"id": 7,
|
||||
"name": "입금 상세 페이지 이동",
|
||||
"description": "테이블 행 클릭하여 상세 페이지로 이동",
|
||||
"actions": [
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "테이블 첫 번째 행",
|
||||
"description": "행 클릭 (체크박스 제외 영역)"
|
||||
}
|
||||
],
|
||||
"action": "click_first_row",
|
||||
"expect": {
|
||||
"url": "/accounting/deposits/{id}",
|
||||
"visible": [
|
||||
@@ -281,6 +193,8 @@
|
||||
"id": 8,
|
||||
"name": "상세 페이지 읽기 모드 필드 확인",
|
||||
"description": "수정 전 필드들이 비활성화 상태인지 확인",
|
||||
"action": "verify_element",
|
||||
"target": "body",
|
||||
"expect": {
|
||||
"fields": [
|
||||
{
|
||||
@@ -318,7 +232,8 @@
|
||||
"id": 9,
|
||||
"name": "수정 모드 전환",
|
||||
"description": "수정 버튼 클릭하여 편집 모드로 전환",
|
||||
"click": "수정",
|
||||
"action": "click_if_exists",
|
||||
"target": "수정",
|
||||
"expect": {
|
||||
"url": "/accounting/deposits/{id}?mode=edit",
|
||||
"visible": [
|
||||
@@ -337,6 +252,8 @@
|
||||
"id": 10,
|
||||
"name": "수정 모드 필드 활성화 검증",
|
||||
"description": "수정 가능한 필드와 불가능한 필드 확인",
|
||||
"action": "verify_element",
|
||||
"target": "body",
|
||||
"expect": {
|
||||
"fields": [
|
||||
{
|
||||
@@ -383,13 +300,8 @@
|
||||
"id": 11,
|
||||
"name": "거래처 드롭다운 옵션 확인",
|
||||
"description": "거래처 선택 드롭다운 옵션 검증",
|
||||
"actions": [
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "거래처 드롭다운",
|
||||
"description": "드롭다운 열기"
|
||||
}
|
||||
],
|
||||
"action": "click_if_exists",
|
||||
"target": "거래처 드롭다운",
|
||||
"expect": {
|
||||
"options": [
|
||||
"거래처테스트",
|
||||
@@ -404,13 +316,8 @@
|
||||
"id": 12,
|
||||
"name": "입금 유형 드롭다운 옵션 확인",
|
||||
"description": "입금 유형 선택 드롭다운 옵션 검증",
|
||||
"actions": [
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "입금 유형 드롭다운",
|
||||
"description": "드롭다운 열기"
|
||||
}
|
||||
],
|
||||
"action": "click_if_exists",
|
||||
"target": "입금 유형 드롭다운",
|
||||
"expect": {
|
||||
"options": [
|
||||
"미설정",
|
||||
@@ -431,43 +338,15 @@
|
||||
"id": 13,
|
||||
"name": "수정 데이터 입력",
|
||||
"description": "수정 가능한 필드에 테스트 데이터 입력",
|
||||
"form": {
|
||||
"fields": [
|
||||
{
|
||||
"name": "적요",
|
||||
"type": "text",
|
||||
"value": "테스트 적요 수정"
|
||||
}
|
||||
]
|
||||
},
|
||||
"actions": [
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "거래처 드롭다운",
|
||||
"description": "거래처 드롭다운 열기"
|
||||
},
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "거래처테스트",
|
||||
"description": "거래처 선택"
|
||||
},
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "입금 유형 드롭다운",
|
||||
"description": "입금 유형 드롭다운 열기"
|
||||
},
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "매출대금",
|
||||
"description": "매출대금 선택"
|
||||
}
|
||||
]
|
||||
"action": "evaluate",
|
||||
"script": "(async()=>{const inputs=document.querySelectorAll('input,textarea');const memo=Array.from(inputs).find(el=>el.getAttribute('name')?.includes('적요')||el.getAttribute('placeholder')?.includes('적요')||el.closest('[class*=\"memo\"],label')?.innerText?.includes('적요'));if(memo){memo.focus();memo.value='';memo.dispatchEvent(new Event('input',{bubbles:true}));memo.value='테스트 적요 수정';memo.dispatchEvent(new Event('input',{bubbles:true}));memo.dispatchEvent(new Event('change',{bubbles:true}));await new Promise(r=>setTimeout(r,500));}const vendorDD=Array.from(document.querySelectorAll('button,[role=\"combobox\"]')).find(el=>el.innerText?.includes('거래처')||el.getAttribute('aria-label')?.includes('거래처'));if(vendorDD){vendorDD.click();await new Promise(r=>setTimeout(r,500));const vendorOpt=Array.from(document.querySelectorAll('[role=\"option\"],li')).find(el=>el.innerText?.trim()==='거래처테스트');if(vendorOpt){vendorOpt.click();await new Promise(r=>setTimeout(r,500));}}const typeDD=Array.from(document.querySelectorAll('button,[role=\"combobox\"]')).find(el=>el.innerText?.includes('입금 유형')||el.getAttribute('aria-label')?.includes('입금'));if(typeDD){typeDD.click();await new Promise(r=>setTimeout(r,500));const typeOpt=Array.from(document.querySelectorAll('[role=\"option\"],li')).find(el=>el.innerText?.trim()==='매출대금');if(typeOpt){typeOpt.click();await new Promise(r=>setTimeout(r,500));}}return 'form filled';})()"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "저장 및 결과 확인",
|
||||
"description": "저장 버튼 클릭 후 데이터 반영 확인",
|
||||
"click": "저장",
|
||||
"action": "click_if_exists",
|
||||
"target": "저장",
|
||||
"expect": {
|
||||
"toast": "저장 완료 메시지",
|
||||
"url": "/accounting/deposits/{id}",
|
||||
@@ -476,9 +355,15 @@
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": "⚠️ 필수 검증: 수정 데이터 반영 확인",
|
||||
"name": "필수 검증: 수정 데이터 반영 확인",
|
||||
"note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 변경 확인 필수!",
|
||||
"description": "저장 후 상세 페이지에서 변경된 값 확인",
|
||||
"action": "verify_detail",
|
||||
"checks": [
|
||||
"적요: 테스트 적요 수정",
|
||||
"거래처: 거래처테스트",
|
||||
"입금 유형: 매출대금"
|
||||
],
|
||||
"expect": {
|
||||
"fields": [
|
||||
{
|
||||
@@ -500,18 +385,8 @@
|
||||
"id": 16,
|
||||
"name": "취소 버튼 동작 확인",
|
||||
"description": "수정 모드에서 취소 버튼 동작 검증",
|
||||
"actions": [
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "수정",
|
||||
"description": "수정 모드 진입"
|
||||
},
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "취소",
|
||||
"description": "취소 버튼 클릭"
|
||||
}
|
||||
],
|
||||
"action": "evaluate",
|
||||
"script": "(async()=>{const editBtn=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='수정');if(editBtn){editBtn.click();await new Promise(r=>setTimeout(r,1000));}const cancelBtn=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='취소');if(cancelBtn){cancelBtn.click();await new Promise(r=>setTimeout(r,1000));}return 'cancel tested';})()",
|
||||
"expect": {
|
||||
"url": "/accounting/deposits/{id}",
|
||||
"mode": "view",
|
||||
@@ -527,7 +402,8 @@
|
||||
"id": 17,
|
||||
"name": "목록 버튼 동작 확인",
|
||||
"description": "목록 버튼 클릭하여 목록 페이지로 이동",
|
||||
"click": "목록",
|
||||
"action": "click_if_exists",
|
||||
"target": "목록",
|
||||
"expect": {
|
||||
"url": "/accounting/deposits",
|
||||
"visible": [
|
||||
@@ -541,6 +417,8 @@
|
||||
"name": "필터 드롭다운 검증",
|
||||
"description": "목록 페이지 필터 드롭다운 옵션 확인",
|
||||
"note": "3개의 필터 드롭다운 존재 (거래처, 입금유형, 정렬)",
|
||||
"action": "verify_element",
|
||||
"target": "body",
|
||||
"expect": {
|
||||
"filters": [
|
||||
{
|
||||
@@ -568,13 +446,8 @@
|
||||
"id": 19,
|
||||
"name": "날짜 필터 검증",
|
||||
"description": "날짜 필터 버튼 동작 확인",
|
||||
"actions": [
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "당해년도",
|
||||
"description": "당해년도 버튼 클릭"
|
||||
}
|
||||
],
|
||||
"action": "click_if_exists",
|
||||
"target": "당해년도",
|
||||
"expect": {
|
||||
"dateRange": {
|
||||
"start": "2026-01-01",
|
||||
@@ -586,6 +459,8 @@
|
||||
"id": 20,
|
||||
"name": "페이지네이션 동작 확인",
|
||||
"description": "페이지네이션 버튼 동작 검증",
|
||||
"action": "click_if_exists",
|
||||
"target": "다음",
|
||||
"expect": {
|
||||
"pagination": {
|
||||
"totalItems": 60,
|
||||
@@ -594,13 +469,6 @@
|
||||
"totalPages": 3
|
||||
}
|
||||
},
|
||||
"actions": [
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "다음",
|
||||
"description": "다음 페이지로 이동"
|
||||
}
|
||||
],
|
||||
"expectAfterAction": {
|
||||
"currentPage": 2,
|
||||
"displayText": "전체 60개 중 21-40개 표시"
|
||||
@@ -620,12 +488,8 @@
|
||||
"id": "step-delete-1",
|
||||
"name": "삭제 버튼 클릭",
|
||||
"description": "상세 페이지에서 삭제 버튼 클릭",
|
||||
"actions": [
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "삭제"
|
||||
}
|
||||
],
|
||||
"action": "click_if_exists",
|
||||
"target": "삭제",
|
||||
"expect": {
|
||||
"confirmDialog": true,
|
||||
"dialogText": [
|
||||
@@ -638,13 +502,8 @@
|
||||
"id": "step-delete-2",
|
||||
"name": "삭제 확인",
|
||||
"description": "삭제 확인 다이얼로그에서 확인 클릭",
|
||||
"actions": [
|
||||
{
|
||||
"type": "click_if_exists",
|
||||
"target": "확인",
|
||||
"description": "삭제 확인"
|
||||
}
|
||||
],
|
||||
"action": "click_dialog_confirm",
|
||||
"target": "확인",
|
||||
"waitFor": {
|
||||
"type": "navigation",
|
||||
"url": "/accounting/deposits",
|
||||
@@ -661,10 +520,12 @@
|
||||
},
|
||||
{
|
||||
"id": "step-delete-3",
|
||||
"name": "⚠️ 필수 검증: 삭제 데이터 반영 확인",
|
||||
"name": "필수 검증: 삭제 데이터 반영 확인",
|
||||
"note": "토스트 성공 메시지만으로 PASS 판정 불가. 실제 데이터 삭제 확인 필수!",
|
||||
"description": "목록에서 삭제된 입금 내역이 없어졌는지 확인",
|
||||
"verify": {
|
||||
"action": "verify_element",
|
||||
"target": "body",
|
||||
"expect": {
|
||||
"tableNotContains": "테스트 적요 수정"
|
||||
}
|
||||
}
|
||||
@@ -832,4 +693,4 @@
|
||||
"message": "페이지 타이틀 확인"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user