Cypress中cy.exec()调用ssh命令始终触发超时错误该如何解决
你遇到的超时本质是cy.exec()会等待执行的命令完全退出、返回退出码后才会结束,而你当前调用的ssh命令会持续保持会话连接,等待远程的file.exe进程结束后才会退出,只要file.exe还在运行,ssh命令就不会返回,自然就触发了cy.exec()的超时阈值。
解决方案
- 调整ssh命令参数,让其执行完启动逻辑后立刻断开连接,不等待远程进程结束
需新增ssh参数-fnT -o StrictHostKeyChecking=no,同时根据远程操作系统的类型,给启动命令增加后台运行标识:- 远程为Windows系统时,使用
cmd /c start /b启动程序,避免命令行阻塞 - 远程为Linux/macOS系统时,使用
nohup 命令路径 &启动程序
- 远程为Windows系统时,使用
- 按需调整
cy.exec()的超时配置,默认超时为60000毫秒(60秒),如果你的命令确实需要更长执行时间,可以手动指定timeout参数,设为0可禁用超时逻辑 - 可选配置
failOnNonZeroExit: false,如果远程命令的退出码非0但你确认属于正常情况,可以加这个参数避免Cypress将其判定为执行失败
代码示例(远程为Windows场景)
cy.exec('ssh -fnT -o StrictHostKeyChecking=no username@111.111.1.1 "cmd /c start /b \\file.exe"', { timeout: 10000, // 可根据实际情况调整超时时间,单位为毫秒 failOnNonZeroExit: false // 无需可删除 })
你可以先在本地系统的终端直接执行整条ssh命令,确认命令执行后会立刻返回终端输入提示符,不会卡住,再放到Cypress中运行,就能避免超时问题。
内容的提问来源于stack exchange,提问作者F.C.
相关产品推荐
相关产品推荐

