com.lazerycode.ebselen.EbselenCore.java Source code

Java tutorial

Introduction

Here is the source code for com.lazerycode.ebselen.EbselenCore.java

Source

/*
 * Copyright (c) 2010-2011 Ardesco Solutions - http://www.ardescosolutions.com
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.lazerycode.ebselen;

/**
 * This class is the Core class for all tests.
 * You should not need to make any changes to this document
 * If you must make changes, please be aware of the implications your changes.
 *
 * This implementation is only designed to support a single browser object at the moment.
 */

import com.lazerycode.ebselen.globals.GlobalSettings;
import com.thoughtworks.selenium.Selenium;

import org.junit.*;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.*;
import org.openqa.selenium.firefox.*;
import org.openqa.selenium.htmlunit.*;
import org.openqa.selenium.ie.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//import com.lazerycode.ebselen.customhandlers.handler;
import com.lazerycode.ebselen.BrowserConfiguration.htmlUnitEmulation;
import com.lazerycode.ebselen.BrowserConfiguration.selectedBrowser;
import com.opera.core.systems.OperaDriver;

import org.openqa.selenium.android.AndroidDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.iphone.IPhoneDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

public class EbselenCore implements EbselenConfiguration {

    public static GlobalSettings settings = new GlobalSettings();
    public static final Logger logger = LoggerFactory.getLogger(EbselenCore.class);
    private BrowserConfiguration browserDetails;
    // Selenium Objects
    protected WebDriver driver;
    protected EbselenCommands ebselen;
    protected Actions builder;

    public EbselenCore() {
        browserDetails = new BrowserConfiguration();
    }

    public EbselenCore(BrowserConfiguration browser) {
        browserDetails = browser;
    }

    public WebDriver getDriverObject() {
        return driver;
    }

    public EbselenCommands getEbselenCommandsObject() {
        return ebselen;
    }

    public Actions getActionsBuilderObject() {
        return builder;
    }

    /**
     * Start the WebDriver Instance
     */
    public void startSelenium() {
        if (driver != null) {
            logger.error("There appears to be an existing driver instance.. Details are: {}", driver);
            logger.error("Shutting down existing instance and starting up again...");
            stopSelenium(driver);
        }
        driver = setBrowser(driver);
        ebselen = new EbselenCommands(driver);
        builder = new Actions(driver);
    }

    private DesiredCapabilities setHTMLUnitCapabilities(htmlUnitEmulation browserVersion) {
        DesiredCapabilities capabilities = DesiredCapabilities.htmlUnit();
        capabilities.setJavascriptEnabled(true);
        switch (browserVersion) {
        case FIREFOX:
            capabilities.setBrowserName("firefox");
            break;
        case IE6:
            capabilities.setBrowserName("internet explorer");
            capabilities.setVersion("6");
            break;
        case IE7:
            capabilities.setBrowserName("internet explorer");
            capabilities.setVersion("7");
            break;
        case IE8:
            capabilities.setBrowserName("internet explorer");
            capabilities.setVersion("8");
            break;
        default:
            break;
        }
        return capabilities;
    }

    /**
     * Set the driver type based upon settings scraped from Env.properties
     * run function to get release number of website being tested
     *
     * @param driverObject - object to instantiate
     * @return WebDriver
     */
    public WebDriver setBrowser(WebDriver driverObject) {
        try {
            switch (browserDetails.getBrowser()) {
            case FIREFOX:
                driverObject = new FirefoxDriver(generateFirefoxProfile());
                logger.debug("Using FIREFOX Driver...");
                break;
            case IE6:
            case IE7:
            case IE8:
            case IE9:
                driverObject = new InternetExplorerDriver();
                logger.debug("Using INTERNET EXPLORER Driver...");
                break;
            case GOOGLECHROME:
                System.setProperty("webdriver.chrome.driver", settings.chromeDriverLocation());
                driverObject = new ChromeDriver();
                logger.debug("Using GOOGLECHROME Driver...");
                break;
            case HTMLUNIT:
                driverObject = new HtmlUnitDriver(setHTMLUnitCapabilities(browserDetails.getHTMLUnitEmulation()));
                logger.debug("Using HTMLUNIT Driver...");
                break;
            case SAFARI:
                //FUTURE
                break;
            case OPERA:
                driverObject = new OperaDriver();
                logger.debug("Using Opera Driver...");
                break;
            case IPHONE:
                driverObject = new IPhoneDriver();
                logger.debug("Using IPhone Driver...");
                break;
            case ANDROID:
                driverObject = new AndroidDriver();
                logger.debug("Using Android Driver...");
                break;
            }
            getReleaseVersion();
        } catch (Exception x) {
            logger.error("Error in EbselenCore.setBrowser: {}", x.getMessage());
            return driverObject;
        }
        return driverObject;
    }

    /**
     * Configure the FireFox profile if using FireFox Driver
     *
     * @return FirefoxProfile
     */
    private FirefoxProfile generateFirefoxProfile() {
        FirefoxProfile prf = new FirefoxProfile();
        prf.setPreference("dom.max_chrome_script_run_time", 60);
        prf.setPreference("setTimeoutInSeconds", 60);
        prf.setPreference("dom.max_script_run_time", 60);
        prf.setPreference("dom.popup_maximum", 0);
        prf.setPreference("privacy.popups.disable_from_plugins", 3);
        prf.setPreference("browser.xul.error_pages.enabled", false);
        prf.setPreference("general.useragent.extra.firefox", "Firefox");
        prf.setAcceptUntrustedCertificates(true);
        return (prf);
    }

    /**
     * Shut down any browser instances still open now that tests have finished
     *
     * @param driverObject - driver object to stop
     */
    public void stopSelenium(WebDriver driverObject) {
        try {
            if (driverObject != null) {
                try {
                    driverObject.quit();
                } catch (Exception x) {
                    logger.error("Did not manage to quit driver object cleanly: {}", x.getMessage());
                }
                driverObject = null;
            }
        } catch (Exception x) {
            logger.error("Error Quitting Browser: {}", x.getMessage());
            logger.error("Killing Selenium!");
            Runtime.getRuntime().halt(1);
        }
    }

    private void getReleaseVersion() {
        //FIXME Get the version number of site in test (Value in meta tag, value in version.txt, etc)
        logger.warn("You need to implement a function that will obtain the version of the site you are testing");
    }
}