Changes

Selenium 3 architektúra

5,420 bytes added, 16:42, 20 July 2018
Szofisztikált node konfiguráció (képességek)
}
</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 [[SeliniumSelenium_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===
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>
==Szofisztikált node konfiguráció==
Lehetőség van rá
<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>
:[[File:ClipCapIt{{note|Nekem a chrome nem indult el, a teszt egy helyben állt a node2-180719ön. Azt írták, hogy nem megfelelő a driver-124810.PNG]](Firefox browser remote üzemmódban)em}}