package net.thucydides.core.webdriver.javascript;
import net.thucydides.core.webdriver.WebDriverFacade;
import net.thucydides.core.webdriver.WebDriverFactory;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import java.util.List;
import java.util.Set;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
public class WhenWorkingWithJavascript {
@Mock
WebDriverFactory factory;
@Mock
WebDriver mockDriver;
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
@Test
public void a_firefox_backed_driver_should_support_javascript() {
assertThat(JavascriptSupport.javascriptIsSupportedIn(FirefoxDriver.class), is(true));
}
@Test
public void an_iexplored_backed_driver_should_support_javascript() {
assertThat(JavascriptSupport.javascriptIsSupportedIn(InternetExplorerDriver.class), is(true));
}
@Test
public void a_javascript_executor_should_support_javascript() {
assertThat(JavascriptSupport.javascriptIsSupportedIn(JavascriptWebdriver.class), is(true));
}
@Test
public void a_driver_not_implementing_javascript_executor_should_not_support_javascript() {
assertThat(JavascriptSupport.javascriptIsSupportedIn(NonJavascriptWebdriver.class), is(false));
}
@Test
public void a_mock_driver_should_not_support_javascript() {
assertThat(JavascriptSupport.javascriptIsSupportedIn(mockDriver), is(false));
assertThat(JavascriptSupport.javascriptIsSupportedIn(mockDriver.getClass()), is(false));
}
@Test
public void javascript_support_can_be_checked_on_a_driver() {
assertThat(JavascriptSupport.javascriptIsSupportedIn(mockDriver.getClass()), is(false));
}
@Test
public void javascript_support_can_be_checked_on_a_driver_facade() {
WebDriverFacade webDriverFacade = new WebDriverFacade(FirefoxDriver.class, factory);
assertThat(JavascriptSupport.javascriptIsSupportedIn(webDriverFacade), is(true));
}
@Test
public void should_activate_javascript_support_in_htmlunit() {
HtmlUnitDriver driver = mock(HtmlUnitDriver.class);
JavascriptSupport.activateJavascriptSupportFor(driver);
verify(driver).setJavascriptEnabled(true);
}
@Test
public void should_not_need_to_activate_javascript_support_for_firefox() {
FirefoxDriver driver = mock(FirefoxDriver.class);
JavascriptSupport.activateJavascriptSupportFor(driver);
}
static class JavascriptWebdriver implements JavascriptExecutor, WebDriver {
@Override
public Object executeScript(String script, Object... args) {
return null;
}
@Override
public Object executeAsyncScript(String script, Object... args) {
return null;
}
@Override
public void get(String url) {
}
@Override
public String getCurrentUrl() {
return null;
}
@Override
public String getTitle() {
return null;
}
@Override
public List<WebElement> findElements(By by) {
return null;
}
@Override
public WebElement findElement(By by) {
return null;
}
@Override
public String getPageSource() {
return null;
}
@Override
public void close() {
}
@Override
public void quit() {
}
@Override
public Set<String> getWindowHandles() {
return null;
}
@Override
public String getWindowHandle() {
return null;
}
@Override
public TargetLocator switchTo() {
return null;
}
@Override
public Navigation navigate() {
return null;
}
@Override
public Options manage() {
return null;
}
}
static class NonJavascriptWebdriver implements WebDriver {
@Override
public void get(String url) {
}
@Override
public String getCurrentUrl() {
return null;
}
@Override
public String getTitle() {
return null;
}
@Override
public List<WebElement> findElements(By by) {
return null;
}
@Override
public WebElement findElement(By by) {
return null;
}
@Override
public String getPageSource() {
return null;
}
@Override
public void close() {
}
@Override
public void quit() {
}
@Override
public Set<String> getWindowHandles() {
return null;
}
@Override
public String getWindowHandle() {
return null;
}
@Override
public TargetLocator switchTo() {
return null;
}
@Override
public Navigation navigate() {
return null;
}
@Override
public Options manage() {
return null;
}
}
}