org.apache.portals.pluto.demo.integration.test.Util.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.portals.pluto.demo.integration.test.Util.java

Source

/*  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you under the Apache License, Version 2.0 (the
 *  "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing,
 *  software distributed under the License is distributed on an
 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *  KIND, either express or implied.  See the License for the
 *  specific language governing permissions and limitations
 *  under the License.
 */
package org.apache.portals.pluto.demo.integration.test;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedCondition;
import static org.openqa.selenium.support.ui.ExpectedConditions.*;

/**
 *
 * @author Kyle Stiemann
 */
public final class Util {
    private static final int COLOR_HEX_STRING_LENGTH = 2;

    private Util() {
        throw new AssertionError();
    }

    public static String encodeURL(String url) {

        String portalName = System.getProperty("test.portal.name", "Pluto");

        if ("Pluto".equalsIgnoreCase(portalName)) {
            try {
                return URLEncoder.encode(url, StandardCharsets.UTF_8.toString());
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e);
            }
        } else {
            return url.replace(" ", "-").toLowerCase(Locale.ENGLISH);
        }
    }

    public static Object executeScript(WebDriver webDriver, String script, Object... arguments) {
        return ((JavascriptExecutor) webDriver).executeScript(script, arguments);
    }

    public static String getColorCode(int red, int green, int blue) {

        return "#" + getHexString(red, COLOR_HEX_STRING_LENGTH) + getHexString(green, COLOR_HEX_STRING_LENGTH)
                + getHexString(blue, COLOR_HEX_STRING_LENGTH);
    }

    public static String getZeroPaddedString(String string, int stringLength) {
        return String.format("%" + stringLength + "s", string).replace(" ", "0");
    }

    public static <T> List<T> unmodifiableList(T... items) {
        return Collections.unmodifiableList(Arrays.asList(items));
    }

    // Expected Conditions
    public static ExpectedCondition<Boolean> attributeEmpty(By locator, String attributeName) {
        return or(attributeToBe(locator, attributeName, null), attributeToBe(locator, attributeName, ""));
    }

    public static ExpectedCondition<Boolean> backgroundColor(By locator, int red, int green, int blue) {

        String colorCode = getColorCode(red, green, blue);

        return and(visibilityOfElementLocated(locator),
                or(attributeContains(locator, "style", "background-color:" + colorCode + ";"), attributeContains(
                        locator, "style", "background-color: rgb(" + red + ", " + green + ", " + blue + ");")));
    }

    public static ExpectedCondition<Boolean> elementNotPresentOrNotVisible(By locator) {
        return or(not(presenceOfAllElementsLocatedBy(locator)), invisibilityOfElementLocated(locator));
    }

    public static ExpectedCondition<Boolean> textEmpty(By locator) {
        return or(elementNotPresentOrNotVisible(locator), textToBe(locator, ""));
    }

    // Element Methods
    public static void clearElement(WebDriver webDriver, WaitingAsserter waitingAsserter, By locator) {

        waitingAsserter.waitFor(and(visibilityOfElementLocated(locator), new ElementEnabled(locator)));
        locator.findElement(webDriver).clear();
    }

    public static void clearElement(WebDriver webDriver, WaitingAsserter waitingAsserter, String elementTagName,
            String... elementIdFragments) {
        clearElement(webDriver, waitingAsserter, getXpath(elementTagName, elementIdFragments));
    }

    public static void clearElement(WebDriver webDriver, WaitingAsserter waitingAsserter, String elementXpath) {
        clearElement(webDriver, waitingAsserter, By.xpath(elementXpath));
    }

    public static void clickElement(WebDriver webDriver, WaitingAsserter waitingAsserter, By locator) {

        waitingAsserter.waitFor(and(visibilityOfElementLocated(locator), elementToBeClickable(locator)));
        locator.findElement(webDriver).click();
    }

    public static void clickElement(WebDriver webDriver, WaitingAsserter waitingAsserter, String elementTagName,
            String... elementIdFragments) {
        clickElement(webDriver, waitingAsserter, getXpath(elementTagName, elementIdFragments));
    }

    public static void clickElement(WebDriver webDriver, WaitingAsserter waitingAsserter, String elementXpath) {
        clickElement(webDriver, waitingAsserter, By.xpath(elementXpath));
    }

    public static WebElement findElement(WebDriver webDriver, String elementXpath) {
        return webDriver.findElement(By.xpath(elementXpath));
    }

    public static String getXpath(String elementTagName, String... elementIdFragments) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("//");
        stringBuilder.append(elementTagName);

        for (String idFragment : elementIdFragments) {
            stringBuilder.append("[");
            stringBuilder.append("contains(@id,'");
            stringBuilder.append(idFragment);
            stringBuilder.append("')]");
        }

        return stringBuilder.toString();
    }

    public static void sendKeysToElement(WebDriver webDriver, WaitingAsserter waitingAsserter, By locator,
            CharSequence... keys) {
        sendKeysToElement(webDriver, waitingAsserter, true, locator, keys);
    }

    public static void sendKeysToElement(WebDriver webDriver, WaitingAsserter waitingAsserter, String elementXpath,
            CharSequence... keys) {
        sendKeysToElement(webDriver, waitingAsserter, true, By.xpath(elementXpath), keys);
    }

    public static void sendKeysToElement(WebDriver webDriver, WaitingAsserter waitingAsserter,
            boolean clearBeforeSendingKeys, By locator, CharSequence... keys) {

        waitingAsserter.waitFor(and(visibilityOfElementLocated(locator), new ElementEnabled(locator)));

        if (clearBeforeSendingKeys) {
            clearElement(webDriver, waitingAsserter, locator);
        }

        locator.findElement(webDriver).sendKeys(keys);
    }

    public static void sendKeysToElement(WebDriver webDriver, WaitingAsserter waitingAsserter,
            boolean clearBeforeSendingKeys, String elementXpath, CharSequence... keys) {
        sendKeysToElement(webDriver, waitingAsserter, clearBeforeSendingKeys, By.xpath(elementXpath), keys);
    }

    private static String getHexString(int toHexValue, int stringLength) {
        return getZeroPaddedString(Integer.toHexString(toHexValue), stringLength);
    }
}