파일 드롭 시뮬레이션

File drop simulation

드롭존에 외부 파일을 놓는 이벤트를 자동화해 업로드 흐름을 검증합니다.

···
html
<div class="stage"><div class="title">FILE DROP</div><div class="canvas"><div class="dropflow"><div class="file" id="dropFile">report.txt</div><div class="zone" id="dropZone">DROP FILE HERE</div></div><div class="events"><span id="drop0">dragenter</span><span id="drop1">dragover</span><span id="drop2">drop</span></div><div class="receipt" id="dropReceipt">waiting for file</div></div></div>
css
.stage{width:min(94vw,820px);height:min(88vh,330px);box-sizing:border-box;padding:clamp(9px,2.4vmin,18px);border:1px solid var(--line);border-radius:13px;background:var(--surface);display:flex;flex-direction:column;gap:clamp(7px,2vmin,14px);font:600 clamp(12px,2.5vmin,16px)/1.28 "Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo",sans-serif;color:var(--fg);overflow:hidden}.title{color:var(--accent);letter-spacing:.035em;flex:none}.canvas{position:relative;flex:1;min-height:0;display:flex;align-items:center;justify-content:center}.muted{color:var(--muted)}.mono{font-family:ui-monospace,SFMono-Regular,monospace}.box{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(5px,1.4vmin,12px);text-align:center}.active{border-color:var(--accent)!important;color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 12%,var(--surface))!important}.canvas{flex-direction:column;gap:clamp(6px,2vmin,12px)}.dropflow{display:flex;align-items:center;justify-content:center;gap:clamp(8px,4vmin,35px);width:100%}.file{border:1px solid var(--accent);color:var(--accent);border-radius:5px;padding:clamp(6px,2vmin,12px);transition:transform .4s}.file.moving{transform:translateX(clamp(10px,6vmin,40px))}.zone{width:45%;max-width:230px;min-height:clamp(42px,12vmin,95px);border:2px dashed var(--line);border-radius:7px;display:grid;place-items:center;text-align:center}.zone.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--surface))}.events{display:flex;gap:4px;flex-wrap:wrap;justify-content:center}.events span{padding:4px;border:1px solid var(--line);border-radius:4px;color:var(--muted)}.events .on{color:var(--accent);border-color:var(--accent)}.receipt{color:var(--accent)}
js
let tick=0;function drop(){const step=tick++%4;document.getElementById('dropFile').classList.toggle('moving',step>0);document.getElementById('dropZone').classList.toggle('on',step>0);for(let i=0;i<3;i++)document.getElementById('drop'+i).classList.toggle('on',i<step);document.getElementById('dropReceipt').textContent=['waiting for file','drag entered','hovering dropzone','upload saved'][step]}drop();setInterval(drop,650)

Playwright의 locator.drop()은 파일이나 MIME 데이터를 외부에서 끌어온 것처럼 요소에 놓습니다. dragenter, dragover, drop 이벤트를 보내 드롭존 전용 흐름을 시험합니다.

데모는 파일이 드롭존에 들어가 이벤트가 차례로 켜지고 업로드 상태가 바뀌는 과정을 보여줍니다. 이벤트를 받았다는 사실만으로 저장 성공을 판단하지 말고 서버 결과까지 확인합니다.

언제 쓰나

파일 선택창 없이 드래그 앤 드롭으로만 업로드하는 화면을 테스트할 때 사용합니다.

페이지로 열기 ↗