package com.algocrafts.locators;
import com.algocrafts.selenium.Element;
import com.algocrafts.selenium.Locator;
import com.algocrafts.selenium.SearchScope;
import org.openqa.selenium.By;
import java.util.Optional;
import java.util.function.Supplier;
import java.util.stream.Stream;
public class Locators<T1 extends SearchScope<T1>, T2>
implements Locator<T1, T2> {
public static <T extends SearchScope<T>> Locators<T, Element> element(Supplier<By> selector) {
return new ElementLocator<>(selector);
}
public static <T extends SearchScope<T>> Locators<T, Stream<Element>> elements(Supplier<By> selector) {
return new ElementsLocator<>(selector);
}
public static <T extends SearchScope<T>> Locators<T, Optional<Element>> optionalElement(Supplier<By> selector) {
return new OptionalElementLocator<>(selector);
}
public static SelectLocator select(Supplier<By> selector) {
return new SelectLocator(selector);
}
private final Locator<T1, T2> locator;
public Locators(Locator<T1, T2> locator) {
this.locator = locator;
}
@Override
public T2 locate(T1 where) {
return locator.locate(where);
}
}