Package com.xebia.incubator.xebium

Source Code of com.xebia.incubator.xebium.DefaultWebDriverSupplier

package com.xebia.incubator.xebium;

import com.opera.core.systems.OperaDriver;
import com.opera.core.systems.OperaProduct;
import com.xebia.incubator.xebium.fastphantomjsdriver.FastPhantomJSDriver;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.PreferencesWrapper;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.safari.SafariDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;

public class DefaultWebDriverSupplier implements ConfigurableWebDriverSupplier {

  private static final Logger LOG = LoggerFactory.getLogger(SeleniumDriverFixture.class);

  private String browser;

    private File customProfilePreferencesFile;

  private File profileDirectory;

  public DefaultWebDriverSupplier() {
  }

  public WebDriver newWebDriver() {
    WebDriver driver;
    if ("firefox".equalsIgnoreCase(browser)) {
      FirefoxProfile profile;
      // Load FireFox-profile if present
      if (profileDirectory != null) {
        profile = new FirefoxProfile(profileDirectory);
        LOG.info("Firefox profile successfully loaded");
      }
      else {
        profile = new FirefoxProfile();
      }

      if (customProfilePreferencesFile != null) {
        PreferencesWrapper prefs = loadFirefoxPreferences();

        prefs.addTo(profile);
        try {
          StringWriter writer = new StringWriter(512);
          prefs.writeTo(writer);
          LOG.info("Added properties to firefox profile: " + writer.toString());
        } catch (IOException e) {
          LOG.error("Unable to log firefox profile settings", e);
        }
      }

      // Ensure we deal with untrusted and unverified hosts.
      profile.setAcceptUntrustedCertificates(true);
      profile.setAssumeUntrustedCertificateIssuer(true);

      driver = new FirefoxDriver(profile);
    } else if ("iexplore".equalsIgnoreCase(browser)) {
      driver = new InternetExplorerDriver();
    } else if ("chrome".equalsIgnoreCase(browser)) {
      driver = new ChromeDriver();
    } else if ("safari".equalsIgnoreCase(browser)) {
      driver = new SafariDriver();
    } else if ("htmlUnit".equalsIgnoreCase(browser)) {
      driver = new HtmlUnitDriver();
    } else if ("htmlUnit+js".equalsIgnoreCase(browser)) {
      driver = new HtmlUnitDriver(true);
    } else if ("opera".equalsIgnoreCase(browser)) {
            driver = new OperaDriver();
        } else if ("opera-mobile-tablet".equalsIgnoreCase(browser)) {
            DesiredCapabilities capabilities = DesiredCapabilities.opera();

            // tell opera mobile to use the tablet ui
            capabilities.setCapability("opera.product", OperaProduct.MOBILE);
            capabilities.setCapability("opera.arguments", "-tabletui -displaysize 860x600");

            driver = new OperaDriver(capabilities);
        } else if ("opera-mobile-phone".equalsIgnoreCase(browser)) {
            DesiredCapabilities capabilities = DesiredCapabilities.opera();

            // tell opera mobile to use the mobile handset ui
            capabilities.setCapability("opera.product", OperaProduct.MOBILE);
            capabilities.setCapability("opera.arguments", "-mobileui");

            driver = new OperaDriver(capabilities);
        } else if ("phantomjs".equalsIgnoreCase(browser)) {
            driver = new FastPhantomJSDriver(DesiredCapabilities.phantomjs());
    } else {
      try {
        driver = new RemoteWebDriverSupplier(browser).get();
      } catch (Exception e) {
        throw new RuntimeException("Unknown browser type. Should be one of 'firefox', 'iexplore', 'chrome', " +
                        "'opera', 'opera-mobile-tablet', 'opera-mobile-phone', 'htmlUnit' or 'htmlUnit+js'", e);
      }
    }
    return driver;
  }

  private PreferencesWrapper loadFirefoxPreferences() {
    PreferencesWrapper prefs;
    FileReader reader;
    try {
      reader = new FileReader(customProfilePreferencesFile);
    } catch (FileNotFoundException e) {
      throw new RuntimeException(e);
    }
    try {
      prefs = new PreferencesWrapper(reader);
    } finally {
      try {
        reader.close();
      } catch (IOException e) {
        LOG.error("Unable to close firefox profile settings file", e);
      }
    }
    return prefs;
  }

  public void setBrowser(String browser) {
    this.browser = browser;
  }

  public void setCustomProfilePreferencesFile(
      File customProfilePreferencesFile) {
    this.customProfilePreferencesFile = customProfilePreferencesFile;
  }

  public void setProfileDirectory(File profileDirectory) {
    this.profileDirectory = profileDirectory;
  }

  @Override
  public String toString() {
    return getClass().getName();
  }
}
TOP

Related Classes of com.xebia.incubator.xebium.DefaultWebDriverSupplier

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.