org.fluentlenium.configuration.ReflectiveWebDriverFactory Maven / Gradle / Ivy
package org.fluentlenium.configuration;
import org.fluentlenium.utils.ReflectionUtils;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* A simple {@link WebDriverFactory} that create {@link WebDriver} instances using reflection.
*/
public class ReflectiveWebDriverFactory implements WebDriverFactory, ReflectiveFactory, FactoryNames {
protected String name;
protected Object[] args;
protected String webDriverClassName;
protected Class webDriverClass;
protected boolean available;
/**
* Creates a new reflective web driver factory.
*
* @param name factory name
* @param webDriverClassName web driver class name
* @param args web driver class constructor arguments
*/
public ReflectiveWebDriverFactory(String name, String webDriverClassName, Object... args) {
this.name = name;
this.webDriverClassName = webDriverClassName;
this.args = args;
try {
webDriverClass = (Class) Class.forName(webDriverClassName);
available = WebDriver.class.isAssignableFrom(webDriverClass);
} catch (ClassNotFoundException e) {
available = false;
}
}
/**
* Creates a new reflective web driver factory.
*
* @param name factory name
* @param webDriverClass web driver class
* @param args web driver class constructor arguments
*/
public ReflectiveWebDriverFactory(String name, Class webDriverClass, Object... args) {
this.name = name;
this.webDriverClass = webDriverClass;
this.args = args;
webDriverClassName = webDriverClass.getName();
available = WebDriver.class.isAssignableFrom(this.webDriverClass);
}
/**
* Get web driver class.
*
* @return web driver class
*/
public Class getWebDriverClass() {
return webDriverClass;
}
@Override
public boolean isAvailable() {
return available;
}
/**
* Creates new default capabilities.
*
* @return default capabilities
*/
protected DesiredCapabilities newDefaultCapabilities() {
return null;
}
@Override
public WebDriver newWebDriver(Capabilities capabilities, ConfigurationProperties configuration) {
if (!available) {
throw new ConfigurationException("WebDriver " + webDriverClassName + " is not available.");
}
try {
DesiredCapabilities defaultCapabilities = newDefaultCapabilities();
if (defaultCapabilities != null) {
defaultCapabilities.merge(capabilities);
capabilities = defaultCapabilities;
}
if (capabilities != null && !capabilities.asMap().isEmpty()) {
ArrayList