JsWebElementProxyBuilder.java

package io.github.giulong.spectrum.utils.js;

import lombok.Builder;
import org.openqa.selenium.WebElement;

import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Map;
import java.util.regex.Pattern;

@Builder
public class JsWebElementProxyBuilder {

    private Js js;
    private Pattern locatorPattern;
    private Map<Method, Method> methods;

    public WebElement buildFor(final Object webElement) {
        return (WebElement) Proxy.newProxyInstance(
                WebElement.class.getClassLoader(),
                new Class<?>[]{WebElement.class},
                JsWebElementInvocationHandler
                        .builder()
                        .js(js)
                        .webElement((WebElement) webElement)
                        .locatorPattern(locatorPattern)
                        .methods(methods)
                        .build());
    }
}