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

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

package co.verisoft.fw.objectrepository;

import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
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.Collections;
import java.util.List;


@Slf4j
@ToString
public class DynamicWebElements extends AbstractDynamicElement {

    public DynamicWebElements(WebDriver driver, ObjectRepository repository,
                              String elementObjectId, String pageName) {
        super(driver, repository, elementObjectId, pageName);
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        List elements = resolveElementsFromRepository(proxy);
        return method.invoke(elements, args);
    }

    List resolveElementsFromRepository(Object proxy) throws IOException {
        List sortedLocatorsList = getSortedLocatorsList(repository, this.elementObjectId, pageName);

        for (Locator locator : sortedLocatorsList) {
            By by = resolveLocator(locator);
            try {
                List elements = this.driver.findElements(by);
                if (!elements.isEmpty()) {
                    // Elements found, return immediately
                    log.debug("Found elements using locator: {}", by);
                    return elements;
                }
            } catch (Exception e) {
                // NO-OP
            }
        }

        log.debug("Could not perform findElements to element " + this.elementObjectId);
        return Collections.emptyList();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy