package org.fluentlenium.configuration;
import org.assertj.core.api.Assertions;
import org.fluentlenium.configuration.DefaultWebDriverFactories.RemoteWebDriverFactory;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;
import java.net.URL;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
public class RemoteWebDriverTest {
private RemoteWebDriverFactory factorySpy;
@Mock
private WebDriver webDriver;
@Before
public void before() {
RemoteWebDriverFactory factory = new RemoteWebDriverFactory() {
@Override
protected WebDriver newRemoteWebDriver(Object... args)
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
return webDriver;
}
};
factorySpy = spy(factory);
}
@Test
public void testDefault()
throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
WebDriver newWebDriver = factorySpy.newWebDriver(null, null);
Assertions.assertThat(newWebDriver).isSameAs(webDriver);
DesiredCapabilities defaultCapabilities = new DesiredCapabilities();
verify(factorySpy).newRemoteWebDriver(new Object[] {null, defaultCapabilities});
}
@Test
public void testCustomRemoteUrl()
throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException,
MalformedURLException {
ProgrammaticConfiguration programmaticConfiguration = new ProgrammaticConfiguration();
programmaticConfiguration.setRemoteUrl("http://localhost:4444");
WebDriver newWebDriver = factorySpy.newWebDriver(null, programmaticConfiguration);
Assertions.assertThat(newWebDriver).isSameAs(webDriver);
DesiredCapabilities defaultCapabilities = new DesiredCapabilities();
verify(factorySpy).newRemoteWebDriver(new Object[] {new URL("http://localhost:4444"), defaultCapabilities});
}
@Test(expected = ConfigurationException.class)
public void testInvalidRemoteUrl()
throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException,
MalformedURLException {
ProgrammaticConfiguration programmaticConfiguration = new ProgrammaticConfiguration();
programmaticConfiguration.setRemoteUrl("dummy");
factorySpy.newWebDriver(null, programmaticConfiguration);
}
@Test
public void testCustomRemoteUrlAndCapabilities()
throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException,
MalformedURLException {
ProgrammaticConfiguration programmaticConfiguration = new ProgrammaticConfiguration();
programmaticConfiguration.setRemoteUrl("http://localhost:4444");
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
WebDriver newWebDriver = factorySpy.newWebDriver(capabilities, programmaticConfiguration);
Assertions.assertThat(newWebDriver).isSameAs(webDriver);
verify(factorySpy).newRemoteWebDriver(new Object[] {new URL("http://localhost:4444"), capabilities});
}
@Test
public void testCustomCapabilities()
throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException,
MalformedURLException {
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
WebDriver newWebDriver = factorySpy.newWebDriver(capabilities, null);
Assertions.assertThat(newWebDriver).isSameAs(webDriver);
verify(factorySpy).newRemoteWebDriver(new Object[] {null, capabilities});
}
}