*/
@SuppressWarnings("unchecked")
@Override
public WebDriver createInstance(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 {
implementationClassName = configuration.getImplementationClass();
Validate.isEmpty(implementationClassName,
"The combination of browser=" + configuration.getBrowser()
+ ", implemenationClass=" + implementationClassName
+ " does not represent a valid browser. Please specify supported browser.");
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],