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

