Selenium 下载文件对话框
我正在将Selenium与我的CI系统一起使用,以自动测试我的各种应用程序,其中一个是带有可下载答案副本(作为动态生成的PDF)的web表单。测试是断言可下载的PDF文件包含正确的答案(在网络表单上给出的答案)。我的问题是试图处理下载对话框来检索PDF文件(断言PDF的内容是正确的超出了这个问题的范围) 我花了一段时间四处寻找处理它的方法,我发现很少有相关的事情是,更改默认下载位置&让浏览器自动下载文件,然后就可以了。不幸的是,我的情况排除了这三种可能性Selenium 下载文件对话框,selenium,download,automated-tests,Selenium,Download,Automated Tests,我正在将Selenium与我的CI系统一起使用,以自动测试我的各种应用程序,其中一个是带有可下载答案副本(作为动态生成的PDF)的web表单。测试是断言可下载的PDF文件包含正确的答案(在网络表单上给出的答案)。我的问题是试图处理下载对话框来检索PDF文件(断言PDF的内容是正确的超出了这个问题的范围) 我花了一段时间四处寻找处理它的方法,我发现很少有相关的事情是,更改默认下载位置&让浏览器自动下载文件,然后就可以了。不幸的是,我的情况排除了这三种可能性 我使用多种浏览器(排除自动下载,因为有些
因为所展示的下载对话框是由操作系统管理的,我不确定是否可以使用Selenium来实现我的目的,但是我想我会首先询问是否有人知道任何使用Selenium的解决方案,或者可以推荐一些其他可接受的测试方法?据我所知,由于您自己陈述的原因,您不能使用硒。然而,我认为最好的方法是直接下载生成的pdf而不使用selenium。因为您知道它的url,所以可以使用中概述的方法。它描述了如何使用“火药猴”来做你想做的事情。这确实是一个令人讨厌的问题。然而,我可以想出如何在Firefox上解决这个问题。也许您可以为其他浏览器找到类似的解决方案 基本上,您必须强制浏览器下载文件,而无需请求。您可以通过加载精心编制的配置文件来实现这一点
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)
除了加载配置文件,我们还定义了一个下载文件夹并禁用pdfjs
插件
在/profile
文件夹中,我们有一个mimeTypes.rdf
文件,如下所示:
<?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>
我希望这能对你有所帮助。如果卢卡奇的回答对你来说还不够,我有另一个想法。如果您可以嗅探并发布Http/会话参数,您可以通过正常的交互下载获得这些参数吗?如果您构建数据包并管理您的会话(即cookies/cache,无论以前的交互保存在何处),您可能可以在不下载的情况下检查链接。在浏览器中打开PDF如何?