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

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尚未完成跨域同步,系统判定用户未认证,因此再次跳转回认证服务。

解决方案

  1. 移除手动cy.visit()调用:依赖认证服务完成后的自动重定向,不要手动干预页面跳转。
  2. 调整断言逻辑,等待自动跳转:增加超时时间,确保Cypress等待页面完成重定向后再执行断言。
  3. 保持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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:23:17