package org.fluentlenium.core.hook;
import org.fluentlenium.core.FluentControl;
import org.fluentlenium.core.components.ComponentInstantiator;
import org.fluentlenium.core.domain.FluentWebElement;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.pagefactory.ElementLocator;
import java.util.function.Supplier;
/**
* Base hook supporting {@link FluentWebElement} API.
* <p>
* You should extends this class to implements your own hook.
*
* @param <T>
* @see #getFluentWebElement()
*/
public class BaseFluentHook<T> extends BaseHook<T> {
private FluentWebElement fluentWebElement;
/**
* create a new base fluent hook.
*
* @param control control interface
* @param instantiator component instantiator
* @param elementSupplier element supplier
* @param locatorSupplier element locator supplier
* @param toStringSupplier element toString supplier
* @param options hook options
*/
public BaseFluentHook(FluentControl control, ComponentInstantiator instantiator, Supplier<WebElement> elementSupplier,
Supplier<ElementLocator> locatorSupplier, Supplier<String> toStringSupplier, T options) {
super(control, instantiator, elementSupplier, locatorSupplier, toStringSupplier, options);
}
/**
* Get the underlying element as a FluentWebElement.
*
* @return underlying element as a FluentWebElement
*/
public FluentWebElement getFluentWebElement() {
WebElement element = getElement();
if (fluentWebElement == null || element != fluentWebElement.getElement()) {
fluentWebElement = getInstantiator().newComponent(FluentWebElement.class, element);
}
return fluentWebElement;
}
}