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

co.verisoft.fw.objectrepository.DynamicWebElement Maven / Gradle / Ivy

package co.verisoft.fw.objectrepository;

import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.Nullable;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.List;

@Slf4j
@ToString
public class DynamicWebElement extends AbstractDynamicElement {

    public DynamicWebElement(WebDriver driver, ObjectRepository repository,
                             String elementObjectId, @Nullable String pageName) {
        super(driver, repository, elementObjectId, pageName);
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        WebElement e = resolveElementFromRepository(proxy);
        return method.invoke(e, args);
    }

    private WebElement resolveElementFromRepository(Object proxy) throws IOException {

        List sortedLocatorsList = getSortedLocatorsList(repository, this.elementObjectId, pageName);

        for (Locator locator : sortedLocatorsList) {
            By by = resolveLocator(locator);
            try {
                return this.driver.findElement(by);
            } catch (Exception e) {
                // NO-OP
            }
        }

        log.debug("Could not perform findElement to element " + this.elementObjectId);
        return new NonInteractableWebElement();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy