다운로드 파일이 정상적으로 다운받아지를 테스트하고 싶은 경우가 있다. 플레이라이트에서는 다운로드에 대한 테스트 도한 제공해준다.
🛒 waitForEvent 사용
page.waitForEvent('download')를 통해서 다운로드가 발생하는지를 캐치할 수 있다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<a href="./download.png" download="다운로드.png">다운로드</a>
</body>
</html>
test('test', async ({ page }) => {
await page.goto('http://127.0.0.1:5501/index.html');
const downloadPromise = page.waitForEvent('download');
await page.getByText('다운로드').click();
const download = await downloadPromise;
expect(download.suggestedFilename()).toBe('다운로드.png');
});
다운로드 이벤트를 시작하기 전 const downloadPromise = page.waitForEvent('download'); 코드를 실행한다. 이를 통해서 다운로드 이벤트가 실행되는지를 캐치한다.
다운 로드 이벤트를 발동한 후 const download = await downloadPromise; 에 결과를 받아온다.
✨ 실제 다운로드 전에 page.waitForEvent(’download’)를 호출하자!
download 객체에는 테스트를 위한 다양한 메서드를 제공한다. 아래에는 자주 사용되는 두가지만 소개하지만 다른 메서드는 공식 문서에서 확인 가능하다.
- saveAs : 다른 이름으로 저장하기
- suggestedFilename : 다운로드 받은 파일명
기본적으로는 다운로드에 대한 테스트가 종료가 되면 플레이라이트에서는 파일을 제거하게 된다. 만약 테스트의 결과로 파일을 남기고 싶다면 download.saveAs('이름')을 사용하면 된다.
주의해야 할 점이 두가지 있다.
- saveAs로 지정하는 이름은 테스트와는 무관하다. 테스트 종료 후 저장되는 이름을 지정하는 것이다.
- 경로를 지정하지 않으면 플레이라이트를 실행하는 루트 경로에 저장 된다.
📯 page.on 이벤트 사용
다운로드 되는 시점을 알지 못하는 경우 page.on을 활용해서 다운로드 되는 것을 캐치할 수 있다.
page.on('download', download => download.path().then(console.log));
하지만 위와 같은 이벤트를 통해서 처리하는 경우에는 기본 테스트 함수의 흐름내에서 실행되는 것이 아니기 때문에 이벤트가 호출 되기 전 테스트가 종료될 수 있다.
아래와 같이 waitForTimeout를 사용해서 단언이 호출될때까지 기다릴 수는 있으나 정상적인 처리라고는 보기 힘들다.
test('test', async ({ page }) => {
await page.goto('http://127.0.0.1:5501/index.html');
page.on('download', download => expect(download.suggestedFilename()).toBe('다운로드.png'));
await page.getByText('다운로드').click();
await page.waitForTimeout(5000);
});
✨ waitForEvent를 사용하자!
'학습 정리(공식문서,강의) > Playwright' 카테고리의 다른 글
6. Playwright Fixture (0) | 2025.01.18 |
---|---|
5. Playwright Locator (0) | 2025.01.15 |
4. Playwright Assertion (0) | 2025.01.10 |
3. Playwright Action (0) | 2025.01.07 |
2. Playwright 명령어 (0) | 2025.01.02 |