Selenium Kernextensies (User-Extensions.js)

โšก Slimme samenvatting

Selenium Kernuitbreidingen, ook wel gebruikersuitbreidingen genoemd, voegen aangepaste acties, toegangsmethoden en zoekstrategieรซn toe aan Selenium IDE door te koppelen JavaScriptfuncties naar de Selenium en PageBot-prototypeobjecten wanneer de IDE start.

  • ๐Ÿ”˜ Drie pijlers: Elk Selenese-commando is een actie, een accessor of assertie, of een locatorstrategie.
  • โ˜‘๏ธ Naamgevingsregels: Acties beginnen met 'do', toegangsmethoden met 'get' of 'is', en locators met 'locateElementBy'.
  • โœ… Vrij wachtcommando: Door doTextUpperCase te registreren, zorgt de IDE ervoor dat textUpperCaseAndWait automatisch wordt gegenereerd.
  • ๐Ÿงช Laadmechanisme: De IDE leest user-extensions.js bij het opstarten, dus de tool moet na elke bewerking opnieuw worden opgestart.
  • ๏ธ Verouderde status: Selenium Kern en de Firefox-plugin IDE is buiten gebruik gesteld, en Selenium 3. De ondersteuning voor gebruikersuitbreidingen is uit de JAR-bestanden verwijderd.
  • ๐Ÿ“Š Moderne route: De huidige IDE voor browserextensies biedt in plaats daarvan een pluginmanifest en een opdracht om een โ€‹โ€‹script uit te voeren.

Selenium Kernuitbreidingen en het bestand user-extensions.js

Selenium Kernuitbreidingen

Om uitbreidingen te begrijpen, moeten we eerst de drie pijlers van Selenium IDEElke opdracht die u opneemt of typt in de IDE behoort tot een van de drie onderstaande categorieรซn, en elke schermafbeelding laat zien hoe die categorie in de lijst met IDE-opdrachten wordt weergegeven.

  1. Aktion: Welke handeling voert u uit op het UI-scherm?

    Selenium IDE-opdrachtenlijst met actieopdrachten zoals klikken en typen

  2. Accessoren / Bewering: Welke verificatie voer je uit op de gegevens die je via de gebruikersinterface ontvangt?

    Selenium IDE-toegangs- en beweringopdrachten met de voorvoegsels get, is, verify en assert

  3. Locatiestrategie: Hoe vind je het element in de gebruikersinterface?

    Selenium Strategieรซn voor het weergeven van doelvakken in de IDE, zoals id, naam, css en xpath, worden gebruikt om locaties te vinden.

Selenium De IDE wordt geleverd met een volwaardige bibliotheek die al een groot aantal acties, toegangsmethoden, beweringen en lokalisatiestrategieรซn bevat.

Soms heeft een project echter functionaliteit nodig die niet in die bibliotheek aanwezig is. In dat geval kunt u de bibliotheek uitbreiden door uw eigen aangepaste extensie toe te voegen. Deze aangepaste extensies worden een extensie genoemd. gebruikersextensie.

Stel, u hebt een actie nodig die tekst omzet naar hoofdletters voordat deze in een webpagina-element wordt geplaatst. Een dergelijke actie bestaat niet in de standaardbibliotheek, dus u maakt uw eigen gebruikersextensie. In deze handleiding leert u hoe u een gebruikersextensie bouwt die tekst omzet naar hoofdletters.

โš ๏ธ Voordat je begint: De hier beschreven workflow behoort tot Selenium Kern en het origineel Firefox-inpluggen Selenium IDE. Selenium Core is buiten gebruik gesteld en de ondersteuning voor gebruikersuitbreidingen is stopgezet. Selenium potten in Selenium 3. De onderstaande stappen en code zijn bewaard gebleven omdat een groot aantal oudere Selenese-suites er nog steeds van afhankelijk is; de moderne vervanging wordt later in dit artikel beschreven.

Vereiste om een โ€‹โ€‹te creรซren Selenium Gebruikersuitbreiding

Om een โ€‹โ€‹gebruikersextensie te maken voor Selenium IDE, je moet de basisconcepten kennen JavaScript en in het bijzonder de JavaScriptprototype-object. Het onderstaande diagram toont de twee prototype-objecten waaraan een gebruikersextensie zich koppelt.

Diagram van de Selenium prototype- en PageBot-prototypeobjecten die worden gebruikt door een gebruikersextensie.

Om je gebruikersextensie te maken, schrijf je het volgende: JavaScriptmethoden en voeg ze toe aan de Selenium objectprototype en naar het PageBot-objectprototype.

Hoe Selenium IDE herkent een gebruikersextensie

Nadat een gebruikersextensie is toegevoegd aan Selenium IDE en de IDE wordt gestart, elke functie die op die functies is geregistreerd JavaScriptprototypes zijn geladen, en Selenium De IDE herkent ze allemaal aan hun naam. Daarom zijn de naamgevingsvoorvoegsels in het volgende gedeelte geen stijlkeuze, maar de manier waarop de IDE uw commando classificeert.

Hoe maak je een gebruikersextensie aan?

Stap 1) Actie โ€“ alle acties beginnen met doAls de actie tekst naar hoofdletters omzet, is de naam ervan doTextUpperCaseWanneer je deze actiemethode toevoegt aan Selenium De IDE zelf creรซert een bijbehorende wachtmethode, dus doTextUpperCase produceert ook de wachtfunctie tekstUpperCaseAndWaitDe methode kan twee parameters accepteren.

Voorbeeld: tekstactie in hoofdletters

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

Stap 2) Accessors / Assertie โ€“ alle toegangspunten die geregistreerd staan โ€‹โ€‹op de Selenium objectprototypes worden voorafgegaan door krijgen or isBijvoorbeeld getValueFromCompoundTable of isValueFromCompoundTable. Een accessor kan twee parameters accepteren: รฉรฉn voor het doel en รฉรฉn voor het waardeveld in de testcase. De onderstaande schermafbeelding laat zien hoe deze voorvoegsels eruitzien nadat de extensie is geladen.

Selenium IDE toont get- en is-accessorcommando's die zijn gegenereerd door een gebruikersextensie.

Voor elke accessor, Selenium IDE genereert de bijbehorende verificatiefuncties met het voorvoegsel controleren en beweren, plus een wachtfunctie met het voorvoegsel wachten.

Voorbeeld: Voor teksttoegangsfuncties voor hoofdletters

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

Stap 3) Locatiestrategie โ€“ als je je eigen functie wilt maken om een โ€‹โ€‹element te lokaliseren, breid dan het PageBot-prototype uit met een functie die begint met element zoekenHet vereist twee parameters: de zoekstring en het document waarin het element moet worden gezocht.

Voorbeeld: voor tekstzoeker in hoofdletters

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

Sla alle drie de functies op in รฉรฉn bestand met de naam gebruikers-extensies.jsHet bestand is eenvoudig. JavaHet is een script, dus elke teksteditor volstaat.

Hoe gebruik je de nieuw ontwikkelde kernextensie?

Het laden van het bestand is in het origineel een taak in vier stappen. Firefox-plugin IDE. Elke onderstaande schermafbeelding komt overeen met de genummerde stap ernaast.

  1. Ga naar Selenium IDE en klik Opties -> Optiesโ€ฆ

    Selenium Het IDE-optiesmenu werd geopend om het dialoogvenster Opties te bereiken.

  2. In de Algemeen Selecteer in dit gedeelte de locatie van het nieuw gecreรซerde object. Selenium Kernuitbreiding.

    Selenium IDE-opties dialoogvenster, tabblad Algemeen met de Selenium Kernbestandspadveld voor extensies

  3. Klik OK en herstart Selenium IDE.

    Bevestigingsmelding wordt weergegeven wanneer Selenium De IDE wordt opnieuw opgestart om het extensiebestand te laden.

  4. Je vindt de extensie in de lijst met opdrachten.

    Selenium In het dropdownmenu van de IDE-opdracht wordt de nieuwe opdracht `textUpperCase` uit `user-extensions.js` weergegeven.

Selenium Kernuitbreidingen versus Selenium IDE-extensies

De twee termen worden in ouder materiaal door elkaar gebruikt, maar ze beschrijven verschillende lagen, en het onderscheid is belangrijk wanneer je besluit waar je aangepaste logica wilt plaatsen.

Aspect Selenium Kernuitbreiding Selenium IDE-extensie
Wat het uitbreidt De Selenese-opdrachtbibliotheek die tijdens het afspelen wordt gebruikt. De IDE-applicatie zelf
Bestand geladen gebruikers-extensies.js user-extensions-ide.js in de oude IDE, een pluginmanifest in de huidige IDE
Typisch gebruik Nieuwe acties, toegangs- en lokalisatiestrategieรซn Nieuwe menu-items, panelen, formaten en opnamegedrag
aangeraakte objecten Selenium.prototype en PageBot.prototype IDE-editor- en recorder-API's
Loopt tijdens Test uitvoering Auteurschap en opname

Kort gezegd verandert een Core-extensie wat een test kan doen, terwijl een IDE-extensie verandert wat de tool kan doen.

Hoe de moderne Selenium IDE vervangt user-extensions.js

De Firefox-inpluggen Selenium IDE werkte niet meer toen Firefox Overgestapt naar de WebExtensions-architectuur en de IDE is herschreven als een Chrome-implementatie. Firefox en de Edge-browserextensie. Die herziening heeft het hierboven getoonde veld 'Opties' verwijderd, waardoor er geen mogelijkheid meer is om naar een user-extensions.js-bestand te verwijzen. Twee ondersteunde alternatieven bieden dezelfde functionaliteit.

  • Het commando om het script uit te voeren. Voor eenmalig gebruik JavaScript, voeg een toe script uitvoeren or asynchrone script uitvoeren Voer de test direct uit en sla het resultaat op in een variabele. Dit is het meest vergelijkbaar met een kleine, aangepaste actie.
  • Een plugin. Voor herbruikbare commando's kunt u een browserextensie bouwen die een manifest registreert bij de IDE. Het manifest declareert elk nieuw commando met een ID, een naam, een optioneel type en documentatie, en het kan ook nieuwe locators declareren.

Het manifest wordt geregistreerd door een bericht naar de IDE-extensie te sturen, zoals weergegeven in de officiรซle documentatie. Selenium IDE-plugindocumentatie.

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

De naamgevingsconventies blijven behouden na de migratie: een plugin-commando wordt nog steeds eenmaal gedeclareerd en vervolgens hergebruikt in elke test, precies zoals dat bij een Core-extensie het geval was.

Populaire extensies en plug-ins die worden gebruikt in Selenium IDE

De onderstaande add-ons werden het meest gebruikt in de oude IDE. Verschillende ervan, zoals stroombesturing en schermafbeelding bij fouten, zijn nu ingebouwd in de huidige IDE of beschikbaar als onderhouden plug-ins.

Naam Doel
Favorieten Om een โ€‹โ€‹testsuite als favoriet te markeren en deze met รฉรฉn klik uit te voeren.
Flex-piloot X Voor op Flex gebaseerde automatisering
FlexMonkium Voor op Adobe Flex gebaseerd opnemen en afspelen het testen van in Selenium IDE
Bestandsregistratie Voor het opslaan van logs in een bestand
Flow Control Om de testuitvoeringsstroom te controleren
Markeer elementen Om een โ€‹โ€‹webbesturingselement te markeren
Impliciete wachttijd Een element gedurende een bepaalde tijdslimiet afwachten.
Screenshot bij mislukken Maak een screenshot bij een fout
Test resultaten Sla de testcase resultaat voor een testsuite in รฉรฉn klik

De oude SeleniumDe HQ-downloadpagina waar deze bestanden werden aangeboden, bestaat niet meer. De huidige plugins en de IDE zelf worden gedistribueerd via de Selenium IDE-projectsite en vanuit Chrome, Firefox en Edge-add-onwinkels.

Download de Selenium Kernextensie die in deze zelfstudie wordt gebruikt

Veelgestelde vragen

De gebruikelijke naam is user-extensions.js, en IDE-add-ons gebruikten user-extensions-ide.js. De oude IDE stond toe dat je naar elk pad verwees, dus de naam was meer een conventie dan een harde vereiste, maar keeping Het maakt gedeelde suites gemakkelijker te herkennen.

Prototypefuncties worden alleen gelezen tijdens het laden van de IDE, dus een bewerking die na het opstarten wordt uitgevoerd, wordt genegeerd. Sla het bestand op, sluit de IDE volledig af en open deze opnieuw. JavaEen syntaxfout in het script zorgt er ook voor dat het hele bestand niet stilzwijgend wordt geladen.

Open de browserconsole en herstart de IDE. Houd vervolgens het bestand in de gaten om te controleren of er een parseerfout optreedt. Door bovenaan het bestand een `console.log`-regel toe te voegen, kunt u bevestigen of het bestand รผberhaupt is geladen voordat u begint met het debuggen van individuele functies.

Je schrijft alleen de versie met het voorvoegsel 'do'. Selenium IDE genereert automatisch de AndWait-variant, die dezelfde bewerking uitvoert en vervolgens wacht tot de pagina volledig is geladen. Gebruik de AndWait-vorm wanneer de actie navigatie activeert.

Machine learning-modellen kunnen de basisstructuur voor een nieuw commando opstellen en een locatorstrategie voorstellen op basis van een pagina-snapshot. AI-ondersteunde locatorreparatie is hier ook nuttig, omdat een aangepaste locateElementBy-functie precies de code is die niet meer werkt wanneer de markup verandert.

Gedeeltelijk. Copilot reproduceert de SeleniumDe patronen .prototype en PageBot.prototype komen vaak voor in oudere repositories, maar ze kunnen hulpmethoden introduceren die nooit hebben bestaan. Controleer elke voorgestelde aanroep aan de hand van de Selenese-opdrachtreferentie voordat u deze vertrouwt.

Ja. Een bestand dat alleen een locateElementBy-functie op PageBot.prototype bevat, is geldig. De nieuwe strategie wordt dan beschikbaar voor alle bestaande commando's, zodat click, type en assert allemaal elementen ermee kunnen targeten.

Selenium RC accepteerde een gebruikersextensiebestand via een serverswitch, maar RC en Selenium Kernen werden verwijderd in Selenium 3. WebDriver heeft geen equivalente hook, dus dezelfde logica wordt als een gewone hulpfunctie in je testframework geschreven.

Vat dit bericht samen met: