Cypress Test Runner跳转新URL后持续卡住无法执行问题求助
Cypress登录跳转后Test Runner卡住解决方案
问题根因
登录流程涉及Amazon Cognito域名到业务域名的跨域跳转,Cypress默认安全策略会拦截跳转后的页面检测,加上代码中的嵌套异步逻辑异常,共同导致Test Runner停留在New URL状态无法继续执行。
解决方案
1. 调整Cypress跨域配置
在配置文件中添加对应配置,放开跨域限制:
- Cypress 10及以上版本(配置文件为
cypress.config.js):
const { defineConfig } = require("cypress"); module.exports = defineConfig({ e2e: { // 关闭Chrome安全策略,允许跨域跳转 chromeWebSecurity: false, // Cypress 12+版本可加以下配置,原生支持跨域场景处理 experimentalSessionAndOrigin: true, // 其余原有配置保持不变 }, });
- Cypress 10以下版本(配置文件为
cypress.json):
{ "chromeWebSecurity": false }
2. 优化测试代码逻辑
移除不合理的嵌套异步结构、硬等待和无意义重载操作,适配Cypress命令自动排队执行的特性,修改后代码如下:
describe('Login', function(){ it('Login Successfully', function(){ cy.visit('https://vep-staging.auth.us-east-1.amazoncognito.com/login?client_id=2bu8f0pfkqaasa8jjatgd8d40g&redirect_uri=https%3A%2F%2Fapp.staging.showcare.io%2Fproduct-showcase&response_type=code&scope=openid&state=254805b5dfbc4f68acbdb28add5536a4&code_challenge=NvfTn44X98LyNBBCJoAdDPHADnHLbiuy0gj2Xcg6Mow&code_challenge_method=S256&response_mode=query') cy.get('.modal-dialog') cy.get('#signInFormUsername', { timeout: 10000 }).eq(0).type('email_address', { force: true }) cy.get('#signInFormPassword').eq(0).type('password', { force: true }) // 点击登录按钮,Cypress会自动等待跳转流程触发 cy.get('[name="signInSubmitButton"]').eq(0).click({ force: true }) // 断言跳转后路径,增加超时时间适配跳转耗时 cy.location('pathname', {timeout: 10000 }).should('eq', '/product-showcase') // 可增加目标页面核心元素可见性断言,确保页面加载完成再操作 // 示例:cy.get('.product-showcase-container', {timeout: 10000}).should('be.visible') cy.get('a').eq(0).trigger('mouseover').click({ force: true }) }) })
优化说明
- 移除click后的嵌套
then结构,避免打断Cypress的命令执行队列异常。 - 去掉无意义的
wait硬等待和reload重载操作,避免干扰页面加载流程被强制中断。 - 给路径断言增加10秒超时时间,避免跳转还未完成就触发断言失败。
内容的提问来源于stack exchange,提问作者Taimoor Pasha
相关产品推荐
相关产品推荐

