You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Cypress在PayPal登录重定向后显示“测试加载中”的问题

解决Cypress cy.origin()登录PayPal沙箱后测试挂起的问题

针对你遇到的登录PayPal沙箱后测试停留在“Your tests are loading...”的问题,以下是几个经过验证的解决策略:

1. 正确传递外部数据到cy.origin()上下文

cy.origin()的回调运行在独立的跨域上下文里,直接在回调内调用cy.fixture()可能导致异步命令队列混乱。应该先在主上下文加载fixture数据,再通过args参数传递到跨域回调中:

Cypress.Commands.add('handlePayPalCredential', () => {
  // 先在主上下文加载fixture
  cy.fixture('checkout/session').then(({ paypalEmail, paypalPassword }) => {
    cy.origin('https://www.sandbox.paypal.com', 
      { args: { paypalEmail, paypalPassword } }, // 传递参数到跨域上下文
      ({ paypalEmail, paypalPassword }) => {
        cy.get('#email', { timeout: 10000 })
          .should('be.visible')
          .clear()
          .type(paypalEmail)

        cy.get('button[id="btnNext"]', { timeout: 10000 })
          .should('be.visible')
          .click()

        cy.get('#password', { timeout: 10000 })
          .should('be.visible')
          .clear()
          .type(paypalPassword)

        cy.get('button[id="btnLogin"]', { timeout: 10000 })
          .should('be.visible')
          .click()

        // 处理PayPal可能的额外授权步骤(如果有)
        cy.get('button[data-testid="approve-button"]', { timeout: 15000 })
          .should('be.visible')
          .click()
      }
    )
  })
})

2. 确保重定向后切换回主域名上下文

登录完成后,PayPal会重定向回你的应用域名,需要显式断言主域名的URL,让Cypress确认上下文切换完成:

// 在调用handlePayPalCredential之后添加
cy.handlePayPalCredential()
// 等待重定向到你的应用域名
cy.url().should('include', 'your-app-domain.com', { timeout: 20000 })
// 继续后续测试步骤
cy.get('#checkout-complete').should('be.visible')

3. 检查Cypress配置的关键项

确保cypress.config.js中启用了experimentalSessionAndOrigin(cy.origin()的依赖特性),且使用Cypress 9.6.0及以上版本:

module.exports = defineConfig({
  e2e: {
    experimentalSessionAndOrigin: true, // 必须启用
    // 其他配置...
  },
})

注意:不要设置chromeWebSecurity: false,这会和experimentalSessionAndOrigin冲突,导致跨域上下文管理异常。

4. 排查页面加载阻塞问题

  • 检查重定向后的应用页面是否有未加载完成的资源(比如API请求超时),可以通过Cypress的Network面板查看请求状态。
  • 禁用应用中的广告拦截、隐私跟踪脚本,这类脚本可能干扰Cypress的测试执行。

5. 调整命令超时时间

PayPal的页面加载和重定向可能较慢,适当延长全局超时时间(在cypress.config.js中):

module.exports = defineConfig({
  e2e: {
    defaultCommandTimeout: 15000,
    pageLoadTimeout: 30000,
    // 其他配置...
  },
})

内容的提问来源于stack exchange,提问作者hiko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 01:10:35