/*
* 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.page;
import static org.jboss.gatein.selenium.common.CommonHelper.*;
import org.jboss.gatein.selenium.AbstractContextual;
public class PageHelper extends AbstractContextual {
public static enum PageType {
USER, PORTAL, GROUP;
}
public static void editPage() throws Exception {
waitForElementPresent("link=Edit Page");
click("link=Edit Page");
waitForTextPresent("Page Editor");
}
public static void finishPageEdit() throws Exception {
waitForElementPresent("//div[@id='UIPageEditor']/div[1]/div/div/div/a[2]");
click("//div[@id='UIPageEditor']/div[1]/div/div/div/a[2]");
waitForTextNotPresent("Page Editor");
}
public static void addNewPageWithEditorAtFirstLevel(String pageName, String displayName, String categoryTitle,
String portletName, String portletElementToDnD) throws Exception {
System.out.println("-- Add new page with editor at first level--");
waitForElementPresent("link=Add New Page");
click("link=Add New Page");
waitForElementPresent("//a[@class='LevelUpArrowIcon' and @title='Up Level']");
click("//a[@class='LevelUpArrowIcon' and @title='Up Level']");
pause(3000);
fillPageEditor(pageName, displayName, categoryTitle, portletName, portletElementToDnD);
}
public static void addNewPageWithEditorAtFirstLevelWithMorePortlets(String pageName, String displayName,
String categoryTitle, String portletNameSWithPortletElements) throws Exception {
System.out.println("-- Add new page with editor at first level with more portlets--");
waitForElementPresent("link=Add New Page");
click("link=Add New Page");
waitForElementPresent("//a[@class='LevelUpArrowIcon' and @title='Up Level']");
click("//a[@class='LevelUpArrowIcon' and @title='Up Level']");
pause(3000);
waitForElementPresent("pageName");
type("pageName", pageName);
type("pageDisplayName", displayName);
click("//table[@class='ActionContainer']/tbody/tr/td/div[2]");
waitForTextPresent("Empty Layout");
click("//table[@class='ActionContainer']/tbody/tr/td/div[2]");
if (categoryTitle != null & portletNameSWithPortletElements != null) {
waitForElementPresent("//div[contains(@class, 'Tab')]/a[@title='" + categoryTitle + "']");
click("//div[contains(@class, 'Tab')]/a[@title='" + categoryTitle + "']");
String[] portlets = portletNameSWithPortletElements.split(";");
for (String portlet : portlets) {
String[] portletAttributes = portlet.split("---");
waitForTextPresent(portletAttributes[0]);
pause(3000);
dragAndDropToObject(portletAttributes[1], "//div[@class='UIComponentBlock']");
pause(3000);
}
}
finishPageEdit();
waitForElementPresent("link=classic");
}
public static void addNewPageWithEditor(String navigation, String pageName, String displayName, String categoryTitle,
String portletName, String portletElementToDnD) throws Exception {
System.out.println("--Add new page with editor--");
waitForElementPresent("link=Add New Page");
click("link=Add New Page");
if (navigation != null) {
String[] navig = navigation.split("/");
for (String nav : navig) {
waitForElementPresent("//a[@title='" + nav + "']");
click("//a[@title='" + nav + "']");
}
}
pause(3000);
fillPageEditor(pageName, displayName, categoryTitle, portletName, portletElementToDnD);
}
private static void fillPageEditor(String pageName, String displayName, String categoryTitle, String portletName,
String portletElementToDnD) throws Exception {
waitForElementPresent("pageName");
type("pageName", pageName);
type("pageDisplayName", displayName);
click("//table[@class='ActionContainer']/tbody/tr/td/div[2]");
waitForTextPresent("Empty Layout");
click("//table[@class='ActionContainer']/tbody/tr/td/div[2]");
if (categoryTitle != null & portletName != null & portletElementToDnD != null) {
waitForElementPresent("//div[contains(@class, 'Tab')]/a[@title='" + categoryTitle + "']");
click("//div[contains(@class, 'Tab')]/a[@title='" + categoryTitle + "']");
waitForTextPresent(portletName);
pause(3000);
dragAndDropToObject(portletElementToDnD, "//div[@class='UIComponentBlock']");
pause(3000);
}
finishPageEdit();
waitForElementPresent("link=classic");
}
public static void addNewPageAtPageManagement(String name, String title, PageType type, String groupId, String verifyText)
throws Exception {
System.out.println("-- Add new " + type.name() + " page at page management--");
waitForElementPresent("xpath=//div[@id='UIPageBrowser']/div[2]/table/tbody/tr/td/div/div/div/div/a");
click("xpath=//div[@id='UIPageBrowser']/div[2]/table/tbody/tr/td/div/div/div/div/a");
waitForTextPresent("Page Setting");
waitForElementPresent("name");
type("name", name);
type("title", title);
switch (type) {
case USER:
break;
case PORTAL:
waitForElementPresent("ownerType");
select("ownerType", "label=portal");
waitForElementPresent("//option[@value='portal']");
waitForElementPresent("//div[@onclick=\"eXo.webui.UIHorizontalTabs.changeTabForUIFormTabpane(this, 'UIPageForm', 'PermissionSetting');javascript:eXo.webui.UIForm.submitEvent('UIPageForm','SelectTab','&objectId=PermissionSetting')\"]");
click("//div[@onclick=\"eXo.webui.UIHorizontalTabs.changeTabForUIFormTabpane(this, 'UIPageForm', 'PermissionSetting');javascript:eXo.webui.UIForm.submitEvent('UIPageForm','SelectTab','&objectId=PermissionSetting')\"]");
waitForElementPresent("link=Access Permission Setting");
click("link=Access Permission Setting");
waitForElementPresent("link=Edit Permission Setting");
click("link=Edit Permission Setting");
break;
case GROUP:
waitForElementPresent("ownerType");
select("ownerType", "label=group");
waitForElementPresent("xpath=//option[@value='group']");
pause(5000);
waitForElementPresent("ownerId");
if (groupId != null) {
select("ownerId", "label=" + groupId);
waitForElementPresent("//option[@value='" + groupId + "']");
}
waitForElementPresent("//div[@onclick=\"eXo.webui.UIHorizontalTabs.changeTabForUIFormTabpane(this, 'UIPageForm', 'PermissionSetting');javascript:eXo.webui.UIForm.submitEvent('UIPageForm','SelectTab','&objectId=PermissionSetting')\"]");
click("//div[@onclick=\"eXo.webui.UIHorizontalTabs.changeTabForUIFormTabpane(this, 'UIPageForm', 'PermissionSetting');javascript:eXo.webui.UIForm.submitEvent('UIPageForm','SelectTab','&objectId=PermissionSetting')\"]");
waitForElementPresent("link=Access Permission Setting");
click("link=Access Permission Setting");
waitForElementPresent("link=Edit Permission Setting");
click("link=Edit Permission Setting");
break;
default:
break;
}
waitForElementPresent("//div[@onclick=\"eXo.webui.UIHorizontalTabs.changeTabForUIFormTabpane(this, 'UIPageForm', 'UIPageTemplateOptions');javascript:eXo.webui.UIForm.submitEvent('UIPageForm','SelectTab','&objectId=UIPageTemplateOptions')\"]");
click("//div[@onclick=\"eXo.webui.UIHorizontalTabs.changeTabForUIFormTabpane(this, 'UIPageForm', 'UIPageTemplateOptions');javascript:eXo.webui.UIForm.submitEvent('UIPageForm','SelectTab','&objectId=UIPageTemplateOptions')\"]");
waitForElementPresent("link=Save");
click("link=Save");
if (verifyText != null) {
waitForTextNotPresent("Page Setting");
waitForTextPresent(verifyText);
}
}
public static void searchPageByTitle(String title, String verifyText) throws Exception {
System.out.println("--Searching page: " + title + "--");
waitForElementPresent("searchTerm");
type("searchTerm", title);
select("searchOption", "label=Title");
waitForElementPresent("xpath=//form[@id='UIPageSearch']/div[2]/a");
click("xpath=//form[@id='UIPageSearch']/div[2]/a");
pause(3000);
if (verifyText != null) {
waitForTextPresent(verifyText);
}
}
private static void deletePage(String title, boolean closeDialog, String verifyText) throws Exception {
System.out.println("--Delete page: " + title + "--");
String delButton = "//tbody[@class='FeedBox']//tr[*/div[@title='" + title
+ "']]//img[@title='Delete Page' and contains(@onclick, 'op=Delete')]";
waitForElementPresent(delButton);
click(delButton);
waitForConfirmation("Do you want to delete this page?");
if (verifyText != null) {
waitForTextNotPresent(verifyText);
}
if (closeDialog) {
closeMessageDialog();
}
}
public static void deletePage(String name, String title, boolean closeDialog, String verifyText) throws Exception {
System.out.println("--Delete page: " + title + "--");
waitForElementPresent("xpath=//img[@title='Delete Page' and contains(@onclick, 'op=Delete') and contains(@onclick, '"
+ name + "')]");
click("xpath=//img[@title='Delete Page' and contains(@onclick, 'op=Delete') and contains(@onclick, '" + name + "')]");
waitForConfirmation("Do you want to delete this page?");
if (verifyText != null) {
waitForTextNotPresent(verifyText);
}
if (closeDialog) {
closeMessageDialog();
}
}
public static void searchAndDeletePage(String name, String title, boolean closeDialog, String verifyText) throws Exception {
searchPageByTitle(title, verifyText);
deletePage(name, title, closeDialog, verifyText);
}
public static void searchAndDeletePage(String title) throws Exception {
searchPageByTitle(title, null);
deletePage(title, false, null);
}
}