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

org.agileware.test.web.AbstractDelegatingWebDriver Maven / Gradle / Ivy

The newest version!
package org.agileware.test.web;

/*
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * 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.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.Point;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.WebElement;

/**
 * Abstract base class providing a delegator pattern implementation for Selenium
 * WebDriver implementations.
 */
public abstract class AbstractDelegatingWebDriver implements WebDriver, TakesScreenshot, JavascriptExecutor {
	/**
	 * The WebDriver implementation to delegate operations to.
	 */
	protected WebDriver delegate;

	/**
	 * Creates a delegating WebDriver around a WebDriver implementation.
	 * 
	 * @param delegate
	 *            the WebDriver implementation instance to delegate operations
	 *            to.
	 */
	public AbstractDelegatingWebDriver(WebDriver delegate) {
		this.delegate = delegate;
	}

	/**
	 * @return the delegate WebDriver instance
	 */
	public WebDriver getDelegate() {
		return this.delegate;
	}

	/**
	 * @see org.openqa.selenium.WebDriver#close()
	 */
	public void close() {
		delegate.close();
	}

	/**
	 * @see org.openqa.selenium.WebDriver#findElement(org.openqa.selenium.By)
	 */
	public WebElement findElement(By by) {
		try {
			return new DelegatingWebElement(delegate.findElement(by));
		} catch (NoSuchElementException nsee) {
			nsee.addInfo("Find clause", by.toString());
			throw nsee;
		}
	}

	/**
	 * @see org.openqa.selenium.WebDriver#findElements(org.openqa.selenium.By)
	 */
	public List findElements(By by) {
		try {
			List results = new ArrayList();
			for (WebElement webElement : delegate.findElements(by)) {
				results.add(new DelegatingWebElement(webElement));
			}
			return results;
		} catch (NoSuchElementException nsee) {
			nsee.addInfo("Find clause", by.toString());
			throw nsee;
		}
	}

	/**
	 * @see org.openqa.selenium.WebDriver#get(java.lang.String)
	 */
	public void get(String url) {
		delegate.get(url);
	}

	/**
	 * @see org.openqa.selenium.WebDriver#getCurrentUrl()
	 */
	public String getCurrentUrl() {
		return delegate.getCurrentUrl();
	}

	/**
	 * @see org.openqa.selenium.WebDriver#getPageSource()
	 */
	public String getPageSource() {
		return delegate.getPageSource();
	}

	/**
	 * @see org.openqa.selenium.WebDriver#getTitle()
	 */
	public String getTitle() {
		return delegate.getTitle();
	}

	/**
	 * @see org.openqa.selenium.WebDriver#getWindowHandle()
	 */
	public String getWindowHandle() {
		return delegate.getWindowHandle();
	}

	/**
	 * @see org.openqa.selenium.WebDriver#getWindowHandles()
	 */
	public Set getWindowHandles() {
		return delegate.getWindowHandles();
	}

	/**
	 * @see org.openqa.selenium.WebDriver#manage()
	 */
	public Options manage() {
		return delegate.manage();
	}

	/**
	 * @see org.openqa.selenium.WebDriver#navigate()
	 */
	public Navigation navigate() {
		return delegate.navigate();
	}

	/**
	 * @see org.openqa.selenium.WebDriver#switchTo()
	 */
	public TargetLocator switchTo() {
		return delegate.switchTo();
	}

	/**
	 * @see org.openqa.selenium.WebDriver#quit()
	 */
	public void quit() {
		delegate.quit();
	}

	/**
	 * @see org.openqa.selenium.JavascriptExecutor#executeAsyncScript(java.lang.String,
	 *      java.lang.Object[])
	 */
	public Object executeAsyncScript(String script, Object... args) throws WebDriverException {
		try {
			return ((JavascriptExecutor) delegate).executeAsyncScript(script, args);
		} catch (ClassCastException cce) {
			throw new WebDriverException("Delegate implementation `" + delegate.getClass() + "` does not support this feature");
		}
	}

	/**
	 * @see org.openqa.selenium.JavascriptExecutor#executeScript(java.lang.String,
	 *      java.lang.Object[])
	 */
	public Object executeScript(String script, Object... args) throws WebDriverException {
		try {
			return ((JavascriptExecutor) delegate).executeScript(script, args);
		} catch (ClassCastException cce) {
			throw new WebDriverException("Delegate implementation `" + delegate.getClass() + "` does not support this feature");
		}
	}

	/**
	 * @see org.openqa.selenium.TakesScreenshot#getScreenshotAs(org.openqa.selenium.OutputType)
	 */
	public  X getScreenshotAs(OutputType target) throws WebDriverException {
		try {
			return ((TakesScreenshot) delegate).getScreenshotAs(target);
		} catch (ClassCastException cce) {
			throw new WebDriverException("Delegate implementation `" + delegate.getClass() + "` does not support this feature");
		}
	}

	protected class DelegatingWebElement implements WebElement {
		
		protected WebElement delegate;

		public DelegatingWebElement(WebElement delegate) {
			this.delegate = delegate;
		}
		
		public void click() {
			delegate.click();
		}

		public void submit() {
			delegate.submit();
		}

		public void sendKeys(CharSequence... keysToSend) {
			delegate.sendKeys(keysToSend);
		}

		public void clear() {
			delegate.clear();
		}

		public String getTagName() {
			return delegate.getTagName();
		}

		public String getAttribute(String name) {
			return delegate.getAttribute(name);
		}

		public boolean isSelected() {
			return delegate.isSelected();
		}

		public boolean isEnabled() {
			return delegate.isEnabled();
		}

		public String getText() {
			return delegate.getText();
		}

		public List findElements(By by) {
			try {
				return delegate.findElements(by);
			} catch (NoSuchElementException nsee) {
				nsee.addInfo("Find clause", by.toString());
				throw nsee;
			}
		}

		public WebElement findElement(By by) {
			try {
				return delegate.findElement(by);
			} catch (NoSuchElementException nsee) {
				nsee.addInfo("Find clause", by.toString());
				throw nsee;
			}
		}

		public boolean isDisplayed() {
			return delegate.isDisplayed();
		}

		public Point getLocation() {
			return delegate.getLocation();
		}

		public Dimension getSize() {
			return delegate.getSize();
		}

		public String getCssValue(String propertyName) {
			return delegate.getCssValue(propertyName);
		}

		public  X getScreenshotAs(OutputType type) throws WebDriverException {
			return delegate.getScreenshotAs(type);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy