All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.fluentlenium.core.hook.wait.WaitHook Maven / Gradle / Ivy

package org.fluentlenium.core.hook.wait;

import org.fluentlenium.core.FluentControl;
import org.fluentlenium.core.components.ComponentInstantiator;
import org.fluentlenium.core.hook.BaseFluentHook;
import org.fluentlenium.core.wait.FluentWait;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.pagefactory.ElementLocator;

import java.util.List;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * Hook that automatically wait for actions beeing available on the underlying element.
 */
public class WaitHook extends BaseFluentHook {
    /**
     * Creates a new wait hook
     *
     * @param control          FluentLenium control interface
     * @param instantiator     FluentLenium instantiator
     * @param elementSupplier  element supplier
     * @param locatorSupplier  element locator supplier
     * @param toStringSupplier element toString supplier
     * @param options          hook options
     */
    public WaitHook(FluentControl control, ComponentInstantiator instantiator, Supplier elementSupplier,
            Supplier locatorSupplier, Supplier toStringSupplier, WaitHookOptions options) {
        super(control, instantiator, elementSupplier, locatorSupplier, toStringSupplier, options);
    }

    @Override
    protected WaitHookOptions newOptions() {
        return new WaitHookOptions();
    }

    private FluentWait buildAwait() {
        return getOptions().configureAwait(await());
    }

    @Override
    public void click() {
        buildAwait().until(() -> getFluentWebElement().present() && getFluentWebElement().clickable());
        super.click();
    }

    @Override
    public void sendKeys(CharSequence... keysToSend) {
        buildAwait().until(() -> getFluentWebElement().present() && getFluentWebElement().enabled());
        super.sendKeys(keysToSend);
    }

    @Override
    public void submit() {
        buildAwait().until(() -> getFluentWebElement().displayed() && getFluentWebElement().enabled());
        super.submit();
    }

    @Override
    public void clear() {
        buildAwait().until(() -> getFluentWebElement().displayed() && getFluentWebElement().enabled());
        super.clear();
    }

    @Override
    public List findElements() {
        return buildAwait().until(new Function>() {

            @Override
            public List apply(FluentControl input) {
                List elements = WaitHook.super.findElements();
                if (elements.size() == 0) {
                    return null;
                }
                return elements;
            }

            @Override
            public String toString() {
                return WaitHook.super.toString();
            }
        });
    }

    @Override
    public WebElement findElement() {
        return buildAwait().until(new Function() {

            @Override
            public WebElement apply(FluentControl input) {
                return WaitHook.super.findElement();
            }

            @Override
            public String toString() {
                return WaitHook.super.toString();
            }
        });
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy