Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Robot Framework Download File

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?

like image 505
Raphael Avatar asked Feb 09 '16 17:02

Raphael


People also ask

How do I download files from Robot Framework?

${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.

How do I import files into Robot Framework?

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.

How do I open .robot files?

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.


2 Answers

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>
like image 56
ombre42 Avatar answered Sep 17 '22 02:09

ombre42


${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

like image 37
Royalyn H Avatar answered Sep 21 '22 02:09

Royalyn H