Cypress运行多个测试时如何避免浏览器自动关闭?
Cypress命令行运行多spec文件浏览器不提前关闭的解决方法
Cypress 的
cypress run模式和cypress openGUI模式的默认行为存在差异:run模式默认开启测试隔离,每跑完一个独立spec文件就会销毁当前浏览器上下文、清空页面状态,而GUI模式默认复用同一个浏览器会话跑所有选中的spec,这就是两种模式下执行结果不一致的原因。
可选解决方案
方案1:合并关联用例到同一spec文件
将填写表单、上传图片、校验结果这三个强关联的测试用例放在同一个spec文件中,作为同一个测试套件下的不同测试块,run模式下单个spec内的所有用例默认复用同一个浏览器会话,页面状态会全程保留,不需要重复调用打开url的逻辑。
方案2:关闭测试隔离配置
在cypress.config.js(或ts配置文件)中关闭测试隔离,强制跨spec文件复用同一个浏览器上下文:
const { defineConfig } = require('cypress') module.exports = defineConfig({ e2e: { // 关闭测试隔离,跨spec复用浏览器会话和页面状态 testIsolation: false, // 其余原有配置保持不变 } })
注意:关闭测试隔离后前一个spec的Cookie、本地存储、页面状态都会保留到后续spec,仅建议关联度高的测试套件使用该配置,避免独立用例之间互相干扰
方案3:全局封装页面跳转逻辑
如果不想修改默认隔离配置,可以把打开目标表单的逻辑封装为公共命令,在每个spec执行前自动调用,无需每个用例重复写跳转逻辑:
- 在
cypress/support/commands.js中添加自定义命令:
Cypress.Commands.add('openTestForm', () => { cy.visit('https://demoqa.com/automation-practice-form') })
- 在每个spec文件开头添加全局前置钩子:
before(() => { cy.openTestForm() })
方案4:执行命令时指定全量spec
运行命令时明确指定所有要执行的spec文件路径,配合关闭测试隔离的配置,会复用同一个浏览器跑完所有指定spec:npx cypress run --headed --browser chrome --spec "cypress/e2e/填写表单.cy.js,cypress/e2e/上传图片.cy.js,cypress/e2e/校验结果.cy.js"
内容的提问来源于stack exchange,提问作者user3850734
相关产品推荐
相关产品推荐

