Egy folyamatos integrációs környezetben általában nem azon a gépen futtatjuk a felületi teszteket ahol a Jenkins is dolgozik, ezért felhúzunk egy külön Windows-os gépet ahova feltelepítünk Internet Explorer-t, Firefox-ot meg egy Chrome-ot mivel azt szeretnénk, hogy a Jenkins indította klikkelő robot már itt kattintgasson majd az eredményeket juttassa vissza a Jenkins számára.
Ez a működés a Selenium RemoteWebDriver segítségével egyszerűen megoldható. Először is rögzítsük a felületi tesztesetet a Selenium IDE Firefox plugin segítségével, majd exportáljuk Java forrásként és módosítsuk az alábbi mintakód alapján, ahol is a baseURL az alkalmazás kezdő URL-e, a távoli Windows-os gép a remoteSeleniumServer URL-en figyel, a browser pedig az a böngésző típus amivel a tesztet futtatni fogjuk. Látható, hogy ebben a minta kódban be vannak égetve az alapértelmezett értékek, de a Jenkins-ből ezeket majd felülírhatjuk.
import static org.junit.Assert.fail; import java.net.MalformedURLException; import java.net.URL; import org.apache.commons.lang3.StringUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import com.thoughtworks.selenium.webdriven.WebDriverBackedSelenium; public class NLRTest { private String baseURL = "https://webapphost:8113/"; private String remoteSeleniumServer = "http://rsh:4444/wd/hub"; private String browser="chrome";//firefox,internet explorer,chrome private WebDriverBackedSelenium selenium; private RemoteWebDriver remoteWD = null; @Before public void setUp() throws Exception { if(!StringUtils.isBlank(System.getProperty("baseURL"))) baseURL=System.getProperty("baseURL"); if(!StringUtils.isBlank(System.getProperty("remoteSeleniumServer"))) remoteSeleniumServer=System.getProperty("remoteSeleniumServer"); if(!StringUtils.isBlank(System.getProperty("browser"))) browser=System.getProperty("browser"); DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setJavascriptEnabled(true); capabilities.setBrowserName(browser); try { remoteWD = new RemoteWebDriver(new URL(remoteSeleniumServer),capabilities); } catch (MalformedURLException e) { e.printStackTrace(); } selenium = new WebDriverBackedSelenium(remoteWD, baseURL); } @SuppressWarnings("deprecation") @Test public void testNLR1() throws Exception { selenium.open("/NLR/login"); //IE certification ok button if(browser.equals("internet explorer")) remoteWD.navigate().to("javascript:document.getElementById('overridelink').click()"); selenium.type("id=fnev", "myuser"); selenium.type("id=password", "mypass"); for (int second = 0;; second++) { if (second >= 60) fail("timeout"); try { if ("felhasználónév:".equals(selenium .getText("css=td.left_label"))) break; } catch (Exception e) { } Thread.sleep(1000); } selenium.click("css=button[type=\"button\"]"); selenium.waitForPageToLoad("30000"); for (int second = 0;; second++) { if (second >= 60) fail("timeout"); try { if ("Munkamenet".equals(selenium.getText("link=Munkamenet"))) break; } catch (Exception e) { } Thread.sleep(1000); } selenium.click("link=Munkamenet"); ... selenium.click("link=Előzmények keresése"); selenium.waitForPageToLoad("30000"); selenium.click("link=Kilépés"); selenium.waitForPageToLoad("30000"); } @After public void tearDown() throws Exception { selenium.stop(); } }
A klikkelő robotnak létrehozott távoli Windows-os hosztra, ahol feltelepítettük az IE, Firefox és Chrome böngészőket, másoljuk fel a selenium-server-standalone.jar, a chromedriver.exe és IEDriverServer.exe fájlokat. A firefox driver-t nem kell külön letölteni, mert azt a selenium-server-standalone.jar már tartalmazza. Ezután ezen a dedikált Windows-os gépen indítsuk el a Selenium-ot az alábbi paranccsal, felparaméterezve a driverek elérési útvonalával. Innentől kezdve a Jenkins már képes elindítani a klikkelő robotot ezen a gépen.
java -Dwebdriver.chrome.driver="c:\\chromedriver.exe" -Dwebdriver.ie.driver = "c:\IEDriverServer.exe" -jar c:\selenium-server-standalone-2.47.1.jar
Itt olvasható, hogy a Selenium-ot hogyan illeszthetjük be a maven-es projektünkbe, a Jenkins felületén pedig a Goals and options résznél állíthatjuk be a megfelelő paramétereket:
test -Dbuild.number=${PIPELINE_VERSION} -Dtest=hu.bakai.selenium.* -DbaseURL = "https://172.22.22.22:8113" -DrempoteSeleniumServer = "http://10.128.11.11:4444/wd/hub" -Dbrowser = "internet explorer"