使用Python Selenium Webdriver捕获PDF文件

时间:2013-02-01 17:40:43

标签: python pdf selenium webdriver selenium-webdriver

我们使用python测试套件测试内部开发的应用程序,该套件通过Selenium WebDriver完成Web导航/交互。我们的网络测试中一个棘手的部分是在应用程序中处理一系列pdf报告。我们正在测试Firefox从v3.6到v16.0.1的计划升级,并且由于firefox临时文件夹的目录结构发生了变化,我们之前捕获报告的方式不再有效。我没有编写原始的pdf捕获代码,但是我将重构它以用于我们最终使用的v16.0.1,所以我想知道是否有更好的方法来保存使用Python的selenium webdriver绑定的pdf而不是我们'目前正在做。

以前,对于Firefox v3.6,在单击生成报告的链接后,我们将扫描“C:\ Documents and Settings \\ Local Settings \ Temp \ plugtmp”目录中的pdf文件(具有特定名称)惯例)。为了清楚起见,我们没有从网页本身保存报告,我们只是使用在firefox的Temp文件夹中生成的报告。

在Firefox 16.0.1中,单击生成报告的链接后,该文件将在“C:\ Documents and Settings \ \ Local Settings \ Temp \ tmp * \ cache *”中生成,并带有随机文件名,不以“.pdf”结尾。这使得捕获此文件有点困难,如果使用类似于我们之前的技术 - 每个浏览器都有一个不同的tmp ***文件夹,其中包含一个充满文件夹的缓存,其中报告是使用随机文件名生成的

我能看到的最简单的解决方案是直接保存pdf,但我还没有办法解决这个问题。

要使用我们在FF3.6中使用的相同方法(在Temp文件夹目录中查找pdf),我认为我们需要执行以下操作:

  1. 找出哪个tmp ***文件夹属于这个特定的浏览器实例(我们可以检查实例化浏览器之前和之后存在的tmp ***文件夹)
  2. 在生成pdf报告后立即查看浏览器缓存中生成的文件(我们可以通过比较时间戳)
  3. 如果在缓存中生成多个文件,我们可能会根据大小进行排序,并采用最大的文件,因为pdf几乎肯定是最大的临时文件(虽然这看起来很脆弱,需要进行测试在实践中)。
  4. 我对这种方法感觉不太好,并且想知道是否有更好的方法来捕获pdf文件。任何人都可以提出更好的方法吗?

    注意:实际抓取PDF文件的工作仍然正常。

1 个答案:

答案 0 :(得分:0)

我们最终通过在测试之前清除firefox的临时Internet文件,然后在生成报告后查找最近创建的文件来完成此任务。