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

Shopify嵌入应用Playwright E2E测试:iframe连接重置错误求助

Shopify嵌入应用E2E测试iframe连接重置问题分析

问题现象

将部署在fly.io的Shopify应用进行端到端(E2E)测试时,遇到以下问题:

  • 通过Playwright的setup项目完成认证并保存storageState后,后续测试项目加载Shopify嵌入应用的iframe时,大概率(非100%)出现「连接已重置」错误:
    Shopify嵌入应用iframe显示连接重置错误
  • 若将所有测试步骤合并执行,问题出现概率大幅降低,但fly.io服务因闲置停止后仍偶发
  • 日常使用Chrome操作应用时仅在标签页长期闲置时偶发,刷新页面即可恢复

当前Playwright配置的项目部分如下:

projects: [
  {
    name: 'setup',
    use: { ...devices['Desktop Chrome'] },
    testMatch: /global\.setup\.ts/,
  },
  {
    name: 'chromium',
    use: { 
      ...devices['Desktop Chrome'],
      storageState: STORAGE_FILE,
    },
    dependencies: ['setup'],
  },

可能的原因

1. fly.io冷启动与网络兼容性问题

fly.io的基础套餐会在应用闲置一段时间后停止容器,后续请求触发冷启动时,容器初始化需要时间,若Playwright的超时设置不足以等待容器就绪,会导致iframe加载时连接重置。另外你之前安装CLI时需关闭IPv6或优先IPv4,说明你的网络环境下fly.io的IPv6兼容性存在问题,Playwright浏览器可能默认使用IPv6发起请求,而fly.io实例无法响应,引发连接错误。

2. Playwright storageState的会话有效性问题

Shopify嵌入应用的会话可能包含与上下文绑定的临时令牌,这类令牌有效期短,且和初始认证的IP、浏览器指纹强关联。setup项目保存的storageState在后续测试中复用,可能因时间间隔(如冷启动等待时长)导致令牌过期,或因Playwright启动新浏览器实例时指纹变更,被Shopify安全机制拦截,进而触发iframe加载失败。

3. Shopify嵌入iframe的加载时序异常

Shopify嵌入应用的iframe依赖主站的初始化脚本完成前置配置。复用storageState时,Playwright直接跳转目标页面,可能跳过了Shopify主站的部分初始化步骤,导致iframe的加载请求时机异常,引发连接重置。而合并测试步骤时上下文未中断,初始化流程连贯,因此问题概率低。

4. Playwright网络连接池的复用问题

Playwright在setup项目结束后会关闭浏览器实例并清空网络连接池;后续测试启动新实例时重新建立连接,若fly.io负载均衡器未正确释放旧连接,或Playwright的连接复用机制出现异常,会导致连接重置错误。

验证与临时修复方向

  • 调整Playwright超时配置,在iframe加载前增加显式等待(如等待Shopify主站的特定元素加载完成后再操作iframe)
  • 在setup项目结束后立即触发后续测试,减少storageState闲置时间;或在后续测试开始前,先发起简单请求到fly.io应用触发容器暖启动
  • 强制Playwright使用IPv4:在配置中添加launchOptions: { args: ['--disable-ipv6'] },规避IPv6连接问题
  • 检查storageState中的令牌有效期,尝试在后续测试开始前访问Shopify授权页面触发会话续期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:03:15