package org.fluentlenium.core.proxy; import org.fluentlenium.core.domain.ElementUtils; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.pagefactory.ElementLocator; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * {@link ElementLocator} retrieving the last element from another locator. */ public class LastElementLocator implements ElementLocator { private final ElementLocator listLocator; /** * Creates a new last element locator. * * @param listLocator element list locator */ public LastElementLocator(ElementLocator listLocator) { this.listLocator = listLocator; } private WebElement findElementImpl() { List<WebElement> elements = listLocator.findElements(); if (elements.isEmpty()) { return null; } return elements.get(elements.size() - 1); } @Override public WebElement findElement() { WebElement element = findElementImpl(); if (element == null) { throw ElementUtils.noSuchElementException(String.valueOf("Element " + this)); } return element; } @Override public List<WebElement> findElements() { WebElement element = findElementImpl(); if (element == null) { return Collections.emptyList(); } return Arrays.asList(element); } @Override public String toString() { return listLocator.toString() + " (last)"; } }