package nl.hsac.fitnesse.junit.selenium;
import nl.hsac.fitnesse.fixture.slim.web.SeleniumDriverSetup;
import nl.hsac.fitnesse.fixture.util.selenium.SeleniumHelper;
import nl.hsac.fitnesse.fixture.Environment;
import java.net.MalformedURLException;
import java.util.Map;
/**
* Creates a Selenium driver factory to override the configuration in the wiki.
* This factory is configured by setting the system property 'seleniumGridUrl' AND 'seleniumJsonCapabilities'.
*/
public class SeleniumJsonGridDriverFactoryFactory extends SeleniumDriverFactoryFactoryBase {
@Override
public boolean willOverride() {
return isPropertySet(SELENIUM_GRID_URL)
&& !isPropertySet(SELENIUM_CAPABILITIES)
&& isPropertySet(SELENIUM_JSONCAPABILITIES);
}
@Override
public SeleniumHelper.DriverFactory getDriverFactory() {
final String gridUrl = getProperty(SELENIUM_GRID_URL);
final Map<String, Object> capabilities = getCapabilities();
return new SeleniumHelper.DriverFactory() {
@Override
public void createDriver() {
SeleniumDriverSetup.unlockConfig();
try {
new SeleniumDriverSetup().connectToDriverAtWithCapabilities(gridUrl, capabilities);
} catch (MalformedURLException e) {
throw new RuntimeException("Unable to create driver at: "
+ gridUrl + " with: " + capabilities, e);
} finally {
SeleniumDriverSetup.lockConfig();
}
}
};
}
protected Map<String, Object> getCapabilities() {
String capabilitiesString = getProperty(SELENIUM_JSONCAPABILITIES);
try {
return Environment.getInstance().getJsonHelper().jsonStringToMap(capabilitiesString);
} catch (Exception e) {
throw new RuntimeException("Unable to parse Selenium capabilities: " + capabilitiesString, e);
}
}
}