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

Cypress 10使用cy.session()时cy.visit相对路径报404问题

问题根因

cy.session() 本身只负责缓存登录态相关的cookie、localStorage、sessionStorage身份凭证,不会帮你维护全局访问根地址,也不会保留登录完成后的页面上下文。
你现在相对路径访问报404,核心是两个点:

  • 你没有在Cypress配置文件中声明全局baseUrl字段,而是自己定义了host变量存根地址。Cypress解析相对路径的唯一规则是拼接全局配置里的baseUrl,找不到这个配置的时候,相对路径无法被正确转成完整地址,自然返回404。
  • 官方文档里提到的「直接用相对路径cy.visit」的写法,前置条件就是已经正确配置了全局baseUrl,和是否使用cy.session()没有直接关系,很多人看文档时会漏掉这个前提。

额外说明:cy.session()执行完成后,测试运行器的当前页面会重置为空白的about:blank,并不会停留在你登录流程走完的页面,所以每个测试用例里都必须主动调用cy.visit()跳转到目标页,这是测试隔离的设计逻辑,不是bug。

修复方法
  • 打开Cypress 10对应的配置文件cypress.config.js(或ts版本),在e2e配置项里添加固定的baseUrl,替换你之前自定义的host变量:
const { defineConfig } = require("cypress");

module.exports = defineConfig({
  e2e: {
    baseUrl: "https://你的站点根地址", // 填你之前存在host变量里的地址
    // 其余原有配置保持不变
  },
});
  • 把代码里所有手动拼接host的visit写法换成相对路径即可,不需要再手动拼接地址:
before("Open Website and Login", () => {
  cy.session([username, password], () => {
    cy.visit('/')
    lgn.fillSignUpEmail(username);
    lgn.fillSignUpPassword(password);
    lgn.clickSubmitButton();
    // 建议替换硬编码等待,改成等待登录成功的标识元素出现,比如登录后才展示的用户菜单,用例稳定性会高很多
  })
})

// ******* Dashboard Page ***********
it("Check Dashboard Page", () => {
  cy.visit('/admin');
  cy.title().should('eq', 'Dashboard | Menu Admin');
  dbrd.clickDashboard();
})
  • 如果你暂时不想修改全局配置,继续使用自定义的host变量,那就必须保持你现在手动拼接完整地址的写法,这种场景下相对路径是无法被正确解析的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:06:17