package info.novatec.testit.webtester.browser.factories;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.ie.InternetExplorerDriverService;
import org.openqa.selenium.remote.DesiredCapabilities;

import com.google.common.base.Function;

import info.novatec.testit.webtester.api.browser.Browser;


/**
 * Factory class for creating Internet Explorer {@link Browser} instances.
 * Needs the {@code webdriver.ie.driver} system property pointing to the driver proxy server executable.
 * <p>
 * <b>The following capabilities are set by default:</b>
 * <ul>
 * <li>Native Events are disabled</li>
 * <li>Unsigned certificates are accepted</li>
 * </ul>
 * <b>Additional information on using the {@link InternetExplorerDriver}:</b>
 * <p>
 * https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver
 *
 * @see Browser
 * @see InternetExplorerDriver
 * @since 1.2
 */
public class InternetExplorerFactory extends BaseBrowserFactory<InternetExplorerFactory> {

    public InternetExplorerFactory() {
        super(new Function<DesiredCapabilities, WebDriver>() {
            @Override
            public WebDriver apply(DesiredCapabilities capabilities) {
                return new InternetExplorerDriver(capabilities);
            }
        });
    }

    public Browser createBrowser(int port) {
        InternetExplorerDriverService service = InternetExplorerDriverService.createDefaultService();
        DesiredCapabilities capabilities = getDefaultCapabilities();
        return createBrowser(new InternetExplorerDriver(service, capabilities, port));
    }

}