package net.thucydides.core.webdriver.javascript;
import net.thucydides.core.webdriver.WebDriverFacade;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
public class JavascriptSupport {
public static boolean javascriptIsSupportedIn(Class<? extends WebDriver> driverClass) {
return (isNotAMockedDriver(driverClass) && supportsJavascript(driverClass));
}
public static boolean javascriptIsSupportedIn(WebDriver driver) {
if (driver instanceof HtmlUnitDriver) {
return ((HtmlUnitDriver) driver).isJavascriptEnabled();
} else {
Class<? extends WebDriver> driverClass = getRealDriverClass(driver);
return javascriptIsSupportedIn(driverClass);
}
}
private static Class<? extends WebDriver> getRealDriverClass(WebDriver driver) {
if (WebDriverFacade.class.isAssignableFrom(driver.getClass())) {
WebDriverFacade driverFacade = (WebDriverFacade) driver;
return driverFacade.getDriverClass();
} else {
return driver.getClass();
}
}
private static boolean supportsJavascript(Class<? extends WebDriver> driverClass) {
return JavascriptExecutor.class.isAssignableFrom(driverClass);
}
private static boolean isNotAMockedDriver(Class<? extends WebDriver> driverClass) {
return !driverClass.getName().contains("Mock");
}
public static void activateJavascriptSupportFor(WebDriver driver) {
if (HtmlUnitDriver.class.isAssignableFrom(driver.getClass())) {
((HtmlUnitDriver)driver).setJavascriptEnabled(true);
}
}
}