โอเพนซอร์ส / Crate

browser-tester

browser-tester คือรันไทม์ทดสอบแบบเบราว์เซอร์ที่ให้ผลลัพธ์กำหนดได้แน่นอนและเขียนด้วย Rust ล้วน ใช้ตรวจสอบพฤติกรรมของ DOM และเหตุการณ์ได้โดยไม่ต้องเปิดเบราว์เซอร์จริง

Rust รันไทม์กำหนดผลได้แน่นอน การทดสอบ DOM

crate นี้เหมาะกับอะไร

browser-tester เน้นการทดสอบพฤติกรรมของฟอร์มและ UI ที่คาดเดาได้ มากกว่าความเข้ากันได้ของการเรนเดอร์เบราว์เซอร์แบบเต็มรูปแบบ

รันไทม์ที่เป็น Rust ล้วน

ทำงานภายในโปรเซส Rust เดียว ไม่ต้องพึ่งเบราว์เซอร์ภายนอก WebDriver หรือ Node.js

การทำงานแบบกำหนดผลได้แน่นอน

ออกแบบมาสำหรับการทดสอบที่ทำซ้ำได้จริง: มีนาฬิกาจำลอง, seed แบบกำหนดได้แน่นอน และ API ควบคุมตัวจับเวลาอย่างชัดเจน

การทดสอบ DOM + เหตุการณ์

รองรับโฟลว์แบบเบราว์เซอร์ที่ใช้งานจริงได้ เช่น selector, การรัน inline script, การแพร่กระจายเหตุการณ์ และการอัปเดต DOM

ฟีดแบ็กในเครื่องที่รวดเร็ว

ให้วงรอบฟีดแบ็กในเครื่องที่รวดเร็วสำหรับการทดสอบ UI ที่เน้นฟอร์ม พร้อมคงผลลัพธ์เมื่อทดสอบล้มเหลวให้โฟกัสที่ selector และค่าที่คาดหวัง/ค่าจริง

เริ่มต้นอย่างรวดเร็ว

สร้าง harness จาก HTML รันการโต้ตอบ และตรวจสอบผลลัพธ์ใน DOM เริ่มจาก fixture ขนาดเล็ก แล้วค่อยขยายด้วย API ด้าน timer/mock

ติดตั้ง

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 หลัก

การกระทำของ Harness + การตรวจสอบ

การทำงานหลักสำหรับทดสอบ DOM: Harness::from_html, type_text, set_checked, click, submit และตัวช่วย assert สำหรับข้อความ/ค่า/สถานะถูกเลือก/การมีอยู่ขององค์ประกอบ

ตัวจับเวลาแบบกำหนดได้แน่นอน

ควบคุมพฤติกรรมแบบ asynchronous ด้วยนาฬิกาจำลอง เลื่อนเวลาอย่างกำหนดได้แน่นอนด้วย advance_time, advance_time_to, flush และ API สำหรับตรวจสอบตัวจับเวลา

Mock ที่มีมาในตัว

ฉีดผลลัพธ์ของ fetch และ dialog ด้วย set_fetch_mock, enqueue_confirm_response และ enqueue_prompt_response เพื่อให้การทดสอบแยกขาดจากภายนอก

Trace และการวินิจฉัย

เปิดบันทึก trace และดึงลำดับ event/timer ออกมาเมื่อการทดสอบล้มเหลว เหมาะสำหรับดีบักลำดับของเหตุการณ์และพฤติกรรมของการกระทำเริ่มต้น

นโยบายของรันไทม์

  • ไม่รองรับ eval โดยตั้งใจ เพื่อคงความปลอดภัยและความกำหนดได้แน่นอน
  • รันไทม์นี้มุ่งเน้นกรณีทดสอบที่ใช้งานได้จริง ไม่ได้มุ่งให้เข้ากันได้กับเบราว์เซอร์จริง 100%
  • การเชื่อมต่อเครือข่ายภายนอกไม่อยู่ในขอบเขต ให้ใช้ fetch mock เพื่อครอบคลุมการทดสอบ

หากชุดทดสอบของคุณต้องใช้ API ของเบราว์เซอร์เพิ่มเติม ให้เปิด issue พร้อม fixture ขนาดเล็กเพื่อคุยเรื่องขอบเขตและลำดับความสำคัญ