我进行了以下测试,需要验证单击链接是否可以下载PDF。这一点特别重要,因为我们正在使用Gatsby,而Gatsby又使用了到达路由器的链接组件,而且配置错误相对容易,以便路由器接管链接并导航到404页面而不是启动下载。
template <typename Policy,
typename = typename std::enable_if<std::is_base_of<BasePolicy, Policy>::value>::type >
struct Foo;
template <typename Policy>
struct Foo<Policy> { // <Policy> added!
Foo();
};
template <typename Policy>
Foo<Policy>::Foo() {
}
虽然这不是完美的方法,但它至少会检查是否由于单击链接而没有导航。
问题在于,当使用describe.skip(`Downloads`, () => {
it(`Downloads the expected file`, () => {
cy.visit(pagePath)
cy.getByHref(downloadPath)
.should(`have.attr`, `target`, `_blank`)
.click()
cy.location(`pathname`).should(`eq`, pagePath)
})
})
(在Chrome中运行测试)运行此测试时,由于Chrome的下载对话框,该测试将挂起。
如何防止测试挂起?
请注意,downloadPath解析为静态目录中的pdf,例如cy run
。没有服务器组件。
还请注意,这是另一个问题:How can I use Cypress.io to assert that a file download has been initiated without actually downloading?
答案 0 :(得分:0)
有很多测试方法,因此要视情况而定。您需要了解真正导致下载的原因,然后考虑一种测试该机制的方法。
如果您的服务器发送了导致浏览器提示下载的特定处置标头,则可以找出此请求的URL,然后使用cy.request()直接命中该URL。然后,您可以测试服务器是否发送了正确的响应头。
如果它是启动下载的锚点,则可以测试它是否具有正确的href属性。只要您可以确认单击该按钮将发出正确的HTTP请求,就没有其他要测试的内容了。
最后,取决于您自己的实现方式并进行足够的测试以涵盖所有内容。
答案 1 :(得分:-1)
实际上,我对此进行了很多搜索,发现 安装了浏览器扩展的无头模式无法运行测试,因为在无头模式下唯一受支持的浏览器是Electron,而Electron不支持文档中所述的扩展。
尚不支持运行无头Chrome。看到这个问题:#488 https://github.com/cypress-io/cypress/issues/488
这是一个不那么古老的问题,它已在2019年2月被标记
https://github.com/cypress-io/cypress/issues/832 https://github.com/cypress-io/cypress/issues/1235
答案 2 :(得分:-1)
您可以通过禁用询问文件保存位置的对话框来防止测试挂起。完成该操作后,Chrome会愉快地下载文件,赛普拉斯可以继续运行测试。
在chrome中,转到设置->高级->下载->在下载前询问每个文件的保存位置,并确保文件已关闭。
Apolo提供的链接中有更复杂的解决方案,但这是一个快速的解决方法。