使用Python Selenium Webdriver捕获PDF文件
我们正在测试一个内部开发的应用程序,使用Python的测试工具,通过Selenium WebDriver进行网页导航和交互。我们在测试中遇到的一个棘手问题是处理应用中的一系列PDF报告。现在我们正在测试将Firefox从3.6版本升级到16.0.1,结果发现之前捕获报告的方法不再有效,因为Firefox的临时文件夹的目录结构发生了变化。我没有写最初的PDF捕获代码,但我会对它进行重构,以适应16.0.1版本,所以我想知道有没有比我们现在使用的方法更好的方式来用Python的Selenium WebDriver保存PDF。
之前,在Firefox 3.6中,点击生成报告的链接后,我们会在“C:\Documents and Settings\\Local Settings\Temp\plugtmp”目录中查找生成的PDF文件(有特定的命名规则)。需要说明的是,我们并不是直接从网页上保存报告,而是使用在Firefox的临时文件夹中生成的报告。
在Firefox 16.0.1中,点击生成报告的链接后,文件会生成在“C:\Documents and Settings\\Local Settings\Temp\tmp*\cache*”中,文件名是随机的,并且不以“.pdf”结尾。这使得使用类似于之前的方法捕获这个文件变得更加困难——每个浏览器都有不同的tmp***文件夹,里面有很多缓存文件夹,报告是在这些文件夹中以随机文件名生成的。
我能想到的最简单的解决方案是直接保存PDF,但我还没有找到这样的方法。
如果我们想用在FF3.6中使用的方法(在临时文件夹中查找PDF),我在想我们需要做以下几步:
- 找出哪个tmp***文件夹属于这个特定的浏览器实例(我们可以通过检查浏览器实例化前后的tmp***文件夹来做到这一点)
- 在该浏览器的缓存中查找在PDF报告生成后立即生成的文件(我们可以通过比较时间戳来实现)
- 如果缓存中生成了多个文件,我们可以根据文件大小进行排序,选择最大的文件,因为PDF几乎肯定是最大的临时文件(虽然这看起来不太可靠,需要在实际中测试)。
我对这个方法不是很有信心,想知道有没有更好的方式来捕获PDF文件。有没有人能建议一个更好的方法?
注意:实际抓取PDF文件的功能仍然正常。
1 个回答
我们最终是通过在测试之前清除Firefox的临时互联网文件,然后在生成报告后查找最近创建的文件来完成这个任务的。