JsWebElementListInvocationHandler.java

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

import lombok.Builder;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.WebElement;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.List;

@Slf4j
@Builder
public class JsWebElementListInvocationHandler implements InvocationHandler {

    private JsWebElementProxyBuilder jsWebElementProxyBuilder;
    private List<WebElement> webElements;

    @SneakyThrows
    @Override
    public Object invoke(final Object proxy, final Method method, final Object[] args) {
        final Object result = method.invoke(webElements, args);

        if (result instanceof WebElement) {
            log.debug("Creating on-demand proxy for webElement");
            return jsWebElementProxyBuilder.buildFor(result);
        }

        return result;
    }
}