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

org.fluentlenium.core.inject.ContainerFluentControl Maven / Gradle / Ivy

package org.fluentlenium.core.inject;

import java.util.List;

import io.appium.java_client.AppiumBy;
import io.appium.java_client.MobileBy;
import org.fluentlenium.core.FluentControl;
import org.fluentlenium.core.FluentControlImpl;
import org.fluentlenium.core.domain.FluentList;
import org.fluentlenium.core.domain.FluentWebElement;
import org.fluentlenium.core.hook.HookControl;
import org.fluentlenium.core.hook.HookDefinition;
import org.fluentlenium.core.search.SearchFilter;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

/**
 * Container global FluentLenium control interface.
 */
public class ContainerFluentControl extends FluentControlImpl {
    private final FluentControl adapterControl;

    private ContainerContext context;

    /**
     * Get the underlying control from the test adapter.
     *
     * @return underlying control interface from the test adapter
     */
    public FluentControl getAdapterControl() {
        return adapterControl;
    }

    @Override
    public final WebDriver getDriver() {
        return getFluentControl() == null ? null : getFluentControl().getDriver();
    }

    /**
     * Creates a new container fluent control.
     *
     * @param adapterControl test adapter control interface
     */
    public ContainerFluentControl(FluentControl adapterControl) {
        super(adapterControl);
        this.adapterControl = adapterControl;
    }

    @Override
    public FluentControl getFluentControl() {
        return adapterControl;
    }

    /**
     * Creates a new container fluent control.
     *
     * @param adapterControl test adapter control interface
     * @param context        container context
     */
    public ContainerFluentControl(FluentControl adapterControl, ContainerContext context) {
        this.adapterControl = adapterControl;
        this.context = context;
    }

    /**
     * Define the container context of this container fluent control interface.
     *
     * @param context container context
     */
    public void setContext(ContainerContext context) {
        this.context = context;
    }

    private > T applyHooks(T hookControl) {
        if (context != null) {
            for (HookDefinition hookDefinition : context.getHookDefinitions()) {
                hookControl.withHook(hookDefinition.getHookClass(), hookDefinition.getOptions());
            }
        }
        return hookControl;
    }

    @Override
    public FluentList find(String selector, SearchFilter... filters) {
        return applyHooks(adapterControl.find(selector, filters));
    }

    @Override
    public FluentList $(String selector, SearchFilter... filters) {
        return applyHooks(adapterControl.$(selector, filters));
    }

    @Override
    public FluentWebElement el(String selector, SearchFilter... filters) {
        return applyHooks(adapterControl.el(selector, filters));
    }

    @Override
    public FluentList find(SearchFilter... filters) {
        return applyHooks(adapterControl.find(filters));
    }

    @Override
    public FluentList $(SearchFilter... filters) {
        return applyHooks(adapterControl.$(filters));
    }

    @Override
    public FluentWebElement el(SearchFilter... filters) {
        return applyHooks(adapterControl.el(filters));
    }

    @Override
    public FluentList find(By locator, SearchFilter... filters) {
        return applyHooks(adapterControl.find(locator, filters));
    }

    @Override
    public FluentList $(By locator, SearchFilter... filters) {
        return applyHooks(adapterControl.$(locator, filters));
    }

    @Override
    public FluentList $(AppiumBy locator, SearchFilter... filters) {
        return applyHooks(adapterControl.$(locator, filters));
    }

    @Override
    public FluentList find(List rawElements) {
        return applyHooks(adapterControl.find(rawElements));
    }

    @Override
    public FluentList $(List rawElements) {
        return applyHooks(adapterControl.$(rawElements));
    }

    @Override
    public FluentWebElement el(WebElement rawElement) {
        return applyHooks(adapterControl.el(rawElement));
    }

    @Override
    public FluentWebElement el(By locator, SearchFilter... filters) {
        return applyHooks(adapterControl.el(locator, filters));
    }

    @Override
    public FluentWebElement el(AppiumBy locator, SearchFilter... filters) {
        return applyHooks(adapterControl.el(locator, filters));
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy