Selenium Extensii de bază (User-Extensions.js)

⚡ Rezumat inteligent

Selenium Extensiile de bază, numite și extensii de utilizator, adaugă acțiuni personalizate, accesori și strategii de localizare la Selenium IDE prin atașarea JavaFuncții de script pentru Selenium și obiecte prototip PageBot la pornirea IDE-ului.

  • 🔘 Trei piloni: Fiecare comandă Selenese este o acțiune, un accesor sau o aserțiune sau o strategie de localizare.
  • ☑️ Reguli de denumire: Acțiunile încep cu do, accesorii cu get sau is, iar locatorii cu locateElementBy.
  • Comandă de așteptare liberă: Înregistrarea comenzii doTextUpperCase face ca IDE să genereze automat textUpperCaseAndWait.
  • 🧪 Mecanismul de încărcare: IDE-ul citește fișierul user-extensions.js la pornire, așa că instrumentul trebuie repornit după fiecare editare.
  • 🛠️ Stare moștenire: Selenium Nucleul și FirefoxIDE-ul plugin-urilor a fost retras și Selenium 3 a eliminat suportul pentru extensiile de utilizator din fișierele jar.
  • 📊 Rută modernă: IDE-ul actual pentru extensiile de browser expune în schimb un manifest al pluginului și o comandă de executare a scriptului.

Selenium Extensiile de bază și fișierul user-extensions.js

Selenium Extensii de bază

Pentru a înțelege extensiile, să înțelegem mai întâi cei trei piloni ai Selenium IDEFiecare comandă pe care o înregistrați sau o tastați în IDE aparține uneia dintre cele trei categorii de mai jos, iar fiecare captură de ecran arată cum apare acea categorie în lista de comenzi IDE.

  1. Acțiune: Ce operațiune efectuați pe ecranul interfeței utilizator.

    Selenium Listă de comenzi IDE care prezintă comenzi de acțiune, cum ar fi clic și tastare

  2. Accesori / Afirmații: Ce verificare efectuați asupra datelor pe care le obțineți de la interfața cu utilizatorul.

    Selenium Comenzi de accesare și aserțiune IDE cu prefixul get, is, verify și assert

  3. Strategia de localizare: Cum găsești elementul în interfața cu utilizatorul.

    Selenium Strategii de localizare a listei de casete țintă IDE, cum ar fi id, name, css și xpath

Selenium IDE vine cu o bibliotecă matură care conține deja o mulțime de acțiuni, accesori și aserțiuni, precum și strategii de localizare.

Uneori, însă, un proiect necesită funcționalități care nu se află în biblioteca respectivă. În această situație, puteți extinde biblioteca adăugând propria extensie personalizată. Aceste extensii personalizate se numesc extensia utilizator.

De exemplu, să presupunem că aveți nevoie de o acțiune care convertește textul în majuscule înainte de a-l completa într-un element web. Nu există o astfel de acțiune în biblioteca implicită, așa că vă creați propria extensie de utilizator. În acest tutorial veți învăța cum să construiți o extensie de utilizator care convertește textul în majuscule.

⚠️ Înainte de a începe: fluxul de lucru descris aici aparține Selenium Nucleul și originalul Firefox-conecteaza Selenium IDE. Selenium Core a fost retras, iar suportul pentru extensiile de utilizator a fost eliminat de la Selenium borcane în Selenium 3. Pașii și codul de mai jos sunt păstrați deoarece un număr mare de suite Selenese vechi încă depind de acestea; înlocuirea modernă este descrisă mai târziu în acest articol.

Cerința de a crea un Selenium Extensie utilizator

Pentru a crea o extensie de utilizator pentru Selenium IDE, ai nevoie de conceptele de bază ale JavaScenariu și, în special, JavaObiect prototip script. Diagrama de mai jos prezintă cele două obiecte prototip la care se atașează o extensie de utilizator.

Diagrama Selenium Obiecte prototip și prototip PageBot utilizate de o extensie de utilizator

Pentru a crea extensia de utilizator, scrieți JavaMetode de script și adăugați-le la Selenium prototipul obiectului și prototipul obiectului PageBot.

Cum Selenium IDE recunoaște o extensie de utilizator

După ce o extensie de utilizator este adăugată la Selenium IDE și IDE-ul este pornit, fiecare funcție înregistrată pe acestea JavaPrototipurile de script sunt încărcate și Selenium IDE recunoaște fiecare comandă după nume. De aceea, prefixele de denumire din secțiunea următoare nu sunt o alegere de stil - ci reprezintă modul în care IDE clasifică comanda.

Cum se creează o extensie de utilizator

Pasul 1) Acțiune – toate acțiunile încep cu doDacă acțiunea convertește textul în majuscule, numele său este doTextUpperCaseCând adăugați această metodă de acțiune la Selenium IDE, IDE-ul în sine creează o metodă de așteptare corespunzătoare, deci doTextUpperCase produce și funcția de așteptare textMajusculeȘiAșteptațiMetoda poate accepta doi parametri.

Exemplu: Acțiune de text cu majuscule

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

Pasul 2) Accesori / Afirmații – toți utilizatorii de acces înregistrați pe Selenium prototipul obiectului este prefixat de obține or is, de exemplu getValueFromCompoundTable sau isValueFromCompoundTable. Un accesor poate accepta doi parametri, unul pentru țintă și unul pentru câmpul de valoare din cazul de testare. Captura de ecran de mai jos arată cum apar aceste prefixe odată ce extensia este încărcată.

Selenium IDE care afișează comenzile de accesare get și is generate de o extensie de utilizator

Pentru fiecare accesor, Selenium IDE generează funcțiile de verificare corespunzătoare prefixate de verifica și afirma, plus o funcție de așteptare prefixată de așteptați.

Exemplu: Pentru accesori de text cu majuscule

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

Pasul 3) Strategia de localizare – dacă vrei să-ți creezi propria funcție pentru a localiza un element, extinde prototipul PageBot cu o funcție prefixată de locateElementByAcceptă doi parametri: șirul de caractere al locatorului și documentul în care trebuie căutat elementul.

Exemplu: pentru Localizatorul de text cu majuscule

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

Salvați toate cele trei funcții într-un singur fișier numit extensii-utilizator.jsFișierul este simplu JavaScript, deci orice editor de text este suficient.

Cum se utilizează extensia Core nou creată

Încărcarea fișierului este o sarcină în patru pași în versiunea originală Firefox-plugin IDE. Fiecare captură de ecran de mai jos corespunde pasului numerotat de lângă ea.

  1. Accesează Selenium IDE și faceți clic Opțiuni -> Opțiuni…

    Selenium Meniul Opțiuni IDE s-a deschis pentru a accesa caseta de dialog Opțiuni

  2. În General secțiune, selectați locația elementului nou creat Selenium Extensia nucleului.

    Selenium Fila General din caseta de dialog Opțiuni IDE cu Selenium Câmpul căii fișierului extensiilor principale

  3. Clic OK și reporniți Selenium SDI.

    Solicitarea de confirmare este afișată când Selenium IDE este repornit pentru a încărca fișierul extensiei

  4. Veți găsi extensia în lista de comenzi.

    Selenium Meniu derulant de comenzi IDE care listează noua comandă textUpperCase din user-extensions.js

Selenium Extensii de bază vs. Selenium Extensii IDE

Cei doi termeni sunt folosiți interschimbabil în materialele mai vechi, dar descriu straturi diferite, iar distincția contează atunci când decideți unde să plasați logica personalizată.

Aspect Selenium Extensie de bază Selenium Extensie IDE
Ceea ce extinde Biblioteca de comenzi Selenese utilizată în timpul redării Aplicația IDE în sine
Fișier încărcat extensii-utilizator.js user-extensions-ide.js în IDE-ul vechi, un manifest de plugin în IDE-ul curent
Utilizare tipică Acțiuni noi, accesori și strategii de localizare Noi elemente de meniu, panouri, formate și comportamentul înregistratorului
Obiecte atinse Selenium.prototype și PageBot.prototype API-uri pentru editorul și înregistrarea IDE
Se execută în timpul Executarea testului Autorizare și înregistrare

Pe scurt, o extensie Core schimbă ceea ce poate face un test, în timp ce o extensie IDE schimbă ceea ce poate face instrumentul.

Cum Modernul Selenium IDE înlocuiește user-extensions.js

Firefox-conecteaza Selenium IDE a încetat să funcționeze când Firefox s-a mutat la arhitectura WebExtensions, iar IDE-ul a fost rescris ca Chrome, Firefox și extensia de browser Edge. Această rescriere a eliminat câmpul Opțiuni afișat mai sus, deci nu există niciun loc pentru a indica un fișier user-extensions.js. Două alternative acceptate acoperă același domeniu.

  • Comanda de executare a scriptului. Pentru o singură dată JavaScript, adăugați un executați scriptul or executați scriptul asincron treceți direct la test și stocați rezultatul într-o variabilă. Acesta este cel mai apropiat echivalent al unei mici acțiuni personalizate.
  • Un plugin. Pentru comenzi reutilizabile, construiți o extensie de browser care înregistrează un manifest în IDE. Manifestul declară fiecare comandă nouă cu un ID, un nume, un tip opțional și documentație și poate declara și locatori noi.

Manifestul este înregistrat prin trimiterea unui mesaj către extensia IDE, așa cum se arată în fișierul oficial Selenium Documentația pluginului IDE.

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

Disciplina de denumire supraviețuiește migrării: o comandă de plugin este încă declarată o singură dată și apoi reutilizată în fiecare test, exact așa cum a fost o extensie Core.

Extensii și plugin-uri populare utilizate în Selenium IDE

Add-on-urile de mai jos au fost cele mai utilizate în IDE-ul vechi. Mai multe dintre ele, cum ar fi controlul fluxului și capturile de ecran în caz de eșec, sunt acum încorporate în IDE-ul actual sau disponibile ca plugin-uri întreținute.

Nume Scop
Favorite Pentru a marca o suită de teste ca favorită și a o executa cu un singur clic
Flex Pilot X Pentru automatizarea bazată pe Flex
FlexMonkium Pentru înregistrarea și redarea bazate pe Adobe Flex de testare in Selenium IDE
Înregistrare fișiere Pentru salvarea jurnalelor într-un fișier
Controlul debitului Pentru a controla fluxul de execuție a testului
Evidențiați elemente Pentru a evidenția un control web
Așteptați implicit A aștepta un element pentru o anumită limită de timp
Captură de ecran la Eșec Faceți o captură de ecran la eșec
Rezultatele testului Salveaza caz de testare rezultat pentru o suită de teste cu un singur clic

Bătrânii SeleniumPagina de descărcare HQ care găzduia aceste fișiere nu mai există. Pluginurile actuale și IDE-ul în sine sunt distribuite de la Selenium Site-ul proiectului IDE și din Chrome, Firefox și magazine de extensii Edge.

Descărcați Selenium Extensia de bază utilizată în acest tutorial

Întrebări frecvente

Numele convențional este user-extensions.js, iar extensiile la nivel de IDE foloseau user-extensions-ide.js. IDE-ul vechi permitea să indice orice cale, așa că numele era o convenție, nu o cerință strictă, dar...ping face ca apartamentele comune să fie mai ușor de recunoscut.

Funcțiile prototip sunt doar pentru citire în timp ce IDE-ul se încarcă, așadar o editare făcută după pornire este ignorată. Salvați fișierul, închideți IDE-ul complet și redeschideți-l. A JavaEroarea de sintaxă a scriptului împiedică, de asemenea, încărcarea silențioasă a întregului fișier.

Deschideți consola browserului și relansați IDE-ul, apoi fiți atenți la o eroare de analiză a fișierului. Adăugarea unei linii console.log în partea de sus a fișierului confirmă dacă acesta s-a încărcat înainte de a începe depanarea funcțiilor individuale.

Scrii doar versiunea cu prefixul "do". Selenium IDE derivă varianta AndWait, care efectuează aceeași operațiune și apoi așteaptă ca pagina să se termine de încărcat. Folosește formularul AndWait atunci când acțiunea declanșează navigarea.

Modelele de învățare automată pot schița o nouă comandă și pot sugera o strategie de localizare dintr-o instantanee a paginii. Repararea localizatorului asistată de inteligență artificială este, de asemenea, utilă aici, deoarece o funcție personalizată locateElementBy este exact codul care se defectează atunci când se modifică markup-ul.

Parțial. Copilot reproduce SeleniumModelele .prototype și PageBot.prototype deoarece apar pe scară largă în repozitorii mai vechi, dar este posibil să inventeze metode helper care nu au existat niciodată. Verificați fiecare apel sugerat în raport cu referința comenzii Selenese înainte de a o considera de încredere.

Da. Un fișier care nu conține nimic altceva decât o funcție locateElementBy pe PageBot.prototype este valid. Noua strategie devine apoi disponibilă pentru fiecare comandă existentă, astfel încât clicul, tastarea și afirmarea pot viza toate elementele prin intermediul acesteia.

Selenium RC a acceptat un fișier cu extensii de utilizator printr-un switch de server, dar RC și Selenium Nucleul a fost îndepărtat în Selenium 3. WebDriver nu are un hook echivalent, deci aceeași logică este scrisă ca o metodă auxiliară obișnuită în framework-ul de testare.

Rezumați această postare cu: