*/
@SuppressWarnings("unchecked")
@Override
public WebDriver createInstance(TypedWebDriverConfiguration<WebDriverConfiguration> configuration) {
@SuppressWarnings("rawtypes")
Instantiator instantiator;
String implementationClassName = null;
// get remote or remote-reusable instantiator
if (configuration.isRemoteReusable() || configuration.isRemote()) {
instantiator = getRemoteWebDriverInstantiator();
}
// get real implementation class name based on capabilitiesBrowser and
// deprecated implementationClassName
else {
String browserCapabilities = configuration.getBrowserCapabilities();
if (Validate.empty(browserCapabilities)) {
configuration.setBrowserCapabilities(TypedWebDriverConfiguration.DEFAULT_BROWSER_CAPABILITIES);
log.log(Level.INFO, "Property \"browserCapabilities\" was not specified, using default value of {0}",
TypedWebDriverConfiguration.DEFAULT_BROWSER_CAPABILITIES);
}
implementationClassName = configuration.getImplementationClass();
Validate.isEmpty(implementationClassName,
"The combination of browserCapabilities=" + configuration.getBrowserCapabilities()
+ ", implemenationClass=" + implementationClassName
+ " does not to a valid browser. Please specify supported browserCapabilities");
DroneRegistry registry = registryInstance.get();
Class<?> implementationClass = SecurityActions.getClass(implementationClassName);
instantiator = registry.getEntryFor(implementationClass, Instantiator.class);
}
// if we've found an instantiator and at the same time we are sure that it is not the current one
// invoke it instead in order to get capabilities and other advanced stuff
if (instantiator != null && instantiator.getClass() != this.getClass()) {
return (WebDriver) instantiator.createInstance(configuration);
}
// this is a simple constructor which does not know anything advanced
if (Validate.empty(implementationClassName)) {
WebDriver driver = SecurityActions.newInstance(implementationClassName, new Class<?>[0], new Object[0],