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

Cypress运行银行集成测试出现'Refused to frame' CSP错误如何解决

根因说明

你遇到的报错是第三方登录页https://login.truelayer.com/自身返回的Content Security Policy策略限制导致的:该站点的CSP规则中frame-ancestors只允许https://somelink.github.io作为父页面嵌套它,而Cypress默认的测试运行逻辑是将所有被测页面嵌入到自身的iframe中执行,父域名不符合第三方站点的要求就会触发拦截。
你之前修改自身站点CSP配置、关闭chromeWebSecurity的操作无效,因为这个限制是第三方站点的响应头携带的,和你自身站点的配置无关。

可行解决方案
  • 方案1:直接顶层导航跳转第三方站点
    不要通过页面内点击链接的方式将第三方站点嵌在Cypress的iframe中加载,拿到跳转地址后直接调用cy.visit()跳转到第三方地址:
    // 先获取页面上的第三方跳转链接
    cy.get('a#truelayer-login').invoke('attr', 'href').then(loginUrl => {
      cy.visit(loginUrl)
    })
    
    关闭chromeWebSecurity的前提下Cypress 5.6.0支持跨域跳转,走完第三方流程后再跳转回你的业务站点即可,如果需要保留登录态可以提前用cy.preserveCookie()配置保留你站点的相关Cookie。
  • 方案2:拦截修改第三方站点的响应头
    使用Cypress 5.6.0提供的cy.route2能力拦截第三方站点的所有请求,删除响应头里的CSP和X-Frame-Options限制,该操作需要在触发第三方跳转的逻辑之前执行:
    cy.route2('https://login.truelayer.com/**', (req) => {
      req.on('response', (res) => {
        // 移除嵌套限制相关的响应头
        delete res.headers['content-security-policy']
        delete res.headers['x-frame-options']
      })
    })
    
  • 方案3:Mock第三方集成流程
    如果你不需要测试第三方站点本身的操作,直接Mock第三方流程的回调结果,跳过真实访问第三方站点的步骤,从根源上避免触发CSP限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:36:07