如何在Cypress中为被测应用设置启动时可用的window.Cypress变量?
在Cypress中向被测应用预传window变量(无需修改URL)
可以实现,核心是利用Cypress的cy.visit钩子在页面加载前修改window对象,让应用启动时就能读取到变量。
实现步骤
1. Cypress测试端设置变量
你可以通过cy.visit的onBeforeLoad钩子(页面资源加载前触发)直接修改window对象,也可以封装成自定义命令简化调用。
方式一:封装自定义命令(推荐)
在cypress/support/commands.js中添加自定义命令:
Cypress.Commands.add('setAppWindow', (key, value) => { cy.visit('/', { onBeforeLoad: (win) => { // 确保Cypress对象存在,避免应用报错 win.Cypress = win.Cypress || {}; // 注入自定义变量 win.Cypress[key] = value; } }); });
然后在测试用例中直接调用:
cy.setAppWindow("mySpecialFlag", true);
方式二:直接在visit中设置
如果只是单次使用,也可以直接写在测试代码里:
cy.visit('/', { onBeforeLoad: (win) => { win.Cypress = win.Cypress || {}; win.Cypress.mySpecialFlag = true; } });
2. 被测应用端读取变量
修正原代码的语法错误后,应用启动时即可读取变量:
// 应用初始化逻辑中 if (window.Cypress?.mySpecialFlag) { // 执行特殊逻辑 console.log('触发Cypress测试专属逻辑'); }
关键说明
onBeforeLoad钩子在页面DOM和脚本加载前执行,此时修改window对象,应用初始化时就能获取到变量,完全不需要修改URL参数。- 使用
window.Cypress?.mySpecialFlag的可选链语法,避免应用在非Cypress环境下因window.Cypress不存在而报错。 - 如果是单页应用跳转路由,变量会保留在window中;若页面刷新,需要重新通过
onBeforeLoad设置。
内容的提问来源于stack exchange,提问作者ic3
相关产品推荐
相关产品推荐

