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

Cypress 13.5.0中,href含JS函数时如何模拟新标签页跳转?

解决Cypress中点击JavaScript函数链接的问题

针对你遇到的链接href为JavaScript函数(而非直接URL)的场景,提供以下几种可行方案:

方案1:直接调用页面的JavaScript函数

既然点击链接本质是调用launchCourse('parameter')函数,可直接通过Cypress执行该函数,跳过点击步骤:

cy.window().invoke('launchCourse', 'parameter');

注意:需确保launchCourse函数挂载在全局window对象上,否则无法通过此方式调用。

方案2:拦截新窗口跳转,强制在当前页打开

如果launchCourse函数内部通过window.open打开新标签页,可提前拦截window.open方法,让跳转在当前窗口执行:

// 覆盖window.open,将新窗口跳转转为当前页跳转
cy.window().then(win => {
  cy.stub(win, 'open').callsFake((targetUrl) => {
    win.location.href = targetUrl;
    return { close: () => {} }; // 模拟window.open返回的窗口对象
  });
});

// 点击链接,此时会在当前页执行跳转
cy.get('a.className').click();

// 断言跳转后的URL或页面元素
cy.url().should('include', '/course-detail');
cy.get('.course-content').should('be.visible');

方案3:直接触发链接点击事件并验证结果

如果点击链接除了调用函数还有其他关联逻辑(比如触发额外事件监听),可直接点击链接,然后验证页面状态:

cy.get('a.className').click();

// 根据实际跳转后的页面特征添加断言
cy.get('.course-page-header').should('exist');
cy.url().should('match', /\/courses\/\d+/);

额外提示

  • 如果能通过开发者工具分析launchCourse函数的逻辑,获取最终跳转的目标URL,也可直接使用cy.visit(targetUrl)完成测试,这是最直接的方式。
  • 若函数包含异步操作,可添加cy.wait()或基于元素可见性的断言,确保测试等待页面加载完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:34:51