如何在Cypress中使用cy.request测试无效URL并处理网络错误
处理Cypress cy.request的“Network error”问题
错误原因分析
你遇到的“Error in loading page , Network error”通常由以下几种情况导致:
- 目标域名
https://tilesea.c/无效、无法解析,或测试环境无法访问 - Cypress的网络安全配置拦截了请求
- 本地防火墙/代理阻止了网络连接
- 请求未处理失败场景,直接抛出错误中断测试
具体解决步骤
1. 验证域名可用性
先在终端或浏览器中手动测试域名是否可访问:
curl https://tilesea.c/
如果返回无法解析或连接失败,检查域名是否拼写错误(比如是否应为tilesea.com);如果是内部私有域名,确保测试环境已接入对应网络(如VPN)。
2. 调整Cypress网络配置
在cypress.config.js中添加或修改以下配置:
module.exports = defineConfig({ e2e: { // 避免Cypress修改页面代码引发的网络问题 modifyObstructiveCode: false, // 处理跨域或自签证书问题(按需开启) chromeWebSecurity: false, experimentalSessionAndOrigin: true }, });
chromeWebSecurity: false会关闭Chrome的跨域安全策略,仅限测试环境使用experimentalSessionAndOrigin用于处理复杂的跨域场景
3. 修改请求代码,捕获错误场景
原代码未处理请求失败的情况,cy.request默认会在网络错误时抛出异常中断测试。可以通过配置参数捕获错误:
it('status', () => { cy.request({ url: 'https://tilesea.c/', failOnStatusCode: false, // 非2xx状态码不抛出错误 failOnNetworkError: false // 网络错误不直接中断测试 }).then((resp) => { if (resp.isNetworkError || resp.status === 0) { cy.log('Failed to load URL'); cy.writeFile('logs/failed.log', 'failed'); } else { // 按需验证正常状态码,比如200 expect(resp.status).to.eq(200); } }) })
4. 检查网络环境
如果测试机器处于公司防火墙或代理网络下,尝试切换到不受限制的网络(如手机热点),或联系IT部门开放目标域名的访问权限。
内容的提问来源于stack exchange,提问作者Yashpal Rathore
相关产品推荐
相关产品推荐

