package br.com.caelum.seleniumdsl.webdriver;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.SearchContext;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.WebElement;
public class ByLink extends By {
private final String property;
private WebDriverException exception;
private List<By> listOfBy;
public ByLink(final String property) {
this.property = property;
fillListOfBy();
}
private void fillListOfBy() {
listOfBy = Arrays.asList(By.linkText(property), By.partialLinkText(property), By.id(property),
By.name(property), By.xpath(property));
}
@Override
public List<WebElement> findElements(final SearchContext finder) {
final List<WebElement> elements = new ArrayList<WebElement>();
for (final By by : listOfBy) {
elements.addAll(by.findElements(finder));
}
return elements;
}
@Override
public WebElement findElement(final SearchContext finder) {
for (final By by : listOfBy) {
try {
final WebElement toReturn = by.findElement(finder);
if (toReturn != null) {
return toReturn;
}
} catch (final WebDriverException e) {
exception = e;
}
}
throw exception;
}
}