nl.hsac.fitnesse.fixture.util.selenium.by.LinkBy Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hsac-fitnesse-fixtures Show documentation
Show all versions of hsac-fitnesse-fixtures Show documentation
Fixtures to assist in testing via FitNesse
package nl.hsac.fitnesse.fixture.util.selenium.by;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.SearchContext;
import org.openqa.selenium.WebElement;
/**
* Container for By implementations searching links.
*/
public class LinkBy {
public static By heuristic(String place) {
return new Heuristic(place);
}
public static By exactText(String text) {
return new Exact(text);
}
public static By partialText(String partialText) {
return new Partial(partialText);
}
/**
* Finds by exact link text.
*/
public static class Exact extends HeuristicBy {
public Exact(String text) {
super(By.linkText(text),
new XPathBy(".//a[descendant-or-self::text()[normalized(.)='%s']]", text));
}
}
/**
* Finds by partial link text.
*/
public static class Partial extends HeuristicBy {
public Partial(String partialText) {
super(By.partialLinkText(partialText),
new XPathBy(".//a[descendant-or-self::text()[contains(normalized(.),'%s')]]", partialText));
}
}
/**
* Finds using heuristic.
*/
public static class Heuristic extends HeuristicBy {
private static final By FIND_PARENT_A_BY = By.xpath("./ancestor::a");
public Heuristic(String place) {
super(exactText(place),
AriaLabelBy.exact(place),
TitleBy.exact(place),
AltBy.exact(place),
partialText(place),
AriaLabelBy.partial(place),
TitleBy.partial(place),
AltBy.partial(place));
}
@Override
public WebElement findElement(SearchContext context) {
WebElement element = super.findElement(context);
if (element != null && !"a".equalsIgnoreCase(element.getTagName())) {
try {
element = FIND_PARENT_A_BY.findElement(element);
} catch (NoSuchElementException e) {
// element we found is not in a link
element = null;
}
}
return element;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy