Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package uk.sponte.automation.seleniumpom;
  
  import  org.openqa.selenium.By;
  import  org.openqa.selenium.Dimension;
  import  org.openqa.selenium.JavascriptExecutor;
  import  org.openqa.selenium.NoSuchElementException;
  import  org.openqa.selenium.Point;
  import  org.openqa.selenium.StaleElementReferenceException;
  import  org.openqa.selenium.WebDriver;
 import  org.openqa.selenium.WebElement;
 import  org.openqa.selenium.interactions.Actions;
 import  org.openqa.selenium.interactions.internal.Coordinates;
 import  org.openqa.selenium.internal.Locatable;
 import  org.openqa.selenium.remote.RemoteWebElement;
 import  org.openqa.selenium.support.ui.Select;
 
 import java.util.List;
Thin wrapper around selenium WebElement. It also adds extension methods to simplify interacting with elements in HTML. Created by swozniak on 03/04/15.
 
 public class PageElementImpl implements PageElement {
     private final static Integer DEFAULT_TIMEOUT = 5000;
 
     // packagePrivate
     WebElement frame;
 
     private WebDriver driver;
     private WebElement element;
     private String windowHandle;
 
     public PageElementImpl(
             WebDriver driver,
             WebElement element) {
         this. = driver;
         this. = element;
     }
 
     public boolean canHandle(Method methodName) {
         for (Method method : this.getClass().getMethods()) {
             if (method.getName().equals(methodName.getName()))
                 return true;
         }
 
         return false;
     }
 
     public boolean isPresent() {
         try {
             this..getTagName();
         } catch (NoSuchElementException e) {
             return false;
         } catch (StaleElementReferenceException ex) {
             return false;
         }
 
         return true;
     }
 
     public String getHiddenText() {
         return (String) ((JavascriptExecutor) ).executeScript(
                 "return arguments[0].innerText;");
     }
 
     public String getValue() {
         return this..getAttribute("value");
     }
 
     public void set(String text) {
         String tagName = this..getTagName();
         if (tagName.equalsIgnoreCase("input")) {
             this..clear();
             this..sendKeys(text);
             return;
         }
 
         if (tagName.equalsIgnoreCase("select")) {
             Select select = new Select(this.);
             select.selectByValue(text);
             return;
         }
 
         throw new Error("Cannot set elements value: " + tagName);
     }
 
     public void set(String formatObject... args) {
         this.set(String.format(formatargs));
     }
 
 
     // DEMO custom actions made easier
     public void doubleClick() {
         new Actions().doubleClick(this.).perform();
    }
    public void dropOnto(PageElement target) {
        new Actions().dragAndDrop(this.target).perform();
    }
    public void waitFor(Integer timeoutthrows TimeoutException {
        long start = Calendar.getInstance().getTimeInMillis();
        while (true) {
            if (Calendar.getInstance().getTimeInMillis() - start > timeout) {
                throw new TimeoutException("Timed out while waiting for element to be present");
            }
            try {
                this..getTagName();
                return;
            } catch (NoSuchElementException webDriverException) {
                sleep(100);
            } catch (StaleElementReferenceException webDriverException) {
                sleep(100);
            }
        }
    }
    private void sleep(int timeout) {
        try {
            Thread.sleep(timeout);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    public void waitFor() throws TimeoutException {
        waitFor();
    }
    public void waitUntilGone(Integer timeoutthrows TimeoutException {
        long start = Calendar.getInstance().getTimeInMillis();
        while (true) {
            if (Calendar.getInstance().getTimeInMillis() - start > timeout) {
                throw new TimeoutException("Timed out while waiting for element to be gone");
            }
            try {
                this..getTagName();
                sleep(100);
            } catch (StaleElementReferenceException ex) {
                return;
            } catch (NoSuchElementException ex) {
                return;
            }
        }
    }
    public void waitUntilGone() throws TimeoutException {
    }
    // DEMO waiting for things to happen, for instance waiting for element to disappear from the page
    public void waitUntilHidden(Integer timeoutthrows TimeoutException {
        long start = Calendar.getInstance().getTimeInMillis();
        while (this..isDisplayed()) {
            if (Calendar.getInstance().getTimeInMillis() - start > timeout) {
                throw new TimeoutException("Timed out while waiting for element to be hidden");
            }
            sleep(100);
        }
    }
    public void waitUntilHidden() throws TimeoutException {
    }
    public void waitUntilVisible(Integer timeoutthrows TimeoutException {
        long start = Calendar.getInstance().getTimeInMillis();
        waitFor(timeout);
        while (!this..isDisplayed()) {
            if (Calendar.getInstance().getTimeInMillis() - start > timeout) {
                throw new TimeoutException("Timed out while waiting for element to be visible");
            }
            sleep(100);
        }
    }
    public void waitUntilVisible() throws TimeoutException {
    }
    public WebElement getWrappedElement() {
        if (this. instanceof RemoteWebElement) return this.;
        return this;
    }
    // DEMO ability to "decorate" selenium's logic, for instance adding retry logic
    @Override
    public void click() {
        this..click();
    }
    @Override
    public void submit() {
        this..submit();
    }
    @Override
    public void sendKeys(CharSequence... charSequences) {
        this..sendKeys(charSequences);
    }
    @Override
    public void clear() {
        this..clear();
    }
    @Override
    public String getTagName() {
        return this..getTagName();
    }
    @Override
    public String getAttribute(String s) {
        return this..getAttribute(s);
    }
    @Override
    public boolean isSelected() {
        return this..isSelected();
    }
    @Override
    public boolean isEnabled() {
        return this..isEnabled();
    }
    @Override
    public String getText() {
        return this..getText();
    }
    public List<WebElement> findElements(By by) {
        return this..findElements(by);
    }
    public WebElement findElement(By by) {
        return this..findElement(by);
    }
    @Override
    public boolean isDisplayed() {
        return this..isDisplayed();
    }
    @Override
    public Point getLocation() {
        return this..getLocation();
    }
    @Override
    public Dimension getSize() {
        return this..getSize();
    }
    @Override
    public String getCssValue(String s) {
        return this..getCssValue(s);
    }
    @Override
    public Coordinates getCoordinates() {
        return ((Locatable) this.).getCoordinates();
    }
New to GrepCode? Check out our FAQ X