Playwright 1.63 可持久化 OPFS:隔離代理區域測試狀態

Microsoft 於 2026 年 9 月 4 日發布 Playwright 1.63。瀏覽器內容的 storageState() API 新增可選的 opfs 參數,可將來源私有檔案系統納入儲存狀態快照,再復原到後續瀏覽器內容。

分離的區域瀏覽器狀態艙透過受控的全球網際網路傳輸網路連接

當獲准測試依賴網站寫入 OPFS 的檔案時,這項能力很實用;但它也擴大了代理測試可跨執行攜帶的本機狀態。若同一快照被不同國家、帳號或實驗組重複使用,看似由地理位置造成的結果,其實可能來自先前復原的本機檔案。

公開資料說明:Microsoft Playwright「Playwright v1.63.0」,發布於 2026 年 9 月 4 日;Microsoft Playwright「BrowserContext API reference」,查閱於 2026 年 9 月 10 日。

1.63 改變了什麼

Playwright 的儲存狀態原本就能保存 Cookie 和 local storage,並可選擇包含 IndexedDB 與虛擬 WebAuthn 憑證。1.63 再加入 OPFS:

await context.storageState({
  path: statePath,
  opfs: true
});

官方 API 說明指出,opfs: true 會把來源私有檔案系統放入快照;暫時性 WebKit 內容目前不支援 OPFS。

此參數必須明確啟用,不會因保存儲存狀態就自動開啟。但升級審查仍很重要:共用 helper 或框架封裝可能集中啟用,而單一測試中看不到該選項。

為何代理測試會被狀態污染

代理改變網路路徑與可能呈現的出口地區,卻不會自動清除瀏覽器本機狀態。復原的 OPFS 屬於特定來源,應用程式可能把其中檔案與 Cookie、IndexedDB、local storage、伺服器端帳號狀態及網路訊號共同使用。

例如,美國測試把市場目錄寫入 OPFS;工具保存包含 OPFS 的狀態;歐洲測試復原同一檔案;應用程式優先讀取舊內容;最後錯誤判定歐洲代理收到美國內容。代理可能運作正常,真正問題是瀏覽器實驗組不乾淨。

反過來,若重現流程確實依賴 OPFS,但工具默默省略它,即使 Cookie 和 local storage 已復原,流程仍可能失敗。

盤點每一層狀態

不要把 storageState.json 當成單一登入檔案。分別記錄 Cookie、local storage、IndexedDB、OPFS、虛擬憑證和伺服器端帳號狀態,並說明加入理由、敏感等級及保存期限。

包含憑證或應用資料的快照不能提交至原始碼倉庫、輸出到 CI 日誌,也不能在未經批准的實驗組之間重複使用。

建立乾淨與復原狀態矩陣

升級測試應將路由和狀態分開。每個目標地區至少執行:

  1. 全新內容的直連對照;
  2. 全新內容透過區域代理;
  3. 僅復原 Cookie;
  4. 必要時復原 Cookie 與 IndexedDB;
  5. 明確需要時才加入 OPFS;
  6. 同地區建立並於同地區復原;
  7. 跨地區復原作為負向測試;
  8. 分別測試新帳號與既有帳號。

固定瀏覽器版本、目標 URL、代理路由、視窗、語言、時區、標頭和測試資料,每次只變更一個狀態維度。涉及貨幣、稅費和供應範圍時,可搭配區域代理在地價格驗證指南

依實驗組命名狀態

避免使用通用 auth.json。應依允許共享的維度整理:

state/<環境>/<帳號類別>/<市場>/<實驗>/<瀏覽器>.json

路徑本身不要包含密碼或個人識別。受保護清單應記錄狀態 ID、建立與到期時間、環境、瀏覽器版本、允許來源、市場實驗組、帳號類別、實驗 ID、包含的狀態類型及檔案摘要。任務與清單不符時直接拒絕執行。

證明 OPFS 是否改變結果

在自有或已獲授權的來源上,透過應用程式正常行為寫入無害 canary 檔案。分別保存包含與不包含 OPFS 的快照,復原至新內容,再確認 canary 是否存在。

真實工作流程應比較最終 URL、重新導向鏈、回應狀態、內容摘要、應用顯示的市場與幣別、代理出口地區、OPFS canary、伺服器端帳號狀態,以及去識別後的截圖或 trace。

不得查看或擷取其他使用者資料。測試目的是驗證自身狀態邊界,不是探索目標內部檔案。

將復原檔案視為不可信輸入

OPFS 快照可能比建立它的工作階段存活更久,因此應加密儲存與傳輸、依環境與實驗組限制存取、復原前驗證完整性、設定短效期、隔離正式與低階環境資料、排除客戶資料,並在憑證變更後輪替。

不要讓多個平行 worker 共同寫入一個狀態檔。每個 worker 應取得不可變輸入或獨立副本,避免一個測試破壞另一個測試的前提。

明確標示瀏覽器能力邊界

API 文件說明暫時性 WebKit 內容目前不支援 OPFS。不要默默跳過判定,應將該組合標記為不支援、改用其他測試設計,或只在受支援瀏覽器執行依賴 OPFS 的工作流程。

主測試前先執行能力探針,並把結果與瀏覽器版本一起保存;不能假設不同引擎會以完全相同方式序列化應用狀態。

升級發布步驟

  1. 盤點所有呼叫或復原 storageState() 的 helper。
  2. 在 canary 環境固定 Playwright 1.63 與瀏覽器版本。
  3. 檢查清單是否意外包含 OPFS。
  4. 在受控來源執行乾淨與復原矩陣。
  5. 驗證實驗組鍵可阻止跨地區、跨帳號重複使用。
  6. 明確測試暫時性 WebKit 的限制。
  7. 檢查 CI 日誌、trace 和上傳附件是否洩漏狀態。
  8. 為狀態錯配、陳舊內容和附件洩漏設定失敗門檻。
  9. 每次只擴展一個地區或工作流程。
  10. 保留舊版本與舊狀態格式的回復路徑。

網路層驗證可搭配代理回應新鮮度指南,避免將復原的本機檔案誤判為新的區域回應。

檢查清單

  • [ ] OPFS 是有意啟用且已有文件。
  • [ ] 每種儲存狀態都有負責人和保留期。
  • [ ] 檔案依環境、帳號、市場和實驗分組。
  • [ ] 工具拒絕跨實驗組復原。
  • [ ] 乾淨內容與復原內容分別測試。
  • [ ] 使用獲准 canary 證明 OPFS 是否復原。
  • [ ] 代理地區與瀏覽器狀態獨立驗證。
  • [ ] 內容新鮮度和市場判定使用多個訊號。
  • [ ] 暫時性 WebKit 限制已清楚標示。
  • [ ] 附件已加密、受控且排除在原始碼倉庫外。
  • [ ] 平行 worker 無法修改共用狀態。
  • [ ] 已記錄回復路徑。

常見問題

Playwright 1.63 會自動在所有儲存狀態中加入 OPFS 嗎?

不會,opfs 是可選參數。但共用 helper 可能集中啟用,升級時仍需審查。

更換代理地區會清除 OPFS 嗎?

不會。代理控制網路路由,本機狀態必須由測試工具明確隔離或復原。

OPFS 會包含驗證資訊嗎?

取決於應用程式。分類完成前應將快照視為敏感資料,不能因為它不是 Cookie 就假設安全。

合規說明

只在獲准的系統與帳號上使用代理和瀏覽器自動化。不得利用儲存狀態繞過驗證、同意流程、地區控制、速率限制、購買限制或反詐欺系統。最小化個人資料、保護保存的憑證和檔案、遵守目標條款與隱私法規,並在核准用途結束後刪除測試附件。