Atvirasis kodas / Biblioteka

browser-tester

„browser-tester“ yra deterministinė, į naršyklę panaši testavimo aplinka, sukurta gryna Rust kalba. Ji patikrina DOM ir įvykių elgseną nepaleisdama tikros naršyklės.

Rust Deterministinė aplinka DOM testavimas

Kuo naudinga ši biblioteka

„browser-tester“ orientuojasi į prognozuojamą formų ir vartotojo sąsajos elgsenos testavimą, o ne į visišką suderinamumą su naršyklių atvaizdavimu.

Tik Rust vykdymo aplinka

Veikia vieno Rust proceso viduje. Nereikalauja išorinės naršyklės, „WebDriver“ ar „Node.js“ priklausomybių.

Deterministinis vykdymas

Sukurta visiškam testų atkartojamumui: naudojamas simuliuojamas laikrodis, deterministinė atsitiktinių skaičių generavimo sėkla (seed) ir aiškios laikmačio valdymo API.

DOM ir įvykių testavimas

Palaiko praktinius naršyklės veiksmus: selektorius, vidinių skriptų (inline scripts) vykdymą, įvykių plitimą (event propagation) ir DOM atnaujinimus.

Greitas grįžtamasis ryšys lokaliai

Greitas grįžtamojo ryšio ciklas į formas orientuotiems vartotojo sąsajos testams, užtikrinantis, kad klaidos būtų aiškiai susietos su selektoriais ir tikėtinomis bei faktinėmis reikšmėmis.

Greitas pradžios vadovas

Sukurkite testavimo aplinką iš HTML, atlikite veiksmus ir patikrinkite DOM rezultatus. Pradėkite nuo paprasto scenarijaus ir papildykite jį laikmačių ar imitacijų API.

Įdiegimas

cargo add browser_tester

Paprastas pavyzdys

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(())
}

Pagrindinė API sąsaja

Testavimo aplinkos veiksmai ir teiginiai

Pagrindinės DOM testavimo funkcijos: `Harness::from_html`, `type_text`, `set_checked`, `click`, `submit` ir pagalbiniai metodai tekstui, reikšmei, būsenai ir elementų egzistavimui tikrinti.

Deterministiniai laikmačiai

Asinchroninę elgseną galima valdyti naudojant simuliuojamą laikrodį. Laiką galima deterministiškai pastumti į priekį naudojant `advance_time`, `advance_time_to`, `flush` ir laikmačių patikros API.

Integruotos imitacijos

Naudokite funkcijas `set_fetch_mock`, `enqueue_confirm_response` ir `enqueue_prompt_response` užklausų atsakymams ir dialogų langų rezultatams imituoti, kad išlaikytumėte testų izoliaciją.

Sekimas ir diagnostika

Aktyvinkite žurnalų sekimą ir ištraukite įvykių bei laikmačių eigą, kai testas nepavyksta. Tai naudinga analizuojant įvykių eiliškumą ir numatytąją elgseną.

Vykdymo aplinkos politika

  • „eval“ funkcija yra sąmoningai nepalaikoma, siekiant užtikrinti saugumą ir determinizmą.
  • Ši vykdymo aplinka skirta praktiniams testavimo scenarijams, o ne 100 % suderinamumui su tikromis naršyklėmis užtikrinti.
  • Išorinės tinklo užklausos nėra palaikomos; testų aprėpčiai naudokite užklausų imitacijas (fetch mocks).

Jei jūsų testams reikia papildomų naršyklės API, sukurkite problemą (issue) su minimaliu pavyzdžiu, kad galėtume aptarti jos įgyvendinimą.