package org.fluentlenium.core.switchto;
import org.fluentlenium.core.alert.AlertImpl;
import org.fluentlenium.core.components.ComponentInstantiator;
import org.fluentlenium.core.domain.FluentWebElement;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
/**
* Fluent wrapper for {@link org.openqa.selenium.WebDriver.TargetLocator}.
*
* @param <T> self type
*/
public class FluentTargetLocatorImpl<T> implements FluentTargetLocator<T> {
private final WebDriver.TargetLocator targetLocator;
private final T self;
private final ComponentInstantiator componentInstantiator;
/**
* Creates a new fluent target locator
*
* @param self object returned by this target locator
* @param componentInstantiator component instantiator
* @param targetLocator underlying target locator
*/
public FluentTargetLocatorImpl(T self, ComponentInstantiator componentInstantiator, WebDriver.TargetLocator targetLocator) {
this.self = self;
this.componentInstantiator = componentInstantiator;
this.targetLocator = targetLocator;
}
@Override
public T frame(int index) {
targetLocator.frame(index);
return self;
}
@Override
public T frame(String nameOrId) {
targetLocator.frame(nameOrId);
return self;
}
@Override
public T frame(WebElement frameElement) {
targetLocator.frame(frameElement);
return self;
}
@Override
public T frame(FluentWebElement frameElement) {
return frame(frameElement.getElement());
}
@Override
public T parentFrame() {
targetLocator.parentFrame();
return self;
}
@Override
public T window(String nameOrHandle) {
targetLocator.window(nameOrHandle);
return self;
}
@Override
public T defaultContent() {
targetLocator.defaultContent();
return self;
}
@Override
public FluentWebElement activeElement() {
WebElement webElement = targetLocator.activeElement();
return componentInstantiator.newFluent(webElement);
}
@Override
public AlertImpl alert() {
org.openqa.selenium.Alert alert = targetLocator.alert();
return new AlertImpl(alert);
}
}