Cypress谷歌认证报错‘此浏览器或应用可能不安全’问题求助
解决Cypress谷歌登录时「This browser or app may not be secure」提示问题
在使用Cypress执行谷歌登录自动化测试时,输入登录邮箱后弹出「This browser or app may not be secure」提示框,且已尝试禁用WebChromeSecurity、更换无第三方Cookie拦截的Chrome配置文件仍无法解决,可尝试以下方案:
1. 配置Chrome启动参数,模拟真实浏览器环境
谷歌的安全检测会识别自动化工具的特征,通过添加Chrome启动参数可以伪装成普通浏览器:
在cypress.config.js(或cypress.config.ts)中添加以下配置:
const { defineConfig } = require("cypress"); module.exports = defineConfig({ e2e: { setupNodeEvents(on, config) { on('before:browser:launch', (browser = {}, launchOptions) => { if (browser.family === 'chromium' && browser.name !== 'electron') { // 禁用自动化检测特征 launchOptions.args.push('--disable-blink-features=AutomationControlled'); // 设置真实的用户代理 launchOptions.args.push('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'); // 禁用密码保存提示 launchOptions.args.push('--disable-save-password-bubble'); return launchOptions; } return launchOptions; }); }, // 确保已禁用Web安全 chromeWebSecurity: false, }, });
2. 使用谷歌应用专用密码(适用于开启两步验证的账号)
如果测试账号开启了两步验证,直接使用账号密码会触发安全提示。需为该账号生成应用专用密码,替换测试代码中的password变量:
- 登录谷歌账号的「安全性」设置页面
- 找到「应用专用密码」选项(需先开启2FA)
- 生成一个适用于「其他(自定义名称)」的密码,将其填入测试代码
3. 优化测试代码的交互逻辑
避免硬编码等待时间,改用基于元素状态的断言,同时增加输入延迟更贴近真实用户行为:
修改后的测试代码:
it('Login via Google', function() { cy.visit(website + 'login') cy.get('a[href="/connect/google"]').click() cy.origin('https://accounts.google.com/', { args: [email, password] }, ([email, password]) => { Cypress.on('uncaught:exception', (err) => { if (err.message.includes('RPC executor service threw an error') || err.message.includes('ResizeObserver loop completed with undelivered notifications')) { return false } return true }) function emailType() { cy.get('input[type="email"]') .should('be.visible') .type(email, { delay: 150 }) // 增加输入延迟 cy.get('button:contains("Next")', { timeout: 10000 }) .should('be.visible') .click() // 等待密码输入框出现,替代硬编码wait cy.get('input[type="password"]', { timeout: 15000 }).should('exist') passwordType() } function passwordType() { cy.get('input[type="password"]', { timeout: 30000 }) .should('be.visible') .type(password, { delay: 150 }) cy.get('button:contains("Next")') .should('be.visible') .click() } emailType() }) cy.url().should('include', website) })
额外提示
- 确保测试使用的谷歌账号未被标记为「可疑登录」,可先手动登录一次验证账号状态
- 避免在短时间内频繁执行自动化登录,触发谷歌的频率限制
内容的提问来源于stack exchange,提问作者James.Alocard
相关产品推荐
相关产品推荐

