我正在使用Selenium和我的CI系统自动测试我的各种应用程序,其中一个是带有我们答案的可下载副本的Web表单(作为动态生成的PDF)。测试是断言可下载的PDF文件包含正确的答案(在webform上给出的答案)。我的问题是尝试处理下载对话框以检索PDF文件(声明PDF的内容是正确的超出了这个问题的范围)。
我花了一些时间来研究如何处理它,我发现的任何相关性的一些事情是AutoIT,更改默认下载位置&使浏览器自动下载文件,只需asserting the link works without downloading the file。不幸的是,我的情况排除了所有三种可能性。
因为提供的下载对话框是由操作系统管理的,所以我不确定是否可以将Selenium用于我的意图,但是我想我先问一下是否有人知道使用Selenium的任何解决方案,或者可以推荐一些其他可接受的测试方法?
答案 0 :(得分:6)
据我所知,由于你自己说的原因,你不能使用硒。但是,我认为解决这个问题的最佳方法是直接下载生成的pdf而不使用selenium。由于您知道其网址,因此您可以使用this article中列出的方法。它描述了使用“粉末猴子”来完成您想要做的事情。
答案 1 :(得分:3)
这确实是一个烦人的问题。但是,我可以弄清楚如何为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>
我希望它可以帮到你。