Files
sam-scenarios/search-options-sales.json

141 lines
16 KiB
JSON
Raw Normal View History

{
"id": "search-options-sales",
"name": "검색 옵션 전수 테스트: 판매관리/출고 (7/11)",
"version": "1.0.1",
"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
}
]
}