Case Study: Wait for File Download to Complete Safely in Selenium

How to increase reliability in an automated test for a file download

Courtney Zhan

--

This article will show you how to verify a file download completes successfully in Selenium WebDriver.

The test site for this article is http://zhimin.com/books/pwta. There is a sample PDF download that I will use for the tests.

Test Design

The test design is quite straightforward.

  1. Click the download button
  2. Wait…
  3. Verify the file contents

There is an unknown factor with Step 2 — how long should we wait in the test script? And when do we know the file has finished downloading?

There are three approaches:

  • Fixed wait
  • Check the downloaded file’s size
  • Wait for the browser download to complete

Fixed Wait

This approach is very easy to understand. Just hardcode the wait time.

it "Fixed wait time" do
driver.get("http://zhimin.com/books/pwta")
driver.find_element(:link_text, "Download").click
sleep 10 # wait 10 seconds
expect(File.exist?("/Users/me/Downloads/practical-web-test-automation-sample.pdf")).to be true
end

The above file-download script is not safe, we need to
- set the custom file download path (for Chrome)
- delete the file if already exists, before clicking the ‘Download’.
This has been covered in this article, Automated Testing PDF Download in Selenium WebDriver.
This article just focus on the waiting part.

This simple approach does have an apparent drawback, as download speeds are inconsistent. Tweaking the timing is difficult, and setting the wait time too long is suboptimal, i.e. wasteful.

Check the Downloaded File’s Size

An improvement for the above is to ensure the file is fully downloaded, by checking its file size…

--

--