如何在Behat中测试文件下载

vij*_*jar 6 bdd behat mink

在这个应用程序上开发了这个新的Export功能,我正在尝试使用Behat/Mink进行测试.这里的问题是,当我点击导出链接时,页面上的数据会被导出为CSV并保存在/ Downloads下,但我在页面上看不到任何响应代码或任何内容.

有没有办法导出CSV并导航到/ Downloads文件夹来验证文件?

Ian*_*hek 3

假设您正在使用 Selenium 驱动程序,您可以“单击”链接并$this->getSession()->wait(30)直到下载完成,然后检查下载文件夹中的文件。

\n\n

这将是最简单的解决方案。或者,您可以使用代理,例如BrowserMob)来监视所有请求,然后验证响应代码。但仅就这一点而言,这将是一条非常痛苦的道路。

\n\n

检查文件是否已下载的最简单方法是使用基本断言定义另一个步骤。

\n\n
/**\n * @Then /^the file ".+" should be downloaded$/\n */\npublic function assertFileDownloaded($filename) \n{\n    if (!file_exists(\'/download/dir/\' . $filename)) {\n        throw new Exception();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

当您下载同名文件并且浏览器以不同名称保存该文件时,这可能会出现问题。作为解决方案,您可以添加@BeforeScenario挂钩来清除已知文件列表。

\n\n

另一个问题是下载目录本身 \xe2\x80\x93 对于其他用户/机器来说可能会有所不同。要解决此问题,您可以将下载目录behat.yml作为参数传递给上下文构造函数,请阅读文档

\n\n

但最好的方法是将配置传递给 Selenium 并指定下载目录,以确保它始终清晰,并且您确切知道在哪里搜索。我不确定如何做到这一点,但通过快速谷歌搜索来看,这似乎是可能的。

\n