開源專案 / 容器 (或:開源軟體 / 容器)

browser-tester

`browser-tester` 是一個基於純 Rust 語言實現的、具有瀏覽器功能的測試執行環境。它可以在不啟動實際瀏覽器的情況下,驗證 DOM(檔案物件模型)和事件的行為。

Rust 確定性執行時環境。 DOM 測試

這個工具包的優勢所在。

browser-tester 的重點在於針對表單/使用者介面行為進行可預測的測試,而不是全面測試瀏覽器渲染的相容性。

僅支援 Rust 語言的執行時環境。

它在單個 Rust 程式中執行,無需任何外部瀏覽器、WebDriver 或 Node.js 依賴。

確定性執行。

該系統設計之初就考慮了可重複的測試需求,因此具備以下特性:模擬時鐘、可預測的隨機數種子以及明確的定時器控制API。

DOM 和事件測試。

支援類似於瀏覽器的實用功能:選擇器、內聯指令碼執行、事件傳播以及DOM更新。

快速的本地化反饋。

針對以表單為中心的UI測試,提供快速的反饋迴圈,同時確保錯誤輸出資訊集中於選擇器以及預期值和實際值。

快速上手指南。

使用 HTML 建立測試框架,執行互動操作,並驗證 DOM 結果。從一個簡單的測試用例開始,然後逐步擴充套件,加入定時器和模擬 API。

安裝。

cargo add browser_tester

基本範例。

 use browser_tester::Harness;

fn main() -> browser_tester::Result<()> {
    let html = r#"..."#;
    let mut h = Harness::from_html(html)?;

    h.type_text("#name", "Alice")?;
    h.click("#submit")?;
    h.assert_text("#result", "Hello, Alice")?;

    Ok(())
} 

主要API介面。

整合行動與宣告。

核心 DOM 測試操作:包括 `Harness::from_html`(從 HTML 字串建立 DOM 樹)、`type_text`(輸入文字)、`set_checked`(設定核取方塊狀態)、`click`(點選)、`submit`(提交表單)以及用於驗證文字內容、數值、核取方塊狀態和元素是否存在的相關輔助函式。

確定型定時器。

使用模擬時鐘來控制非同步行為。透過 `advance_time`、`advance_time_to`、`flush` 以及計時器檢查 API 等功能,可以以確定性的方式推進時間。

內建模擬功能。

為了保持測試的獨立性,可以使用 `set_fetch_mock`、`enqueue_confirm_response` 和 `enqueue_prompt_response` 函式來模擬網路請求的響應和對話結果。

追蹤與診斷功能。

啟用追蹤日誌,並在測試失敗時提取事件/計時器流程資訊。這對於除錯事件順序和預設行為非常有用。

執行時策略。

  • `eval` 功能被故意禁用,以確保系統的安全性和可預測性。
  • 這個執行時環境主要針對實際的測試場景,並非完全相容所有瀏覽器。
  • 外部網路輸入/輸出功能不在此範圍之內;請使用模擬資料來覆蓋測試用例。

如果您需要為您的測試套件新增額外的瀏覽器 API,請提交一個問題,並在問題中提供一個最簡化的測試用例,以便我們討論其適用範圍和優先順序。