package net.thucydides.core.annotations.locators;
import net.thucydides.core.guice.Injectors;
import net.thucydides.core.pages.PageObject;
import net.thucydides.core.webdriver.Configuration;
import net.thucydides.core.webdriver.ElementLocatorFactorySelector;
import net.thucydides.core.webdriver.ElementProxyCreator;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.pagefactory.ElementLocatorFactory;
import org.openqa.selenium.support.pagefactory.FieldDecorator;
public class SmartElementProxyCreator implements ElementProxyCreator {
@Override
public void proxyElements(PageObject pageObject, WebDriver driver) {
ElementLocatorFactory finder = getElementLocatorFactorySelector().getLocatorFor(driver);
FieldDecorator decorator = new SmartFieldDecorator(finder, driver, pageObject);
PageFactory.initElements(decorator, pageObject);
}
@Override
public void proxyElements(PageObject pageObject, WebDriver driver, int timeoutInSeconds) {
ElementLocatorFactory finder = getElementLocatorFactorySelector().withTimeout(timeoutInSeconds).getLocatorFor(driver);
FieldDecorator decorator = new SmartFieldDecorator(finder, driver, pageObject);
PageFactory.initElements(decorator, pageObject);
}
private ElementLocatorFactorySelector getElementLocatorFactorySelector() {
Configuration configuration = Injectors.getInjector().getInstance(Configuration.class);
return new ElementLocatorFactorySelector(configuration);
}
}