551 lines
18 KiB
JSON
551 lines
18 KiB
JSON
{
|
|
"id": "customer-inquiry",
|
|
"name": "고객센터 - 1:1 문의",
|
|
"screenshotPolicy": {
|
|
"onErrorOnly": true,
|
|
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
|
|
},
|
|
"description": "1:1 문의 목록 조회, 문의 등록, 상세 조회, 수정, 삭제, 댓글 작성 전체 워크플로우 테스트",
|
|
"url": "/ko/customer-center/qna",
|
|
"menuNavigation": {
|
|
"level1": "고객센터",
|
|
"level2": "1:1 문의",
|
|
"expectedUrl": "/ko/customer-center/qna"
|
|
},
|
|
"menuNavigationEnhanced": {
|
|
"strategy": "scroll-and-search",
|
|
"sidebarSelector": ".sidebar-scroll, [data-sidebar-content], nav[role='navigation']",
|
|
"scrollBehavior": {
|
|
"scrollToTop": true,
|
|
"scrollStep": 200,
|
|
"maxScrollAttempts": 10,
|
|
"waitAfterScroll": 300
|
|
},
|
|
"menuSearch": {
|
|
"level1": {
|
|
"text": "고객센터",
|
|
"selectors": ["[data-menu-item]", ".nav-item", "button", "a"],
|
|
"expandable": true
|
|
},
|
|
"level2": {
|
|
"text": "1:1 문의",
|
|
"selectors": ["[data-submenu-item]", ".nav-subitem", "a"],
|
|
"waitForVisible": true
|
|
}
|
|
},
|
|
"fallbackUrl": "/ko/customer-center/qna"
|
|
},
|
|
"expectedAPIs": [
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/tenants/*/boards/qna/posts",
|
|
"description": "문의 목록 조회"
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/tenants/*/boards/qna/posts",
|
|
"description": "문의 등록"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/tenants/*/boards/qna/posts/*",
|
|
"description": "문의 상세 조회"
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/tenants/*/boards/qna/posts/*",
|
|
"description": "문의 수정"
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/tenants/*/boards/qna/posts/*",
|
|
"description": "문의 삭제"
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/tenants/*/boards/qna/posts/*/comments",
|
|
"description": "댓글 작성"
|
|
}
|
|
],
|
|
"steps": [
|
|
{
|
|
"id": "step-0",
|
|
"name": "사이드바 준비",
|
|
"description": "메뉴 탐색 전 사이드바를 초기 상태로 준비",
|
|
"actions": [
|
|
{
|
|
"type": "evaluate",
|
|
"script": "document.querySelector('.sidebar-scroll, [data-sidebar-content], nav[role=\"navigation\"]')?.scrollTo({top: 0, behavior: 'instant'})"
|
|
},
|
|
{ "type": "wait", "duration": 500 }
|
|
],
|
|
"expected": {
|
|
"sidebarReady": true
|
|
},
|
|
"verification": [
|
|
"사이드바가 최상단으로 스크롤됨",
|
|
"메뉴 탐색 준비 완료"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-01",
|
|
"name": "2단계 메뉴 진입: 고객센터 > 1:1 문의",
|
|
"description": "고객센터 > 1:1 문의 메뉴로 이동하여 페이지 로드 확인",
|
|
"navigationPattern": "scrollAndFind",
|
|
"actions": [
|
|
{
|
|
"type": "scrollAndFind",
|
|
"target": "고객센터",
|
|
"scrollContainer": ".sidebar-scroll, [data-sidebar-content], nav[role='navigation']",
|
|
"scrollStep": 200,
|
|
"maxAttempts": 10
|
|
},
|
|
{ "type": "click", "target": "고객센터" },
|
|
{ "type": "wait", "duration": 500 },
|
|
{
|
|
"type": "scrollAndFind",
|
|
"target": "1:1 문의",
|
|
"scrollContainer": ".sidebar-scroll, [data-sidebar-content], nav[role='navigation']",
|
|
"scrollStep": 200,
|
|
"maxAttempts": 5
|
|
},
|
|
{ "type": "click", "target": "1:1 문의" },
|
|
{ "type": "wait", "target": "페이지 로드 완료" }
|
|
],
|
|
"expected": {
|
|
"url": "/ko/customer-center/qna",
|
|
"title": "1:1 문의",
|
|
"authenticated": true
|
|
},
|
|
"verification": [
|
|
"페이지 타이틀 '1:1 문의' 표시",
|
|
"페이지 설명 '1:1 문의를 등록하고 답변을 확인합니다.' 표시",
|
|
"문의 등록 버튼 존재"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-02",
|
|
"name": "페이지 구조 확인",
|
|
"action": "verify",
|
|
"expectedResult": "모든 UI 요소가 정상적으로 표시됨",
|
|
"verification": [
|
|
"날짜 범위 선택기 존재 (시작일/종료일)",
|
|
"기간 프리셋 버튼 존재 (당해년도, 전전월, 전월, 당월, 어제, 오늘)",
|
|
"문의 등록 버튼 존재",
|
|
"검색 입력 필드 존재 (placeholder: '제목, 작성자로 검색...')",
|
|
"필터 드롭다운 3개 존재 (상담분류, 상태, 정렬)"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-03",
|
|
"name": "테이블 구조 확인",
|
|
"action": "verify",
|
|
"expectedResult": "테이블 헤더와 구조가 올바르게 표시됨",
|
|
"verification": [
|
|
"체크박스 컬럼 존재",
|
|
"No. 컬럼 존재",
|
|
"상담분류 컬럼 존재",
|
|
"제목 컬럼 존재",
|
|
"상태 컬럼 존재",
|
|
"등록일 컬럼 존재"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-04",
|
|
"name": "초기 데이터 로드 확인",
|
|
"action": "verify",
|
|
"expectedResult": "문의 목록 데이터가 로드됨 (있을 경우)",
|
|
"verification": [
|
|
"총 N건 표시 확인",
|
|
"데이터가 있으면 테이블에 표시",
|
|
"데이터가 없으면 '검색 결과가 없습니다' 메시지 표시"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-05",
|
|
"name": "상담분류 필터 동작 확인",
|
|
"action": "interact",
|
|
"target": "상담분류 드롭다운",
|
|
"expectedResult": "필터 옵션이 표시되고 선택 가능함",
|
|
"verification": [
|
|
"드롭다운 클릭 시 옵션 목록 표시",
|
|
"옵션: 전체, 문의하기, 신고하기, 건의사항, 서비스오류",
|
|
"옵션 선택 시 필터가 적용됨"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-06",
|
|
"name": "상태 필터 동작 확인",
|
|
"action": "interact",
|
|
"target": "상태 드롭다운",
|
|
"expectedResult": "상태 필터 옵션이 표시되고 선택 가능함",
|
|
"verification": [
|
|
"드롭다운 클릭 시 옵션 목록 표시",
|
|
"옵션: 전체, 답변대기, 답변완료",
|
|
"옵션 선택 시 필터가 적용됨"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-07",
|
|
"name": "정렬 옵션 동작 확인",
|
|
"action": "interact",
|
|
"target": "정렬 드롭다운",
|
|
"expectedResult": "정렬 옵션이 표시되고 선택 가능함",
|
|
"verification": [
|
|
"드롭다운 클릭 시 옵션 목록 표시",
|
|
"옵션: 최신순, 오래된순",
|
|
"기본값: 최신순",
|
|
"옵션 선택 시 목록 정렬 변경"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-08",
|
|
"name": "검색 기능 테스트",
|
|
"action": "interact",
|
|
"target": "검색 입력 필드",
|
|
"input": "테스트",
|
|
"expectedResult": "검색어에 맞는 문의가 필터링됨",
|
|
"verification": [
|
|
"검색어 입력 가능",
|
|
"검색어가 제목 또는 작성자와 매칭되는 항목만 표시",
|
|
"검색 결과 건수 업데이트"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-09",
|
|
"name": "날짜 범위 필터 테스트",
|
|
"action": "interact",
|
|
"target": "날짜 범위 선택기",
|
|
"expectedResult": "날짜 범위 선택이 가능하고 필터가 적용됨",
|
|
"verification": [
|
|
"시작일 선택 가능",
|
|
"종료일 선택 가능",
|
|
"날짜 범위에 해당하는 문의만 표시",
|
|
"기간 프리셋 버튼 (당월, 어제 등) 클릭 시 날짜 자동 설정"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-10",
|
|
"name": "문의 등록 버튼 클릭",
|
|
"action": "click",
|
|
"target": "문의 등록 버튼",
|
|
"expectedResult": "문의 등록 페이지로 이동",
|
|
"verification": [
|
|
"URL이 /customer-center/qna/create로 변경",
|
|
"페이지 타이틀 '1:1 문의 등록' 표시",
|
|
"페이지 설명 '1:1 문의를 등록합니다.' 표시"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-11",
|
|
"name": "문의 등록 폼 구조 확인",
|
|
"action": "verify",
|
|
"expectedResult": "등록 폼의 모든 필드가 표시됨",
|
|
"verification": [
|
|
"상담분류 드롭다운 존재",
|
|
"제목 입력 필드 존재",
|
|
"내용 에디터 존재 (RichTextEditor)",
|
|
"첨부파일 업로드 버튼 존재",
|
|
"취소 버튼 존재",
|
|
"저장 버튼 존재"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-12",
|
|
"name": "상담분류 선택",
|
|
"action": "interact",
|
|
"target": "상담분류 드롭다운",
|
|
"input": "inquiry",
|
|
"expectedResult": "상담분류가 선택됨",
|
|
"verification": [
|
|
"드롭다운 클릭 시 옵션 표시",
|
|
"옵션: 문의하기, 신고하기, 건의사항, 서비스오류",
|
|
"'문의하기' 선택"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-13",
|
|
"name": "제목 입력",
|
|
"action": "input",
|
|
"target": "제목 입력 필드",
|
|
"input": "E2E 테스트 문의입니다",
|
|
"expectedResult": "제목이 입력됨",
|
|
"verification": [
|
|
"입력 필드에 텍스트 입력 가능",
|
|
"입력된 값이 표시됨"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-14",
|
|
"name": "내용 입력",
|
|
"action": "input",
|
|
"target": "내용 에디터",
|
|
"input": "<p>E2E 테스트를 위한 문의 내용입니다.</p><p>정상적으로 등록되는지 확인합니다.</p>",
|
|
"expectedResult": "내용이 입력됨",
|
|
"verification": [
|
|
"RichTextEditor에 HTML 내용 입력 가능",
|
|
"입력된 내용이 에디터에 표시됨"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-15",
|
|
"name": "필수 입력값 누락 시 유효성 검사 확인",
|
|
"action": "verify",
|
|
"expectedResult": "필수값 미입력 시 에러 메시지 표시",
|
|
"verification": [
|
|
"제목 미입력 시 '제목을 입력해주세요.' 에러 표시",
|
|
"내용 미입력 시 '내용을 입력해주세요.' 에러 표시",
|
|
"상담분류 미선택 시 '상담분류를 선택해주세요.' 에러 표시"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-16",
|
|
"name": "문의 저장 (등록)",
|
|
"action": "click",
|
|
"target": "저장 버튼",
|
|
"expectedResult": "문의가 등록되고 목록 페이지로 이동",
|
|
"verification": [
|
|
"POST /api/tenants/*/boards/qna/posts API 호출",
|
|
"API 응답 200 OK",
|
|
"URL이 /customer-center/qna로 변경",
|
|
"목록 페이지로 돌아감",
|
|
"성공 토스트 메시지 표시 (있을 경우)"
|
|
],
|
|
"criticalValidation": {
|
|
"type": "registration",
|
|
"checkURL": true,
|
|
"checkErrorPage": true,
|
|
"checkAPI": true,
|
|
"expectedURL": "/customer-center/qna"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-17",
|
|
"name": "등록된 문의 확인",
|
|
"action": "verify",
|
|
"expectedResult": "새로 등록한 문의가 목록에 표시됨",
|
|
"verification": [
|
|
"목록 최상단에 'E2E 테스트 문의입니다' 제목 표시",
|
|
"상담분류 '문의하기' 배지 표시",
|
|
"상태 '답변대기' 배지 표시",
|
|
"등록일이 오늘 날짜로 표시"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-18",
|
|
"name": "등록한 문의 클릭 (상세 페이지 이동)",
|
|
"action": "click",
|
|
"target": "등록한 문의 행",
|
|
"expectedResult": "문의 상세 페이지로 이동",
|
|
"verification": [
|
|
"URL이 /customer-center/qna/[id]로 변경",
|
|
"페이지 타이틀 '1:1 문의 상세' 표시",
|
|
"페이지 설명 '1:1 문의를 조회합니다.' 표시"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-19",
|
|
"name": "문의 상세 내용 확인",
|
|
"action": "verify",
|
|
"expectedResult": "문의 상세 정보가 표시됨",
|
|
"verification": [
|
|
"문의 제목 'E2E 테스트 문의입니다' 표시",
|
|
"작성자 이름 표시",
|
|
"작성일 표시",
|
|
"상담분류 '문의하기' 배지 표시",
|
|
"상태 '답변대기' 표시",
|
|
"문의 내용 표시 (HTML 렌더링)",
|
|
"수정 버튼 존재 (본인 문의인 경우)",
|
|
"삭제 버튼 존재 (본인 문의인 경우)"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-20",
|
|
"name": "댓글 작성 영역 확인",
|
|
"action": "verify",
|
|
"expectedResult": "댓글 작성 UI가 표시됨",
|
|
"verification": [
|
|
"댓글 입력 textarea 존재",
|
|
"댓글 등록 버튼 존재",
|
|
"기존 댓글 목록 영역 존재"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-21",
|
|
"name": "댓글 작성",
|
|
"action": "interact",
|
|
"target": "댓글 입력 필드",
|
|
"input": "E2E 테스트 댓글입니다",
|
|
"expectedResult": "댓글이 입력되고 등록됨",
|
|
"verification": [
|
|
"textarea에 댓글 내용 입력",
|
|
"등록 버튼 클릭",
|
|
"POST /api/tenants/*/boards/qna/posts/*/comments API 호출",
|
|
"댓글이 목록에 추가됨"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-22",
|
|
"name": "수정 버튼 클릭",
|
|
"action": "click",
|
|
"target": "수정 버튼",
|
|
"expectedResult": "문의 수정 페이지로 이동",
|
|
"verification": [
|
|
"URL이 /customer-center/qna/[id]?mode=edit로 변경",
|
|
"페이지 타이틀 '1:1 문의 수정' 표시",
|
|
"기존 입력값이 폼에 로드됨 (제목, 상담분류, 내용)"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-23",
|
|
"name": "제목 수정",
|
|
"action": "input",
|
|
"target": "제목 입력 필드",
|
|
"input": "E2E 테스트 문의입니다 (수정됨)",
|
|
"expectedResult": "제목이 수정됨",
|
|
"verification": [
|
|
"기존 제목이 표시됨",
|
|
"제목 수정 가능",
|
|
"수정된 값이 표시됨"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-24",
|
|
"name": "문의 저장 (수정)",
|
|
"action": "click",
|
|
"target": "저장 버튼",
|
|
"expectedResult": "문의가 수정되고 목록 페이지로 이동",
|
|
"verification": [
|
|
"PUT /api/tenants/*/boards/qna/posts/* API 호출",
|
|
"API 응답 200 OK",
|
|
"URL이 /customer-center/qna로 변경",
|
|
"목록 페이지로 돌아감"
|
|
],
|
|
"criticalValidation": {
|
|
"type": "registration",
|
|
"checkURL": true,
|
|
"checkErrorPage": true,
|
|
"checkAPI": true,
|
|
"expectedURL": "/customer-center/qna"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-25",
|
|
"name": "수정된 문의 확인",
|
|
"action": "verify",
|
|
"expectedResult": "수정된 제목이 목록에 표시됨",
|
|
"verification": [
|
|
"목록에서 'E2E 테스트 문의입니다 (수정됨)' 제목 확인"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-26",
|
|
"name": "문의 다시 클릭 (삭제를 위해)",
|
|
"action": "click",
|
|
"target": "수정된 문의 행",
|
|
"expectedResult": "문의 상세 페이지로 이동",
|
|
"verification": [
|
|
"URL이 /customer-center/qna/[id]로 변경",
|
|
"수정된 제목 표시"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-27",
|
|
"name": "삭제 버튼 클릭",
|
|
"action": "click",
|
|
"target": "삭제 버튼",
|
|
"expectedResult": "삭제 확인 다이얼로그가 표시됨",
|
|
"verification": [
|
|
"AlertDialog 표시",
|
|
"삭제 확인 메시지 표시",
|
|
"취소 버튼 존재",
|
|
"삭제 확인 버튼 존재"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-28",
|
|
"name": "삭제 확인",
|
|
"action": "click",
|
|
"target": "삭제 확인 버튼",
|
|
"expectedResult": "문의가 삭제되고 목록 페이지로 이동",
|
|
"verification": [
|
|
"DELETE /api/tenants/*/boards/qna/posts/* API 호출",
|
|
"API 응답 200 OK",
|
|
"URL이 /customer-center/qna로 변경",
|
|
"목록 페이지로 돌아감",
|
|
"삭제된 문의가 목록에서 사라짐"
|
|
],
|
|
"criticalValidation": {
|
|
"type": "registration",
|
|
"checkURL": true,
|
|
"checkErrorPage": true,
|
|
"checkAPI": true,
|
|
"expectedURL": "/customer-center/qna"
|
|
}
|
|
},
|
|
{
|
|
"id": "step-29",
|
|
"name": "삭제 확인 (목록에서)",
|
|
"action": "verify",
|
|
"expectedResult": "삭제된 문의가 목록에 없음",
|
|
"verification": [
|
|
"'E2E 테스트 문의입니다 (수정됨)' 제목이 목록에 표시되지 않음",
|
|
"총 건수가 1개 감소"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-30",
|
|
"name": "페이지네이션 테스트 (데이터 10개 이상일 경우)",
|
|
"action": "interact",
|
|
"target": "페이지네이션",
|
|
"expectedResult": "페이지 이동이 정상 동작함",
|
|
"verification": [
|
|
"데이터가 10개 이상일 경우 페이지네이션 표시",
|
|
"다음 페이지 버튼 클릭 시 2페이지 데이터 표시",
|
|
"이전 페이지 버튼 클릭 시 1페이지로 돌아감",
|
|
"페이지 번호 버튼 클릭 시 해당 페이지로 이동"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-31",
|
|
"name": "체크박스 선택 테스트",
|
|
"action": "interact",
|
|
"target": "체크박스",
|
|
"expectedResult": "행 선택이 정상 동작함",
|
|
"verification": [
|
|
"개별 체크박스 클릭 시 해당 행 선택",
|
|
"전체 선택 체크박스 클릭 시 모든 행 선택",
|
|
"다시 클릭 시 선택 해제"
|
|
]
|
|
},
|
|
{
|
|
"id": "step-32",
|
|
"name": "모바일 반응형 테스트 (선택)",
|
|
"action": "verify",
|
|
"expectedResult": "모바일 화면에서 카드 형식으로 표시됨",
|
|
"verification": [
|
|
"화면 크기 축소 시 테이블이 카드 형식으로 변경",
|
|
"카드에 필수 정보 표시 (제목, 상담분류, 상태, 날짜)",
|
|
"카드 클릭 시 상세 페이지 이동"
|
|
]
|
|
}
|
|
],
|
|
"testData": {
|
|
"inquiry": {
|
|
"category": "inquiry",
|
|
"title": "E2E 테스트 문의입니다",
|
|
"content": "<p>E2E 테스트를 위한 문의 내용입니다.</p><p>정상적으로 등록되는지 확인합니다.</p>"
|
|
},
|
|
"updatedInquiry": {
|
|
"title": "E2E 테스트 문의입니다 (수정됨)"
|
|
},
|
|
"comment": {
|
|
"content": "E2E 테스트 댓글입니다"
|
|
}
|
|
},
|
|
"cleanupRequired": true,
|
|
"cleanupSteps": [
|
|
"생성한 문의 삭제 (step-28에서 처리됨)"
|
|
]
|
|
}
|