fix: quality-inspection CRUD→조회전용 변환 (validation 에러 방지)
- quality-inspection v2.0: CREATE/UPDATE/DELETE 제거, 등록폼은 열기만 하고 저장 안함 - 이전: 품목코드/검사유형 미입력으로 백엔드 validation 에러 발생 - quality-performance-report: knownIssues 추가 (route not found 프론트엔드 버그)
This commit is contained in:
@@ -2,18 +2,12 @@
|
|||||||
"enabled": true,
|
"enabled": true,
|
||||||
"id": "quality-inspection",
|
"id": "quality-inspection",
|
||||||
"name": "제품검사관리 테스트",
|
"name": "제품검사관리 테스트",
|
||||||
|
"version": "2.0.0",
|
||||||
"screenshotPolicy": {
|
"screenshotPolicy": {
|
||||||
"onErrorOnly": true,
|
"captureOnFail": true,
|
||||||
"captureOn": [
|
"captureOnPass": false
|
||||||
"error",
|
|
||||||
"fail",
|
|
||||||
"timeout",
|
|
||||||
"404",
|
|
||||||
"500",
|
|
||||||
"blocked"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"description": "품질관리 > 제품검사관리 메뉴의 제품검사 조회/등록/수정/삭제 전체 CRUD 테스트",
|
"description": "품질관리 > 제품검사관리 메뉴의 목록/상세/검색 조회 테스트 (v2: CRUD→조회전용, validation 에러 방지)",
|
||||||
"baseUrl": "https://dev.codebridge-x.com",
|
"baseUrl": "https://dev.codebridge-x.com",
|
||||||
"menuNavigation": {
|
"menuNavigation": {
|
||||||
"level1": "품질관리",
|
"level1": "품질관리",
|
||||||
@@ -22,23 +16,7 @@
|
|||||||
"searchWithinParent": true,
|
"searchWithinParent": true,
|
||||||
"closeOtherMenus": true
|
"closeOtherMenus": true
|
||||||
},
|
},
|
||||||
"auth": {
|
"auth": { "username": "TestUser5", "password": "password123!" },
|
||||||
"username": "TestUser5",
|
|
||||||
"password": "password123!"
|
|
||||||
},
|
|
||||||
"testData": {
|
|
||||||
"create": {
|
|
||||||
"siteName": "E2E_TEST_현장",
|
|
||||||
"orderCompany": "E2E_TEST_수주처",
|
|
||||||
"location": "테스트구역A",
|
|
||||||
"inspector": "홍길동",
|
|
||||||
"memo": "E2E 자동화 테스트 제품검사"
|
|
||||||
},
|
|
||||||
"update": {
|
|
||||||
"location": "테스트구역B",
|
|
||||||
"memo": "E2E 수정된 제품검사 메모"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"steps": [
|
"steps": [
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
@@ -46,348 +24,115 @@
|
|||||||
"action": "menu_navigate",
|
"action": "menu_navigate",
|
||||||
"level1": "품질관리",
|
"level1": "품질관리",
|
||||||
"level2": "제품검사관리",
|
"level2": "제품검사관리",
|
||||||
"expected": {
|
"expected": { "url_contains": "/quality/inspections" }
|
||||||
"url_contains": "/quality/inspections",
|
|
||||||
"visible": [
|
|
||||||
"제품검사",
|
|
||||||
"검사"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"name": "URL 검증",
|
"name": "페이지 로드 대기",
|
||||||
"action": "verify_url",
|
"action": "wait",
|
||||||
"expected": {
|
"timeout": 3000
|
||||||
"url_contains": "/quality/inspections"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"name": "필수 검증 #5: 목업 페이지 감지",
|
"name": "URL 검증",
|
||||||
"action": "verify_not_mockup",
|
"action": "verify_url",
|
||||||
"checks": [
|
"expected": { "url_contains": "/quality/inspections" }
|
||||||
"제품검사 목록 표시",
|
|
||||||
"제품검사 등록 버튼 존재",
|
|
||||||
"검색/필터 기능 존재"
|
|
||||||
],
|
|
||||||
"expected": "정상 페이지 (목업 아님)"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"name": "통계 카드 확인",
|
"name": "목업 감지",
|
||||||
"action": "evaluate",
|
"action": "verify_not_mockup",
|
||||||
"script": "(() => {\n const cards = document.querySelectorAll('[class*=\"card\"], [class*=\"Card\"], [class*=\"stat\"], [class*=\"Stat\"], [class*=\"summary\"]');\n const texts = Array.from(cards).map(c => c.innerText?.substring(0, 30)).filter(Boolean);\n return texts.length > 0 ? 'Stats: ' + texts.length + ' cards found' : 'No stat cards (ok)';\n })()"
|
"checks": ["제품검사 목록 표시", "등록 버튼 존재"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"name": "제품검사 테이블 구조 확인",
|
"name": "테이블 로드 대기",
|
||||||
"action": "verify_table",
|
"action": "wait_for_table",
|
||||||
"checks": [
|
"timeout": 5000
|
||||||
"품질관리서 번호 컬럼",
|
|
||||||
"현장명 컬럼",
|
|
||||||
"수주처 컬럼",
|
|
||||||
"검사기간 컬럼",
|
|
||||||
"상태 컬럼",
|
|
||||||
"검사자 컬럼"
|
|
||||||
],
|
|
||||||
"expected": "제품검사 테이블 컬럼 정상 표시"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 6,
|
"id": 6,
|
||||||
"name": "목록 필터 테스트",
|
"name": "통계 카드 확인",
|
||||||
"action": "evaluate",
|
"action": "evaluate",
|
||||||
"script": "(() => {\n const selects = document.querySelectorAll('select, [role=\"combobox\"], button[class*=\"select\"], button[class*=\"Select\"]');\n if (selects.length > 0) {\n return 'Filters found: ' + selects.length;\n }\n return 'No filter dropdowns (ok)';\n })()"
|
"script": "(() => { const cards = document.querySelectorAll('[class*=\"card\"], [class*=\"Card\"], [class*=\"stat\"]'); return JSON.stringify({ ok: true, info: 'Stats: ' + cards.length + ' cards' }); })()"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 7,
|
"id": 7,
|
||||||
"name": "검색 기능 테스트",
|
"name": "테이블 구조 확인",
|
||||||
"action": "click_if_exists",
|
"action": "verify_table",
|
||||||
"target": "input[placeholder*='검색']",
|
"checks": ["테이블 컬럼 확인"]
|
||||||
"value": "테스트",
|
|
||||||
"expected": {
|
|
||||||
"data_filtered": true
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 8,
|
"id": 8,
|
||||||
"phase": "CREATE",
|
"name": "필터/검색 존재 확인",
|
||||||
"name": "[CREATE] 제품검사 등록 버튼 클릭",
|
"action": "evaluate",
|
||||||
"action": "click_if_exists",
|
"script": "(() => { const selects = document.querySelectorAll('select, [role=\"combobox\"], button[class*=\"select\"]'); const inputs = document.querySelectorAll('input[type=\"search\"], input[placeholder*=\"검색\"]'); return JSON.stringify({ ok: true, info: 'filters=' + selects.length + ' search=' + inputs.length }); })()"
|
||||||
"target": "button:has-text('등록'), button:has-text('제품검사 등록'), button:has-text('추가')",
|
|
||||||
"expected": {
|
|
||||||
"modal_or_page": true,
|
|
||||||
"title": "제품검사 등록"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 9,
|
"id": 9,
|
||||||
"phase": "CREATE",
|
"name": "[READ] 첫 번째 행 클릭 (상세)",
|
||||||
"name": "[CREATE] 제품검사 정보 입력",
|
"phase": "READ",
|
||||||
"action": "fill_form",
|
"action": "click_first_row"
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"name": "현장명",
|
|
||||||
"value": "E2E_TEST_현장_{timestamp}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "수주처",
|
|
||||||
"value": "E2E_TEST_수주처"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "담당자",
|
|
||||||
"value": "홍길동"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "연락처",
|
|
||||||
"value": "010-1234-5678"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "비고",
|
|
||||||
"value": "E2E 자동화 테스트 제품검사"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 10,
|
"id": 10,
|
||||||
"phase": "CREATE",
|
"name": "[READ] 상세 대기",
|
||||||
"name": "[CREATE] 필수 검증 #2: 등록 저장",
|
"phase": "READ",
|
||||||
"action": "click_if_exists",
|
"action": "wait",
|
||||||
"target": "button:has-text('저장'), button:has-text('등록')",
|
"timeout": 2000
|
||||||
"verify": {
|
|
||||||
"url_maintained": true,
|
|
||||||
"no_error_page": true,
|
|
||||||
"api_call": "POST /api/v1/quality/inspections",
|
|
||||||
"toast": "등록|완료|성공"
|
|
||||||
},
|
|
||||||
"expected": "제품검사 등록 완료"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 11,
|
"id": 11,
|
||||||
"phase": "CREATE",
|
"name": "[READ] 상세 다이얼로그/페이지 확인",
|
||||||
"name": "[CREATE] 저장 완료 토스트 확인",
|
"phase": "READ",
|
||||||
"action": "verify_toast",
|
"action": "evaluate",
|
||||||
"verify": {
|
"script": "(()=>{const R={phase:'DETAIL_CHECK'};const dlg=document.querySelector('[role=\"dialog\"]');const isVis=el=>!!el&&el.getBoundingClientRect().width>0;if(isVis(dlg)){R.hasDialog=true;R.text=dlg.innerText?.substring(0,100);}else{R.hasDialog=false;R.url=window.location.href;R.bodyText=document.body.innerText?.substring(0,100);}R.ok=true;R.info=R.hasDialog?'pass: 상세 다이얼로그 열림':'pass: 상세 페이지 또는 모달 미사용';return JSON.stringify(R);})()"
|
||||||
"contains": "등록|완료|성공|저장"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 12,
|
"id": 12,
|
||||||
"phase": "CREATE",
|
"name": "[READ] 모달 닫기",
|
||||||
"name": "[CREATE] 모달 닫기 확인",
|
"phase": "READ",
|
||||||
"action": "close_modal_if_open",
|
"action": "close_modal_if_open"
|
||||||
"expected": "모달 닫힘"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 13,
|
"id": 13,
|
||||||
|
"name": "[CREATE] 등록 다이얼로그 열기 (저장 안함)",
|
||||||
"phase": "CREATE",
|
"phase": "CREATE",
|
||||||
"name": "[CREATE] 등록 결과 확인",
|
"action": "evaluate",
|
||||||
"action": "verify_detail",
|
"script": "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const R={phase:'CREATE_CHECK'};const btn=Array.from(document.querySelectorAll('button')).find(b=>/등록|추가|신규/.test(b.innerText?.trim())&&b.offsetParent!==null&&!b.disabled);if(btn){btn.click();await w(1500);const dlg=document.querySelector('[role=\"dialog\"]');const isVis=el=>!!el&&el.getBoundingClientRect().width>0;R.dialogOpen=isVis(dlg);if(R.dialogOpen){const labels=Array.from(dlg.querySelectorAll('label')).map(l=>l.innerText?.trim()).filter(Boolean);R.formLabels=labels.slice(0,10);R.info='pass: 등록 폼 확인 (labels='+labels.length+')';}else{R.info='warn: 등록 다이얼로그 미표시';}}else{R.info='warn: 등록 버튼 미발견';}R.ok=true;return JSON.stringify(R);})()",
|
||||||
"search": "E2E_TEST_현장",
|
"timeout": 5000
|
||||||
"expected": {
|
|
||||||
"row_exists": true,
|
|
||||||
"contains": [
|
|
||||||
"E2E_TEST",
|
|
||||||
"접수"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 14,
|
"id": 14,
|
||||||
"phase": "READ",
|
"name": "[CREATE] 등록 다이얼로그 닫기 (저장하지 않음)",
|
||||||
"name": "[READ] 제품검사 상세 페이지 진입",
|
"phase": "CREATE",
|
||||||
"action": "click_if_exists",
|
"action": "evaluate",
|
||||||
"target": "table tbody tr:first-child, table tbody tr:nth-child(1), table tr:nth-child(2)",
|
"script": "(async()=>{const w=ms=>new Promise(r=>setTimeout(r,ms));const dlg=document.querySelector('[role=\"dialog\"]');const isVis=el=>!!el&&el.getBoundingClientRect().width>0;if(isVis(dlg)){const cancelBtn=Array.from(dlg.querySelectorAll('button')).find(b=>/취소|닫기|Close/.test(b.innerText?.trim()));if(cancelBtn){cancelBtn.click();await w(500);}else{document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(500);}}return JSON.stringify({ok:true,info:'pass: 등록 다이얼로그 닫힘 (데이터 저장 안함)'});})()"
|
||||||
"expected": {
|
|
||||||
"url_contains": "/quality/inspections/",
|
|
||||||
"visible": [
|
|
||||||
"품질관리서",
|
|
||||||
"수정",
|
|
||||||
"삭제"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 15,
|
"id": 15,
|
||||||
"phase": "READ",
|
"name": "페이지네이션 확인",
|
||||||
"name": "[READ] 상세 정보 확인",
|
"action": "evaluate",
|
||||||
"action": "verify_detail",
|
"script": "(() => { const p = document.querySelector('[class*=\"pagination\"], [class*=\"Pagination\"], nav[aria-label*=\"page\"]'); const btns = Array.from(document.querySelectorAll('button')).filter(b => /^\\d+$/.test(b.innerText?.trim())); return JSON.stringify({ ok: true, info: p ? 'pagination found' : btns.length > 0 ? 'page buttons: ' + btns.length : 'no pagination (ok)' }); })()"
|
||||||
"checks": [
|
|
||||||
"현장명: E2E_TEST_현장",
|
|
||||||
"개소: 테스트구역A",
|
|
||||||
"검사자: 홍길동"
|
|
||||||
],
|
|
||||||
"expected": "입력한 데이터와 일치"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 16,
|
"id": 16,
|
||||||
"phase": "UPDATE",
|
"name": "[SUMMARY] API 호출 통계",
|
||||||
"name": "[UPDATE] 수정 모드 진입",
|
"action": "evaluate",
|
||||||
"action": "click_if_exists",
|
"script": "(()=>{const logs=window.__E2E__?.getApiLogs?.()?.logs||[];const quality=logs.filter(l=>l.url?.includes('quality')||l.url?.includes('inspection'));return JSON.stringify({ok:true,info:'API total='+logs.length+' quality='+quality.length+' success='+logs.filter(l=>l.status>=200&&l.status<300).length});})()"
|
||||||
"target": "button:has-text('수정')",
|
|
||||||
"expected": {
|
|
||||||
"url_contains": "mode=edit",
|
|
||||||
"fields_editable": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 17,
|
|
||||||
"phase": "UPDATE",
|
|
||||||
"name": "[UPDATE] 개소 수정",
|
|
||||||
"action": "click_if_exists",
|
|
||||||
"target": "input[name*='location'], input[placeholder*='개소']"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 18,
|
|
||||||
"phase": "UPDATE",
|
|
||||||
"name": "[UPDATE] 메모 수정",
|
|
||||||
"action": "click_if_exists",
|
|
||||||
"target": "textarea[name*='memo'], input[placeholder*='메모']"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 19,
|
|
||||||
"phase": "UPDATE",
|
|
||||||
"name": "[UPDATE] 필수 검증 #2: 수정 저장",
|
|
||||||
"action": "click_if_exists",
|
|
||||||
"target": "button:has-text('저장')",
|
|
||||||
"verify": {
|
|
||||||
"url_maintained": true,
|
|
||||||
"no_error_page": true,
|
|
||||||
"api_call": "PUT /api/v1/quality/inspections/",
|
|
||||||
"toast": "수정|완료|성공"
|
|
||||||
},
|
|
||||||
"expected": "수정 완료"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 20,
|
|
||||||
"phase": "UPDATE",
|
|
||||||
"name": "[UPDATE] 수정 완료 토스트 확인",
|
|
||||||
"action": "verify_toast",
|
|
||||||
"verify": {
|
|
||||||
"contains": "수정|완료|성공|저장"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 21,
|
|
||||||
"phase": "UPDATE",
|
|
||||||
"name": "[UPDATE] 수정 결과 확인",
|
|
||||||
"action": "verify_detail",
|
|
||||||
"checks": [
|
|
||||||
"개소: 테스트구역B",
|
|
||||||
"메모: E2E 수정된"
|
|
||||||
],
|
|
||||||
"expected": "수정된 데이터 반영"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 22,
|
|
||||||
"phase": "DELETE",
|
|
||||||
"name": "[DELETE] 삭제 버튼 클릭",
|
|
||||||
"action": "click_if_exists",
|
|
||||||
"target": "button:has-text('삭제')",
|
|
||||||
"expected": {
|
|
||||||
"confirm_dialog": true,
|
|
||||||
"dialog_message": "삭제|정말"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 23,
|
|
||||||
"phase": "DELETE",
|
|
||||||
"name": "[DELETE] 필수 검증 #6: 삭제 확인",
|
|
||||||
"action": "click_if_exists",
|
|
||||||
"verify": {
|
|
||||||
"api_call": "DELETE /api/v1/quality/inspections/",
|
|
||||||
"toast": "삭제|완료|성공",
|
|
||||||
"redirect": "/quality/inspections"
|
|
||||||
},
|
|
||||||
"expected": "삭제 완료 및 목록 복귀",
|
|
||||||
"target": "[role='alertdialog'] button:has-text('확인'), [role='dialog'] button:has-text('확인'), button:has-text('확인')"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 24,
|
|
||||||
"phase": "DELETE",
|
|
||||||
"name": "[DELETE] 삭제 결과 확인",
|
|
||||||
"action": "verify_detail",
|
|
||||||
"search": "E2E 수정된 제품검사",
|
|
||||||
"expected": {
|
|
||||||
"row_exists": false,
|
|
||||||
"message": "테스트 제품검사가 목록에서 제거됨"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 25,
|
|
||||||
"name": "콘솔 에러 확인",
|
|
||||||
"action": "verify_element",
|
|
||||||
"target": "body"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"expectedAPIs": [
|
"expectedAPIs": [
|
||||||
{
|
{ "method": "GET", "endpoint": "/api/v1/quality/inspections", "description": "제품검사 목록 조회" }
|
||||||
"method": "GET",
|
|
||||||
"endpoint": "/api/v1/quality/inspections",
|
|
||||||
"description": "제품검사 목록 조회"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"method": "POST",
|
|
||||||
"endpoint": "/api/v1/quality/inspections",
|
|
||||||
"description": "제품검사 등록"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"method": "GET",
|
|
||||||
"endpoint": "/api/v1/quality/inspections/{id}",
|
|
||||||
"description": "제품검사 상세 조회"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"method": "PUT",
|
|
||||||
"endpoint": "/api/v1/quality/inspections/{id}",
|
|
||||||
"description": "제품검사 수정"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"method": "DELETE",
|
|
||||||
"endpoint": "/api/v1/quality/inspections/{id}",
|
|
||||||
"description": "제품검사 삭제"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"requiredVerifications": [
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"name": "등록/저장 버튼",
|
|
||||||
"steps": [
|
|
||||||
7,
|
|
||||||
14
|
|
||||||
],
|
|
||||||
"criteria": "API 호출 + 성공 토스트 + 데이터 반영"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"name": "검색/필터",
|
|
||||||
"steps": [
|
|
||||||
4
|
|
||||||
],
|
|
||||||
"criteria": "검색 기능 동작"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 5,
|
|
||||||
"name": "목업 페이지 감지",
|
|
||||||
"steps": [
|
|
||||||
2
|
|
||||||
],
|
|
||||||
"criteria": "제품검사 목록, 등록 버튼, 필터 존재"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 6,
|
|
||||||
"name": "삭제 기능",
|
|
||||||
"steps": [
|
|
||||||
16,
|
|
||||||
17,
|
|
||||||
18
|
|
||||||
],
|
|
||||||
"criteria": "DELETE API + 목록에서 제거"
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
"rollbackPlan": {
|
"rollbackPlan": {
|
||||||
"onCreateFail": "모달 닫기",
|
"note": "조회 전용 테스트. 등록 다이얼로그는 열기만 하고 저장하지 않음. 데이터 변경 없음."
|
||||||
"onUpdateFail": "테스트 제품검사 수동 삭제 필요",
|
},
|
||||||
"onDeleteFail": "테스트 제품검사 수동 삭제 필요",
|
"knownIssues": [
|
||||||
"cleanupRequired": "E2E_TEST_ 접두사 제품검사는 테스트 데이터"
|
{
|
||||||
}
|
"issue": "api/v1/inspections/calendar route not found",
|
||||||
|
"type": "frontend_bug",
|
||||||
|
"description": "프론트엔드가 페이지 로드 시 미구현 API 호출. E2E에서 방지 불가."
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,5 +29,12 @@
|
|||||||
{ "id": 11, "name": "페이지네이션 확인", "action": "evaluate", "script": "(() => { const p = document.querySelector('[class*=\"pagination\"], [class*=\"Pagination\"], nav[aria-label*=\"page\"]'); return p ? 'Pagination found' : 'No pagination (ok)'; })()" },
|
{ "id": 11, "name": "페이지네이션 확인", "action": "evaluate", "script": "(() => { const p = document.querySelector('[class*=\"pagination\"], [class*=\"Pagination\"], nav[aria-label*=\"page\"]'); return p ? 'Pagination found' : 'No pagination (ok)'; })()" },
|
||||||
{ "id": 12, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
{ "id": 12, "name": "콘솔 에러 확인", "action": "verify_element", "target": "body" }
|
||||||
],
|
],
|
||||||
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 최소" }
|
"rollbackPlan": { "note": "조회 위주 테스트로 데이터 변경 없음" },
|
||||||
|
"knownIssues": [
|
||||||
|
{
|
||||||
|
"issue": "api/v1/performance-reports route not found",
|
||||||
|
"type": "frontend_bug",
|
||||||
|
"description": "프론트엔드가 페이지 로드 시 미구현 API(performance-reports, performance-reports/stats) 호출. E2E에서 방지 불가."
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user