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"