Cypress外部认证后无法跳转至登录后页面问题求助
解决Cypress OAuth2认证测试重复跳转问题
问题描述
提交登录信息后,用户应跳转至外部认证服务,完成认证后自动跳转至登录后页面。但当前Cypress测试在正确进入认证服务并完成操作后,会再次跳转回认证服务,无法进入目标页面。系统采用OAuth2认证Cookie机制,怀疑测试流程中Cookie处理不当导致问题。
当前测试代码:
it('logs in', () => { cy.visit(Cypress.env('appUrl')); cy.get(locators.Button).click(); cy.origin('https://auth-service.ee', () => { cy.get('[data-tab="mobile-id"]').eq(1).click(); cy.get("#mid-personal-code").clear().type("60001017771"); cy.get("#mid-phone-number").clear().type("59700366{enter}"); }) cy.visit("https://loggedinpage.com/organizations/2/details", {timeout: 5000}); cy.location('pathname').should('eq', 'details'); cy.contains('Hello, World!'); cy.pause() });
问题原因
核心问题是手动调用cy.visit()跳转目标页面的操作,跳过了OAuth2认证后的Cookie同步流程。外部认证服务完成验证后,会自动将认证Cookie写入主应用域,并发起重定向返回目标页面。此时手动cy.visit()相当于直接访问页面,Cookie尚未完成跨域同步,系统判定用户未认证,因此再次跳转回认证服务。
解决方案
- 移除手动
cy.visit()调用:依赖认证服务完成后的自动重定向,不要手动干预页面跳转。 - 调整断言逻辑,等待自动跳转:增加超时时间,确保Cypress等待页面完成重定向后再执行断言。
- 保持
cy.origin()的跨域处理:cy.origin()会自动处理跨域Cookie的同步,无需额外操作。
修改后的测试代码:
it('logs in', () => { cy.visit(Cypress.env('appUrl')); cy.get(locators.Button).click(); cy.origin('https://auth-service.ee', () => { cy.get('[data-tab="mobile-id"]').eq(1).click(); cy.get("#mid-personal-code").clear().type("60001017771"); cy.get("#mid-phone-number").clear().type("59700366{enter}"); }); // 等待应用自动跳转至目标页面,延长超时时间确保跳转完成 cy.location('pathname', { timeout: 10000 }).should('eq', '/organizations/2/details'); cy.contains('Hello, World!'); cy.pause(); });
内容的提问来源于stack exchange,提问作者Triinu86
相关产品推荐
相关产品推荐

