org.openlmis.UiUtils.TestWebDriver.java Source code

Java tutorial

Introduction

Here is the source code for org.openlmis.UiUtils.TestWebDriver.java

Source

/*
 * This program is part of the OpenLMIS logistics management information system platform software.
 * Copyright  2013 VillageReach
 *
 * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
 * You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses. For additional information contact info@OpenLMIS.org.
 */

package org.openlmis.UiUtils;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import static org.openqa.selenium.OutputType.BYTES;

public class TestWebDriver {

    private static WebDriver driver;
    private static String BASE_URL;
    private int DEFAULT_WAIT_TIME = 10;

    public TestWebDriver(WebDriver driver) {
        TestWebDriver.driver = driver;
        maximizeBrowser();
    }

    public void setBaseURL(String BASE_URL) {
        driver.manage().deleteAllCookies();
        TestWebDriver.BASE_URL = BASE_URL;
        get();
    }

    public WebElement findElement(By by) {
        return driver.findElement(by);
    }

    public void get() {
        driver.get(BASE_URL);
    }

    public void getUrl(String url) {
        driver.get(url);
    }

    public static WebDriver getDriver() {
        return driver;
    }

    public String getCurrentUrl() {
        return driver.getCurrentUrl();
    }

    public String getPageSource() {
        return driver.getPageSource();
    }

    public void setImplicitWait(int defaultTimeToWait) {
        driver.manage().timeouts().implicitlyWait(defaultTimeToWait, TimeUnit.SECONDS);
    }

    public void quitDriver() {
        driver.quit();
    }

    public void maximizeBrowser() {
        driver.manage().window().maximize();
    }

    public void refresh() {
        driver.navigate().refresh();
    }

    public void waitForPageToLoad() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        (new WebDriverWait(driver, DEFAULT_WAIT_TIME)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return (((org.openqa.selenium.JavascriptExecutor) driver)
                        .executeScript("return document.readyState").equals("complete"));
            }
        });
    }

    public void handleScroll() {
        ((org.openqa.selenium.JavascriptExecutor) driver).executeScript("scroll(0,1000);");
    }

    public void handleScrollByPixels(int x, int y) {
        ((org.openqa.selenium.JavascriptExecutor) driver).executeScript("scroll(" + x + "," + y + ");");
    }

    public void waitForElementToAppear(final WebElement element) {
        (new WebDriverWait(driver, DEFAULT_WAIT_TIME)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return (element.isDisplayed());
            }
        });
    }

    public void waitForAjax() {
        waitForPageToLoad();
        final WebElement loader = findElement(By.id("loader"));
        (new WebDriverWait(driver, DEFAULT_WAIT_TIME)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return (!loader.isDisplayed());
            }
        });
    }

    public void waitForElementToBeEnabled(final WebElement element) {
        (new WebDriverWait(driver, DEFAULT_WAIT_TIME)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return (element.isEnabled());
            }
        });
    }

    public void waitForElementsToAppear(final WebElement element, final WebElement elementSecond) {
        (new WebDriverWait(driver, DEFAULT_WAIT_TIME)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return (element.isDisplayed() || elementSecond.isDisplayed());
            }
        });
    }

    public void waitForElementsToAppear(final WebElement element, final WebElement elementSecond,
            final WebElement elementThird) {
        (new WebDriverWait(driver, DEFAULT_WAIT_TIME)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return (element.isDisplayed() || elementSecond.isDisplayed() || elementThird.isDisplayed());
            }
        });
    }

    public void selectByVisibleText(WebElement element, String visibleText) {
        new Select(element).selectByVisibleText(visibleText);
    }

    public void selectByValue(WebElement element, String value) {
        new Select(element).selectByValue(value);
    }

    public void selectByIndex(WebElement element, int index) {
        new Select(element).selectByIndex(index);
    }

    public WebElement getFirstSelectedOption(WebElement element) {
        return new Select(element).getFirstSelectedOption();
    }

    public WebElement getElementById(String Id) {
        return driver.findElement(By.id(Id));
    }

    public WebElement getElementByName(String Name) {
        return driver.findElement(By.name(Name));
    }

    public WebElement getElementByXpath(String Xpath) {
        return driver.findElement(By.xpath(Xpath));
    }

    public List<WebElement> getElementsByXpath(String Xpath) {
        return driver.findElements(By.xpath(Xpath));
    }

    public List<WebElement> getElementsByLinkText(String linkText) {
        return driver.findElements(By.linkText(linkText));
    }

    public int getElementsSizeByXpath(String Xpath) {
        return driver.findElements(By.xpath(Xpath)).size();
    }

    public String getSelectedOptionDefault(WebElement element) {
        return element.getAttribute("value");
    }

    public List<WebElement> getAllSelectedOptions(WebElement element) {
        return new Select(element).getAllSelectedOptions();
    }

    public List<WebElement> getOptions(WebElement element) {
        return new Select(element).getOptions();
    }

    public List<String> getListOfOptions(WebElement element) {
        List<String> listOfOptions = new ArrayList<>();
        for (WebElement option : new Select(element).getOptions()) {
            listOfOptions.add(option.getText());
        }
        return listOfOptions;
    }

    public List<String> getListOfOptionGroupsWithOptions(WebElement element) {
        List<String> listOfOptionGroupsWithOptions = new ArrayList<>();
        for (WebElement option : element.findElements(By.tagName("optgroup"))) {
            listOfOptionGroupsWithOptions.add(option.getAttribute("label") + "\n" + option.getText());
        }
        return listOfOptionGroupsWithOptions;
    }

    public String getText(WebElement element) {
        return element.getText();
    }

    public String getAttribute(WebElement element, String value) {
        return element.getAttribute(value);
    }

    public void sleep(long timeToSleep) {
        try {
            Thread.sleep(timeToSleep);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public void click(final WebElement element) {
        Actions action = new Actions(driver);
        action.click(element).perform();
    }

    public void scrollAndClick(final WebElement element) {
        //Due to chrome bug where clicking on element present in DOM but not on screen requires scrolling
        scrollToElement(element);
        click(element);
    }

    public void clickForRadio(final WebElement element) {
        element.click();
        if (!element.isSelected()) {
            Actions action = new Actions(driver);
            action.click(element).perform();
        }
    }

    public void keyPress(final WebElement element) {
        waitForElementToAppear(element);

        if (driver instanceof FirefoxDriver) {
            element.sendKeys(Keys.RETURN);
            return;
        }

        if (element != null) {
            for (int i = 0; i < 15; i++) {
                element.sendKeys(Keys.TAB);
                if (driver.switchTo().activeElement().getText().equalsIgnoreCase(element.getText())) {
                    break;
                }
            }
            element.sendKeys(Keys.RETURN);
        }
    }

    public void moveToElement(WebElement element) {
        new Actions(driver).moveToElement(element).perform();
    }

    public byte[] getScreenshot() {
        return ((TakesScreenshot) driver).getScreenshotAs(BYTES);
    }

    public void scrollToElement(WebElement elementToClick) {
        // Scroll the browser to the element's Y position
        ((org.openqa.selenium.JavascriptExecutor) driver)
                .executeScript(String.format("window.scrollTo(0, %s);", elementToClick.getLocation().getY()));
    }

    public void closeBrowser() {
        String base = driver.getWindowHandle();
        Set<String> set = driver.getWindowHandles();
        set.remove(base);

        if (set.size() >= 1) {
            driver.switchTo().window((String) set.toArray()[0]);
            driver.close();
            driver.switchTo().window(base);
        }
    }

    public void switchWindow() {
        String base = driver.getWindowHandle();
        Set<String> set = driver.getWindowHandles();
        set.remove(base);

        if (set.size() >= 1) {
            driver.switchTo().window((String) set.toArray()[0]);
        }
    }
}