package com.algocrafts.locators;
import com.algocrafts.conditions.HasElements;
import com.algocrafts.selenium.Element;
import com.algocrafts.selenium.SearchScope;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.support.ui.Select;
import org.slf4j.Logger;
import java.util.function.Supplier;
import static com.algocrafts.selectors.TagName.OPTION;
import static org.slf4j.LoggerFactory.getLogger;
public class SelectLocator<T extends SearchScope<T>>
extends Locators<T, Select> {
private static final Logger log = getLogger(SelectLocator.class);
public SelectLocator(Supplier<By> selector) {
super((T where) -> {
final Element element = where.untilFound(selector);
try {
element.until(Locators.<Element>elements(OPTION).and(new HasElements<>()));
return new Select(element);
} catch (NoSuchElementException e) {
element.click();
where.onTimeout();
log.error("Timeout waiting for the option list to populate.", e);
throw e;
}
});
}
}