Selenium Kerneudvidelser (User-Extensions.js)
โก Smart opsummering
Selenium Kerneudvidelser, ogsรฅ kaldet brugerudvidelser, tilfรธjer brugerdefinerede handlinger, adgangspunkter og lokaliseringsstrategier til Selenium IDE ved at vedhรฆfte JavaScriptfunktioner til Selenium og PageBot-prototypeobjekter, nรฅr IDE'et starter.
Selenium Kerneudvidelser
For at forstรฅ udvidelser, lad os fรธrst forstรฅ de tre sรธjler Selenium IDEHver kommando, du optager eller skriver i IDE'en, tilhรธrer en af โโde tre kategorier nedenfor, og hvert skรฆrmbillede viser, hvordan den pรฅgรฆldende kategori vises pรฅ IDE-kommandolisten.
- Handling: Hvilken handling du udfรธrer pรฅ brugergrรฆnsefladen.
- Tilgangspersoner / Pรฅstand: Hvilken verifikation du udfรธrer pรฅ de data, du fรฅr fra brugergrรฆnsefladen.
- Lokaliseringsstrategi: Hvordan du finder elementet i brugergrรฆnsefladen.
Selenium IDE leveres med et modent bibliotek, der allerede indeholder masser af handlinger, accessorer og assertions samt locator-strategier.
Nogle gange har et projekt dog brug for funktionalitet, der ikke findes i det pรฅgรฆldende bibliotek. I den situation kan du udvide biblioteket ved at tilfรธje din egen brugerdefinerede udvidelse. Disse brugerdefinerede udvidelser kaldes en brugerudvidelse.
Lad os for eksempel antage, at du har brug for en handling, der konverterer tekst til store bogstaver, fรธr den udfyldes i et webelement. En sรฅdan handling findes ikke i standardbiblioteket, sรฅ du opretter din egen brugerudvidelse. I denne vejledning lรฆrer du, hvordan du bygger en brugerudvidelse, der konverterer tekst til store bogstaver.
โ ๏ธ Inden du starter: den her beskrevne arbejdsgang tilhรธrer Selenium Kernen og originalen Firefox-plugin Selenium IDE. Selenium Core er blevet udfaset, og understรธttelse af brugerudvidelser er blevet fjernet fra Selenium krukker i Selenium 3. Trinene og koden nedenfor er bevaret, fordi et stort antal รฆldre Selenese-pakker stadig er afhรฆngige af dem; den moderne erstatning er beskrevet senere i denne artikel.
Krav om at oprette en Selenium Brugerudvidelse
Sรฅdan opretter du en brugerudvidelse til Selenium IDE, du har brug for de grundlรฆggende koncepter JavaScript og isรฆr den JavaScriptprototypeobjekt. Diagrammet nedenfor viser de to prototypeobjekter, som en brugerudvidelse knytter sig til.
For at oprette din brugerudvidelse skal du skrive JavaScriptmetoder og tilfรธj dem til Selenium objektprototypen og til PageBot-objektprototypen.
Hvordan Selenium IDE genkender en brugerudvidelse
Efter en brugerudvidelse er tilfรธjet til Selenium IDE, og IDE'en startes, hver funktion registreret pรฅ disse JavaScriptprototyper er indlรฆst, og Selenium IDE genkender hver kommando ved sit navn. Derfor er navngivningsprรฆfikserne i nรฆste afsnit ikke et stilvalg โ de er, hvordan IDE'en klassificerer din kommando.
Sรฅdan opretter du en brugerudvidelse
Trin 1) Handling โ alle handlinger starter med doHvis handlingen konverterer tekst til store bogstaver, bliver dens navn doTextUpperCaseNรฅr du tilfรธjer denne handlingsmetode til Selenium IDE, opretter IDE'en selv en matchende ventemetode, sรฅ doTextUpperCase producerer ogsรฅ ventefunktionen tekstStoreBogstaverOgVentMetoden kan acceptere to parametre.
Eksempel: Teksthandling med store bogstaver
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); };
Trin 2) Tilgange / Pรฅstand โ alle tiltrรฆdere registreret pรฅ Selenium objektprototyper har prรฆfikset fรฅ or is, for eksempel getValueFromCompoundTable eller isValueFromCompoundTable. En accessor kan acceptere to parametre, รฉn for mรฅlet og รฉn for vรฆrdifeltet i testcasen. Skรฆrmbilledet nedenfor viser, hvordan disse prรฆfikser vises, nรฅr udvidelsen er indlรฆst.
For hver adgangsgiver, Selenium IDE genererer de tilsvarende verifikationsfunktioner prรฆfikset af verificere og hรฆvde, plus en ventefunktion prรฆfikset af ventPรฅ.
Eksempel: For teksttilgange med store bogstaver
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; };
Trin 3) Lokaliseringsstrategi โ hvis du vil oprette din egen funktion til at finde et element, skal du udvide PageBot-prototypen med en funktion prรฆfikset af locateElementByDen krรฆver to parametre: lokaliseringsstrengen og det dokument, hvor elementet skal sรธges i.
Eksempel: Til tekstsรธgning af store bogstaver
// 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; };
Gem alle tre funktioner i en enkelt fil med navnet brugerudvidelser.jsFilen er almindelig JavaScript, sรฅ enhver teksteditor er tilstrรฆkkelig.
Sรฅdan bruger du den nyoprettede Core-udvidelse
Indlรฆsning af filen er en firetrinsopgave i originalen Firefox-plugin IDE. Hvert skรฆrmbillede nedenfor svarer til det nummererede trin ved siden af.
- Gรฅ til Selenium IDE og klik Valgmuligheder -> Valgmulighederโฆ
- I Generelt sektion, vรฆlg placeringen af โโden nyoprettede Selenium Kerneudvidelse.
- Klik OK og genstart Selenium SDI.
- Du finder udvidelsen i kommandolisten.
Selenium Kerneudvidelser vs. Selenium IDE-udvidelser
De to udtryk bruges i flรฆng i รฆldre materiale, men de beskriver forskellige lag, og sondringen er vigtig, nรฅr du beslutter, hvor du skal placere brugerdefineret logik.
| Aspect | Selenium Kerneudvidelse | Selenium IDE-udvidelse |
|---|---|---|
| Hvad det strรฆkker sig | Selenese-kommandobiblioteket, der bruges under afspilning | Selve IDE-applikationen |
| Fil indlรฆst | brugerudvidelser.js | user-extensions-ide.js i det รฆldre IDE, et plugin-manifest i det nuvรฆrende IDE |
| Typisk brug | Nye handlinger, adgangspunkter og lokaliseringsstrategier | Nye menupunkter, paneler, formater og optagerens funktionsmรฅde |
| Berรธrte genstande | Selenium.prototype og PageBot.prototype | IDE-editor og -optager-API'er |
| Kรธrer under | Test udfรธrelse | Forfatterskab og optagelse |
Kort sagt รฆndrer en Core-udvidelse, hvad en test kan gรธre, mens en IDE-udvidelse รฆndrer, hvad vรฆrktรธjet kan gรธre.
Hvordan den moderne Selenium IDE erstatter user-extensions.js
Firefox-plugin Selenium IDE stoppede med at virke, da Firefox flyttede til WebExtensions-arkitekturen, og IDE'en blev omskrevet som en Chrome, Firefox og Edge browserudvidelsen. Den omskrivning fjernede feltet Indstillinger vist ovenfor, sรฅ der er ikke plads til at pege pรฅ en user-extensions.js-fil. To understรธttede alternativer dรฆkker det samme omrรฅde.
- Kommandoen "execute script". Til engangsforeteelser JavaScript, tilfรธj et udfรธr script or udfรธr asynkront script Gรฅ direkte ind i testen og gem resultatet i en variabel. Dette er det tรฆtteste svar pรฅ en lille brugerdefineret handling.
- Et plugin. For genbrugelige kommandoer skal du bygge en browserudvidelse, der registrerer et manifest med IDE'et. Manifestet deklarerer hver ny kommando med et id, et navn, en valgfri type og dokumentation, og det kan ogsรฅ deklarere nye locatorer.
Manifestet registreres ved at sende en besked til IDE-udvidelsen, som vist i den officielle Selenium Dokumentation til IDE-plugin.
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);
Navngivningsdisciplinen overlever migreringen: en plugin-kommando deklareres stadig รฉn gang og genbruges derefter pรฅ tvรฆrs af hver test, prรฆcis som en Core-udvidelse blev.
Populรฆre udvidelser og plugins brugt i Selenium IDE
Tilfรธjelsesprogrammerne nedenfor var de mest anvendte i det รฆldre IDE. Flere af dem, sรฅsom flowkontrol og screenshot-on-failure, er nu indbygget i det nuvรฆrende IDE eller tilgรฆngelige som vedligeholdte plugins.
| Navn | Formรฅl |
|---|---|
| foretrukne | Sรฅdan markerer du en testsuite som favorit og udfรธrer den med et enkelt klik |
| Flex Pilot X | Til Flex baseret automatisering |
| FlexMonkium | Til Adobe Flex-baseret optagelse og afspilning test in Selenium IDE |
| Fillogning | Til at gemme logfiler i en fil |
| Flow Kontrol | For at kontrollere testudfรธrelsesflowet |
| Fremhรฆv elementer | For at fremhรฆve en webkontrol |
| Implicit Vent | At vente pรฅ et element i en bestemt tidsgrรฆnse |
| Skรฆrmbillede ved fejl | Tag et skรฆrmbillede af fejl |
| Test resultater | Gem test sag resultat for en testsuite med et enkelt klik |
Den gamle SeleniumHQ-downloadsiden, der hostede disse filer, findes ikke lรฆngere. Nuvรฆrende plugins og selve IDE'en distribueres fra Selenium IDE-projektets websted og fra Chrome, Firefox og Edge-tilfรธjelsesbutikker.
Download Selenium Core Extension brugt i denne selvstudie









