Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Chrome中运行时,如何使用Cypress测试文件下载_Javascript_Google Chrome_Testing_Download_Cypress - Fatal编程技术网

Javascript 在Chrome中运行时,如何使用Cypress测试文件下载

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)

我有以下测试需要验证点击链接是否下载PDF。这一点尤其重要,因为我们使用的是盖茨比,盖茨比反过来又使用了Reach路由器的链接组件,相对来说,很容易错误地进行配置,以便路由器接管链接并导航到404页面,而不是启动下载

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谢谢。我没有考虑过检查文件,但这依赖于使用固定时间的等待,根据我的经验,这是一种不可靠的测试方法。