Cypress登录测试成功却因gtag未定义报错求助
解决Cypress登录测试中gtag未定义的未捕获异常问题
方案1:在测试中忽略特定未捕获异常
在测试代码里添加事件监听,过滤掉gtag is not defined的异常,让测试继续执行:
describe('Login user', () => { beforeEach(() => { cy.viewport(1392, 768) // 添加异常监听,过滤gtag未定义错误 cy.on('uncaught:exception', (err) => { if (err.message.includes('gtag is not defined')) { return false } // 其他异常正常抛出 return true }) cy.visit('thiswebcom') }) it('Login as user', () => { cy.get('a[href*="/login"]').first().click() cy.get('#buttonLoginTrack').should('have.text', '\n Login\n ') const userName = 'mymail@gmail.com' const password = 'mypassword' cy.get('#email').type(`${userName}`) cy.get('#password').type(`${password}`).type('{enter}') }) })
方案2:配置blockHosts阻止gtag相关请求
修改cypress.config.js,添加blockHosts配置,从网络层面阻止谷歌分析相关域名的请求,避免加载gtag代码:
module.exports = { e2e: { blockHosts: [ '*.googletagmanager.com', '*.google-analytics.com', '*.gtagjs.com' ], setupNodeEvents(on, config) { // implement node event listeners here }, }, };
方案3:全局配置忽略异常(所有测试生效)
如果多个测试都遇到同类问题,可在cypress/support/e2e.js中添加全局监听:
// cypress/support/e2e.js Cypress.on('uncaught:exception', (err) => { if (err.message.includes('gtag is not defined')) { return false } return true })
说明
- 方案1适合单个测试文件的临时处理
- 方案2从根源阻止gtag资源加载,更彻底
- 方案3适合全局统一处理所有测试中的同类异常
内容的提问来源于stack exchange,提问作者f for respekc
相关产品推荐
相关产品推荐

