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.
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.
- Aktion: Welke handeling voert u uit op het UI-scherm?
- Accessoren / Bewering: Welke verificatie voer je uit op de gegevens die je via de gebruikersinterface ontvangt?
- Locatiestrategie: Hoe vind je het element in de gebruikersinterface?
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.
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.
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.
- Ga naar Selenium IDE en klik Opties -> Optiesโฆ
- In de Algemeen Selecteer in dit gedeelte de locatie van het nieuw gecreรซerde object. Selenium Kernuitbreiding.
- Klik OK en herstart Selenium IDE.
- Je vindt de extensie in de lijst met opdrachten.
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









