下载文件对话框

时间:2013-08-01 11:36:00

标签: selenium download automated-tests

我正在使用Selenium和我的CI系统自动测试我的各种应用程序,其中一个是带有我们答案的可下载副本的Web表单(作为动态生成的PDF)。测试是断言可下载的PDF文件包含正确的答案(在webform上给出的答案)。我的问题是尝试处理下载对话框以检索PDF文件(声明PDF的内容是正确的超出了这个问题的范围)。

我花了一些时间来研究如何处理它,我发现的任何相关性的一些事情是AutoIT,更改默认下载位置&使浏览器自动下载文件,只需asserting the link works without downloading the file。不幸的是,我的情况排除了所有三种可能性。

  1. 我使用各种浏览器(排除自动下载,因为有些浏览器不支持此功能)。
  2. 我正在使用各种平台(排除AutoIT,一个仅限Windows的应用程序)。
  3. PDF中的内容是根据之前与应用程序的交互动态生成的,测试是断言生成的内容是否与预期值匹配,所以只检查链接是否存在是不够的。
  4. 因为提供的下载对话框是由操作系统管理的,所以我不确定是否可以将Selenium用于我的意图,但是我想我先问一下是否有人知道使用Selenium的任何解决方案,或者可以推荐一些其他可接受的测试方法?

2 个答案:

答案 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>

我希望它可以帮到你。

相关问题