package com.blazemeter.jmeter.webdriver.phantomjs; import com.googlecode.jmeter.plugins.webdriver.config.WebDriverConfig; import org.apache.jmeter.testelement.ThreadListener; import org.openqa.selenium.Capabilities; import org.openqa.selenium.phantomjs.PhantomJSDriver; import org.openqa.selenium.phantomjs.PhantomJSDriverService; import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.DesiredCapabilities; public class PhantomJSDriverConfig extends WebDriverConfig<PhantomJSDriver> implements ThreadListener { private static final long serialVersionUID = 100L; private static final String PHANTOMJS_EXECUTABLE_PATH_PROPERTY_KEY = "PhantomJSDriverConfig.phantomjs_path"; private static final String PHANTOMJS_CLI_ARG_PROPERTY_KEY = "PhantomJSDriverConfig.phantomjs_cli_args"; private static final String PHANTOMJS_GHOSTDRIVER_CLI_ARG_PROPERTY_KEY = "PhantomJSDriverConfig.phantomjs_ghostdriver_cli_args"; public String getPhantomJsExecutablePath() { return getPropertyAsString(PHANTOMJS_EXECUTABLE_PATH_PROPERTY_KEY); } public void setPhantomJsExecutablePath(String value) { setProperty(PHANTOMJS_EXECUTABLE_PATH_PROPERTY_KEY, value); } public String getPhantomJsCliArgs() { return getPropertyAsString(PHANTOMJS_CLI_ARG_PROPERTY_KEY); } public void setPhantomJsCliArgs(String value) { setProperty(PHANTOMJS_CLI_ARG_PROPERTY_KEY, value); } public String getPhantomJsGhostdriverCliArgs() { return getPropertyAsString(PHANTOMJS_GHOSTDRIVER_CLI_ARG_PROPERTY_KEY); } public void setPhantomJsGhostdriverCliArgs(String value) { setProperty(PHANTOMJS_GHOSTDRIVER_CLI_ARG_PROPERTY_KEY, value); } @Override public void threadStarted() { if (hasThreadBrowser()) { return; } setThreadBrowser(createBrowser()); } protected Capabilities createCapabilities() { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(CapabilityType.PROXY, createProxy()); capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, getPhantomJsExecutablePath()); if (getPhantomJsCliArgs() != null && getPhantomJsCliArgs().trim().length() > 0) { capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliParamsToStringArray(getPhantomJsCliArgs())); } if (getPhantomJsGhostdriverCliArgs() != null && getPhantomJsGhostdriverCliArgs().trim().length() > 0) { capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_GHOSTDRIVER_CLI_ARGS, cliParamsToStringArray(getPhantomJsGhostdriverCliArgs())); } return capabilities; } @Override public void threadFinished() { final PhantomJSDriver phantomJsDriver = removeThreadBrowser(); if (phantomJsDriver != null) { phantomJsDriver.quit(); } } @Override protected PhantomJSDriver createBrowser() { return new PhantomJSDriver(createCapabilities()); } /* * Convert a string with params (comma separator) to an array of String * Example : "--web-security=false, --ignore-ssl-errors=true" converts to ["--web-security=false","--ignore-ssl-errors=true"] (trim String) */ private String [] cliParamsToStringArray(String params) { String[] sSplit = {""}; if (params != null && params.trim().length() > 0) { sSplit = params.split(","); for(int i = 0; i < sSplit.length;i++) { String s = sSplit[i]; s = s.trim(); sSplit[i] = s; } } return sSplit; } }