I use the Robot Framework.
On my HTML page I have a simple button. When you click on it, it downloads a PDF file.
How can I check with Robot Framework if the file has been downloaded?
${files} List Files In Directory /Users/alapan/PycharmProjects/Robot-Framework/Resources/Download – As the name suggests, List Files In Directory gets the number of files in the current directory. > Length Should Be ${files} 1 – Now if the download is successful the number of files should be 1.
Starting from Robot Framework 5.0, variable files implemented using Python can also be imported using the module name `similarly as libraries`__. When using this approach, the module needs to be in the `module search path`_. All variables from a variable file are available in the test data file that imports it.
Open the robot fileClick the tasks. robot file to open it in the editor. The robot looks something like this: *** Settings *** Documentation Template robot main suite.
The solution is very browser specific. For Chrome, you can tell Chrome where to download files. Choosing a new folder allows you to monitor the status of the download. Also, since you are downloading a PDF, disabling the PDF plugin is necessary to prevent the PDF from being displayed instead of downloaded. Here is a test that worked on my machine using a simple page and PDF file.
*** Settings ***
Test Teardown Close All Browsers
Library Selenium2Library
Library OperatingSystem
*** Test Cases ***
Download PDF
# create unique folder
${now} Get Time epoch
${download directory} Join Path ${OUTPUT DIR} downloads_${now}
Create Directory ${download directory}
${chrome options}= Evaluate sys.modules['selenium.webdriver'].ChromeOptions() sys, selenium.webdriver
# list of plugins to disable. disabling PDF Viewer is necessary so that PDFs are saved rather than displayed
${disabled} Create List Chrome PDF Viewer
${prefs} Create Dictionary download.default_directory=${download directory} plugins.plugins_disabled=${disabled}
Call Method ${chrome options} add_experimental_option prefs ${prefs}
Create Webdriver Chrome chrome_options=${chrome options}
Goto http://localhost/download.html
Click Link link # downloads a file
# wait for download to finish
${file} Wait Until Keyword Succeeds 1 min 2 sec Download should be done ${download directory}
*** Keywords ***
Download should be done
[Arguments] ${directory}
[Documentation] Verifies that the directory has only one folder and it is not a temp file.
...
... Returns path to the file
${files} List Files In Directory ${directory}
Length Should Be ${files} 1 Should be only one file in the download folder
Should Not Match Regexp ${files[0]} (?i).*\\.tmp Chrome is still downloading a file
${file} Join Path ${directory} ${files[0]}
Log File was successfully downloaded to ${file}
[Return] ${file}
Contents of download.html:
<html><body><a href="file.pdf" id="link">Click Here</a></body></html>
${home_dir} Get Environment Variable HOME
${download_dir} Join Path ${home_dir} Downloads
${result} Run Keyword And Return Status File Should Exist
${download_dir}/filename.pdf
To check further on the file ${content} Get File ${download_dir}/filename.pdf ${count_file} Get Line Count ${content}
Above can be used for basic assertion For more keywords please check the link http://robotframework.org/robotframework/latest/libraries/OperatingSystem.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With