본문 바로가기
학습 정리(공식문서,강의)/Playwright

7. Playwright 다운로드 테스트

by 맨날개발 2025. 2. 23.

다운로드 파일이 정상적으로 다운받아지를 테스트하고 싶은 경우가 있다. 플레이라이트에서는 다운로드에 대한 테스트 도한 제공해준다.

 

🛒 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