package org.fluentlenium.configuration; import org.openqa.selenium.Capabilities; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * {@link CapabilitiesFactory} based on invocation of a defined method. */ @IndexIgnore public class MethodInvocationReflectionFactory implements CapabilitiesFactory, FactoryNames { private final Method method; private final Object instance; private final Object[] args; /** * Creates a new method invocation reflection factory. * * @param method method to invoke that returns a {@link Capabilities} instance * @param instance instance to use * @param args arguments to pass */ public MethodInvocationReflectionFactory(Method method, Object instance, Object... args) { this.method = method; this.instance = instance; this.args = args; } @Override public Capabilities newCapabilities(ConfigurationProperties configuration) { try { return (Capabilities) method.invoke(instance, args); } catch (IllegalAccessException e) { throw new ConfigurationException("Can't create capabilities instance", e); } catch (InvocationTargetException e) { throw new ConfigurationException("Can't create capabilities instance", e); } } @Override public String[] getNames() { return new String[] {method.getDeclaringClass().getName() + "." + method.getName(), method.getDeclaringClass().getSimpleName() + "." + method.getName(), method.getName()}; } }