Selenium Core Extensions (User-Extensions.js)

โšก Chytrรฉ shrnutรญ

Selenium Zรกkladnรญ rozลกรญล™enรญ, nazรฝvanรก takรฉ uลพivatelskรก rozลกรญล™enรญ, pล™idรกvajรญ vlastnรญ akce, pล™รญstupovรฉ objekty a strategie lokรกtoru do Selenium IDE pล™ipojenรญm JavaFunkce skriptu pro Selenium a prototypovรฉ objekty PageBot pล™i spuลกtฤ›nรญ IDE.

  • ๐Ÿ”˜ Tล™i pilรญล™e: Kaลพdรฝ pล™รญkaz v Selenese je akce, pล™รญstupovรฝ prvek nebo aserce, pล™รญpadnฤ› strategie lokรกtoru.
  • โ˜‘๏ธ Pravidla pojmenovรกnรญ: Akce zaฤรญnajรญ pล™รญkazem do, pล™รญstupovรฉ metody pล™รญkazem get nebo is a lokรกtory pล™รญkazem locateElementBy.
  • (Tj. Pล™รญkaz pro volnรฉ ฤekรกnรญ: Registrace doTextUpperCase zpลฏsobรญ, ลพe IDE automaticky generuje textUpperCaseAndWait.
  • ๐Ÿงช Naklรกdacรญ mechanismus: IDE pล™i spuลกtฤ›nรญ naฤte soubor user-extensions.js, takลพe nรกstroj je nutnรฉ po kaลพdรฉ รบpravฤ› restartovat.
  • ๐Ÿ› ๏ธ Stav starลกรญ verze: Selenium Jรกdro a Firefox-plugin IDE bylo vyล™azeno a Selenium 3 zruลกil podporu uลพivatelskรฝch rozลกรญล™enรญ z JAR balรญฤkลฏ.
  • ๐Ÿ“Š Modernรญ trasa: Aktuรกlnรญ IDE pro rozลกรญล™enรญ prohlรญลพeฤe mรญsto toho zpล™รญstupลˆuje manifest pluginu a pล™รญkaz pro spuลกtฤ›nรญ skriptu.

Selenium Zรกkladnรญ rozลกรญล™enรญ a soubor user-extensions.js

Selenium Rozลกรญล™enรญ jรกdra

Abychom pochopili rozลกรญล™enรญ, nejprve si ujasnฤ›me tล™i pilรญล™e Selenium IDEKaลพdรฝ pล™รญkaz, kterรฝ zaznamenรกte nebo zadรกte do IDE, patล™รญ do jednรฉ ze tล™รญ nรญลพe uvedenรฝch kategoriรญ a kaลพdรฝ snรญmek obrazovky ukazuje, jak se danรก kategorie zobrazuje v seznamu pล™รญkazลฏ IDE.

  1. Akce: Jakou operaci provรกdรญte na obrazovce uลพivatelskรฉho rozhranรญ.

    Selenium Seznam pล™รญkazลฏ IDE zobrazujรญcรญ akฤnรญ pล™รญkazy, jako je kliknutรญ a psanรญ

  2. Pล™รญstupovรฉ metody / Tvrzenรญ: Jakรฉ ovฤ›ล™enรญ provรกdรญte u dat zรญskanรฝch z uลพivatelskรฉho rozhranรญ.

    Selenium Pล™รญkazy pro pล™รญstup k IDE a assertion s pล™edponou get, is, verify a assert

  3. Strategie lokรกtoru: Jak najdete prvek v uลพivatelskรฉm rozhranรญ.

    Selenium Cรญlovรฉ pole IDE vypisujรญcรญ strategie lokรกtoru, jako je ID, nรกzev, CSS a XPath

Selenium IDE je dodรกvรกno s propracovanou knihovnou, kterรก jiลพ obsahuje spoustu akcรญ, pล™รญstupovรฝch metod a asercรญ a strategiรญ lokรกtoru.

Nฤ›kdy vลกak projekt potล™ebuje funkce, kterรฉ v danรฉ knihovnฤ› nejsou. V takovรฉ situaci mลฏลพete knihovnu rozลกรญล™it pล™idรกnรญm vlastnรญho rozลกรญล™enรญ. Tato vlastnรญ rozลกรญล™enรญ se nazรฝvajรญ uลพivatelskรฉ rozลกรญล™enรญ.

Pล™edpoklรกdejme napล™รญklad, ลพe potล™ebujete akci, kterรก pล™evede text na velkรก pรญsmena pล™ed jeho vloลพenรญm do webovรฉho prvku. Ve vรฝchozรญ knihovnฤ› takovรก akce neexistuje, takลพe si vytvoล™รญte vlastnรญ uลพivatelskรฉ rozลกรญล™enรญ. V tomto tutoriรกlu se nauฤรญte, jak vytvoล™it uลพivatelskรฉ rozลกรญล™enรญ, kterรฉ pล™evede text na velkรก pรญsmena.

โš ๏ธ Neลพ zaฤnete: Zde popsanรฝ pracovnรญ postup patล™รญ Selenium Jรกdro a originรกl Firefox-plugin Selenium IDE. Selenium Jรกdro bylo vyล™azeno a podpora uลพivatelskรฝch rozลกรญล™enรญ byla zruลกena. Selenium sklenice v Selenium 3. Nรญลพe uvedenรฉ kroky a kรณd jsou zachovรกny, protoลพe na nich stรกle zรกvisรญ velkรฉ mnoลพstvรญ starลกรญch sad Selenese; modernรญ nรกhrada je popsรกna dรกle v tomto ฤlรกnku.

Poลพadavek na vytvoล™enรญ Selenium Uลพivatelskรก pล™รญpona

Vytvoล™enรญ uลพivatelskรฉ linky pro Selenium IDE, potล™ebujete zรกkladnรญ pojmy JavaScรฉnรกล™ a zejmรฉna JavaObjekt prototypu skriptu. Nรญลพe uvedenรฝ diagram ukazuje dva objekty prototypลฏ, ke kterรฝm se uลพivatelskรฉ rozลกรญล™enรญ pล™ipojuje.

Schรฉma Selenium Objekty prototypลฏ a prototypลฏ PageBot pouลพรญvanรฉ uลพivatelskรฝm rozลกรญล™enรญm

Chcete-li vytvoล™it uลพivatelskรฉ rozลกรญล™enรญ, napรญลกete JavaSkriptovacรญ metody a jejich pล™idรกnรญ do Selenium prototyp objektu a prototyp objektu PageBot.

Jak Selenium IDE rozpoznรกvรก uลพivatelskรฉ rozลกรญล™enรญ

Po pล™idรกnรญ uลพivatelskรฉ linky do Selenium IDE a IDE je spuลกtฤ›no, kaลพdรก funkce je na nich registrovanรก JavaPrototypy skriptลฏ jsou naฤteny a Selenium IDE rozpoznรกvรก kaลพdรฝ z nich podle jeho nรกzvu. Proto prefixy nรกzvลฏ v nรกsledujรญcรญ ฤรกsti nejsou stylistickou volbou โ€“ jde o to, jak IDE klasifikuje vรกลก pล™รญkaz.

Jak vytvoล™it uลพivatelskรฉ rozลกรญล™enรญ

Krok 1) Akce โ€“ vลกechny akce zaฤรญnajรญ doPokud akce pล™evรกdรญ text na velkรก pรญsmena, jejรญ nรกzev je doTextUpperCaseKdyลพ pล™idรกte tuto metodu akce do Selenium IDE, samotnรฉ IDE vytvรกล™รญ odpovรญdajรญcรญ metodu ฤekรกnรญ, takลพe doTextUpperCase takรฉ vytvรกล™รญ funkci wait textUpperCaseAndWaitMetoda mลฏลพe pล™ijรญmat dva parametry.

Pล™รญklad: Akce textu s velkรฝmi pรญsmeny

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

Krok 2) Pล™รญstupovรฉ metody / Tvrzenรญ โ€“ vลกichni pล™รญstupovรญ uลพivatelรฉ registrovanรญ na Selenium prototypy objektลฏ majรญ pล™edponu zรญskat or is, napล™รญklad getValueFromCompoundTable nebo isValueFromCompoundTable. Pล™รญstupovรฝ objekt mลฏลพe pล™ijรญmat dva parametry, jeden pro cรญl a jeden pro pole hodnoty v testovacรญm pล™รญpadฤ›. Nรกsledujรญcรญ snรญmek obrazovky ukazuje, jak se tyto prefixy zobrazujรญ po naฤtenรญ rozลกรญล™enรญ.

Selenium IDE zobrazujรญcรญ pล™รญkazy pro pล™รญstup k get a is generovanรฉ z uลพivatelskรฉho rozลกรญล™enรญ

Pro kaลพdรฝ pล™รญstupovรฝ objekt, Selenium IDE generuje odpovรญdajรญcรญ ovฤ›ล™ovacรญ funkce s prefixem ovฤ›ล™it si a tvrdรญ, plus funkce ฤekรกnรญ s pล™edponou ฤekat na.

Pล™รญklad: Pro pล™รญstupovรฉ objekty pro text s velkรฝmi pรญsmeny

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

Krok 3) Strategie lokรกtoru โ€“ pokud chcete vytvoล™it vlastnรญ funkci pro vyhledรกnรญ prvku, rozลกiล™te prototyp PageBot o funkci s pล™edponou locateElementByPล™ijรญmรก dva parametry: ล™etฤ›zec lokรกtoru a dokument, ve kterรฉm mรก bรฝt prvek prohledรกn.

Pล™รญklad: Pro lokรกtor textu velkรฝch pรญsmen

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

Uloลพte vลกechny tล™i funkce do jednoho souboru s nรกzvem user-extensions.jsSoubor je prostรฝ. JavaSkript, takลพe postaฤรญ libovolnรฝ textovรฝ editor.

Jak pouลพรญvat novฤ› vytvoล™enรฉ rozลกรญล™enรญ Core

Naฤtenรญ souboru je v originรกle ฤtyล™krokovรฝ รบkol Firefox-plugin IDE. Kaลพdรฝ snรญmek obrazovky nรญลพe odpovรญdรก oฤรญslovanรฉmu kroku vedle nฤ›j.

  1. Pล™ejรญt Selenium IDE a kliknฤ›te Moลพnosti -> Moลพnostiโ€ฆ

    Selenium Otevล™eno menu Moลพnosti IDE pro pล™รญstup k dialogovรฉmu oknu Moลพnosti

  2. v obecnฤ› V sekci vyberte umรญstฤ›nรญ novฤ› vytvoล™enรฉho Selenium Rozลกรญล™enรญ jรกdra.

    Selenium Dialogovรฉ okno Moลพnosti IDE, karta Obecnรฉ s Selenium Pole cesty k souboru s rozลกรญล™enรญmi jรกdra

  3. kliknฤ›te OK a restartujte Selenium SDI.

    Zobrazรญ se potvrzovacรญ vรฝzva, kdyลพ Selenium IDE se restartuje pro naฤtenรญ souboru rozลกรญล™enรญ.

  4. Rozลกรญล™enรญ najdete v seznamu pล™รญkazลฏ.

    Selenium Rozbalovacรญ nabรญdka pล™รญkazลฏ IDE s novรฝm pล™รญkazem textUpperCase z user-extensions.js

Selenium Zรกkladnรญ rozลกรญล™enรญ vs. Selenium Rozลกรญล™enรญ IDE

Tyto dva termรญny se ve starลกรญch materiรกlech pouลพรญvajรญ zamฤ›nitelnฤ›, ale popisujรญ rลฏznรฉ vrstvy a toto rozliลกenรญ je dลฏleลพitรฉ pล™i rozhodovรกnรญ, kam umรญstit vlastnรญ logiku.

Vzhled Selenium Rozลกรญล™enรญ jรกdra Selenium Rozลกรญล™enรญ IDE
Co rozลกiล™uje Knihovna pล™รญkazลฏ Selenese pouลพรญvanรก bฤ›hem pล™ehrรกvรกnรญ Samotnรก IDE aplikace
Soubor naฤten user-extensions.js user-extensions-ide.js ve starลกรญm IDE, manifest pluginu v aktuรกlnรญm IDE
Typickรฉ pouลพitรญ Novรฉ akce, pล™รญstupovรฉ metody a strategie lokรกtoru Novรฉ poloลพky nabรญdky, panely, formรกty a chovรกnรญ rekordรฉru
Dotฤenรฉ pล™edmฤ›ty Selenium.prototype a PageBot.prototype API editoru a zรกznamnรญku IDE
Bฤ›ลพรญ bฤ›hem Provedenรญ testu Tvorba a nahrรกvรกnรญ

Struฤnฤ› ล™eฤeno, rozลกรญล™enรญ Core mฤ›nรญ, co test dokรกลพe, zatรญmco rozลกรญล™enรญ IDE mฤ›nรญ, co nรกstroj dokรกลพe.

Jak modernรญ Selenium IDE Nahrazuje user-extensions.js

Jedno Firefox-plugin Selenium IDE pล™estalo fungovat, kdyลพ Firefox pล™esunuto na architekturu WebExtensions a IDE bylo pล™epsรกno jako Chrome, Firefox a rozลกรญล™enรญ prohlรญลพeฤe Edge. Toto pล™epsรกnรญ odstranilo vรฝลกe uvedenรฉ pole Moลพnosti, takลพe nenรญ mรญsto, kde by se dal odkazovat na soubor user-extensions.js. Stejnou oblast pokrรฝvajรญ dvฤ› podporovanรฉ alternativy.

  • Pล™รญkaz pro spuลกtฤ›nรญ skriptu. Pro jednorรกzovรฉ JavaSkript, pล™idejte spustit skript or spustit asynchronnรญ skript vstoupit pล™รญmo do testu a uloลพit vรฝsledek do promฤ›nnรฉ. Toto je nejbliลพลกรญ ekvivalent malรฉ vlastnรญ akce.
  • Plugin. Pro opakovanฤ› pouลพitelnรฉ pล™รญkazy vytvoล™te rozลกรญล™enรญ prohlรญลพeฤe, kterรฉ zaregistruje manifest v IDE. Manifest deklaruje kaลพdรฝ novรฝ pล™รญkaz s ID, nรกzvem, volitelnรฝm typem a dokumentacรญ a mลฏลพe takรฉ deklarovat novรฉ lokรกtory.

Manifest je registrovรกn odeslรกnรญm zprรกvy do rozลกรญล™enรญ IDE, jak je znรกzornฤ›no v oficiรกlnรญm Selenium Dokumentace k pluginลฏm 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);

Pojmenovacรญ disciplรญna pล™eลพila migraci: pล™รญkaz pluginu je stรกle deklarovรกn jednou a potรฉ znovu pouลพit v kaลพdรฉm testu, pล™esnฤ› jako rozลกรญล™enรญ Core.

Oblรญbenรก rozลกรญล™enรญ a pluginy pouลพรญvanรฉ v Selenium IDE

Nรญลพe uvedenรฉ doplลˆky byly nejrozลกรญล™enฤ›jลกรญ ve starลกรญm IDE. Nฤ›kolik z nich, jako napล™รญklad ล™รญzenรญ toku a funkce pro poล™รญzenรญ snรญmku obrazovky pล™i selhรกnรญ, je nynรญ integrovรกno do aktuรกlnรญho IDE nebo je k dispozici jako udrลพovanรฉ pluginy.

Jmรฉno รšฤel
Oblรญbenรฉ Oznaฤenรญ testovacรญ sady jako oblรญbenรฉ a jejรญ spuลกtฤ›nรญ jednรญm kliknutรญm
Flex Pilot X Pro automatizaci zaloลพenou na Flex
FlexMonkium Pro nahrรกvรกnรญ a pล™ehrรกvรกnรญ zaloลพenรฉ na Adobe Flex Testovรกnรญ in Selenium IDE
Protokolovรกnรญ souborลฏ Pro uklรกdรกnรญ protokolลฏ do souboru
Flow Control K ล™รญzenรญ toku provรกdฤ›nรญ testu
Zvรฝraznฤ›te prvky Chcete-li zvรฝraznit webovรฝ ovlรกdacรญ prvek
Implicitnรญ ฤekรกnรญ ฤŒekรกnรญ na prvek po urฤitou dobu
Snรญmek obrazovky pล™i selhรกnรญ Udฤ›lejte snรญmek obrazovky pล™i selhรกnรญ
Vรฝsledky testลฏ Uloลพte modelovรฝ pล™รญpad vรฝsledek pro testovacรญ sadu jednรญm kliknutรญm

Starรฝ SeleniumStrรกnka pro stahovรกnรญ HQ, kterรก tyto soubory hostovala, jiลพ neexistuje. Aktuรกlnรญ pluginy a samotnรฉ IDE jsou distribuovรกny z Selenium Web projektu IDE a z Chromu, Firefox a obchody s doplลˆky pro Edge.

stรกhnฤ›te Selenium Core Extension pouลพitรฉ v tomto kurzu

Nejฤastฤ›jลกรญ dotazy

Konvenฤnรญ nรกzev je user-extensions.js a doplลˆky na รบrovni IDE pouลพรญvaly user-extensions-ide.js. Starลกรญ IDE umoลพลˆovalo odkazovat na libovolnou cestu, takลพe nรกzev byl spรญลกe konvencรญ neลพ zรกvaznรฝm poลพadavkem, ale keeping Dรญky tomu jsou sdรญlenรฉ apartmรกny snadnฤ›ji rozpoznatelnรฉ.

Prototypovรฉ funkce jsou bฤ›hem naฤรญtรกnรญ IDE pouze pro ฤtenรญ, takลพe รบpravy provedenรฉ po spuลกtฤ›nรญ jsou ignorovรกny. Uloลพte soubor, IDE zcela zavล™ete a znovu jej otevล™ete. JavaChyba syntaxe skriptu takรฉ zabrรกnรญ tichรฉmu naฤรญtรกnรญ celรฉho souboru.

Otevล™ete konzoli prohlรญลพeฤe a znovu spusลฅte IDE. Potรฉ sledujte chybu parsovรกnรญ souboru. Pล™idรกnรญ ล™รกdku console.log na zaฤรกtek souboru potvrdรญ, zda se vลฏbec naฤetl, neลพ zaฤnete ladit jednotlivรฉ funkce.

Pรญลกete pouze verzi s pล™edponou โ€ždoโ€œ. Selenium IDE pro vรกs odvodรญ variantu AndWait, kterรก provede stejnou operaci a potรฉ ฤekรก na dokonฤenรญ naฤรญtรกnรญ strรกnky. Formulรกล™ AndWait pouลพijte, kdyลพ akce spustรญ navigaci.

Modely strojovรฉho uฤenรญ dokรกลพรญ navrhnout zรกkladnรญ text pro novรฝ pล™รญkaz a navrhnout strategii lokรกtoru ze snรญmku strรกnky. Oprava lokรกtoru s pomocรญ umฤ›lรฉ inteligence je zde takรฉ uลพiteฤnรก, protoลพe vlastnรญ funkce locateElementBy je pล™esnฤ› ten kรณd, kterรฝ se pล™i zmฤ›nฤ› kรณdu pล™eruลกรญ.

ฤŒรกsteฤnฤ›. Copilot reprodukuje SeleniumVzory .prototype a PageBot.prototype se hojnฤ› vyskytujรญ ve starลกรญch repozitรกล™รญch, ale mohou vytvรกล™et pomocnรฉ metody, kterรฉ nikdy neexistovaly. Neลพ budete dลฏvฤ›ล™ovat kaลพdรฉmu navrhovanรฉmu volรกnรญ, zkontrolujte ho podle reference pล™รญkazลฏ v Selenese.

Ano. Soubor, kterรฝ na PageBot.prototype neobsahuje nic jinรฉho neลพ funkci locateElementBy, je platnรฝ. Novรก strategie se pak stane dostupnou pro vลกechny existujรญcรญ pล™รญkazy, takลพe click, type a assert mohou cรญlit na vลกechny prvky prostล™ednictvรญm nรญ.

Selenium RC pล™ijal soubor s uลพivatelskรฝmi rozลกรญล™enรญmi pล™es serverovรฝ pล™epรญnaฤ, ale RC a Selenium Jรกdra byla odstranฤ›na v Selenium 3. WebDriver nemรก ekvivalentnรญ hook, takลพe stejnรก logika je napsรกna jako bฤ›ลพnรก pomocnรก metoda ve vaลกem testovacรญm frameworku.

Shrลˆte tento pล™รญspฤ›vek takto: