From 86b2ade39c0b7e10745b12384c95122d0f7daffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Thu, 12 Feb 2026 07:20:10 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EA=B2=80=EC=83=89=20=EC=98=B5=EC=85=98?= =?UTF-8?q?=20=EC=A0=84=EC=88=98=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=8B=9C?= =?UTF-8?q?=EB=82=98=EB=A6=AC=EC=98=A4=2010=EA=B0=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 검색창이 있는 모든 페이지(48개)에서 드롭다운 옵션 전수 열거·선택·복원, 텍스트 검색(no-match), 오늘 버튼 등 모든 검색 조건을 자동 테스트 Co-Authored-By: Claude Opus 4.6 --- search-options-acc-1.json | 89 ++++++++++++ search-options-acc-2.json | 89 ++++++++++++ search-options-acc-3.json | 167 +++++++++++++++++++++++ search-options-approval.json | 89 ++++++++++++ search-options-boards-customer.json | 141 +++++++++++++++++++ search-options-hr.json | 193 +++++++++++++++++++++++++++ search-options-production.json | 167 +++++++++++++++++++++++ search-options-quality-material.json | 115 ++++++++++++++++ search-options-sales.json | 167 +++++++++++++++++++++++ search-options-settings.json | 141 +++++++++++++++++++ 10 files changed, 1358 insertions(+) create mode 100644 search-options-acc-1.json create mode 100644 search-options-acc-2.json create mode 100644 search-options-acc-3.json create mode 100644 search-options-approval.json create mode 100644 search-options-boards-customer.json create mode 100644 search-options-hr.json create mode 100644 search-options-production.json create mode 100644 search-options-quality-material.json create mode 100644 search-options-sales.json create mode 100644 search-options-settings.json diff --git a/search-options-acc-1.json b/search-options-acc-1.json new file mode 100644 index 0000000..1c38fcf --- /dev/null +++ b/search-options-acc-1.json @@ -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:ao.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:ao.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:ao.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 + } + ] +} \ No newline at end of file diff --git a/search-options-acc-2.json b/search-options-acc-2.json new file mode 100644 index 0000000..22c20f6 --- /dev/null +++ b/search-options-acc-2.json @@ -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:ao.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:ao.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:ao.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 + } + ] +} \ No newline at end of file diff --git a/search-options-acc-3.json b/search-options-acc-3.json new file mode 100644 index 0000000..7f1b496 --- /dev/null +++ b/search-options-acc-3.json @@ -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:ao.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:ao.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:ao.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:ao.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:ao.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:ao.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 + } + ] +} \ No newline at end of file diff --git a/search-options-approval.json b/search-options-approval.json new file mode 100644 index 0000000..ecddb4a --- /dev/null +++ b/search-options-approval.json @@ -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:ao.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:ao.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:ao.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 + } + ] +} \ No newline at end of file diff --git a/search-options-boards-customer.json b/search-options-boards-customer.json new file mode 100644 index 0000000..8b2de83 --- /dev/null +++ b/search-options-boards-customer.json @@ -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:ao.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:ao.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:ao.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:ao.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:ao.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 + } + ] +} \ No newline at end of file diff --git a/search-options-hr.json b/search-options-hr.json new file mode 100644 index 0000000..350bbb9 --- /dev/null +++ b/search-options-hr.json @@ -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:ao.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:ao.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:ao.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:ao.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:ao.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:ao.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:ao.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 + } + ] +} \ No newline at end of file diff --git a/search-options-production.json b/search-options-production.json new file mode 100644 index 0000000..66569e0 --- /dev/null +++ b/search-options-production.json @@ -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:ao.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:ao.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:ao.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:ao.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:ao.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:ao.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 + } + ] +} \ No newline at end of file diff --git a/search-options-quality-material.json b/search-options-quality-material.json new file mode 100644 index 0000000..24dee0a --- /dev/null +++ b/search-options-quality-material.json @@ -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:ao.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:ao.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:ao.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:ao.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 + } + ] +} \ No newline at end of file diff --git a/search-options-sales.json b/search-options-sales.json new file mode 100644 index 0000000..8a5cfec --- /dev/null +++ b/search-options-sales.json @@ -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:ao.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:ao.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:ao.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:ao.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:ao.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:ao.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 + } + ] +} \ No newline at end of file diff --git a/search-options-settings.json b/search-options-settings.json new file mode 100644 index 0000000..4d20c48 --- /dev/null +++ b/search-options-settings.json @@ -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:ao.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:ao.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:ao.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:ao.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:ao.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 + } + ] +} \ No newline at end of file