Selenium Kjerneutvidelser (User-Extensions.js)

⚡ Smart oppsummering

Selenium Kjerneutvidelser, også kalt brukerutvidelser, legger til tilpassede handlinger, tilgangsenheter og lokaliseringsstrategier til Selenium IDE ved å koble til JavaSkriptfunksjoner til Selenium og PageBot-prototypeobjekter når IDE-en starter.

  • 🔘 Tre søyler: Hver selenese-kommando er en handling, en aksessor eller påstand, eller en lokaliseringsstrategi.
  • ☑️ Navneregler: Handlinger begynner med do, accessorer med get eller is, og locatorer med locateElementBy.
  • ✅ Ventetid-kommando: Registrering av doTextUpperCase får IDE-en til å generere textUpperCaseAndWait automatisk.
  • 🧪 Lastmekanisme: IDE-en leser user-extensions.js ved oppstart, så verktøyet må startes på nytt etter hver redigering.
  • 🛠️ Eldre status: Selenium Kjernen og Firefox-plugin IDE ble pensjonert, og Selenium 3 fjernet støtte for brukerutvidelser fra JAR-filene.
  • 📊 Moderne rute: Det nåværende IDE-et for nettleserutvidelse eksponerer i stedet et plugin-manifest og en execute script-kommando.

Selenium Kjerneutvidelser og user-extensions.js-filen

Selenium Kjerneutvidelser

For å forstå utvidelser, la oss først forstå de tre søylene i Selenium IDEHver kommando du spiller inn eller skriver inn i IDE-en tilhører en av de tre kategoriene nedenfor, og hvert skjermbilde viser hvordan den kategorien vises i IDE-kommandolisten.

  1. Handling: Hvilken operasjon du utfører på brukergrensesnittskjermen.

    Selenium IDE-kommandoliste som viser handlingskommandoer som klikk og skriv

  2. Tilgangspersoner / Påstand: Hvilken verifisering du utfører på dataene du får fra brukergrensesnittet.

    Selenium IDE-tilgangs- og påstandskommandoer med prefikset get, is, verify og assert

  3. Lokaliseringsstrategi: Hvordan du finner elementet i brukergrensesnittet.

    Selenium IDE-målboks som viser lokasjonsstrategier som id, navn, css og xpath

Selenium IDE leveres med et modent bibliotek som allerede inneholder mange handlinger, aksessorer og påstander, og lokaliseringsstrategier.

Noen ganger trenger imidlertid et prosjekt funksjonalitet som ikke finnes i det biblioteket. I så fall kan du utvide biblioteket ved å legge til din egen tilpassede utvidelse. Disse tilpassede utvidelsene kalles en brukerutvidelse.

La oss for eksempel si at du trenger en handling som konverterer tekst til store bokstaver før du fyller den inn i et webelement. Ingen slik handling finnes i standardbiblioteket, så du oppretter din egen brukerutvidelse. I denne veiledningen lærer du hvordan du bygger en brukerutvidelse som konverterer tekst til store bokstaver.

⚠️ Før du starter: arbeidsflyten som er beskrevet her tilhører Selenium Kjernen og originalen Firefox-plugin Selenium IDE. Selenium Core er pensjonert, og støtte for brukerutvidelser er fjernet fra Selenium krukker i Selenium 3. Trinnene og koden nedenfor er bevart fordi et stort antall eldre Selenese-pakker fortsatt er avhengige av dem; den moderne erstatningen er beskrevet senere i denne artikkelen.

Krav om å opprette en Selenium Brukerutvidelse

For å opprette en brukerutvidelse for Selenium IDE, du trenger de grunnleggende konseptene for JavaScript og, spesielt, den JavaSkriptprototypeobjekt. Diagrammet nedenfor viser de to prototypeobjektene som en brukerutvidelse knytter seg til.

Diagram over Selenium prototype- og PageBot-prototypeobjekter brukt av en brukerutvidelse

For å opprette brukerutvidelsen din, skriver du JavaSkriptmetoder og legg dem til Selenium objektprototypen og til PageBot-objektprototypen.

Hvordan Selenium IDE gjenkjenner en brukerutvidelse

Etter at en brukerutvidelse er lagt til Selenium IDE og IDE-en startes, hver funksjon som er registrert på disse JavaSkriptprototyper lastes inn, og Selenium IDE gjenkjenner hver enkelt ved navn. Derfor er navngivningsprefiksene i neste avsnitt ikke et stilvalg – de er hvordan IDE klassifiserer kommandoen din.

Slik oppretter du en brukerutvidelse

Trinn 1) Handling – alle handlinger starter med doHvis handlingen konverterer tekst til store bokstaver, blir navnet doTextUpperCaseNår du legger til denne handlingsmetoden til Selenium IDE, IDE-en selv oppretter en samsvarende ventemetode, så doTextUpperCase produserer også ventefunksjonen tekstStore bokstaverOgVentMetoden kan akseptere to parametere.

Eksempel: Teksthandling med store bokstaver

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

Trinn 2) Tilganger / Påstand – alle tilgangsdeltakere registrert på Selenium objektprototypene har prefikset få or is, for eksempel getValueFromCompoundTable eller isValueFromCompoundTable. En aksessor kan godta to parametere, én for målet og én for verdifeltet i testtilfellet. Skjermbildet nedenfor viser hvordan disse prefiksene vises når utvidelsen er lastet inn.

Selenium IDE som viser get- og is-tilgangskommandoer generert fra en brukerutvidelse

For hver aksessor, Selenium IDE genererer de tilsvarende verifiseringsfunksjonene med prefiksene verifisere og hevde, pluss en ventefunksjon prefiksert av ventPå.

Eksempel: For teksttilgang med store bokstaver

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;
};

Trinn 3) Lokaliseringsstrategi – hvis du vil lage din egen funksjon for å finne et element, utvider du PageBot-prototypen med en funksjon prefikset med locateElementByDen trenger to parametere: locator-strengen og dokumentet der elementet skal søkes i.

Eksempel: For tekstsøker for store bokstaver

// 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;
};

Lagre alle tre funksjonene i én fil med navnet brukerutvidelser.jsFilen er enkel JavaSkript, så hvilken som helst tekstredigerer er tilstrekkelig.

Slik bruker du den nyopprettede kjerneutvidelsen

Å laste inn filen er en oppgave i fire trinn i originalen Firefox-plugin IDE. Hvert skjermbilde nedenfor tilsvarer det nummererte trinnet ved siden av.

  1. Gå til Selenium IDE og klikk Alternativer -> Alternativer…

    Selenium IDE-alternativer-menyen åpnes for å nå dialogboksen Alternativer

  2. på Informasjon seksjonen, velg plasseringen til den nyopprettede Selenium Kjerneutvidelse.

    Selenium IDE-alternativer-dialogboksen Generelt-fanen med Selenium Felt for sti til kjerneutvidelser

  3. Klikk OK og start på nytt Selenium SDI.

    Bekreftelsesmelding vises når Selenium IDE startes på nytt for å laste inn utvidelsesfilen

  4. Du finner utvidelsen i kommandolisten.

    Selenium IDE-kommandorullegardinmeny som viser den nye textUpperCase-kommandoen fra user-extensions.js

Selenium Kjerneutvidelser vs. Selenium IDE-utvidelser

De to begrepene brukes om hverandre i eldre materiale, men de beskriver forskjellige lag, og skillet er viktig når du bestemmer deg for hvor du skal plassere tilpasset logikk.

Aspekt Selenium Kjerneutvidelse Selenium IDE-utvidelse
Hva den strekker seg Selenese-kommandobiblioteket som brukes under avspilling Selve IDE-applikasjonen
Filen er lastet inn brukerutvidelser.js user-extensions-ide.js i den eldre IDE-en, et plugin-manifest i den nåværende IDE-en
Typisk bruk Nye handlinger, tilgangspunkter og lokaliseringsstrategier Nye menyelementer, paneler, formater og opptakerens oppførsel
Objekter berørt Selenium.prototype og PageBot.prototype IDE-redigerings- og opptaks-API-er
Kjører under Test utførelse Forfatterskap og innspilling

Kort sagt, en Core-utvidelse endrer hva en test kan gjøre, mens en IDE-utvidelse endrer hva verktøyet kan gjøre.

Hvordan den moderne Selenium IDE erstatter user-extensions.js

Ocuco Firefox-plugin Selenium IDE sluttet å virke da Firefox flyttet til WebExtensions-arkitekturen, og IDE-en ble omskrevet som en Chrome, Firefox og Edge-nettleserutvidelsen. Den omskrivingen fjernet alternativfeltet som vises ovenfor, så det er ikke noe sted å peke på en user-extensions.js-fil. To støttede alternativer dekker samme område.

  • Kommandoen «utfør skript». For engangsforeteelser JavaSkript, legg til et utfør skript or kjøre asynkront skript gå direkte inn i testen og lagre resultatet i en variabel. Dette er det nærmeste som en liten tilpasset handling.
  • En plugin. For gjenbrukbare kommandoer, bygg en nettleserutvidelse som registrerer et manifest med IDE-en. Manifestet deklarerer hver nye kommando med en ID, et navn, en valgfri type og dokumentasjon, og det kan også deklarere nye lokatorer.

Manifestet registreres ved å sende en melding til IDE-utvidelsen, som vist i den offisielle Selenium Dokumentasjon for 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);

Navngivningsdisiplinen overlever migreringen: en plugin-kommando deklareres fortsatt én gang og brukes deretter på nytt i hver test, akkurat som en Core-utvidelse ble.

Populære utvidelser og plugin-moduler brukt i Selenium IDE

Tilleggene nedenfor var de mest brukte i den eldre IDE-en. Flere av dem, som flytkontroll og screenshot-on-failure, er nå innebygd i den nåværende IDE-en eller tilgjengelige som vedlikeholdte plugins.

Navn Formål
Favoritter For å markere en testpakke som favoritt og kjøre den med ett klikk
Flex Pilot X For Flex-basert automatisering
FlexMonkium For Adobe Flex-basert opptak og avspilling testing in Selenium IDE
Fillogging For å lagre logger i en fil
Flytkontroll For å kontrollere flyten av testutførelse
Marker elementer For å markere en webkontroll
Implisitt vent Å vente på et element i en viss tidsperiode
Skjermbilde ved feil Ta et skjermbilde ved feil
Testresultater Lagre testforsøk resultat for en testpakke med ett klikk

Den gamle SeleniumHQ-nedlastingssiden som var vert for disse filene finnes ikke lenger. Nåværende programtillegg og selve IDE-en distribueres fra Selenium IDE-prosjektnettsted og fra Chrome, Firefox og Edge-tilleggsbutikker.

Last ned Selenium Core Extension brukt i denne opplæringen

Spørsmål og svar

Det konvensjonelle navnet er user-extensions.js, og tillegg på IDE-nivå brukte user-extensions-ide.js. Den eldre IDE-en lot deg peke på en hvilken som helst bane, så navnet var en konvensjon snarere enn et hardt krav, men holdping det gjør det lettere å gjenkjenne delte suiter.

Prototypefunksjoner er skrivebeskyttet mens IDE-en lastes inn, så en redigering gjort etter oppstart ignoreres. Lagre filen, lukk IDE-en helt og åpne den på nytt. JavaSkriptsyntaksfeil hindrer også hele filen i å lastes inn stille.

Åpne nettleserkonsollen og start IDE-en på nytt, og se deretter etter en parsefeil i filen. Å legge til en console.log-linje øverst i filen bekrefter om den i det hele tatt lastet inn før du begynner å feilsøke individuelle funksjoner.

Du skriver bare versjonen med do-prefikset. Selenium IDE utleder AndWait-varianten for deg, som utfører den samme operasjonen og deretter venter på at siden skal lastes inn. Bruk AndWait-skjemaet når handlingen utløser navigasjon.

Maskinlæringsmodeller kan utarbeide standardteksten for en ny kommando og foreslå en locatorstrategi fra et sidesnapshot. AI-assistert locatorreparasjon er også nyttig her, fordi en tilpasset locateElementBy-funksjon er akkurat den koden som brytes når markup endres.

Delvis. Copilot gjengir Selenium.prototype- og PageBot.prototype-mønstre fordi de forekommer mye i eldre repositorier, men den kan oppfinne hjelpemetoder som aldri har eksistert. Sjekk alle foreslåtte kall mot Selenese-kommandoreferansen før du stoler på den.

Ja. En fil som ikke inneholder annet enn en locateElementBy-funksjon på PageBot.prototype er gyldig. Den nye strategien blir da tilgjengelig for alle eksisterende kommandoer, så klikk, skriv og assert kan alle målrette elementer gjennom den.

Selenium RC godtok en brukerutvidelsesfil gjennom en serversvitsj, men RC og Selenium Kjernen ble fjernet i Selenium 3. WebDriver har ingen tilsvarende hook, så den samme logikken er skrevet som en vanlig hjelpemetode i testrammeverket ditt.

Oppsummer dette innlegget med: