Cypress测试Outlook登录页出现未处理Promise拒绝、跨域问题如何解决
Cypress测试Outlook登录跨域重定向与Promise报错修复
问题现象
编写Outlook登录页自动化测试用例时出现两类异常:
- 登录流程触发跨源重定向
- 控制台抛出
unhandled promise rejection(未处理Promise拒绝)报错
原始问题代码
it('Outlook', ()=> { cy.visit('https://outlook.office.com/mail/') cy.get('#i0116').clear().type('hello@gmail.com') cy.get('#idSIButton9').click() cy.get('#3i0118').clear().type('Password@123') cy.get('#idSIButton9').click() })
已尝试的无效方案
已添加全局uncaught:exception事件监听拦截Promise相关异常,未生效,代码如下:
Cypress.on('uncaught:exception',(err,runnable,Promise)=>{ if(Promise){ return false } })
报错详情参考截图:
根因分析
- 跨域安全限制拦截:Cypress默认启用同源策略限制,Outlook登录流程会从
outlook.office.com跳转到微软账号认证域名login.microsoftonline.com,跨域跳转默认会被Cypress拦截,触发导航类异常。 - 异常监听逻辑错误:原监听代码中参数名与全局
Promise构造函数重名,判断if(Promise)恒为真,且没有针对性拦截登录跳转产生的特定异常,无法覆盖跨域场景下Cypress层面抛出的未处理Promise拒绝。 - 操作时序与选择器错误:点击下一步按钮后未等待密码输入页加载完成就执行DOM操作,且密码框选择器
#3i0118存在笔误(正确选择器为#i0118),元素查找失败会连带触发Promise拒绝。
修复步骤
- 调整Cypress配置
在cypress.config.js中添加以下配置,关闭跨域安全限制、开启跨域会话支持:
const { defineConfig } = require("cypress"); module.exports = defineConfig({ e2e: { setupNodeEvents(on, config) { // 节点事件监听逻辑可在此处扩展 }, chromeWebSecurity: false, // 关闭跨域安全限制 experimentalSessionAndOrigin: true, // 开启跨域会话支持(Cypress10+版本必填) }, });
- 修正全局异常拦截逻辑
将异常监听代码放在cypress/support/e2e.js中全局生效,针对性拦截登录跳转产生的非业务异常:
Cypress.on('uncaught:exception', (err, runnable) => { // 拦截跨域跳转、导航过程中产生的非业务异常 if ( err.message.includes('unhandled promise rejection') || err.message.includes('cross origin') || err.message.includes('Navigation') ) { return false } });
- 修正测试用例逻辑
添加元素可见性等待、修正选择器笔误、给页面访问添加容错配置:
it('Outlook', ()=> { // 配置访问超时与状态码容错,适配跳转过程中的3xx重定向响应 cy.visit('https://outlook.office.com/mail/', { failOnStatusCode: false, timeout: 30000 }) // 等待账号输入框可见后再操作,适配微软页面较慢的加载速度 cy.get('#i0116', {timeout: 15000}).should('be.visible').clear().type('hello@gmail.com') cy.get('#idSIButton9').click() // 等待跳转到密码页、密码输入框可见后再输入 cy.get('#i0118', {timeout: 15000}).should('be.visible').clear().type('Password@123') cy.get('#idSIButton9').click() })
补充说明:测试微软系产品登录流程时,不要使用真实个人/企业账号频繁触发自动化登录,容易触发微软的反爬风控,导致账号被限制登录。
内容的提问来源于stack exchange,提问作者Mr.Prasad J
相关产品推荐
相关产品推荐

