Package org.jboss.seam.test.functional.seamgen

Source Code of org.jboss.seam.test.functional.seamgen.SeleniumSeamGenTest

/*
* JBoss, Home of Professional Open Source
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt 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.seam.test.functional.seamgen;

import static org.testng.Assert.assertTrue;

import org.jboss.seam.example.common.test.selenium.SeamSelenium;
import org.testng.annotations.BeforeMethod;

/**
* Base class for Selenium seam-gen tests. Separate browser instance is created
* prior to each test method execution. Browser instances are stopped by
* SeleniumTestListener.
*
* @author Jozef Hartinger
*
*/
public class SeleniumSeamGenTest extends SeamGenTest
{
   // home page
   public static final String LOGIN = "id=menuLoginId";
   public static final String LOGOUT = "id=menuLogoutId";
   public static final String HOME = "id=menuHomeId";
   public static final String SIGNED_USER = "id=menuWelcomeId";
   // login page
   public static final String LOGIN_USERNAME = "id=loginForm:username";
   public static final String LOGIN_PASSWORD = "id=loginForm:password";
   public static final String LOGIN_REMEMBER_ME = "id=loginForm:rememberMe";
   public static final String LOGIN_SUBMIT = "id=loginForm:submit";
   public static final String LOGIN_FAILED_MESSAGE = "Login failed";

   public static final String MESSAGES = "id=messages";
   public static final String FOOTER = "xpath=//div[@class = 'footer']";
   public static final String MESSAGE_WELCOME = "xpath=//h1[text() = 'Welcome to Seam!']";

   public static final String DEFAULT_USERNAME = "admin";
   public static final String DEFAULT_PASSWORD = "";
  
   protected static Long HOTDEPLOY_TIMEOUT = 30000L;

   public static SeamSelenium browser;

   /**
    * Start new browser instance and store it into static variable. Moreover,
    * open application home page.
    */
   public void initBrowser()
   {
      browser = startBrowser();
      browser.open(HOME_PAGE);
   }

   /**
    * Create new browser instance.
    */
   public SeamSelenium startBrowser()
   {
      SeamSelenium newBrowser = new SeamSelenium(SELENIUM_HOST, SELENIUM_SERVER_PORT, SELENIUM_BROWSER, SELENIUM_BROWSER_URL);
      newBrowser.start();
      newBrowser.allowNativeXpath("false");
      newBrowser.setSpeed(SELENIUM_SPEED);
      newBrowser.setTimeout(SELENIUM_TIMEOUT);
      if (ICEFACES)
      {
         newBrowser.setIcefacesDetection(true);
      }
      newBrowser.setIcefacesWaitTime(SELENIUM_ICEFACES_WAIT_TIME);
      return newBrowser;
   }

   public void stopBrowser()
   {
      browser.stop();
   }

   public void login(String username, String password)
   {
      assertTrue(browser.isElementPresent(LOGIN), "Login link expected.");
      browser.clickAndWait(LOGIN);
      browser.type(LOGIN_USERNAME, username);
      browser.type(LOGIN_PASSWORD, password);
      browser.clickAndWait(LOGIN_SUBMIT);
   }

   public void login()
   {
      login(DEFAULT_USERNAME, DEFAULT_PASSWORD);
   }

   public boolean isLoggedIn()
   {
      return browser.isElementPresent(SIGNED_USER) && browser.isElementPresent(LOGOUT) && !browser.isElementPresent(LOGIN);
   }

   public void logout()
   {
      browser.clickAndWait(LOGOUT);
   }

   @BeforeMethod
   public void beforeMethod()
   {
      initBrowser();
   }

   /**
    * Wait for application (or it's part) to deploy. Separate Selenium browser
    * instance is used to poll server for specified URL, waiting for specified
    * element to appear.
    */
   public void waitForAppToDeploy(String url, String element)
   {
      int step = 5000;
      int i = DEPLOY_TIMEOUT;

      SeamSelenium browser = startBrowser();

      browser.open(url);
      try
      {
         while (!browser.isElementPresent(element))
         {
            i -= step;
            if (i <= 0)
            {
               throw new RuntimeException("Timeout waiting for " + element + " at " + url);
            }
            Thread.sleep(step);
            browser.open(url); // try again
         }
      }
      catch (InterruptedException ie)
      {
         throw new RuntimeException(ie);
      }
      finally
      {
         browser.stop();
      }
   }

}
TOP

Related Classes of org.jboss.seam.test.functional.seamgen.SeleniumSeamGenTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.