================================== 進階模組 ================================== WebRunner 在 ``je_web_runner/utils/`` 下提供大量專用模組,每一個都是 獨立的 subpackage 並附有完整單元測試。這些模組不在 executor 的核心 路徑上 —— 依需要 import 即可,不會造成額外負擔。 每個模組同時也可透過 ``WR_*`` action JSON 指令呼叫(只要對應的進入 點有註冊)。指令註冊機制請參考 :doc:`../action_executor/action_executor_doc`。 .. contents:: 本頁目錄 :local: :depth: 2 ---- Web 平台 API ============ 針對現代瀏覽器 API(串流、儲存、檔案選擇器、通知),這些 API 不易透 過原生 WebDriver 操作。 ``webtransport_assert`` ----------------------- HTTP/3 WebTransport datagram + stream frame 錄製器。與 ``websocket_assert`` 和 ``sse_assert`` 採用對稱 API,無論底層協定如 何,斷言寫法都一致。 主要進入點: * ``WtFrameRecorder.record_sent_datagram(payload)``, ``.record_stream_chunk(direction, stream_id, payload, fin=…)`` * ``assert_datagram_count``、``assert_stream_complete``、 ``assert_payload_contains``、``assert_json_shape`` ``indexed_db_explorer`` ----------------------- 產生瀏覽器端 JS,把指定 IndexedDB 序列化成 JSON 回傳;搭配 :class:`IdbSnapshot` 解析器與 ``assert_store_present`` / ``assert_record_count`` / ``assert_key_present`` / ``assert_index_present`` / ``diff_snapshots`` 斷言。 ``file_system_access`` ---------------------- JS shim 模擬 ``showOpenFilePicker`` / ``showSaveFilePicker`` / ``showDirectoryPicker``。每次對 fake save handle 的 ``write()`` 呼叫 都會記錄到 ``window.__wr_fsa_writes__``;以 ``parse_writes`` + ``assert_wrote`` + ``combined_payload`` 取回斷言。 ``notifications_audit`` ----------------------- 安裝 JS shim 追蹤每次 ``Notification.requestPermission`` 與 ``new Notification(...)`` 呼叫。斷言: * ``assert_no_prompt_without_gesture`` * ``assert_no_prompt_before(min_page_age_ms=…)`` * ``assert_no_spam_after_deny`` * ``assert_notification_shown(title_contains=…, body_contains=…, tag=…)`` * ``assert_unique_tags`` ``sse_assert`` -------------- Server-Sent Events wire-format 解析器 + 緩衝串流的 :class:`SseRecorder`。斷言:數量、data 包含、JSON shape、id 嚴格遞增。 ``websocket_assert`` -------------------- WebSocket frame 錄製器 + count / payload / pubsub-pattern / JSON-shape 斷言。 ``webrtc_assert`` ----------------- 接受 ``RTCPeerConnection`` 狀態與 ``getStats()`` JSON snapshot。 斷言:連線狀態、track 存在、SDP codec、packet-loss 比例、 最少 byte 流量。 ``view_transitions`` -------------------- JS 注入腳本錄製每次 ``document.startViewTransition`` 生命週期與該 window 內的 ``LayoutShift``。斷言:``assert_all_finished``、 ``assert_under_duration``、``assert_cls_under``、 ``assert_group_present``。 安全與 Headers ============== ``mixed_content_audit`` ----------------------- HAR 解析器 + console 訊息掃描,找出 HTTPS 頁面內載入的 HTTP 資源。 嚴重度分級:``ACTIVE``\ (直接被擋)/ ``PASSIVE``\ (載入但不安全)/ ``UPGRADE``\ (HSTS 自動升級)。 ``clickjacking_audit`` ---------------------- 結合 header 政策判定(``X-Frame-Options`` + ``frame-ancestors``)與 HTML probe 頁面產生器 —— 即使 header 看起來正確,仍能實測瀏覽器行為。 ``open_redirect_detector`` -------------------------- 八種 payload 探測:``//evil``、``@userinfo``、``javascript:``、 ``data:``、大小寫繞過、反斜線繞過等。依使用者提供的 probe callable 回傳結果分類為 ``BLOCKED`` / ``ALLOWED`` / ``AMBIGUOUS``。 ``sri_verify`` -------------- 解析 ``