blob: 79087f35949963266f1cd5bf7d728c942cca880d [file] [log] [blame]
/* 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);
}
}