7,540
edits
Changes
→Szofisztikált node konfiguráció (képességek)
<br>
==Driver letöltése==Ahogy azt már mondtuk, szükségünk van egy WebDriver implementáció, ami már böngésző függő. Külön driver van Firefox-hoz és külön Chorme-hoz. Ezeket le kell tölteni, és a megfelelő java system paraméterekkel meg kell adni az elérési helyüket a WebDriver alkalmazásnak. Fontos, hogy ezek szabványos WebDriver teszt írása=-ek, ezeknek nincs implicit köze a Selenium-hoz. '''Firefox:''' <br>https://github.com/mozilla/geckodriver/releases<br>Ezt kell letölteni: '''geckodriver-v0.21.0-linux64.tar.gz''' '''Chrome:''' <br>Chrome-hoz is elérhető a WebDriver, innen tölthető le: <br>https://sites.google.com/a/chromium.org/chromedriver/downloads <br>https://chromedriver.storage.googleapis.com/index.html?path=2.40/<br>Ezt kell letölteni: '''chromedriver_linux64.zip''' '''IE:''' <br>.... {{note|Fontos hogy mindig az operációs rendszernek megfelelő driver-t töltsük le (32 ill 64 bites) különben furcsa hibákat fogunk kapni futtatás közben}} Java system paraméterrel meg kell adni a driver helyét. A paraméter neve driver-enként különbözik.
Ebből is következik, hogy egy teszt csak egy böngészőre futtatható egy időben, azon a böngészőn fog futni, aminek a driver-ét megadtuk. A teszt futtatásakor a driver az alapértelmezett helyen fogja keresni a böngésző futtatható állományát. Meg fogja nyitni a böngészőt és a szabványos remoting interfészen csatlakozni fog hozzá.
<br>
==WebDriver teszt írása==
A java WebDriver-hez van szerencsére '''Maven''' dependencia, ami a futtatáshoz szükséges összes jar-t letölti. Hozzuk létre a pom.xml-t az alábbi tartalommal:
<source lang="xml">
* '''Firefox''': -Dwebdriver.gecko.driver="..path../geckodriver"
* '''Chrome''': -Dwebdriver.chrome.driver="..path../chromedriver"
És hozzunk létre az első Teszt osztályunkat: Teszt1.java. A teszt meg fogja nyitni a google.com-ot és ott rá fog keresni a "how to use Selenium" -ra.
}
</source>
{{note|A driver elérési útját azért az osztályon belül adtuk itt meg, mert a WebDriver lokálisan fut, nem a Seleinum GRID-en, így a driver-re itt 'helyben' van szükség. Majd látni fogjuk, hogy a [[Selenium_3_architektúra#GRID_2.0|Grid 2.0]] fejezetben, hogy grid-es futtatás esetén a node-oknak kell megadni a driver helyét, nem a tesztet futtató VM-nek, mivel a node-oknak el lesz küldve a teszt, azok fogják futtatni.}}
<br><br>
A Selenium IDE egy Firefox böngésző plug-in, aminek a segítségéve felvehetjük a user aktivitást egy úgynevezett Selenese script formájában, amit vissza is játszhatunk a Selenium IDE-ben.
:[[File:ClipCapIt-180719-161423.PNG|700px]]
{{warning|A '''Selenium IDE 3'''-asnak semmi köze már a régi '''Selenium IDE 2'''-eshez és a korábbi verziókhoz. A Firefox 56-tól kezdve, a Firefox áttért a '''WebExtensions''' plugin API-ra, és megszüntette a legacy firefox plugin támogatást, amire a Selenium IDE 2 is épített. Így nulláról újraírták a Selenium IDE-t '''WebExtensions''' API támogatással. A WebExtensions API egy szabványosított plugin API, így a Selenium IDE 3 elvileg Chrome-ban is működik<br>
<br>
==Selenium IDE alternatívák (Katalon)==
Ahogy azt már láthattuk a legnagyobb baja a Selenium IDE 3-asnak az, hogy nem írták meg benne az Export funkciót, vagyis, hogy a felvett script-ből egy gombnyomással futtatható WebDriver alapú java kódot tudjunk készíteni.
Az exportált script gyakorlatilag azonnal futtatható a [[SeliniumSelenium_3_architektúra#WebDriver_teszt_.C3.ADr.C3.A1sa|Webdav teszt írása]] fejezetben bemutatott környezetben. Arra kell csak figyelni, hogy a megfelelő driver-t beállítsuk a '''webdriver.gecko.driver''' system változóval.
<br>
<br>
A hub-nak van egy web-es konzolja, ahol láthatjuk majd a node-ok listáját, típusát, valamint a hub és a node-ok konfigurációját: http://localhost:4444/grid/console
:[[File:ClipCapIt-180718-170118.PNG]]
A konzolon minden kék kocka egy node-ot jelképez. Benne a kis ikonok azt mondják meg, hogy a node képes Firefox és Chrome tesztek futtatására is (Ha ez Windows-on futna, az IE is itt lenne). Ez azért van így, mert nem adtunk meg külön node konfigurációt, és alapértelmezetten az összes böngészőt vállalja a node, ami elérhető a gépen. Majd a [[Szofisztik.C3.A1lt_node_konfigur.C3.A1ci.C3.B3_.28k.C3.A9pess.C3.A9gek.29|Szofisztikált node konfiguráció (képességek)]] című fejezetben láthatjuk, hogy lehet specializált node-okat létrehozni.
===Node===
Hozzuk létre a node-okat. A hub elérhetőségét a '''-hub''' kapcsolóval kell megadni. Ha nem a HtmlUnitDriver-t használjuk a megírt tesztünkben, akkor a node-nak meg kell adni a driver helyét is VM system paraméterekkel. A driver helyét pont úgy kell megadni a node-nak, mint azt a lokális tesztünk esetén tettük, a driver típusának megfelelő system paramétert kell használni: * '''Firefox node esetén: ''': -webdriverDwebdriver.gecko.driver="..pahtpath../geckodriver"* ''' (Itt ugyan azt a Firefox geckodriver-t kell használni, amit letöltöttünk a (Chrome''': -ot lásd a [[Selinium#SzofisztikDwebdriver.C3chrome.A1lt_node_konfigurdriver=".C3.A1cipath.C3.B3/chromedriver"* '''IE:''' -Dwebdriver.ie.driver="" {{note|Szofisztikált node konfiguráció]] című fejezetbenA Node-nak több driver-t is meg lehet adni. Annyiféle böngészőt fog tudni támogatni, amennyi driver-t megadunk neki indításkor. )}}
<pre>
</pre>
==Remote driver=Node2 létrehozása külső konfigurációval===A hub aszerint fogja kiosztani a teszteket a node-konak ...
Ha a HUB-on akarjuk futtatni a tesztet, akkor mindösszesen annyi különbség van a teszt írásában, hogy driver implementációnk a '''RemoteWebDriver(URL, capabilities)'''-t kell használni. Ennek két paramétere van: * '''URL''': ez a HUB-nak az elérhetősége, ahova a teszt-et küldeni kell. Ezt ki is írta a HUB induláskor a konzolra. * '''Capabilities''': A node-oknak induláskor meg lehet adni 'képességeket', mint pl azt hogy milyen böngészőkre futtathatnak tesztet. Ha nem adjunk meg 'képességet', akkor minden teszt futtatható rajtuk a hub szemszögéből nézve. A hub mindig csak a képességnek megfelelő tesztet fogja elküldeni a noder-ra. Ha a '''RemoteWebDriver'''-en azt adjuk meg hogy '''FirefoxOptions''' mint képesség, akkor csak olyan node-on fogja futtatni a tesztet, aki vagy nem állít magáról semmit, vagy szerepel a képességei között a Firefox. <brsource lang="java">driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), new FirefoxOptions());<br/source>
==Teszt futtatása==
A [[SeliniumSelenium_3_architektúra#WebDriver_teszt_.C3.ADr.C3.A1sa|Webdav teszt írása]] fejezetben készített teszt-et fogjuk átalakítani, úgy hogy a GRID-en fusson a teszt, ne közvetlenül a lokális böngészőben.
<source lang="java">
import java.net.URL;
</source>
<br><br>
==Szofisztikált node konfiguráció (képességek)==
A fenti példában a node-nak nem adtunk meg semmilyen képességet, így attól függetlenül, hogy a RemoteWebDriver-ben milyen képességet adtunk meg, az egy szem node-unk mindig megkapta a tesztet.
A node-oknak meg lehet adni egy külső JSON formátumú konfigurációs fájlt, ahol többek között a böngésző típus is beállítható. A config fájlt a '''-nodeConfig''' kapcsolóval kell megadni a node induláskor.
===Konfiguráció létrehozása===
Hozzuk létre konfigurációt a firefox-os node-nak: '''firefox_node.json'''
<source lang="JSON">
{
"capabilities":
[
{
"browserName": "firefox",
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
}
],
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"maxSession": 5,
"port": 6543,
"host": 127.0.0.1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": 127.0.0.1
}
</source>
A HUB a '''browserName''' mezőből fogja tudni, hogy Firefox teszt futtatására hivatott a node.
Majd egy külön konfigot a chrome-os node-nak: '''chrome_node.json'''
<source lang="JSON">
{
"capabilities":
[
{
"browserName": "chrome",
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
}
]
}
</source>
{{warning|A Selinium 3-ban a node konfig szerkezete is megváltozott, a Selenium 2-re írt konfigurációs fájlok már nem fognak itt működni! }}
===Node-ok indítása===
Állítsuk le a korábban indított node-ot, és indítsuk újra a '''-nodeConfig''' kapcsolóval plusz a Firefox driver-el.
<pre>
$ java -Dwebdriver.gecko.driver="geckodriver" -jar selenium-server-standalone-3.9.1.jar \-role node -hub http://192.168.124.1:4444/grid/register/-nodeConfig firefox_node.json
...
16:43:33.194 INFO - Registering the node to the hub: http://192.168.124.1:4444/grid/register
</pre>
Indítsunk el egy másik node-ot a Chrome driver-el, de ne adjunk meg konfigurációs fájlt:
<pre>
java -D-Dwebdriver.chrome.driver="chromedriver" -jar selenium-server-standalone-3.9.1.jar \
-role node -hub http://192.168.124.1:4444/grid/register/ -nodeConfig chrome_node.json
...
09:42:04.591 INFO - Registering the node to the hub: http://192.168.124.1:4444/grid/register
09:42:04.623 INFO - Updating the node configuration from the hub
09:42:04.630 INFO - The node is registered to the hub and ready to use
</pre>
Nyissuk meg újra a konzolt itt: http://localhost:4444/grid/console#:
:[[File:ClipCapIt-180720-100916.PNG]]
Láthatjuk, hogy most már két node van a képernyőn. A jobboldali az amit a Firefox config-al indítottunk. Látható, hogy csak Firefox ikonka látszik, tehát csak Firefox képességekkel rendelkezik, tehát erről sikeresen értesítette a HUB-ot, a HUB csak Firefox típusú teszteket fog ráküldeni.
:[[File:ClipCapIt-180720-094940.PNG]]
A bal oldalit indítottuk a chrome konfigurációval, látható hogy csak Chrome ikonka van rajta.
===Teszt elkészítése===
Annyi változás lesz az előzőhöz képest, hogy most két JUnit tesztet fogunk definiálni, egyet a Firefox node-nak, egyet pedig Chrome node-nak, és kiemeljük a teszt futtató részt egy külön metódusba, ahol a '''MutableCapabilities''' interfészt fogjuk használni a kapacitás megadására.
<source lang="java">
import java.net.URL;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.MutableCapabilities;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
public class GridTest2 {
@Test
public void executeFirefoxDriver() throws Exception {
this.execute(new FirefoxOptions());
}
@Test
public void executeChrome() throws Exception {
this.execute(new ChromeOptions());
}
private void execute(final MutableCapabilities brwserOptions) throws Exception {
WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), brwserOptions);
driver.get("https://www.google.com/");
driver.findElement(By.id("lst-ib")).click();
driver.findElement(By.id("lst-ib")).clear();
driver.findElement(By.id("lst-ib")).sendKeys("how to use sele");
driver.findElement(By.id("lst-ib")).sendKeys(Keys.DOWN);
driver.findElement(By.id("lst-ib")).sendKeys(Keys.ENTER);
}
}
</source>
===Teszt futtatása===
Ha most futtatjuk le a tesztet, akkor a két JUnit teszt egymás után le fog futni:
:[[File:ClipCapIt-180720-101824.PNG]]
A HUB a képességeknek megfelelő node-ra fogja küldeni a tesztet:
<pre>
10:17:34.558 INFO - Got a request to create a new session: Capabilities {acceptInsecureCerts: true, browserName: firefox, moz:firefoxOptions: {args: [], prefs: {}}}
...
10:17:42.568 INFO - Got a request to create a new session: Capabilities {browserName: chrome, goog:chromeOptions: {args: [], extensions: []}}
...
</pre>