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

