feat: 검색 옵션 전수 테스트 시나리오 10개 추가

검색창이 있는 모든 페이지(48개)에서 드롭다운 옵션 전수 열거·선택·복원,
텍스트 검색(no-match), 오늘 버튼 등 모든 검색 조건을 자동 테스트

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-12 07:20:10 +09:00
parent cf8d23fc38
commit 86b2ade39c
10 changed files with 1358 additions and 0 deletions

89
search-options-acc-1.json Normal file
View File

@@ -0,0 +1,89 @@
{
"id": "search-options-acc-1",
"name": "검색 옵션 전수 테스트: 회계거래처/입금/출금 (1/10)",
"version": "1.0.0",
"auth": {
"role": "admin"
},
"menuNavigation": {
"level1": "회계관리",
"level2": "거래처관리"
},
"screenshotPolicy": {
"captureOnFail": true,
"captureOnPass": false
},
"steps": [
{
"id": 1,
"name": "[회계관리 > 거래처관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 2,
"name": "[회계관리 > 거래처관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 3,
"name": "[회계관리 > 거래처관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 4,
"name": "[회계관리 > 입금관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "회계관리",
"level2": "입금관리"
},
{
"id": 5,
"name": "[회계관리 > 입금관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 6,
"name": "[회계관리 > 입금관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 7,
"name": "[회계관리 > 입금관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 8,
"name": "[회계관리 > 출금관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "회계관리",
"level2": "출금관리"
},
{
"id": 9,
"name": "[회계관리 > 출금관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 10,
"name": "[회계관리 > 출금관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 11,
"name": "[회계관리 > 출금관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
}
]
}

89
search-options-acc-2.json Normal file
View File

@@ -0,0 +1,89 @@
{
"id": "search-options-acc-2",
"name": "검색 옵션 전수 테스트: 매입/매출/카드내역 (2/10)",
"version": "1.0.0",
"auth": {
"role": "admin"
},
"menuNavigation": {
"level1": "회계관리",
"level2": "매입관리"
},
"screenshotPolicy": {
"captureOnFail": true,
"captureOnPass": false
},
"steps": [
{
"id": 1,
"name": "[회계관리 > 매입관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 2,
"name": "[회계관리 > 매입관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 3,
"name": "[회계관리 > 매입관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 4,
"name": "[회계관리 > 매출관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "회계관리",
"level2": "매출관리"
},
{
"id": 5,
"name": "[회계관리 > 매출관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 6,
"name": "[회계관리 > 매출관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 7,
"name": "[회계관리 > 매출관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 8,
"name": "[회계관리 > 카드내역조회] 메뉴 이동",
"action": "menu_navigate",
"level1": "회계관리",
"level2": "카드내역조회"
},
{
"id": 9,
"name": "[회계관리 > 카드내역조회] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 10,
"name": "[회계관리 > 카드내역조회] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 11,
"name": "[회계관리 > 카드내역조회] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
}
]
}

167
search-options-acc-3.json Normal file
View File

@@ -0,0 +1,167 @@
{
"id": "search-options-acc-3",
"name": "검색 옵션 전수 테스트: 어음/추심/계좌/미수금/결제/지출예상 (3/10)",
"version": "1.0.0",
"auth": {
"role": "admin"
},
"menuNavigation": {
"level1": "회계관리",
"level2": "어음관리"
},
"screenshotPolicy": {
"captureOnFail": true,
"captureOnPass": false
},
"steps": [
{
"id": 1,
"name": "[회계관리 > 어음관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 2,
"name": "[회계관리 > 어음관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 3,
"name": "[회계관리 > 어음관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 4,
"name": "[회계관리 > 악성채권추심관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "회계관리",
"level2": "악성채권추심관리"
},
{
"id": 5,
"name": "[회계관리 > 악성채권추심관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 6,
"name": "[회계관리 > 악성채권추심관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 7,
"name": "[회계관리 > 악성채권추심관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 8,
"name": "[회계관리 > 입출금계좌조회] 메뉴 이동",
"action": "menu_navigate",
"level1": "회계관리",
"level2": "입출금계좌조회"
},
{
"id": 9,
"name": "[회계관리 > 입출금계좌조회] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 10,
"name": "[회계관리 > 입출금계좌조회] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 11,
"name": "[회계관리 > 입출금계좌조회] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 12,
"name": "[회계관리 > 미수금현황] 메뉴 이동",
"action": "menu_navigate",
"level1": "회계관리",
"level2": "미수금현황"
},
{
"id": 13,
"name": "[회계관리 > 미수금현황] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 14,
"name": "[회계관리 > 미수금현황] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 15,
"name": "[회계관리 > 미수금현황] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 16,
"name": "[회계관리 > 결제내역] 메뉴 이동",
"action": "menu_navigate",
"level1": "회계관리",
"level2": "결제내역"
},
{
"id": 17,
"name": "[회계관리 > 결제내역] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 18,
"name": "[회계관리 > 결제내역] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 19,
"name": "[회계관리 > 결제내역] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 20,
"name": "[회계관리 > 지출예상내역서] 메뉴 이동",
"action": "menu_navigate",
"level1": "회계관리",
"level2": "지출예상내역서"
},
{
"id": 21,
"name": "[회계관리 > 지출예상내역서] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 22,
"name": "[회계관리 > 지출예상내역서] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 23,
"name": "[회계관리 > 지출예상내역서] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
}
]
}

View File

@@ -0,0 +1,89 @@
{
"id": "search-options-approval",
"name": "검색 옵션 전수 테스트: 결재관리 (6/10)",
"version": "1.0.0",
"auth": {
"role": "admin"
},
"menuNavigation": {
"level1": "결재관리",
"level2": "결재함"
},
"screenshotPolicy": {
"captureOnFail": true,
"captureOnPass": false
},
"steps": [
{
"id": 1,
"name": "[결재관리 > 결재함] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 2,
"name": "[결재관리 > 결재함] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 3,
"name": "[결재관리 > 결재함] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 4,
"name": "[결재관리 > 기안함] 메뉴 이동",
"action": "menu_navigate",
"level1": "결재관리",
"level2": "기안함"
},
{
"id": 5,
"name": "[결재관리 > 기안함] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 6,
"name": "[결재관리 > 기안함] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 7,
"name": "[결재관리 > 기안함] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 8,
"name": "[결재관리 > 참조함] 메뉴 이동",
"action": "menu_navigate",
"level1": "결재관리",
"level2": "참조함"
},
{
"id": 9,
"name": "[결재관리 > 참조함] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 10,
"name": "[결재관리 > 참조함] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 11,
"name": "[결재관리 > 참조함] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
}
]
}

View File

@@ -0,0 +1,141 @@
{
"id": "search-options-boards-customer",
"name": "검색 옵션 전수 테스트: 게시판/고객센터 (5/10)",
"version": "1.0.0",
"auth": {
"role": "admin"
},
"menuNavigation": {
"level1": "게시판",
"level2": "자유게시판"
},
"screenshotPolicy": {
"captureOnFail": true,
"captureOnPass": false
},
"steps": [
{
"id": 1,
"name": "[게시판 > 자유게시판] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 2,
"name": "[게시판 > 자유게시판] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 3,
"name": "[게시판 > 자유게시판] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 4,
"name": "[게시판 > 게시판 관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "게시판",
"level2": "게시판 관리"
},
{
"id": 5,
"name": "[게시판 > 게시판 관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 6,
"name": "[게시판 > 게시판 관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 7,
"name": "[게시판 > 게시판 관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 8,
"name": "[고객센터 > 이벤트] 메뉴 이동",
"action": "menu_navigate",
"level1": "고객센터",
"level2": "이벤트"
},
{
"id": 9,
"name": "[고객센터 > 이벤트] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 10,
"name": "[고객센터 > 이벤트] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 11,
"name": "[고객센터 > 이벤트] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 12,
"name": "[고객센터 > FAQ] 메뉴 이동",
"action": "menu_navigate",
"level1": "고객센터",
"level2": "FAQ"
},
{
"id": 13,
"name": "[고객센터 > FAQ] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 14,
"name": "[고객센터 > FAQ] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 15,
"name": "[고객센터 > FAQ] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 16,
"name": "[고객센터 > 공지사항] 메뉴 이동",
"action": "menu_navigate",
"level1": "고객센터",
"level2": "공지사항"
},
{
"id": 17,
"name": "[고객센터 > 공지사항] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 18,
"name": "[고객센터 > 공지사항] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 19,
"name": "[고객센터 > 공지사항] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
}
]
}

193
search-options-hr.json Normal file
View File

@@ -0,0 +1,193 @@
{
"id": "search-options-hr",
"name": "검색 옵션 전수 테스트: 인사관리 전체 (4/10)",
"version": "1.0.0",
"auth": {
"role": "admin"
},
"menuNavigation": {
"level1": "인사관리",
"level2": "사원관리"
},
"screenshotPolicy": {
"captureOnFail": true,
"captureOnPass": false
},
"steps": [
{
"id": 1,
"name": "[인사관리 > 사원관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 2,
"name": "[인사관리 > 사원관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 3,
"name": "[인사관리 > 사원관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 4,
"name": "[인사관리 > 근태관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "인사관리",
"level2": "근태관리"
},
{
"id": 5,
"name": "[인사관리 > 근태관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 6,
"name": "[인사관리 > 근태관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 7,
"name": "[인사관리 > 근태관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 8,
"name": "[인사관리 > 근태현황] 메뉴 이동",
"action": "menu_navigate",
"level1": "인사관리",
"level2": "근태현황"
},
{
"id": 9,
"name": "[인사관리 > 근태현황] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 10,
"name": "[인사관리 > 근태현황] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 11,
"name": "[인사관리 > 근태현황] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 12,
"name": "[인사관리 > 급여관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "인사관리",
"level2": "급여관리"
},
{
"id": 13,
"name": "[인사관리 > 급여관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 14,
"name": "[인사관리 > 급여관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 15,
"name": "[인사관리 > 급여관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 16,
"name": "[인사관리 > 휴가관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "인사관리",
"level2": "휴가관리"
},
{
"id": 17,
"name": "[인사관리 > 휴가관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 18,
"name": "[인사관리 > 휴가관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 19,
"name": "[인사관리 > 휴가관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 20,
"name": "[인사관리 > 카드관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "인사관리",
"level2": "카드관리"
},
{
"id": 21,
"name": "[인사관리 > 카드관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 22,
"name": "[인사관리 > 카드관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 23,
"name": "[인사관리 > 카드관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 24,
"name": "[인사관리 > 부서관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "인사관리",
"level2": "부서관리"
},
{
"id": 25,
"name": "[인사관리 > 부서관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 26,
"name": "[인사관리 > 부서관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 27,
"name": "[인사관리 > 부서관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
}
]
}

View File

@@ -0,0 +1,167 @@
{
"id": "search-options-production",
"name": "검색 옵션 전수 테스트: 생산/품목관리 (8/10)",
"version": "1.0.0",
"auth": {
"role": "admin"
},
"menuNavigation": {
"level1": "생산관리",
"level2": "작업지시관리"
},
"screenshotPolicy": {
"captureOnFail": true,
"captureOnPass": false
},
"steps": [
{
"id": 1,
"name": "[생산관리 > 작업지시관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 2,
"name": "[생산관리 > 작업지시관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 3,
"name": "[생산관리 > 작업지시관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 4,
"name": "[생산관리 > 작업실적관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "생산관리",
"level2": "작업실적관리"
},
{
"id": 5,
"name": "[생산관리 > 작업실적관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 6,
"name": "[생산관리 > 작업실적관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 7,
"name": "[생산관리 > 작업실적관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 8,
"name": "[생산관리 > 생산품목관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "생산관리",
"level2": "생산품목관리"
},
{
"id": 9,
"name": "[생산관리 > 생산품목관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 10,
"name": "[생산관리 > 생산품목관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 11,
"name": "[생산관리 > 생산품목관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 12,
"name": "[생산관리 > 작업자 화면] 메뉴 이동",
"action": "menu_navigate",
"level1": "생산관리",
"level2": "작업자 화면"
},
{
"id": 13,
"name": "[생산관리 > 작업자 화면] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 14,
"name": "[생산관리 > 작업자 화면] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 15,
"name": "[생산관리 > 작업자 화면] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 16,
"name": "[품목관리 > 품목기준관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "품목관리",
"level2": "품목기준관리"
},
{
"id": 17,
"name": "[품목관리 > 품목기준관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 18,
"name": "[품목관리 > 품목기준관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 19,
"name": "[품목관리 > 품목기준관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 20,
"name": "[품목관리 > 품목관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "품목관리",
"level2": "품목관리"
},
{
"id": 21,
"name": "[품목관리 > 품목관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 22,
"name": "[품목관리 > 품목관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 23,
"name": "[품목관리 > 품목관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
}
]
}

View File

@@ -0,0 +1,115 @@
{
"id": "search-options-quality-material",
"name": "검색 옵션 전수 테스트: 품질/자재관리 (9/10)",
"version": "1.0.0",
"auth": {
"role": "admin"
},
"menuNavigation": {
"level1": "품질관리",
"level2": "제품검사관리"
},
"screenshotPolicy": {
"captureOnFail": true,
"captureOnPass": false
},
"steps": [
{
"id": 1,
"name": "[품질관리 > 제품검사관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 2,
"name": "[품질관리 > 제품검사관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 3,
"name": "[품질관리 > 제품검사관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 4,
"name": "[품질관리 > 품질인정심사] 메뉴 이동",
"action": "menu_navigate",
"level1": "품질관리",
"level2": "품질인정심사"
},
{
"id": 5,
"name": "[품질관리 > 품질인정심사] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 6,
"name": "[품질관리 > 품질인정심사] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 7,
"name": "[품질관리 > 품질인정심사] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 8,
"name": "[자재관리 > 재고현황] 메뉴 이동",
"action": "menu_navigate",
"level1": "자재관리",
"level2": "재고현황"
},
{
"id": 9,
"name": "[자재관리 > 재고현황] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 10,
"name": "[자재관리 > 재고현황] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 11,
"name": "[자재관리 > 재고현황] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 12,
"name": "[자재관리 > 입고관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "자재관리",
"level2": "입고관리"
},
{
"id": 13,
"name": "[자재관리 > 입고관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 14,
"name": "[자재관리 > 입고관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 15,
"name": "[자재관리 > 입고관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
}
]
}

167
search-options-sales.json Normal file
View File

@@ -0,0 +1,167 @@
{
"id": "search-options-sales",
"name": "검색 옵션 전수 테스트: 판매관리/출고 (7/10)",
"version": "1.0.0",
"auth": {
"role": "admin"
},
"menuNavigation": {
"level1": "판매관리",
"level2": "매출관리"
},
"screenshotPolicy": {
"captureOnFail": true,
"captureOnPass": false
},
"steps": [
{
"id": 1,
"name": "[판매관리 > 매출관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 2,
"name": "[판매관리 > 매출관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 3,
"name": "[판매관리 > 매출관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 4,
"name": "[판매관리 > 수주관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "판매관리",
"level2": "수주관리"
},
{
"id": 5,
"name": "[판매관리 > 수주관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 6,
"name": "[판매관리 > 수주관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 7,
"name": "[판매관리 > 수주관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 8,
"name": "[판매관리 > 견적관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "판매관리",
"level2": "견적관리"
},
{
"id": 9,
"name": "[판매관리 > 견적관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 10,
"name": "[판매관리 > 견적관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 11,
"name": "[판매관리 > 견적관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 12,
"name": "[판매관리 > 거래처관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "판매관리",
"level2": "거래처관리"
},
{
"id": 13,
"name": "[판매관리 > 거래처관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 14,
"name": "[판매관리 > 거래처관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 15,
"name": "[판매관리 > 거래처관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 16,
"name": "[판매관리 > 단가관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "판매관리",
"level2": "단가관리"
},
{
"id": 17,
"name": "[판매관리 > 단가관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 18,
"name": "[판매관리 > 단가관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 19,
"name": "[판매관리 > 단가관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 20,
"name": "[출고관리 > 출고관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "출고관리",
"level2": "출고관리"
},
{
"id": 21,
"name": "[출고관리 > 출고관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 22,
"name": "[출고관리 > 출고관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 23,
"name": "[출고관리 > 출고관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
}
]
}

View File

@@ -0,0 +1,141 @@
{
"id": "search-options-settings",
"name": "검색 옵션 전수 테스트: 설정 (10/10)",
"version": "1.0.0",
"auth": {
"role": "admin"
},
"menuNavigation": {
"level1": "설정",
"level2": "팝업관리"
},
"screenshotPolicy": {
"captureOnFail": true,
"captureOnPass": false
},
"steps": [
{
"id": 1,
"name": "[설정 > 팝업관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 2,
"name": "[설정 > 팝업관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 3,
"name": "[설정 > 팝업관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 4,
"name": "[설정 > 계좌관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "설정",
"level2": "계좌관리"
},
{
"id": 5,
"name": "[설정 > 계좌관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 6,
"name": "[설정 > 계좌관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 7,
"name": "[설정 > 계좌관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 8,
"name": "[설정 > 직책관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "설정",
"level2": "직책관리"
},
{
"id": 9,
"name": "[설정 > 직책관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 10,
"name": "[설정 > 직책관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 11,
"name": "[설정 > 직책관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 12,
"name": "[설정 > 직급관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "설정",
"level2": "직급관리"
},
{
"id": 13,
"name": "[설정 > 직급관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 14,
"name": "[설정 > 직급관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 15,
"name": "[설정 > 직급관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
},
{
"id": 16,
"name": "[설정 > 권한관리] 메뉴 이동",
"action": "menu_navigate",
"level1": "설정",
"level2": "권한관리"
},
{
"id": 17,
"name": "[설정 > 권한관리] 페이지 로드 대기",
"action": "wait",
"timeout": 3000
},
{
"id": 18,
"name": "[설정 > 권한관리] 테이블 로드 대기",
"action": "wait_for_table",
"timeout": 5000
},
{
"id": 19,
"name": "[설정 > 권한관리] 검색 옵션 전수 테스트",
"action": "evaluate",
"script": "(async()=>{const R={p:location.pathname,tests:[]};const rc=()=>document.querySelectorAll('table tbody tr').length;const w=ms=>new Promise(r=>setTimeout(r,ms));const sv=(el,v)=>{const ns=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value')?.set;if(ns)ns.call(el,v);else el.value=v;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));};const ss=['input[placeholder*=\"검색\"]','input[type=\"search\"]','input[role=\"searchbox\"]'];let si=null;for(const s of ss){si=document.querySelector(s);if(si)break;}R.search=!!si;R.ph=si?si.placeholder?.substring(0,60):'';const init=rc();R.rows=init;if(si&&init>0){sv(si,'zzz_nomatch_e2e');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1500);const a=rc();R.tests.push({t:'noMatch',b:init,a,ok:a<init});sv(si,'');si.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',keyCode:13,bubbles:true}));await w(1000);}const cbs=Array.from(document.querySelectorAll('button[role=\"combobox\"]'));R.dd=cbs.length;for(let i=0;i<cbs.length;i++){const cb=cbs[i];const dv=cb.innerText?.trim();cb.scrollIntoView({block:'center'});await w(200);cb.click();await w(600);const lb=document.querySelector('[role=\"listbox\"]');if(!lb){document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(200);R.tests.push({t:'dd'+i,dv,err:'nolb'});continue;}const opts=Array.from(lb.querySelectorAll('[role=\"option\"]')).map(o=>o.innerText?.trim());R.tests.push({t:'dd'+i+'_o',dv,opts,n:opts.length});document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await w(300);if(opts.length>1){const b=rc();cb.click();await w(500);const lb2=document.querySelector('[role=\"listbox\"]');if(lb2){const ao=Array.from(lb2.querySelectorAll('[role=\"option\"]'));const nd=ao.find(o=>o.innerText?.trim()!==dv)||ao[1];if(nd){const st=nd.innerText?.trim();nd.click();await w(1200);const af=rc();R.tests.push({t:'dd'+i+'_s',s:st,b,a:af,c:af!==b});cb.click();await w(500);const lb3=document.querySelector('[role=\"listbox\"]');if(lb3){const f=lb3.querySelector('[role=\"option\"]');if(f)f.click();await w(800);}}}}}const tb=Array.from(document.querySelectorAll('button')).find(b=>b.innerText?.trim()==='오늘');if(tb){const b=rc();tb.click();await w(1200);const a=rc();R.tests.push({t:'today',b,a,c:a!==b});}R.sum={dd:cbs.length,opts:R.tests.filter(t=>t.n).reduce((s,t)=>s+t.n,0),tested:R.tests.filter(t=>t.t?.includes('_s')).length,changed:R.tests.filter(t=>t.t?.includes('_s')&&t.c).length,searchOk:R.tests.find(t=>t.t==='noMatch')?.ok??null};return JSON.stringify(R);})()",
"timeout": 60000
}
]
}