package org.lightadmin.util; import com.google.common.base.Predicate; import org.openqa.selenium.*; import org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.support.ui.WebDriverWait; import java.util.List; import java.util.Set; public class ExtendedWebDriverImpl implements ExtendedWebDriver { private RemoteWebDriver webDriver; private long webDriverTimeout; public ExtendedWebDriverImpl(final RemoteWebDriver webDriver, final long webDriverTimeout) { this.webDriver = webDriver; this.webDriverTimeout = webDriverTimeout; } @Override public boolean isElementPresent(final WebElement webElement) { try { return webElement.isDisplayed(); } catch (NoSuchElementException ex) { return false; } //todo: iko: handle stale element properly by trying to find it on a page again catch (StaleElementReferenceException e) { return false; } } @Override public boolean isElementPresent(By by) { try { webDriver.findElement(by); } catch (NoSuchElementException e) { return false; } return true; } @Override public boolean isElementValuePresent(final String elementName, final String expectedValue) { return webDriver.findElement(By.name(elementName)).getAttribute("value").equals(expectedValue); } @Override public void waitForElementVisible(final WebElement element) throws TimeoutException { waitForElementVisible(element, webDriverTimeout); } @Override public void waitForElementVisible(final WebElement element, long timeout) { new WebDriverWait(webDriver, timeout).until(new Predicate<WebDriver>() { @Override public boolean apply(WebDriver input) { return isElementPresent(element); } }); } @Override public void waitForElementInvisible(final WebElement element) { new WebDriverWait(webDriver, webDriverTimeout).until(new Predicate<WebDriver>() { @Override public boolean apply(WebDriver input) { return !isElementPresent(element); } }); } @Override public void clearAndType(final WebElement field, final String text) { field.clear(); field.sendKeys(text); field.sendKeys(Keys.TAB); } @Override public void clear(final WebElement field) { field.click(); field.clear(); field.sendKeys(Keys.TAB); } @Override public void forceFocusOnCurrentWindow() { webDriver.switchTo().window(webDriver.getWindowHandle()); } @Override public void scrollTo(int pixels) { webDriver.executeScript("window.scrollBy(0, " + pixels +")"); } @Override public void get(final String url) { webDriver.get(url); } @Override public String getCurrentUrl() { return webDriver.getCurrentUrl(); } @Override public String getTitle() { return webDriver.getTitle(); } @Override public List<WebElement> findElements(final By by) { return webDriver.findElements(by); } @Override public WebElement findElement(By by) { return webDriver.findElement(by); } @Override public String getPageSource() { return webDriver.getPageSource(); } @Override public void close() { webDriver.close(); } @Override public void quit() { webDriver.quit(); } @Override public Set<String> getWindowHandles() { return webDriver.getWindowHandles(); } @Override public String getWindowHandle() { return webDriver.getWindowHandle(); } @Override public TargetLocator switchTo() { return webDriver.switchTo(); } @Override public Navigation navigate() { return webDriver.navigate(); } @Override public Options manage() { return webDriver.manage(); } }