如何让cy.origin等待更长时间以完成跨域重定向?
解决Cypress中cy.origin因重定向超时的问题
问题背景
测试代码访问页面后触发认证重定向,但重定向耗时过长,导致cy.origin在目标域名(authurl.com)加载完成前就超时。尝试过两种无效方案:
- 在
cy.origin调用前用cy.url().should('match', /^authurl.com/),但跨域后cy.url()返回空值,无法生效 - 将断言放入
cy.origin内部,但cy.origin代码仅在目标域名加载后执行,此操作多余
测试代码如下:
cy.visit(Cypress.config().baseUrl) cy.origin('authurl.com', { args: { username, password } }, ({ username, password }) => { // 输入用户名并提交 cy.get('input[type="email"]').type(username, { log: false }) cy.get('input[type="submit"]').click() // 输入密码并提交 cy.get('input[type="password"]').type(password, { log: false }) cy.get('input[type="submit"]').click() } )
非硬编码的解决方案
1. 给cy.origin设置自定义超时(推荐)
Cypress 12+版本支持给cy.origin单独设置timeout参数,直接延长目标域名的等待时间,无需硬编码固定等待:
cy.visit(Cypress.config().baseUrl) // 设置15秒超时(根据实际需求调整,单位毫秒) cy.origin('authurl.com', { args: { username, password }, timeout: 15000 }, ({ username, password }) => { cy.get('input[type="email"]').type(username, { log: false }) cy.get('input[type="submit"]').click() cy.get('input[type="password"]').type(password, { log: false }) cy.get('input[type="submit"]').click() } )
此方法仅针对当前cy.origin命令延长等待,不影响全局其他命令的超时设置。
2. 全局调整跨域相关超时
如果多个测试用例都存在跨域重定向超时问题,可在cypress.config.js中全局配置超时参数:
const { defineConfig } = require('cypress') module.exports = defineConfig({ e2e: { experimentalSessionAndOrigin: true, // 全局调整所有命令的默认超时(可选) defaultCommandTimeout: 10000, // Cypress 13+支持单独设置origin的超时(更精准) experimentalOriginTimeout: 15000 } })
3. 利用导航事件等待重定向完成
通过监听浏览器的导航事件,确认目标域名加载后再执行cy.origin,避免提前触发超时:
cy.visit(Cypress.config().baseUrl) // 等待浏览器导航到目标域名(通过Cypress的内部导航监听) cy.on('window:before:load', (win) => { win.addEventListener('load', () => { if (win.location.href.includes('authurl.com')) { // 目标域名加载完成后再执行cy.origin cy.origin('authurl.com', { args: { username, password } }, ({ username, password }) => { cy.get('input[type="email"]').type(username, { log: false }) cy.get('input[type="submit"]').click() cy.get('input[type="password"]').type(password, { log: false }) cy.get('input[type="submit"]').click() } ) } }) })
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

