/*
* (C) Copyright 2011-2016 Nuxeo SA (http://nuxeo.com/) and contributors.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser General Public License
* (LGPL) version 2.1 which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-2.1.html
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* Contributors:
* Sun Seng David TAN
* Florent Guillaume
* Benoit Delbosc
* Antoine Taillefer
* Anahide Tchertchian
* Guillaume Renard
* Mathieu Guillaume
* Julien Carsique
*/
package org.nuxeo.functionaltests.drivers;
import java.io.File;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import net.jsourcerer.webdriver.jserrorcollector.JavaScriptError;
/**
* Driver provider for firefox.
*
* @since 8.3
*/
public class FirefoxDriverProvider implements DriverProvider {
private static final Log log = LogFactory.getLog(FirefoxDriverProvider.class);
protected FirefoxDriver driver;
public static FirefoxProfile getProfile() throws Exception {
FirefoxProfile profile = new FirefoxProfile();
// Disable native events (makes things break on Windows)
profile.setEnableNativeEvents(false);
// Set English as default language
profile.setPreference("general.useragent.locale", "en");
profile.setPreference("intl.accept_languages", "en");
// Set other confs to speed up FF
// Speed up firefox by pipelining requests on a single connection
profile.setPreference("network.http.keep-alive", true);
profile.setPreference("network.http.pipelining", true);
profile.setPreference("network.http.proxy.pipelining", true);
profile.setPreference("network.http.pipelining.maxrequests", 8);
// Try to use less memory
profile.setPreference("browser.sessionhistory.max_entries", 10);
profile.setPreference("browser.sessionhistory.max_total_viewers", 4);
profile.setPreference("browser.sessionstore.max_tabs_undo", 4);
profile.setPreference("browser.sessionstore.interval", 1800000);
// disable unresponsive script alerts
profile.setPreference("dom.max_script_run_time", 0);
profile.setPreference("dom.max_chrome_script_run_time", 0);
// don't skip proxy for localhost
profile.setPreference("network.proxy.no_proxies_on", "");
// prevent different kinds of popups/alerts
profile.setPreference("browser.tabs.warnOnClose", false);
profile.setPreference("browser.tabs.warnOnOpen", false);
profile.setPreference("extensions.newAddons", false);
profile.setPreference("extensions.update.notifyUser", false);
// disable autoscrolling
profile.setPreference("browser.urlbar.autocomplete.enabled", false);
// downloads conf
profile.setPreference("browser.download.useDownloadDir", false);
// prevent FF from running in offline mode when there's no network
// connection
profile.setPreference("toolkit.networkmanager.disable", true);
// prevent FF from giving health reports
profile.setPreference("datareporting.policy.dataSubmissionEnabled", false);
profile.setPreference("datareporting.healthreport.uploadEnabled", false);
profile.setPreference("datareporting.healthreport.service.firstRun", false);
profile.setPreference("datareporting.healthreport.service.enabled", false);
profile.setPreference("datareporting.healthreport.logging.consoleEnabled", false);
// start page conf to speed up FF
profile.setPreference("browser.startup.homepage", "about:blank");
profile.setPreference("pref.browser.homepage.disable_button.bookmark_page", false);
profile.setPreference("pref.browser.homepage.disable_button.restore_default", false);
// misc confs to avoid useless updates
profile.setPreference("browser.search.update", false);
profile.setPreference("browser.bookmarks.restore_default_bookmarks", false);
// misc confs to speed up FF
profile.setPreference("extensions.ui.dictionary.hidden", true);
profile.setPreference("layout.spellcheckDefault", 0);
// For FF > 40 ?
profile.setPreference("startup.homepage_welcome_url.additional", "about:blank");
// to ease up changing conf during tests
profile.setPreference("general.warnOnAboutConfig", false);
// webdriver logging
if (Boolean.TRUE.equals(Boolean.valueOf(System.getenv("nuxeo.log.webriver")))) {
String location = System.getProperty("basedir") + File.separator + "target";
File outputFolder = new File(location);
if (!outputFolder.exists() || !outputFolder.isDirectory()) {
outputFolder = null;
}
File webdriverlogFile = File.createTempFile("webdriver", ".log", outputFolder);
profile.setPreference("webdriver.log.file", webdriverlogFile.getAbsolutePath());
log.warn("Webdriver logs saved in " + webdriverlogFile);
}
return profile;
}
@Override
public RemoteWebDriver init(DesiredCapabilities dc) throws Exception {
FirefoxProfile profile = getProfile();
JavaScriptError.addExtension(profile);
dc.setCapability(FirefoxDriver.PROFILE, profile);
driver = new FirefoxDriver(dc);
return driver;
}
@Override
public RemoteWebDriver get() {
return driver;
}
@Override
public void quit() {
if (driver != null) {
driver.quit();
driver = null;
}
}
}