如何检测无响应服务器链接并继续校验其他链接?
问题:处理cy.request()网络错误并继续校验其他链接
请求链接 http://www.alitots.co.uk/ 时失败,报错信息如下:
请求无响应
我们尝试向该URL发送HTTP请求,但请求未得到响应。
网络层错误:Error: getaddrinfo ENOTFOUND www.alitots.co.uk
发送的请求信息:
方法:GET
URL:http://www.alitots.co.uk/
如何处理该错误并继续校验其他链接?以下是完整代码:
cy.get("a:not([href*='mailto:'])").each(($link, index) => { const href = $link.prop('href') cy.log(href) if (href) { cy.request({ url: href, failOnStatusCode: false, followRedirect: false, failOnNetworkError: false }) .then((response) => { if(response.status >= 400 || response.status == '(failed)') { cy.log(` *** link ${index +1} is Broken Link ***`) //brokenLinks++ } else { cy.log(` *** link ${index+1} is Active Link ***`) } }) } })
解决方案
当前你设置了 failOnNetworkError: false,但cy.request()的网络错误会进入.catch()回调而非.then(),因此需要添加错误捕获逻辑,确保单个链接请求失败时不中断整个循环,继续处理下一个链接。
修改后的代码如下:
cy.get("a:not([href*='mailto:'])").each(($link, index) => { const href = $link.prop('href') cy.log(href) if (href) { cy.request({ url: href, failOnStatusCode: false, followRedirect: false, failOnNetworkError: false }) .then((response) => { if(response.status >= 400 || response.status == '(failed)') { cy.log(` *** 链接 ${index +1} 是失效链接 ***`) // brokenLinks++ } else { cy.log(` *** 链接 ${index+1} 是有效链接 ***`) } }) .catch((error) => { // 捕获DNS解析失败、无响应等网络错误 cy.log(` *** 链接 ${index +1} 请求失败:${error.message} ***`) // 可根据需要统计失效链接 // brokenLinks++ }) } })
关键修改点:
- 添加
.catch()回调,专门处理cy.request()抛出的网络错误(如DNS解析失败、连接超时等) - 在错误回调中记录错误信息,同时不中断
each()循环,确保后续链接继续被校验 - 可选:将日志提示改为中文,更直观
这样即使某个链接出现ENOTFOUND这类网络错误,脚本也会捕获并记录,自动继续处理下一个链接,不会终止整个校验流程。
内容的提问来源于stack exchange,提问作者amit
相关产品推荐
相关产品推荐

