package net.thucydides.core.webdriver.jquery; import org.openqa.selenium.*; import java.util.List; public class ByJQuerySelector extends By { private static final char DOUBLE_QUOTE = '"'; private static final String SINGLE_QUOTE = "'"; private final String jQuerySelector; public ByJQuerySelector(final String selector) { this.jQuerySelector = selector; } @Override public List<WebElement> findElements(SearchContext context) { String jquery = "return $(" + quoted(jQuerySelector) + ").get();"; return (List<WebElement>) ((JavascriptExecutor) context).executeScript(jquery); } @Override public WebElement findElement(SearchContext context) { String jquery = "return $(" + quoted(jQuerySelector) + ").get(0);"; WebElement element = (WebElement) ((JavascriptExecutor) context).executeScript(jquery); if (element == null) { throw new NoSuchElementException("No element found matching JQuery selector " + jQuerySelector); } else { return element; } } private String quoted(final String jQuerySelector) { if (jQuerySelector.contains("'")) { return DOUBLE_QUOTE + jQuerySelector + '"'; } else { return "'" + jQuerySelector + SINGLE_QUOTE; } } @Override public String toString() { return "By.jQuerySelector: " + jQuerySelector; } }