public WebElement find(WebDriver driver, String use) { try { return new IdLookupStrategy().find(driver, use); } catch (NoSuchElementException e) { return new NameLookupStrategy().find(driver, use); } } }
public WebElement find(WebDriver driver, String use) { String[] parts = use.split(" "); List<WebElement> allElements = driver.findElements(By.name(parts[0])); // For some reason, we sometimes get back elements with a name that doesn't match. Filter those out Iterator<WebElement> iterator = allElements.iterator(); while (iterator.hasNext()) { WebElement element = iterator.next(); if (!(parts[0].equals(element.getAttribute("name")))) iterator.remove(); } for (int i = 1; i < parts.length; i++) { FilterFunction filterBy = getFilterFunction(parts[i]); if (filterBy == null) { throw new SeleniumException(use + " not found. Cannot find filter for: " + parts[i]); } String filterValue = getFilterValue(parts[i]); allElements = filterBy.filterElements(allElements, filterValue); } if (allElements.size() > 0) { return allElements.get(0); } throw new SeleniumException(use + " not found"); }
private void setUpElementFindingStrategies() { lookupStrategies.put("alt", new AltLookupStrategy()); lookupStrategies.put("class", new ClassLookupStrategy()); lookupStrategies.put("id", new IdLookupStrategy()); lookupStrategies.put("identifier", new IdentifierLookupStrategy()); lookupStrategies.put("implicit", new ImplicitLookupStrategy()); lookupStrategies.put("link", new LinkLookupStrategy()); lookupStrategies.put("name", new NameLookupStrategy()); lookupStrategies.put("xpath", new XPathLookupStrategy()); lookupStrategies.put("dom", new DomTraversalLookupStrategy()); }