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
相关产品推荐
相关产品推荐

