Java tutorial
/* * 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"); } }