/*
* JBoss, Home of Professional Open Source.
* Copyright 2010, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.gatein.selenium.common;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.jboss.gatein.selenium.AbstractContextual;
import org.testng.Assert;
import com.thoughtworks.selenium.SeleniumException;
public class CommonHelper extends AbstractContextual {
public static void waitForElementPresent(String element) throws Exception {
setUp();
for (int second = 0;; second++) {
if (second >= timeoutSecInt) {
Assert.fail("Timeout at waitForElementPresent: " + element);
}
try {
if (selenium.isElementPresent(element)) {
break;
}
} catch (Exception e) {
}
Thread.sleep(1000);
}
}
public static void waitForTextPresent(String text) throws Exception {
setUp();
for (int second = 0;; second++) {
if (second >= timeoutSecInt) {
Assert.fail("Timeout at waitForTextPresent: " + text);
}
try {
if (ieFlag) {
if (selenium.isElementPresent("//*[contains(text(), '" + text + "')]")
&& selenium.isVisible("//*[contains(text(), '" + text + "')]")) {
break;
}
} else {
if (selenium.isTextPresent(text)) {
break;
}
}
} catch (Exception e) {
}
Thread.sleep(1000);
}
}
public static void waitForTextNotPresent(String text) throws Exception {
setUp();
for (int second = 0;; second++) {
if (second >= timeoutSecInt) {
Assert.fail("Timeout at waitForTextNotPresent: " + text);
}
try {
if (ieFlag) {
if (!selenium.isElementPresent("//*[contains(text(), '" + text + "')]")
|| !selenium.isVisible("//*[contains(text(), '" + text + "')]")) {
break;
}
} else {
if (!selenium.isTextPresent(text)) {
break;
}
}
} catch (Exception e) {
}
Thread.sleep(1000);
}
}
public static void waitForElementNotPresent(String element) throws Exception {
setUp();
for (int second = 0;; second++) {
if (second >= timeoutSecInt) {
Assert.fail("Timeout at waitForElementNotPresent: " + element);
}
try {
if (!selenium.isElementPresent(element)) {
break;
}
} catch (Exception e) {
}
Thread.sleep(1000);
}
}
public static void waitForConfirmation(String confirmationText) throws Exception {
setUp();
for (int second = 0;; second++) {
if (second >= timeoutSecInt) {
Assert.fail("Timeout at waitForConfirmation: " + confirmationText);
}
try {
if (selenium.getConfirmation().equals(confirmationText)) {
break;
}
} catch (Exception e) {
}
Thread.sleep(1000);
}
}
public static String getText(String element) {
setUp();
return selenium.getText(element);
}
public static boolean isTextPresent(String text) {
setUp();
if (ieFlag) {
return selenium.isElementPresent("//*[contains(text(), '" + text + "')]")
&& selenium.isVisible("//*[contains(text(), '" + text + "')]");
} else {
return selenium.isTextPresent(text);
}
}
public static boolean isTextNotPresent(String text) {
setUp();
if (ieFlag) {
return !selenium.isElementPresent("//*[contains(text(), '" + text + "')]")
|| !selenium.isVisible("//*[contains(text(), '" + text + "')]");
} else {
return !selenium.isTextPresent(text);
}
}
public static boolean isElementPresent(String element) {
setUp();
return selenium.isElementPresent(element);
}
public static boolean isElementNotPresent(String element) {
setUp();
return !selenium.isElementPresent(element);
}
public static boolean isOrdered(String element1, String element2) {
setUp();
return selenium.isOrdered(element1, element2);
}
public static void waitForPageToLoad(String timeout) {
setUp();
selenium.waitForPageToLoad(timeout);
}
public static void dragAndDropToObject(String source, String target) {
setUp();
System.out.println("--Drag and drop to object--");
selenium.dragAndDropToObject(source, target);
}
public static void dragAndDrop(String source, String movementString) {
setUp();
System.out.println("--Drag and drop--");
selenium.dragAndDrop(source, movementString);
}
public static void contextMenuOnElement(String element) {
selenium.getEval("selenium.doComponentExoContextMenu(\"" + element + "\")");
}
public static void doubleClickOnElement(String element) {
selenium.getEval("selenium.doComponentExoDoubleClick(\"" + element + "\")");
}
public static void keyPressOnElement(String element, String key) {
selenium.keyPress(element, key);
}
public static void open(String location) {
setUp();
System.out.println("--Opening location " + location + "--");
long start = System.currentTimeMillis();
RuntimeException re = null;
do {
try {
selenium.open(location);
return;
} catch (SeleniumException ex) {
if (!ex.getMessage().startsWith("Timed out")) {
throw ex;
}
re = ex;
}
} while (System.currentTimeMillis() - start < timeoutSecInt * 1000);
if (re != null) {
throw re;
}
}
public static void click(String element) {
setUp();
selenium.click(element);
}
public static void type(String element, String value) {
setUp();
selenium.type(element, value);
}
public static void select(String element, String option) {
setUp();
selenium.select(element, option);
}
public static void check(String element) {
setUp();
selenium.check(element);
}
public static boolean isCheck(String element) {
setUp();
return selenium.isChecked(element);
}
public static void uncheck(String element) {
setUp();
selenium.uncheck(element);
}
public static void fireEvent(String element, String event) {
setUp();
selenium.fireEvent(element, event);
}
public static void mouseOver(String element) {
setUp();
selenium.mouseOver(element);
}
public static void pause(long timeInMillis) {
try {
Thread.sleep(timeInMillis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static String getValue(String element) {
setUp();
return selenium.getValue(element);
}
public static String getXpathCount(String element) {
setUp();
return selenium.getXpathCount(element).toString();
}
public static boolean isTextAtElementEqual(String element, String text) throws Exception {
setUp();
return getText(element).equals(text);
}
public static void openPortal(boolean publicMode) {
setUp();
open(publicMode ? portalPath : portalPath.replace("public", "private"));
}
public static void signInAsRoot() throws Exception {
signIn("root", "gtn");
}
public static void signInAsJohn() throws Exception {
signIn("john", "gtn");
}
public static void signInAsMary() throws Exception {
signIn("mary", "gtn");
}
public static void signInAsDemo() throws Exception {
signIn("demo", "gtn");
}
public static void signIn(String username, String password) throws Exception {
setUp();
System.out.println("--Signing in as " + username + "--");
waitForElementPresent("link=Sign in");
click("link=Sign in");
waitForElementPresent("username");
type("username", username);
type("password", password);
click("//div[@id='UIPortalLoginFormAction']/div/div/div/a");
waitForPageToLoad(timeout);
}
public static void signInWithRememberChecked(String username, String password) throws Exception {
setUp();
System.out.println("--Signing in as " + username + " with checked remember me--");
waitForElementPresent("link=Sign in");
click("link=Sign in");
waitForElementPresent("username");
type("username", username);
type("password", password);
System.out.println("--Check \"remember my login\"");
click("rememberme");
click("//div[@id='UIPortalLoginFormAction']/div/div/div/a");
waitForPageToLoad(timeout);
}
public static void signOut() throws Exception {
setUp();
signOutWithLanguage("Sign out");
}
public static void signOutWithLanguage(String signOutLabel) throws Exception {
setUp();
System.out.println("--Signing out--");
waitForElementPresent("link=" + signOutLabel);
click("link=" + signOutLabel);
waitForPageToLoad(timeout);
}
public static void goToApplicationRegistry() throws Exception {
setUp();
System.out.println("--Go to App.registry--");
waitForElementPresent("link=Application Registry");
click("link=Application Registry");
waitForPageToLoad(timeout);
}
public static void goToPageManagement() throws Exception {
setUp();
System.out.println("--Go to Page Management--");
waitForElementPresent("link=Page Management");
click("link=Page Management");
waitForPageToLoad(timeout);
}
public static void goToUsersManagement() throws Exception {
setUp();
System.out.println("--Go to Users and groups management--");
waitForElementPresent("link=Users and groups management");
click("link=Users and groups management");
waitForPageToLoad(timeout);
}
public static void goToNewStaff() throws Exception {
setUp();
System.out.println("--Go to New Staff--");
waitForElementPresent("link=New Staff");
click("link=New Staff");
waitForPageToLoad(timeout);
}
public static void goToSiteManagement() throws Exception {
setUp();
System.out.println("--Go to Site Management--");
waitForElementPresent("link=Site");
click("link=Site");
waitForPageToLoad(timeout);
}
public static void goToGroupManagement() throws Exception {
setUp();
System.out.println("--Go to Group Management--");
waitForElementPresent("link=Group");
click("link=Group");
waitForPageToLoad(timeout);
}
public static void goToDashboard() throws Exception {
setUp();
System.out.println("--Go to Dashboard--");
waitForElementPresent("link=Dashboard");
click("link=Dashboard");
waitForPageToLoad(timeout);
}
public static void goToClassicPortal() throws Exception {
setUp();
System.out.println("--Go to portal classic--");
waitForElementPresent("link=classic");
click("link=classic");
waitForPageToLoad(timeout);
}
public static void goToPage(String pageLabel) throws Exception {
setUp();
System.out.println("--Go to page: " + pageLabel + "--");
waitForElementPresent("link=" + pageLabel);
click("link=" + pageLabel);
waitForPageToLoad(timeout);
}
public static void closeMessageDialog() throws Exception {
System.out.println("--Closing message dialog--");
waitForElementPresent("//div[@id='UIPortalApplication']/div[@class='UIPopupWindow UIDragObject']//div[@class='MiddleLeftSideDecorator']//div[@class='UIPopupMessages']/div[@class='MessageActionBar']//a");
click("//div[@id='UIPortalApplication']/div[@class='UIPopupWindow UIDragObject']//div[@class='MiddleLeftSideDecorator']//div[@class='UIPopupMessages']/div[@class='MessageActionBar']//a");
}
public static void waitForMessage(String message) throws Exception {
System.out.println("--Verify message: " + message);
waitForElementPresent("//div[@class='PopupMessage']");
waitForTextPresent(message);
}
public static void waitForPopupElementWithMessage(String message) throws Exception {
System.out.println("--Verify message: " + message);
waitForElementPresent("//div[@class='PopupMessage']");
String value = getText("//div[@class='PopupMessage']");
if (!value.contains(message)) {
throw new Exception("Message to verify is not valid, current message value is: " + value);
}
}
public static void assertConfirmation(String msg) {
Assert.assertTrue(selenium.getConfirmation().matches("^" + msg + "$"));
}
public static void verifyTextPresent(String text) {
Assert.assertTrue(selenium.isTextPresent(text));
}
public static void importApplications() throws Exception {
System.out.println("--Import applications--");
waitForElementPresent("//div[@id='UIApplicationRegistryPortlet']/div[2]/div[2]/div/div/div[2]");
click("//div[@id='UIApplicationRegistryPortlet']/div[2]/div[2]/div/div/div[2]");
assertConfirmation("This action will automatically create categories and import all the gadgets and portlets on it.");
}
public static void verifyPortletInstalled(String appName, String portletName) throws Exception {
System.out.println("--Verify portlet is installed: " + appName + "/" + portletName + "--");
waitForElementPresent("link=" + appName);
click("link=" + appName);
waitForTextPresent(portletName);
verifyTextPresent(portletName);
}
public static void echo(String msg) {
System.out.println(msg);
}
/**
* Copy input to output.
*
* @param in the input
* @param out the output
* @throws IOException for any I/O error
*/
public static void copyAndClose(InputStream in, OutputStream out) throws IOException {
try {
byte[] buf = new byte[20000];
int rc;
while ((rc = in.read(buf)) != -1) {
out.write(buf, 0, rc);
}
out.flush();
out.close();
} finally {
try {
in.close();
} catch (Exception ignored) {
}
}
}
}