package com.algocrafts.forms; import com.algocrafts.algorithm.Retry; import com.algocrafts.locators.Locators; import com.algocrafts.selenium.Element; import com.algocrafts.selenium.Locating; import com.algocrafts.selenium.SearchScope; import org.openqa.selenium.By; import org.slf4j.Logger; import java.io.File; import java.util.Optional; import java.util.function.Supplier; import static com.algocrafts.converters.OptionalGetter.GET; import static java.util.concurrent.TimeUnit.SECONDS; import static org.slf4j.LoggerFactory.getLogger; public class FileInput<T extends SearchScope<T>> extends Locating<T, Optional<Element>> { public static final Logger log = getLogger(FileInput.class); /** * Constructor of the input field. * * @param where where * @param selector selector */ public FileInput(T where, Supplier<By> selector) { super(where, Locators.<T>optionalElement(selector)); } public void put(File file) { final Retry retry = new Retry(5, 1, SECONDS); try { retry.attempt(() -> { Element element = locate(GET); element.sendKeys(file.getAbsolutePath()); return null; }); } catch (Exception e) { log.info("Failed to set file {}", file); } } }