Class WebDriverDecorator
- java.lang.Object
-
- org.openqa.selenium.support.decorators.WebDriverDecorator
-
- Direct Known Subclasses:
EventFiringDecorator
@Beta public class WebDriverDecorator extends java.lang.ObjectThis class helps to create decorators for instances ofWebDriverand derived objects, such asWebElements andAlert, that can extend or modify their "regular" behavior. It provides a flexible alternative to subclassing WebDriver.Here is a general usage pattern:
- implement a subclass of WebDriverDecorator that adds something to WebDriver behavior:
public class MyWebDriverDecorator extends WebDriverDecorator { ... }
(see below for details) - use a decorator instance to decorate a WebDriver object:
WebDriver original = new FirefoxDriver(); WebDriver decorated = new MyWebDriverDecorator().decorate(original); - use the decorated WebDriver instead of the original one:
decorated.get("http://example.com/"); ... decorated.quit();
- before executing a method of the underlying object,
- after executing a method of the underlying object,
- instead of executing a method of the underlying object,
- when an exception is thrown by a method of the underlying object.
decorated.findElement(someLocator)automatically decorates the returned WebElement.Instances created by the decorator implement all the same interfaces as the original objects.
When you implement a decorator there are two main options (that can be used both separately and together):
- if you want to apply the same behavior modification to all methods of
a WebDriver instance and its derived objects you can subclass
WebDriverDecorator and override some of the following methods:
beforeCall(Decorated, Method, Object[]),afterCall(Decorated, Method, Object[], Object),call(Decorated, Method, Object[])andonError(Decorated, Method, Object[], InvocationTargetException) - if you want to modify behavior of a specific class instances only
(e.g. behaviour of WebElement instances) you can override one of the
overloaded
createDecoratedmethods to create a non-trivial decorator for the specific class only.
One of the most widely used decorator examples is a logging decorator. In this case we want to add the same piece of logging code before and after each invoked method:
public class LoggingDecorator extends WebDriverDecorator { final Logger logger = LoggerFactory.getLogger(Thread.currentThread().getName());
-
-
Constructor Summary
Constructors Constructor Description WebDriverDecorator()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidafterCall(Decorated<?> target, java.lang.reflect.Method method, java.lang.Object[] args, java.lang.Object res)voidbeforeCall(Decorated<?> target, java.lang.reflect.Method method, java.lang.Object[] args)java.lang.Objectcall(Decorated<?> target, java.lang.reflect.Method method, java.lang.Object[] args)Decorated<org.openqa.selenium.Alert>createDecorated(org.openqa.selenium.Alert original)Decorated<org.openqa.selenium.virtualauthenticator.VirtualAuthenticator>createDecorated(org.openqa.selenium.virtualauthenticator.VirtualAuthenticator original)Decorated<org.openqa.selenium.WebDriver>createDecorated(org.openqa.selenium.WebDriver driver)Decorated<org.openqa.selenium.WebDriver.Navigation>createDecorated(org.openqa.selenium.WebDriver.Navigation original)Decorated<org.openqa.selenium.WebDriver.Options>createDecorated(org.openqa.selenium.WebDriver.Options original)Decorated<org.openqa.selenium.WebDriver.TargetLocator>createDecorated(org.openqa.selenium.WebDriver.TargetLocator original)Decorated<org.openqa.selenium.WebDriver.Timeouts>createDecorated(org.openqa.selenium.WebDriver.Timeouts original)Decorated<org.openqa.selenium.WebDriver.Window>createDecorated(org.openqa.selenium.WebDriver.Window original)Decorated<org.openqa.selenium.WebElement>createDecorated(org.openqa.selenium.WebElement original)protected <Z> ZcreateProxy(Decorated<Z> decorated)org.openqa.selenium.WebDriverdecorate(org.openqa.selenium.WebDriver original)Decorated<org.openqa.selenium.WebDriver>getDecoratedDriver()java.lang.ObjectonError(Decorated<?> target, java.lang.reflect.Method method, java.lang.Object[] args, java.lang.reflect.InvocationTargetException e)
-
-
-
Method Detail
-
decorate
public final org.openqa.selenium.WebDriver decorate(org.openqa.selenium.WebDriver original)
-
getDecoratedDriver
public Decorated<org.openqa.selenium.WebDriver> getDecoratedDriver()
-
createDecorated
public Decorated<org.openqa.selenium.WebDriver> createDecorated(org.openqa.selenium.WebDriver driver)
-
createDecorated
public Decorated<org.openqa.selenium.WebElement> createDecorated(org.openqa.selenium.WebElement original)
-
createDecorated
public Decorated<org.openqa.selenium.WebDriver.TargetLocator> createDecorated(org.openqa.selenium.WebDriver.TargetLocator original)
-
createDecorated
public Decorated<org.openqa.selenium.WebDriver.Navigation> createDecorated(org.openqa.selenium.WebDriver.Navigation original)
-
createDecorated
public Decorated<org.openqa.selenium.WebDriver.Options> createDecorated(org.openqa.selenium.WebDriver.Options original)
-
createDecorated
public Decorated<org.openqa.selenium.WebDriver.Timeouts> createDecorated(org.openqa.selenium.WebDriver.Timeouts original)
-
createDecorated
public Decorated<org.openqa.selenium.WebDriver.Window> createDecorated(org.openqa.selenium.WebDriver.Window original)
-
createDecorated
public Decorated<org.openqa.selenium.Alert> createDecorated(org.openqa.selenium.Alert original)
-
createDecorated
public Decorated<org.openqa.selenium.virtualauthenticator.VirtualAuthenticator> createDecorated(org.openqa.selenium.virtualauthenticator.VirtualAuthenticator original)
-
beforeCall
public void beforeCall(Decorated<?> target, java.lang.reflect.Method method, java.lang.Object[] args)
-
call
public java.lang.Object call(Decorated<?> target, java.lang.reflect.Method method, java.lang.Object[] args) throws java.lang.Throwable
- Throws:
java.lang.Throwable
-
afterCall
public void afterCall(Decorated<?> target, java.lang.reflect.Method method, java.lang.Object[] args, java.lang.Object res)
-
onError
public java.lang.Object onError(Decorated<?> target, java.lang.reflect.Method method, java.lang.Object[] args, java.lang.reflect.InvocationTargetException e) throws java.lang.Throwable
- Throws:
java.lang.Throwable
-
createProxy
protected final <Z> Z createProxy(Decorated<Z> decorated)
-
-