All Downloads are FREE. Search and download functionalities are using the official Maven repository.

daveayan.gherkinsalad.browser.Browser Maven / Gradle / Ivy

There is a newer version: 2.5
Show newest version
/**
 * Copyright (c) 2012 Ayan Dave http://daveayan.com
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 
 * associated documentation files (the "Software"), to deal in the Software without restriction, including 
 * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
 * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the 
 * following conditions:
 * 
 * 1) The above copyright notice and this permission notice shall be included without any changes or alterations 
 * in all copies or substantial portions of the Software.
 * 2) This software shall be used for Good, not Evil.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 
 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
 * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
**/
package daveayan.gherkinsalad.browser;

import java.io.File;

import org.apache.commons.lang.StringUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;

import daveayan.gherkinsalad.Config;
import daveayan.gherkinsalad.browser.factory.BrowserFactory;
import daveayan.gherkinsalad.browser.factory.ChromeBrowser;
import daveayan.gherkinsalad.browser.factory.FireFoxBrowser;
import daveayan.gherkinsalad.browser.factory.HtmlUnitBrowser;
import daveayan.gherkinsalad.browser.factory.IeBrowser;
import daveayan.gherkinsalad.report.Report;
import daveayan.mirage.ReflectionUtils;
/** @author daveayan */
/**
 * Unless absolutely needed do not use this class directly. Use the daveayan.gherkinsalad.BaseAutomationObject object instead.
 * Use this method to initialize a browser instance, launch it, close it and navigate to a specific url. This class is built such that
 * only one running instance of browser can be handled. For example:
 * 

*

 * {@code
 * Browser firefox = Browser.instance_of("Firefox");
 * firefox.launch();
 * 
 * Browser chrome = Browser.instance_of("Chrome");
 * chrome.launch();
 * }
 * 
* This will suspend the firefox browser and let the chrome browser take control. */ public class Browser { private String name; private static WebDriver instance; private static String default_window_handle = StringUtils.EMPTY;; private static int screen_shot_count = 0; public void switch_to_default_window() { instance.switchTo().window(default_window_handle); } /** * Use this method to take a screenshot of the current browser window. The screenshot is taken as a png file and saved in target/screenshots folder. * The name of the file is screenshot_##.png where ## is the count that is incremented after each screenshot is taken. The count is maintained internally * as int. */ public void takeScreenshot() { screen_shot_count++; takeScreenshotAsFile("screenshot_" + screen_shot_count + ".png"); } /** * Use this method to take a screenshot of the current browser window. The screenshot is taken as a png file and saved in target/screenshots folder. * The name of the file is screenshot_##.png where ## is the count that is incremented after each screenshot is taken. The count is maintained internally * as int. */ public void takeScreenshotAsFile(String file_name) { File screenshot_file = ((TakesScreenshot) instance).getScreenshotAs(OutputType.FILE); Report.screenshot_taken(screenshot_file, file_name); } /** * Use this method to get an instance of the type of browser that is to be launched. This method does not launch the browser upon completion. * This method only creates a new Browser object and returns it back. Use the launch method to actually launch the instance of the browser. * * @param name Name of the browser. Currently supported are firefox, chrome and ie. Name is case insensitive. * @return Never null. New instance of Browser object for the given browser name */ public static Browser instance_of(String name) { Browser browser = new Browser(); browser.name = name; return browser; } /** * Use this method to close the currently open browser. */ public void close() { try { if (instance != null) { instance.close(); instance.quit(); } } catch (WebDriverException wde) { System.err.println(wde.getMessage()); } instance = null; default_window_handle = StringUtils.EMPTY; } /** * Use this method to actually launch the browser window that is represented by this object. */ public void launch() { BrowserFactory _launcher = (BrowserFactory) ReflectionUtils.objectFor(Config.getProperty("browser." + this.name.toLowerCase().trim() + ".class")); instance = _launcher.getDriver(); default_window_handle = instance.getWindowHandle(); } /** * Use this method to navigate to a specific website in the browser that is currently launched. * If no browser is currently launch this method does nothing. * * @param url The url to launch. If the url is null or empty this method does nothing. If the url is malformed this method may result in an exception. * If the url is a valid url the launched browser instance will load the url specified. */ public void goto_url(String url) { if(instance != null && StringUtils.isNotEmpty(url)) { instance.get(url); } } public WebDriver driver() { return instance; } public boolean is_IE() { return "ie".equalsIgnoreCase(this.name); } public boolean is_Chrome() { return "chrome".equalsIgnoreCase(this.name); } public boolean is_Firefox() { return "firefox".equalsIgnoreCase(this.name); } public boolean is_htmlunit() { return "html".equalsIgnoreCase(this.name) || "htmlunit".equalsIgnoreCase(this.name); } private Browser() {} }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy