You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cypress如何关闭打印弹窗及获取打印窗口取消按钮定位器

你无法获取打印窗口取消按钮的定位器:你看到的两个打印窗口样式不同是因为手动触发是在普通浏览器环境,Cypress运行时是在测试框架的专属运行环境(内嵌iframe或Electron容器),但两类窗口都是浏览器原生UI,不属于被测页面的DOM树,Cypress只能操作页面内的DOM元素,无法定位原生UI组件。

你当前使用stub的思路是完全正确的,不需要操作真实打印窗口:

  • 给window.print挂载stub之后,原浏览器打印方法会被替换,点击打印按钮后不会真的弹出打印窗口,自然也不需要手动点击取消按钮。
  • 你代码里标注HOW DO I GET THE LOCATOR的位置,实际需要填写的是你被测页面上触发打印的业务按钮的定位器,不是打印窗口内的按钮定位器。

修正后的可用示例代码如下:

cy.window().then(win => {
  // 先挂载stub替换原生print方法
  const printStub = cy.stub(win, 'print')
  // 点击你页面上的打印按钮,替换为实际的按钮定位器即可
  cy.get('.your-print-button-selector').click().then(() => {
    // 验证print方法被调用,即可证明打印触发逻辑符合预期
    expect(printStub).to.be.called
  })
})

如果你的业务需要模拟用户点击取消后的后续逻辑,可通过stub的自定义实现手动触发对应事件:

cy.window().then(win => {
  const printStub = cy.stub(win, 'print').callsFake(() => {
    // 模拟用户取消打印后触发afterprint事件
    win.dispatchEvent(new Event('afterprint'))
  })
  cy.get('.your-print-button-selector').click()
  expect(printStub).to.be.called
  // 此处可继续验证afterprint触发后的业务逻辑
})

内容的提问来源于stack exchange,提问作者bucky barns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:18:05