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

Cypress点击a标签如何让页面在当前标签打开而非新标签?

问题原因

  • 你代码的第一个错误是选择器写错:cy.get("className")是匹配标签名为className的元素,要匹配类名需要加.前缀,即cy.get(".className"),否则根本找不到目标a标签。
  • 第二个核心错误:控制a标签是否在新标签页打开的属性是target="_blank",不是href。你删除href不仅无法阻止新开标签页,还会直接破坏a标签的原生跳转逻辑。

正确实现方案

方案1:删除target属性,让跳转在当前页生效

如果需要触发原生跳转逻辑,直接移除target属性即可:

// 注意类选择器要加.前缀
cy.get(".className").first().invoke("removeAttr", "target").click();

方案2:直接读取href跳转,不点击a标签

如果不需要触发a标签的点击事件,仅验证跳转地址正确,可以直接获取href属性后调用cy.visit:

cy.get(".className").first().then($a => {
  const targetHref = $a.attr('href')
  cy.visit(targetHref)
})

方案3:拦截JS触发的新开窗口

如果上述方案无效,说明a标签的点击事件是通过JS调用window.open强制新开窗口,可以用stub拦截该方法:

cy.window().then(win => {
  // 拦截window.open调用,不会实际弹出新标签页
  cy.stub(win, 'open').as('openWindow')
})
cy.get(".className").first().click()
// 可额外验证跳转地址是否符合预期
cy.get('@openWindow').should('be.calledWith', '你预期的跳转地址')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 19:15:10