Package com.crawljax.browser

Source Code of com.crawljax.browser.WebDriverBrowserBuilder

package com.crawljax.browser;

import java.util.List;

import org.openqa.selenium.android.AndroidDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.iphone.IPhoneDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.crawljax.core.configuration.CrawljaxConfigurationReader;

/**
* Default implementation of the EmbeddedBrowserBuilder based on Selenium WebDriver API.
*/
public class WebDriverBrowserBuilder implements EmbeddedBrowserBuilder {

  private static final Logger LOGGER = LoggerFactory.getLogger(WebDriverBrowserBuilder.class);

  /**
   * Build a new WebDriver based EmbeddedBrowser.
   *
   * @see EmbeddedBrowserBuilder#buildEmbeddedBrowser(CrawljaxConfigurationReader)
   * @param configuration
   *            the configuration object to read the config values from
   * @return the new build WebDriver based embeddedBrowser
   */
  @Override
  public EmbeddedBrowser buildEmbeddedBrowser(CrawljaxConfigurationReader configuration) {
    // Retrieve the config values used
    List<String> filterAttributes = configuration.getFilterAttributeNames();
    int crawlWaitReload = configuration.getCrawlSpecificationReader().getWaitAfterReloadUrl();
    int crawlWaitEvent = configuration.getCrawlSpecificationReader().getWaitAfterEvent();

    // Determine the requested browser type
    switch (configuration.getBrowser()) {
      case firefox:
        if (configuration.getProxyConfiguration() != null) {
          FirefoxProfile profile = new FirefoxProfile();

          profile.setPreference("network.proxy.http", configuration
                  .getProxyConfiguration().getHostname());
          profile.setPreference("network.proxy.http_port", configuration
                  .getProxyConfiguration().getPort());
          profile.setPreference("network.proxy.type", configuration
                  .getProxyConfiguration().getType().toInt());
          /* use proxy for everything, including localhost */
          profile.setPreference("network.proxy.no_proxies_on", "");

          return WebDriverBackedEmbeddedBrowser.withDriver(new FirefoxDriver(profile),
                  filterAttributes, crawlWaitReload, crawlWaitEvent);
        }

        return WebDriverBackedEmbeddedBrowser.withDriver(new FirefoxDriver(),
                configuration.getFilterAttributeNames(), configuration
                        .getCrawlSpecificationReader().getWaitAfterEvent(), configuration
                        .getCrawlSpecificationReader().getWaitAfterReloadUrl());

      case ie:
        return WebDriverBackedEmbeddedBrowser.withDriver(new InternetExplorerDriver(),
                configuration.getFilterAttributeNames(), configuration
                        .getCrawlSpecificationReader().getWaitAfterEvent(), configuration
                        .getCrawlSpecificationReader().getWaitAfterReloadUrl());

      case chrome:
        // Guifre Ruiz: Added proxy config support for Chrome
        ChromeOptions optionsChrome = new ChromeOptions();
        optionsChrome.addArguments("--proxy-server=http://"
                + configuration.getProxyConfiguration().getHostname() + ":"
                + configuration.getProxyConfiguration().getPort());
        ChromeDriver driverChrome = new ChromeDriver(optionsChrome);

        return WebDriverBackedEmbeddedBrowser.withDriver(driverChrome, configuration
                .getFilterAttributeNames(), configuration.getCrawlSpecificationReader()
                .getWaitAfterEvent(), configuration.getCrawlSpecificationReader()
                .getWaitAfterReloadUrl());

      case remote:
        return WebDriverBackedEmbeddedBrowser.withRemoteDriver(
                configuration.getRemoteHubUrl(), configuration.getFilterAttributeNames(),
                configuration.getCrawlSpecificationReader().getWaitAfterEvent(),
                configuration.getCrawlSpecificationReader().getWaitAfterReloadUrl());

      case htmlunit:
        HtmlUnitDriver driverHtmlUnit = new HtmlUnitDriver(true);
        driverHtmlUnit.setProxy(configuration.getProxyConfiguration().getHostname(),
                configuration.getProxyConfiguration().getPort());

        return WebDriverBackedEmbeddedBrowser.withDriver(driverHtmlUnit, configuration
                .getFilterAttributeNames(), configuration.getCrawlSpecificationReader()
                .getWaitAfterEvent(), configuration.getCrawlSpecificationReader()
                .getWaitAfterReloadUrl());

      case iphone:
        try {
          return WebDriverBackedEmbeddedBrowser.withDriver(new IPhoneDriver(),
                  configuration.getFilterAttributeNames(), configuration
                          .getCrawlSpecificationReader().getWaitAfterEvent(),
                  configuration.getCrawlSpecificationReader().getWaitAfterReloadUrl());
        } catch (Exception e) {
          LOGGER.error(e.getMessage(), e);
        }

      case android:
        return WebDriverBackedEmbeddedBrowser.withDriver(new AndroidDriver(),
                configuration.getFilterAttributeNames(), configuration
                        .getCrawlSpecificationReader().getWaitAfterEvent(), configuration
                        .getCrawlSpecificationReader().getWaitAfterReloadUrl());

      default:
        return WebDriverBackedEmbeddedBrowser.withDriver(new FirefoxDriver(),
                configuration.getFilterAttributeNames(), configuration
                        .getCrawlSpecificationReader().getWaitAfterEvent(), configuration
                        .getCrawlSpecificationReader().getWaitAfterReloadUrl());
    }
  }
}
TOP

Related Classes of com.crawljax.browser.WebDriverBrowserBuilder

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.