Cypress运行报错getaddrinfo ENOTFOUND无法加载目标网站如何解决?
可能的原因
- Cypress运行所在的Node.js环境的DNS配置和手动访问用的浏览器DNS配置不一致。比如浏览器配置了专属代理、VPN或者自定义DNS,而Node.js默认使用系统层面的DNS规则,不会复用浏览器的网络配置。
- 本地hosts文件配置存在权限差异。如果你近期修改过hosts文件添加了站点的解析规则,但是Cypress是用其他用户或者管理员/root权限启动的,会读取不到对应hosts配置。
- Cypress代理配置失效。如果之前配置过Cypress自定义代理,近期代理服务下线或者规则变更,会导致Cypress的网络请求无法正常解析域名。
- 版本升级带来的兼容问题。若你近期升级过Node.js或者Cypress版本,部分新版本的DNS解析逻辑和旧版本存在差异,可能触发解析异常。
- 安全软件拦截。部分防火墙、杀毒软件会对不同应用的网络请求做差异化限制,允许浏览器访问的同时拦截Cypress发起的请求。
排查步骤
- 首先在启动Cypress的同个终端下执行DNS解析验证
运行nslookup mywebsite.com或者ping mywebsite.com,如果无法解析到正确IP,说明是终端环境的DNS配置问题,和Cypress本身无关。 - 检查Cypress代理配置
查看项目中的Cypress配置文件(cypress.config.js或旧版的cypress.json)是否配置了proxy、noProxy字段,同时检查终端环境变量中的HTTP_PROXY、HTTPS_PROXY、NO_PROXY是否存在异常配置。 - 强制配置Cypress hosts规则
可以直接在Cypress配置中添加域名和IP的映射,绕过系统DNS解析,示例配置:
配置完成后重新运行用例验证是否恢复。const { defineConfig } = require('cypress') module.exports = defineConfig({ hosts: { 'mywebsite.com': '站点对应的实际公网/内网IP' } }) - 验证启动权限差异
如果你之前用管理员/root权限启动Cypress,切换为普通用户启动测试,反之也可以尝试,确认不同权限下hosts文件读取是否正常。 - 版本回退验证
如果你近期升级过Node.js或者Cypress版本,回退到之前用例正常运行的对应版本,排查是否是版本兼容问题。 - 安全软件验证
临时关闭本地防火墙、杀毒软件等安全工具,再运行Cypress用例,确认是否是安全工具拦截导致的问题。
内容的提问来源于stack exchange,提问作者Rnj
相关产品推荐
相关产品推荐

