package org.jboss.arquillian.drone.webdriver.factory; import com.gargoylesoftware.htmlunit.MockWebConnection; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.WebClientOptions; import org.assertj.core.api.Assertions; import org.jboss.arquillian.drone.webdriver.configuration.WebDriverConfiguration; import org.jboss.arquillian.drone.webdriver.htmlunit.DroneHtmlUnitDriver; import org.jboss.arquillian.drone.webdriver.utils.Validate; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebDriverException; import org.openqa.selenium.remote.DesiredCapabilities; import java.io.IOException; import static org.jboss.arquillian.drone.webdriver.factory.HtmlUnitDriverFactory.webClientOptions; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class HtmlUnitDriverTest { @Rule public ExpectedException thrown = ExpectedException.none(); @Test public void shouldOverrideWebClientOptions() throws IOException { final HtmlUnitDriverFactory htmlUnitDriverFactory = new HtmlUnitDriverFactory(); final WebDriverConfiguration configuration = getMockedConfiguration("ThrowExceptionOnFailingStatusCode=true"); final WebDriver driver = htmlUnitDriverFactory.createInstance(configuration); final DroneHtmlUnitDriver htmlUnitDriver = (DroneHtmlUnitDriver) driver; MockWebConnection webConnection = new MockWebConnection(); webConnection.setDefaultResponse("http://foo.com", 503, "Service Unavailable", "text/plain"); WebClient webClient = htmlUnitDriver.getWebClient(); webClient.setWebConnection(webConnection); thrown.expect(WebDriverException.class); thrown.expectMessage( "com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException: 503 Service Unavailable for http://foo.com/"); driver.get("http://foo.com"); driver.quit(); } @Test public void shouldSetWebClientOptionsForHtmlUnitDriver() throws IOException { final HtmlUnitDriverFactory htmlUnitDriverFactory = new HtmlUnitDriverFactory(); final WebDriverConfiguration configuration = getMockedConfiguration("Timeout=300; JavaScriptEnabled=false"); final WebDriver driver = htmlUnitDriverFactory.createInstance(configuration); final DroneHtmlUnitDriver htmlUnitDriver = (DroneHtmlUnitDriver) driver; final WebClient webClient = htmlUnitDriver.getWebClient(); final WebClientOptions webClientOptions = webClient.getOptions(); Assertions.assertThat(webClientOptions.isJavaScriptEnabled()).isFalse(); Assertions.assertThat(webClientOptions.getTimeout()).isEqualTo(300); } private WebDriverConfiguration getMockedConfiguration(String option) { DesiredCapabilities capabilities = new DesiredCapabilities(); if (Validate.nonEmpty(option)) { capabilities.setCapability(webClientOptions, option); } capabilities.setCapability("browserName", "htmlunit"); WebDriverConfiguration configuration = Mockito.mock(WebDriverConfiguration.class); when(configuration.getCapabilities()).thenReturn(capabilities); when(configuration.getImplementationClass()) .thenReturn(new BrowserCapabilitiesList.HtmlUnit().getImplementationClassName()); return configuration; } }