Cypress报错cy.saveLocalStorage is not a function及凭据存储问题咨询
问题1:cy.saveLocalStorage is not a function报错解决方案
- 核心原因是你写的自定义命令没有被全局加载:Cypress 不会自动读取
cypress/support/commands.js里的自定义命令,需要在对应全局入口文件手动导入。如果是Cypress 10及以上版本,在cypress/support/e2e.js中添加import './commands';如果是9及以下旧版本,在cypress/support/index.js中添加该行即可。 - 次要排查点:检查
commands.js文件名大小写是否和导入路径一致,拼写错误也会导致自定义命令注册失败。 - 额外注意:你当前两个测试用例都加了
it.only标记,实际运行时只会执行最后一个标记了only的用例,全量测试时需要删除only标记,否则第一个登录用例不会执行,href变量也无法正常获取值。
问题2:测试凭据存储方案
- 非敏感配置(比如测试环境URL、公共配置项)直接写在
cypress.config.js的env字段中即可,示例:
// cypress.config.js 示例 const { defineConfig } = require("cypress"); module.exports = defineConfig({ e2e: { env: { testBaseUrl: "你的测试环境地址" } } })
使用时直接调用Cypress.env('testBaseUrl')即可读取。
- 敏感凭据(比如账号密码、接口密钥)不要写在业务代码里提交到仓库,推荐两种存储方式:
- 本地开发用
cypress.env.json文件存储,把该文件加入.gitignore避免提交到代码仓库,文件格式示例:
Cypress会自动读取该文件的字段挂载到{ "testAccount": "测试账号", "testPassword": "测试密码" }Cypress.env下,直接调用即可读取。
2. CI/CD环境运行测试时,把敏感凭据配置在CI平台的环境变量中,所有以CYPRESS_为前缀的环境变量都会被Cypress自动识别,比如你在CI中配置环境变量CYPRESS_TEST_PASSWORD=xxx,代码中调用Cypress.env('TEST_PASSWORD')就能正常读取。 - 本地开发用
可选优化建议
你目前手动维护localStorage存储、跨用例传href变量的方案稳定性较低,更推荐用Cypress内置的cy.session()API封装登录逻辑,自动缓存登录状态,不需要手动操作localStorage和cookie,代码更简洁,适配性也更高。
内容的提问来源于stack exchange,提问作者Luna
相关产品推荐
相关产品推荐

