/*
* 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.navigation;
import static org.jboss.gatein.selenium.common.CommonHelper.*;
import org.jboss.gatein.selenium.AbstractContextual;
import org.testng.Assert;
public class NavigationHelper extends AbstractContextual {
public static enum CopyType {
COPY, CUT, CLONE;
}
public static void addNewNode(String nodeName, String nodeLabel, boolean useLink, String elementToAddWithRightClick,
String pageName, String pageTitle, boolean verifyPage, boolean verifyNode) throws Exception {
System.out.println("--Adding new node at navigation--");
editNavigation();
if (useLink) {
waitForElementPresent("link=Add Node");
click("link=Add Node");
} else {
waitForElementPresent(elementToAddWithRightClick);
click(elementToAddWithRightClick);
pause(2000);
contextMenuOnElement(elementToAddWithRightClick);
pause(3000);
waitForElementPresent("//div[@id='UINavigationManagement']/div[2]/div[3]/div/div/div/div/div/div/div/div[2]/div/div/div//a");
click("//div[@id='UINavigationManagement']/div[2]/div[3]/div/div/div/div/div/div/div/div[2]/div/div/div//a");
}
waitForTextPresent("Page Node Setting");
waitForElementPresent("name");
type("name", nodeName);
type("label", nodeLabel);
waitForElementPresent("//div[text() = 'Page Selector']");
click("//div[text() = 'Page Selector']");
pause(3000);
if (pageName != null & pageTitle != null) {
System.out.println("--Create new page");
waitForElementPresent("pageName");
type("pageName", pageName);
type("pageTitle", pageTitle);
waitForElementPresent("link=Create Page");
click("link=Create Page");
if (verifyPage) {
waitForElementNotPresent("link=Create Page");
} else {
return;
}
} else {
System.out.println("--Select Page");
waitForElementPresent("link=Search and Select Page");
click("link=Search and Select Page");
waitForElementPresent("//div[@id='UIRepeater']//table//tbody/tr/td[5]/div[@class='ActionContainer']/img");
click("//div[@id='UIRepeater']//table//tbody/tr/td[5]/div[@class='ActionContainer']/img");
}
System.out.println("--Save");
waitForElementPresent("link=Save");
click("link=Save");
if (verifyNode) {
waitForTextNotPresent("Page Node Setting");
if (elementToAddWithRightClick != null) {
waitForElementPresent(elementToAddWithRightClick);
click(elementToAddWithRightClick);
}
waitForElementPresent("//a[@title='" + nodeLabel + "']");
waitForElementPresent("link=Save");
click("link=Save");
waitForTextNotPresent("Navigation Management");
waitForElementPresent("link=" + nodeLabel);
}
}
public static void deleteNode(String nodeLabel, String navigation) throws Exception {
System.out.println("--Deleting node from navigation--");
editNavigation();
if (navigation != null) {
String[] nav = navigation.split("/");
for (String navig : nav) {
waitForElementPresent("//a[@title='" + navig + "']");
click("//a[@title='" + navig + "']");
}
}
deleteNode(nodeLabel);
}
public static void deleteNode(String nodeLabel) throws Exception {
System.out.println("--Deleting node from navigation--");
waitForElementPresent("//a[@title='" + nodeLabel + "']");
pause(2000);
contextMenuOnElement("//a[@title='" + nodeLabel + "']");
pause(3000);
waitForElementPresent("//div[@id='UINavigationNodeSelector']//div[@id='NavigationNodePopupMenu']//a[@class='ItemIcon DeleteNode16x16Icon']");
click("//div[@id='UINavigationNodeSelector']//div[@id='NavigationNodePopupMenu']//a[@class='ItemIcon DeleteNode16x16Icon']");
waitForConfirmation("Are you sure you want to delete this node?");
waitForElementNotPresent("//a[@title='" + nodeLabel + "']");
waitForElementPresent("link=Save");
click("link=Save");
waitForTextNotPresent("Navigation Management");
waitForTextNotPresent(nodeLabel);
}
public static void editNavigation() throws Exception {
waitForElementPresent("link=Edit Navigation");
click("link=Edit Navigation");
waitForTextPresent("Navigation Management");
}
public static void editNavigation(String site) throws Exception {
System.out.println("--Edit Navigation : " + site + "--");
String navLink = "//table[@class='ManagementBlock' and //tr/td/div/text() = '" + site
+ "']//a[text() = 'Edit Navigation']";
waitForElementPresent(navLink);
click(navLink);
waitForElementPresent("link=Add Node");
}
public static void copyNode(CopyType type, String navigation, String nodeLabel, String pasteToElement, String verifyElement)
throws Exception {
System.out.println("--" + ("COPY".equals(type.name()) ? "Copy" : "Cut") + " a node--");
if (navigation != null) {
String[] nav = navigation.split("/");
for (String navig : nav) {
waitForElementPresent("//a[@title='" + navig + "']");
click("//a[@title='" + navig + "']");
}
}
waitForElementPresent("//a[@title='" + nodeLabel + "']");
pause(2000);
contextMenuOnElement("//div[@id='UINavigationNodeSelector']//a[@class='NodeIcon DefaultPageIcon' and @title='"
+ nodeLabel + "']");
pause(3000);
switch (type) {
case COPY:
waitForElementPresent("link=Copy Node");
click("link=Copy Node");
break;
case CUT:
waitForElementPresent("link=Cut Node");
click("link=Cut Node");
break;
case CLONE:
waitForElementPresent("link=Clone Node");
click("link=Clone Node");
break;
default:
break;
}
System.out.println("--Paste a node--");
waitForElementPresent(pasteToElement);
pause(2000);
contextMenuOnElement(pasteToElement);
pause(3000);
waitForElementPresent("//div[@id='UINavigationNodeSelector']//div[@id='NavigationNodePopupMenu']//a[@class='ItemIcon PasteNode16x16Icon']");
click("//div[@id='UINavigationNodeSelector']//div[@id='NavigationNodePopupMenu']//a[@class='ItemIcon PasteNode16x16Icon']");
if (verifyElement != null) {
waitForElementPresent(verifyElement);
Assert.assertTrue(isElementPresent(verifyElement));
}
}
}