Selenium Osnovna proširenja (User-Extensions.js)

⚡ Pametni sažetak

Selenium Osnovna proširenja, koja se nazivaju i korisnička proširenja, dodaju prilagođene akcije, pristupnike i strategije lokatora Selenium IDE pričvršćivanjem JavaFunkcije skripte za Selenium i prototipne objekte PageBot-a kada se pokrene IDE.

  • 🔘 Tri stupa: Svaka Selenese naredba je akcija, pristupnik ili tvrdnja ili strategija lokatora.
  • ☑️ Pravila imenovanja: Akcije počinju s do, pristupnici s get ili is, a lokatori s locateElementBy.
  • Naredba za slobodno čekanje: Registriranjem doTextUpperCase-a, IDE automatski generira textUpperCaseAndWait.
  • 🧪 Mehanizam opterećenja: IDE čita user-extensions.js prilikom pokretanja, tako da se alat mora ponovno pokrenuti nakon svakog uređivanja.
  • 🛠️ Status naslijeđenog: Selenium Jezgra i Firefox-plugin IDE su umirovljeni i Selenium 3 je ukinuo podršku za korisnička proširenja iz JAR-ova.
  • 📊 Moderna ruta: Trenutni IDE za proširenja preglednika umjesto toga izlaže manifest dodatka i naredbu za izvršavanje skripte.

Selenium Osnovna proširenja i datoteka user-extensions.js

Selenium Core Extensions

Da bismo razumjeli ekstenzije, prvo shvatimo tri stupa Selenium IDESvaka naredba koju snimite ili upišete u IDE pripada jednoj od tri kategorije u nastavku, a svaka snimka zaslona prikazuje kako se ta kategorija pojavljuje na popisu naredbi IDE-a.

  1. Akcijski: Koju operaciju izvodite na zaslonu korisničkog sučelja.

    Selenium Popis IDE naredbi koji prikazuje akcijske naredbe kao što su klikni i tipkaj

  2. Pristupnici / Tvrdnja: Koju provjeru provodite na podacima koje dobivate iz korisničkog sučelja?

    Selenium IDE pristupne i assert naredbe s prefiksom get, is, verify i assert

  3. Strategija lokatora: Kako pronaći element u korisničkom sučelju.

    Selenium Strategije lokatora u IDE ciljnom okviru koje prikazuju popis kao što su ID, naziv, CSS i XPath

Selenium IDE dolazi sa zrelom bibliotekom koja već sadrži mnoštvo akcija, pristupača i tvrdnji te strategija lokatora.

Međutim, ponekad projektu treba funkcionalnost koja nije u toj biblioteci. U toj situaciji možete proširiti biblioteku dodavanjem vlastitog prilagođenog proširenja. Ta prilagođena proširenja nazivaju se korisničko proširenje.

Na primjer, pretpostavimo da vam je potrebna radnja koja pretvara tekst u velika slova prije nego što ga unese u web element. Takva radnja ne postoji u zadanoj biblioteci, pa stvarate vlastito korisničko proširenje. U ovom vodiču naučit ćete kako izraditi korisničko proširenje koje pretvara tekst u velika slova.

⚠️ Prije nego što počnete: ovdje opisani tijek rada pripada Selenium Jezgra i original Firefox-dodatak Selenium IDE. Selenium Jezgra je ukinuta, a podrška za korisnička proširenja je ukinuta. Selenium staklenke u Selenium 3. Koraci i kod u nastavku su sačuvani jer veliki broj naslijeđenih Selenese paketa još uvijek ovisi o njima; moderna zamjena opisana je kasnije u ovom članku.

Zahtjev za stvaranje Selenium Korisničko proširenje

Za izradu korisničkog proširenja za Selenium IDE-u, potrebni su vam osnovni koncepti JavaScript i, posebno, JavaObjekt prototipa skripte. Donji dijagram prikazuje dva objekta prototipa kojima se korisničko proširenje pridružuje.

Dijagram Selenium prototipni i PageBot prototipni objekti koje koristi korisničko proširenje

Za izradu korisničkog proširenja pišete JavaMetode skripte i dodajte ih u Selenium prototip objekta i prototip objekta PageBot.

Kako Selenium IDE prepoznaje korisničko proširenje

Nakon što se korisničko proširenje doda u Selenium IDE i IDE je pokrenut, svaka funkcija registrirana na njima JavaPrototipovi skripti su učitani i Selenium IDE prepoznaje svaku po imenu. Zato prefiksi imenovanja u sljedećem odjeljku nisu stilski izbor - oni predstavljaju način na koji IDE klasificira vašu naredbu.

Kako stvoriti korisničko proširenje

Korak 1) Radnja – sve radnje počinju s doAko radnja pretvara tekst u velika slova, njezin naziv je doTextUpperCaseKada dodate ovu metodu akcije u Selenium IDE, sam IDE stvara odgovarajuću metodu čekanja, tako da doTextUpperCase također proizvodi funkciju čekanja tekstUpperCaseAndWaitMetoda može prihvatiti dva parametra.

Primjer: Radnja teksta velikim slovima

Selenium.prototype.doTextUpperCase = function(locator, text) {
// Here findElement is itself capable to handle all type of locator(xpath,css,name,id,className), We just need to pass the locator text
var element = this.page().findElement(locator);

// Create the text to type
text = text.toUpperCase();

// Replace the element text with the new text
this.page().replaceText(element, text);
};

Korak 2) Pristupnici / Tvrdnja – svi pristupnici registrirani na Selenium prototipovi objekta imaju prefiks dobiti or is, na primjer getValueFromCompoundTable ili isValueFromCompoundTable. Pristupnik može prihvatiti dva parametra, jedan za cilj i jedan za polje vrijednosti u testnom slučaju. Snimka zaslona u nastavku prikazuje kako se ti prefiksi pojavljuju nakon što se proširenje učita.

Selenium IDE koji prikazuje naredbe pristupa get i is generirane iz korisničkog proširenja

Za svaki pristupnik, Selenium IDE generira odgovarajuće funkcije provjere s prefiksom provjeriti i tvrditi, plus funkcija čekanja kojoj je prefiks čekaj.

Primjer: Za pristupnike teksta velikim slovima

Selenium.prototype.assertTextUpperCase = function(locator, text) {
// All locator-strategies are automatically handled by "findElement"
var element = this.page().findElement(locator);

// Create the text to verify
text = text.toUpperCase();

// Get the actual element value
var actualValue = element.value;

// Make sure the actual value matches the expected
Assert.matches(expectedValue, actualValue);
};

Selenium.prototype.isTextEqual = function(locator, text) {
return this.getText(locator).value===text;
};

Selenium.prototype.getTextValue = function(locator, text) {
return this.getText(locator).value;
};

Korak 3) Strategija lokatora – ako želite stvoriti vlastitu funkciju za lociranje elementa, proširite prototip PageBota funkcijom s prefiksom locateElementByPrima dva parametra: niz lokatora i dokument u kojem treba pretražiti element.

Primjer: za lokator teksta velikim slovima

// The "inDocument" is a document you are searching.
PageBot.prototype.locateElementByUpperCase = function(text, inDocument) {
// Create the text to search for
var expectedValue = text.toUpperCase();

// Loop through all elements, looking for ones that have
// a value === our expected value
var allElements = inDocument.getElementsByTagName("*");
// This star '*' is a kind of regular expression it will go through every element (in HTML DOM every element surely have a tag name like<body>,<a>,<h1>,<table>,<tr>,<td> etc. ). Here our motive is to find an element which matched with the Upper Case text we have passed so we will search it with all elements and when we get match we will have the correct web element.
for (var i = 0; i < allElements.length; i++) {
var testElement = allElements[i];
if (testElement.innerHTML && testElement.innerHTML === expectedValue) {
return testElement;
}
}
return null;
};

Spremite sve tri funkcije u jednu datoteku pod nazivom korisnička-proširenja.jsDatoteka je obična JavaSkripta, tako da je dovoljan bilo koji uređivač teksta.

Kako koristiti novostvoreno proširenje jezgre

U originalu je učitavanje datoteke zadatak u četiri koraka Firefox-plugin IDE. Svaka snimka zaslona u nastavku odgovara numeriranom koraku pored nje.

  1. Idi na Selenium IDE i kliknite Opcije -> Opcije…

    Selenium Izbornik IDE opcija otvoren je za pristup dijalogu Opcije

  2. u Osnovne informacije odjeljak, odaberite lokaciju novostvorenog Selenium Osnovno proširenje.

    Selenium Dijalog IDE opcija, kartica Općenito s Selenium Polje putanje datoteke osnovnih proširenja

  3. Kliknite OK i ponovno pokrenite Selenium SDI.

    Upit za potvrdu prikazan kada Selenium IDE se ponovno pokreće radi učitavanja datoteke proširenja

  4. Proširenje ćete pronaći u popisu naredbi.

    Selenium Padajući izbornik IDE naredbi s novom naredbom textUpperCase iz user-extensions.js

Selenium Osnovna proširenja u odnosu na Selenium IDE proširenja

Ta se dva pojma koriste naizmjenično u starijim materijalima, ali opisuju različite slojeve, a razlika je važna kada odlučujete gdje smjestiti prilagođenu logiku.

Aspekt Selenium Osnovno proširenje Selenium IDE proširenje
Što se proširuje Selenese biblioteka naredbi koja se koristi tijekom reprodukcije Sama IDE aplikacija
Datoteka učitana korisnička-proširenja.js user-extensions-ide.js u naslijeđenom IDE-u, manifest dodatka u trenutnom IDE-u
Tipična upotreba Nove akcije, pristupnici i strategije lokatora Nove stavke izbornika, ploče, formati i ponašanje snimača
Dodirnuti predmeti Selenium.prototype i PageBot.prototype API-ji za uređivanje i snimanje IDE-a
Radi tijekom Izvođenje testa Autorstvo i snimanje

Ukratko, Core ekstenzija mijenja što test može učiniti, dok IDE ekstenzija mijenja što alat može učiniti.

Kako moderna Selenium IDE zamjenjuje user-extensions.js

The Firefox-dodatak Selenium IDE je prestao raditi kada Firefox premješten na WebExtensions arhitekturu, a IDE je prepisan kao Chrome, Firefox i proširenje za preglednik Edge. Ta je prerada uklonila polje Opcije prikazano gore, tako da nema mjesta za pokazivanje na datoteku user-extensions.js. Dvije podržane alternative pokrivaju isto područje.

  • Naredba za izvršavanje skripte. Za jednokratnu upotrebu JavaSkripta, dodajte izvrši skriptu or izvrši asinkroni skript uđite izravno u test i pohranite rezultat u varijablu. Ovo je najbliži ekvivalent maloj prilagođenoj akciji.
  • Dodatak. Za naredbe koje se mogu ponovno koristiti, izradite proširenje preglednika koje registrira manifest s IDE-om. Manifest deklarira svaku novu naredbu s ID-om, nazivom, opcionalnim tipom i dokumentacijom, a može deklarirati i nove lokatore.

Manifest se registrira slanjem poruke IDE ekstenziji, kao što je prikazano u službenom Selenium Dokumentacija IDE dodataka.

browser.runtime.sendMessage(SIDE_ID, {
uri: "/register",
verb: "post",
payload: {
name: "Selenium IDE plugin",
version: "1.0.0",
commands: [
{ id: "textUpperCase", name: "text upper case" }
]
}
}).catch(console.error);

Disciplina imenovanja preživljava migraciju: naredba dodatka se i dalje deklarira jednom, a zatim ponovno koristi u svakom testu, točno kao što je to bilo s Core ekstenzijom.

Popularna proširenja i dodaci koji se koriste u Selenium IDE

Dodaci u nastavku bili su najčešće korišteni u naslijeđenom IDE-u. Nekoliko njih, poput kontrole protoka i snimke zaslona prilikom neuspjeha, sada su ugrađeni u trenutni IDE ili dostupni kao održavani dodaci.

Ime Svrha
Omiljene Označavanje testnog paketa kao favorita i njegovo izvršavanje jednim klikom
Flex Pilot X Za automatizaciju temeljenu na Flexu
FlexMonkium Za snimanje i reprodukciju temeljeno na Adobe Flexu testiranje in Selenium IDE
Zapisivanje datoteka Za spremanje zapisa u datoteku
Kontrola protoka Za kontrolu tijeka izvođenja testa
Označite elemente Za označavanje web kontrole
Implicitno čekanje Čekanje elementa određeno vremensko ograničenje
Snimka zaslona pri neuspjehu Napravite snimku zaslona u slučaju neuspjeha
Rezultati ispitivanja Spremi testni slučaj rezultat za paket testova jednim klikom

Stara SeleniumStranica za preuzimanje HQ-a koja je hostirala ove datoteke više ne postoji. Trenutni dodaci i sam IDE distribuiraju se s Selenium Stranica IDE projekta i iz Chromea, Firefox i trgovine dodataka za Edge.

Preuzimanje Selenium Core Extension korišten u ovom vodiču

Pitanja i odgovori

Konvencionalni naziv je user-extensions.js, a dodaci na razini IDE-a koristili su user-extensions-ide.js. Stari IDE vam je omogućavao da pokažete na bilo koju putanju, pa je naziv bio konvencija, a ne zahtjev, ali keeping olakšava prepoznavanje zajedničkih apartmana.

Prototipne funkcije su samo za čitanje dok se IDE učitava, tako da se uređivanje napravljeno nakon pokretanja ignorira. Spremite datoteku, potpuno zatvorite IDE i ponovno ga otvorite. JavaSintaktička greška skripte također sprječava tiho učitavanje cijele datoteke.

Otvorite konzolu preglednika i ponovno pokrenite IDE, a zatim pripazite na pogrešku parsiranja datoteke. Dodavanje retka console.log na vrh datoteke potvrđuje je li se uopće učitala prije nego što počnete s otklanjanjem pogrešaka pojedinačnih funkcija.

Pišete samo verziju s prefiksom "do". Selenium IDE izvodi varijantu AndWait za vas, koja izvršava istu operaciju, a zatim čeka da se stranica učitava. Koristite obrazac AndWait kada radnja pokrene navigaciju.

Modeli strojnog učenja mogu izraditi predložak za novu naredbu i predložiti strategiju lokatora iz snimke stranice. Popravak lokatora uz pomoć umjetne inteligencije također je ovdje koristan, jer je prilagođena funkcija locateElementBy upravo onaj kod koji se pokvari kada se promijeni oznaka.

Djelomično. Kopilot reproducira Selenium.prototype i PageBot.prototype obrasce jer se često pojavljuju u starijim repozitorijima, ali mogu izmisliti pomoćne metode koje nikada nisu postojale. Provjerite svaki predloženi poziv u odnosu na Selenese referencu naredbe prije nego što mu vjerujete.

Da. Datoteka koja ne sadrži ništa osim funkcije locateElementBy na PageBot.prototype je valjana. Nova strategija tada postaje dostupna svakoj postojećoj naredbi, tako da klik, tip i tvrdnja mogu ciljati sve elemente putem nje.

Selenium RC je prihvatio datoteku korisničkih ekstenzija putem poslužiteljskog prekidača, ali RC i Selenium Jezgra je uklonjena u Selenium 3. WebDriver nema ekvivalentnu hook metodu, pa je ista logika napisana kao obična pomoćna metoda u vašem testnom okviru.

Sažmite ovu objavu uz: