org.openlmis.UiUtils.DriverFactory.java Source code

Java tutorial

Introduction

Here is the source code for org.openlmis.UiUtils.DriverFactory.java

Source

/*
 * This program is part of the OpenLMIS logistics management information system platform software.
 * Copyright  2013 VillageReach
 *
 * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
 * 
 * This program 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 Affero General Public License for more details.
 * You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses. For additional information contact info@OpenLMIS.org.
 */

package org.openlmis.UiUtils;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxBinary;
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.remote.DesiredCapabilities;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.Map;

import static java.lang.System.getProperty;
import static java.lang.System.setProperty;

public class DriverFactory {

    private String driverType;
    private String INPUT_ZIP_FILE_IE_DRIVER = null;
    private String INPUT_ZIP_FILE_CHROME_DRIVER = null;
    private String CHROME_FOLDER = null;
    private String OUTPUT_FOLDER = null;

    Unzip unZip;

    public WebDriver loadDriver(String browser) throws IOException, InterruptedException {
        String Separator = getProperty("file.separator");
        File parentDir = new File(getProperty("user.dir"));

        CHROME_FOLDER = parentDir.getPath() + Separator + "test-modules" + Separator + "test-core" + Separator
                + "src" + Separator + "main" + Separator + "java" + Separator + "org" + Separator + "openlmis"
                + Separator + "UiUtils" + Separator;
        OUTPUT_FOLDER = parentDir.getPath() + Separator + "test-modules" + Separator + "test-core" + Separator
                + "src" + Separator + "main" + Separator + "java" + Separator + "org" + Separator + "openlmis"
                + Separator + "UiUtils" + Separator;
        INPUT_ZIP_FILE_IE_DRIVER = OUTPUT_FOLDER + "IEDriverServer_Win32_2.39.0.zip";
        INPUT_ZIP_FILE_CHROME_DRIVER = OUTPUT_FOLDER + "chromedriver_win32.zip";

        return loadDriver(true, browser);
    }

    public String driverType() {
        return driverType.trim();
    }

    public void deleteExe() {
        unZip = new Unzip();
        unZip.deleteFile(OUTPUT_FOLDER + "IEDriverServer.exe");
        unZip.deleteFile(OUTPUT_FOLDER + "chromedriver.exe");
    }

    private WebDriver loadDriver(boolean enableJavascript, String browser)
            throws InterruptedException, IOException {
        switch (browser) {
        case "firefox":
            driverType = getProperty("web.driver", "Firefox");
            return createFirefoxDriver(enableJavascript);

        case "ie":
            unZip = new Unzip();
            unZip.unZipIt(INPUT_ZIP_FILE_IE_DRIVER, OUTPUT_FOLDER);
            Thread.sleep(1500);
            driverType = setProperty("webdriver.ie.driver", OUTPUT_FOLDER + "IEDriverServer.exe");
            driverType = getProperty("webdriver.ie.driver");
            return createInternetExplorerDriver();

        case "chrome":
            unZip = new Unzip();
            unZip.unZipIt(INPUT_ZIP_FILE_CHROME_DRIVER, OUTPUT_FOLDER);
            Thread.sleep(1500);
            driverType = setProperty("webdriver.chrome.driver", OUTPUT_FOLDER + "chromedriver");
            driverType = getProperty("webdriver.chrome.driver");
            return createChromeDriver();

        case "chromeM":
            // To run offline test on Jenkins change CHROME_FOLDER to OUTPUT_FOLDER
            driverType = setProperty("webdriver.chrome.driver", CHROME_FOLDER + "chromedriver");
            driverType = getProperty("webdriver.chrome.driver");
            return createChromeDriver();

        case "HTMLUnit":
            return new HtmlUnitDriver(BrowserVersion.INTERNET_EXPLORER_8);

        default:
            driverType = getProperty("web.driver", "Firefox");
            return createFirefoxDriver(enableJavascript);
        }
    }

    private WebDriver createFirefoxDriver(boolean enableJavascript) {
        boolean headless = Boolean.parseBoolean(getProperty("headless", "false"));
        FirefoxProfile profile = new FirefoxProfile();
        profile.setAcceptUntrustedCertificates(true);
        profile.setPreference("signed.applets.codebase_principal_support", true);
        profile.setPreference("javascript.enabled", enableJavascript);
        profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "text/csv");
        profile.setPreference("browser.download.dir", new File(System.getProperty("user.dir")).getParent());
        profile.setPreference("browser.download.folderList", 2);
        profile.setPreference("dom.storage.enabled", true);
        profile.setPreference("device.storage.enabled", true);

        if ((getProperty("os.name").toLowerCase().contains("mac")) && headless) {
            String LOCAL_FIREFOX_X11_PATH = "/opt/local/bin/firefox-x11";
            File binaryFile = new File(LOCAL_FIREFOX_X11_PATH);
            FirefoxBinary binary = new FirefoxBinary(binaryFile);
            String LOCAL_X11_DISPLAY = ":5";
            binary.setEnvironmentProperty("DISPLAY", LOCAL_X11_DISPLAY);
            return new FirefoxDriver(binary, profile);
        }
        return new FirefoxDriver(profile);
    }

    private WebDriver createInternetExplorerDriver() throws IOException {
        Runtime.getRuntime().exec("RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255");
        DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
        ieCapabilities.setCapability("ignoreZoomSetting", true);
        return new InternetExplorerDriver(ieCapabilities);
    }

    private WebDriver createChromeDriver() {
        DesiredCapabilities capabilities = DesiredCapabilities.chrome();

        Map<String, String> prefs = new Hashtable<>();
        prefs.put("download.prompt_for_download", "false");
        prefs.put("download.default_directory", "C:\\Users\\openlmis\\Downloads");

        String[] switches = { "--start-maximized", "--ignore-certificate-errors" };
        capabilities.setJavascriptEnabled(true);
        capabilities.setCapability("chrome.prefs", prefs);
        capabilities.setCapability("chrome.switches", Arrays.asList(switches));

        return new ChromeDriver(capabilities);
    }
}