I\'m using Selenium with my CI system to automatically test my various applications, one of which is a web form with a downloadable copy of our answers (as a dynamically generat
This is an annoying issue indeed. However, I could figure out how to solve it for Firefox. Maybe you can find a similar solution for other browsers.
Basically, you have to force the browser to download the file without asking for it. You can do that by loading a specially crafted profile.
from selenium import webdriver
myprofile = webdriver.FirefoxProfile('./profile')
myprofile.set_preference('browser.download.dir', '/tmp/my_downloads_folder')
myprofile.set_preference('browser.download.folderList', 2)
myprofile.set_preference('pdfjs.migrationVersion', 1);
browser = webdriver.Firefox(fp)
Besides loading the profile, we also define a downloads folder and disable the pdfjs
plugin.
In ./profile
folder, we have a mimeTypes.rdf
file like this:
<?xml version="1.0"?>
<RDF:RDF xmlns:NC="http://home.netscape.com/NC-rdf#"
xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<RDF:Description RDF:about="urn:mimetype:application/pdf"
NC:value="application/pdf"
NC:editable="true">
<NC:handlerProp RDF:resource="urn:mimetype:handler:application/pdf"/>
</RDF:Description>
<RDF:Description RDF:about="urn:mimetype:handler:application/pdf"
NC:alwaysAsk="false"
NC:saveToDisk="true"
NC:handleInternal="false">
<NC:externalApplication RDF:resource="urn:mimetype:externalApplication:application/pdf"/>
</RDF:Description>
</RDF:RDF>
I hope it helps you.
As far as I know you can't use selenium for that, for the reasons you stated yourself. However, I think the best way to approach this is to download the generated pdf directly without selenium. Since you know its url, you can maybe use the approach outlined in this article. It describes the use of "Powder-Monkey" to do exactly what you want to do.