Javascript 在Chrome中运行时,如何使用Cypress测试文件下载
我有以下测试需要验证点击链接是否下载PDF。这一点尤其重要,因为我们使用的是盖茨比,盖茨比反过来又使用了Reach路由器的链接组件,相对来说,很容易错误地进行配置,以便路由器接管链接并导航到404页面,而不是启动下载Javascript 在Chrome中运行时,如何使用Cypress测试文件下载,javascript,google-chrome,testing,download,cypress,Javascript,Google Chrome,Testing,Download,Cypress,我有以下测试需要验证点击链接是否下载PDF。这一点尤其重要,因为我们使用的是盖茨比,盖茨比反过来又使用了Reach路由器的链接组件,相对来说,很容易错误地进行配置,以便路由器接管链接并导航到404页面,而不是启动下载 describe.skip(`Downloads`, () => { it(`Downloads the expected file`, () => { cy.visit(pagePath) cy.getByHref(downloadPath)
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中运行测试的cy run
运行此测试时,由于Chrome的下载对话框,测试挂起
如何防止测试挂起?
请注意,下载路径解析为静态目录中的pdf,例如/static/example.pdf
。没有服务器组件
还要注意的是,这是一个不同的问题:事实上,我搜索了很多关于它的信息,发现 在安装了浏览器扩展的情况下,无法在无头模式下运行测试,因为无头模式下唯一受支持的浏览器是Electron,Electron不支持文档中所述的扩展 目前还不支持运行headless Chrome。见本期:#488 这是一个不太老的问题,它在2019年2月被标记
通过禁用询问文件保存位置的对话框,可以防止测试挂起。一旦你这样做了,chrome会很高兴地下载你的文件,Cypress可以继续运行你的测试 在chrome中,进入设置->高级->下载->在下载前询问每个文件的保存位置,并确保其处于关闭状态
Apolo提供的链接中有更复杂的解决方案,但这是一个快速的解决方法。有很多方法可以测试这一点,所以这取决于具体情况。您需要了解导致下载的实际原因,然后想办法测试该机制 如果您的服务器发送特定的处置头,导致浏览器提示下载,则您可以找出此请求的URL,并使用cy.request()直接命中该URL。然后可以测试服务器是否发送了正确的响应头 如果它是启动下载的锚,您可以测试它是否具有正确的href属性。只要您能够验证单击按钮是否会发出正确的HTTP请求,就没有其他需要测试的内容
最后,您需要了解自己的实现并进行足够的测试,以涵盖所有内容。谢谢您的回复,但我没有提到浏览器扩展-这只是当链接设置了
下载属性时Chrome的默认下载行为。您检查过这个问题吗?我想这也正是你所描述的,这项工作正在进行中:也许这可以帮助@VivekN谢谢。我没有考虑过检查文件,但这依赖于使用固定时间的等待,根据我的经验,这是一种不可靠的测试方法。