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.

  • ๐Ÿ”˜ Tre sรธjler: Enhver Selenese-kommando er en handling, en accessor eller assertion eller en locator-strategi.
  • โ˜‘๏ธ Navngivningsregler: Handlinger starter med do, accessorer med get eller is, og locatorer med locateElementBy.
  • โœ… Kommandoen Fri vent: Registrering af doTextUpperCase fรฅr IDE'en til automatisk at generere textUpperCaseAndWait.
  • ๐Ÿงช Belastningsmekanisme: IDE'en lรฆser user-extensions.js ved opstart, sรฅ vรฆrktรธjet skal genstartes efter hver redigering.
  • ๐Ÿ› ๏ธ ร†ldre status: Selenium Kernen og Firefox-plugin IDE blev udfaset, og Selenium 3 fjernede understรธttelse af brugerudvidelser fra jar-filer.
  • ๐Ÿ“Š Moderne rute: Det nuvรฆrende browserudvidelses-IDE eksponerer i stedet et plugin-manifest og en execute script-kommando.

Selenium Kerneudvidelser og user-extensions.js-filen

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.

  1. Handling: Hvilken handling du udfรธrer pรฅ brugergrรฆnsefladen.

    Selenium IDE-kommandoliste, der viser handlingskommandoer sรฅsom klik og skriv

  2. Tilgangspersoner / Pรฅstand: Hvilken verifikation du udfรธrer pรฅ de data, du fรฅr fra brugergrรฆnsefladen.

    Selenium IDE-adgangs- og assertion-kommandoer med prรฆfikset get, is, verify og assert

  3. Lokaliseringsstrategi: Hvordan du finder elementet i brugergrรฆnsefladen.

    Selenium IDE-mรฅlboks, der viser lokationsstrategier sรฅsom id, navn, css og xpath

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.

Diagram over Selenium prototype- og PageBot-prototypeobjekter brugt af en brugerudvidelse

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.

Selenium IDE, der viser get- og is-tilgangskommandoer genereret fra en brugerudvidelse

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.

  1. Gรฅ til Selenium IDE og klik Valgmuligheder -> Valgmulighederโ€ฆ

    Selenium IDE-indstillinger-menuen รฅbnes for at รฅbne dialogboksen Indstillinger

  2. I Generelt sektion, vรฆlg placeringen af โ€‹โ€‹den nyoprettede Selenium Kerneudvidelse.

    Selenium IDE-indstillinger-dialogboksen Fanen Generelt med Selenium Felt for sti til kerneudvidelser

  3. Klik OK og genstart Selenium SDI.

    Bekrรฆftelsesprompt vises, nรฅr Selenium IDE genstartes for at indlรฆse udvidelsesfilen

  4. Du finder udvidelsen i kommandolisten.

    Selenium IDE-kommando-rullemenu med en liste over den nye textUpperCase-kommando fra user-extensions.js

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

Ofte Stillede Spรธrgsmรฅl

Det konventionelle navn er user-extensions.js, og tilfรธjelsesprogrammer pรฅ IDE-niveau brugte user-extensions-ide.js. Det รฆldre IDE lod dig pege pรฅ en hvilken som helst sti, sรฅ navnet var en konvention snarere end et hรฅrdt krav, men hold dig opdateret.ping det gรธr det nemmere at genkende delte suiter.

Prototypefunktioner er skrivebeskyttede, mens IDE'et indlรฆses, sรฅ en รฆndring foretaget efter opstart ignoreres. Gem filen, luk IDE'et helt, og รฅbn det igen. JavaScriptsyntaksfejl forhindrer ogsรฅ hele filen i at indlรฆses lydlรธst.

ร…bn browserkonsollen, og genstart IDE'en. Hold derefter รธje med en parse-fejl i filen. Tilfรธjelse af en console.log-linje รธverst i filen bekrรฆfter, om den overhovedet er indlรฆst, fรธr du begynder at fejlfinde individuelle funktioner.

Du skriver kun versionen med prรฆfikset do. Selenium IDE udleder AndWait-varianten for dig, som udfรธrer den samme operation og derefter venter pรฅ, at siden er fรฆrdigindlรฆst. Brug AndWait-formularen, nรฅr handlingen udlรธser navigation.

Maskinlรฆringsmodeller kan udarbejde standardteksten for en ny kommando og foreslรฅ en locatorstrategi ud fra et sidesnapshot. AI-assisteret locatorreparation er ogsรฅ nyttig her, fordi en brugerdefineret locateElementBy-funktion er prรฆcis den kode, der gรฅr i stykker, nรฅr markup รฆndres.

Delvist. Copilot gengiver Selenium.prototype- og PageBot.prototype-mรธnstre, fordi de forekommer bredt i รฆldre arkiver, men den kan opfinde hjรฆlpemetoder, der aldrig har eksisteret. Tjek alle foreslรฅede kald mod Selenese-kommandoreferencen, fรธr du stoler pรฅ den.

Ja. En fil, der kun indeholder en locateElementBy-funktion pรฅ PageBot.prototype, er gyldig. Den nye strategi bliver derefter tilgรฆngelig for alle eksisterende kommandoer, sรฅ klik, skriv og assert kan alle mรฅlrette elementer gennem den.

Selenium RC accepterede en brugerudvidelsesfil via en serverswitch, men RC og Selenium Kernen blev fjernet i Selenium 3. WebDriver har ingen tilsvarende hook, sรฅ den samme logik er skrevet som en almindelig hjรฆlpemetode i dit testframework.

Opsummer dette indlรฆg med: