Created
April 15, 2013 14:52
-
-
Save zevnull/5388673 to your computer and use it in GitHub Desktop.
ExtendedFieldDecorator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.ddn.autotest.ui.primitives; | |
import java.lang.reflect.Field; | |
import org.openqa.selenium.SearchContext; | |
import org.openqa.selenium.WebElement; | |
import org.openqa.selenium.support.PageFactory; | |
import org.openqa.selenium.support.pagefactory.DefaultElementLocatorFactory; | |
import org.openqa.selenium.support.pagefactory.DefaultFieldDecorator; | |
import org.openqa.selenium.support.pagefactory.ElementLocator; | |
/** | |
* ExtendedFieldDecorator it's wrapper for DefaultFieldDecorator. This is class will be using | |
* to initialize the class fields of our ui pages (PageFactory.initElements) | |
* | |
* @author Andrei_Tsiarenia | |
* | |
*/ | |
public class ExtendedFieldDecorator extends DefaultFieldDecorator | |
{ | |
private IElementFactory elementFactory = new DefaultElementFactory(); | |
private IContainerFactory containerFactory = new DefaultContainerFactory(); | |
public ExtendedFieldDecorator(final SearchContext searchContext) | |
{ | |
super(new DefaultElementLocatorFactory(searchContext)); | |
} | |
@Override | |
public Object decorate(final ClassLoader loader, final Field field) | |
{ | |
if (IContainer.class.isAssignableFrom(field.getType())) | |
{ | |
return decorateContainer(loader, field); | |
} | |
if (IElement.class.isAssignableFrom(field.getType())) | |
{ | |
return decorateElement(loader, field); | |
} | |
return super.decorate(loader, field); | |
} | |
@SuppressWarnings("unchecked") | |
private Object decorateElement(final ClassLoader loader, final Field field) | |
{ | |
final WebElement wrappedElement = proxyForLocator(loader, createLocator(field)); | |
return elementFactory.create((Class<? extends IElement>) field.getType(), wrappedElement); | |
} | |
private ElementLocator createLocator(final Field field) | |
{ | |
return factory.createLocator(field); | |
} | |
@SuppressWarnings("unchecked") | |
private Object decorateContainer(final ClassLoader loader, final Field field) | |
{ | |
final WebElement wrappedElement = proxyForLocator(loader, createLocator(field)); | |
final IContainer container = containerFactory.create((Class<? extends IContainer>) field.getType(), wrappedElement); | |
PageFactory.initElements(new ExtendedFieldDecorator(wrappedElement), container); | |
return container; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment