Package org.jboss.seam.example.seambay.test.selenium

Source Code of org.jboss.seam.example.seambay.test.selenium.WebServiceTestPageTest

/*
* 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.example.seambay.test.selenium;

import static org.testng.AssertJUnit.assertTrue;

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

/**
* This class tests a functionality of web service test page available directly
* from SeamBay home page
*
* @author Martin Gencur
* @author kpiwko
*
*/
public class WebServiceTestPageTest extends SeleniumSeamBayTest
{
   protected static final String HERE_LINK = "xpath=//a[contains(text(),'here')]";
   protected static final String SERVICE_PAGE_HEADING = "seamBay Web Services - Test Page";

   protected static final String INVOKE_SERVICE_BUTTON = "xpath=//button[contains(@onclick,'sendRequest')]";
   protected static final String REQUEST_AREA = "id=serviceRequest";
   protected static final String RESPONSE_AREA = "id=serviceResponse";

   protected static final String LOGIN_LINK = "xpath=//a[contains(text(),'Login')]";
   protected static final String LIST_CATEGORIES_LINK = "xpath=//a[contains(text(),'List Categories')]";
   protected static final String CREATE_NEW_AUCTION_LINK = "xpath=//a[contains(text(),'Create new auction')]";
   protected static final String UPDATE_AUCTION_DETAILS_LINK = "xpath=//a[contains(text(),'Update auction details')]";
   protected static final String SET_AUCTION_DURATION_LINK = "xpath=//a[contains(text(),'Set auction duration')]";
   protected static final String SET_STARTING_PRICE_LINK = "xpath=//a[contains(text(),'Set starting price')]";
   protected static final String GET_AUCTION_DETAILS_LINK = "xpath=//a[contains(text(),'Get the auction details')]";
   protected static final String CONFIRM_AUCTION_LINK = "xpath=//a[contains(text(),'Confirm auction')]";
   protected static final String FIND_AUCTIONS_LINK = "xpath=//a[contains(text(),'Find Auctions')]";
   protected static final String LOGOUT_LINK = "xpath=//a[contains(text(),'Logout')]";

   /* login parameters */
   protected static final String LOGIN_INPUT_USERNAME = "id=username";
   protected static final String LOGIN_INPUT_PASSWORD = "id=password";

   /* create new auction parameters */
   protected static final String AUCTION_TITLE = "id=title";
   protected static final String AUCTION_DESCRIPTION = "id=description";
   protected static final String AUCTION_CATEGORY_ID = "id=categoryId";

   /* parameters for other tests */
   protected static final String SEARCH_TERM = "id=searchTerm";
   protected static final String AUCTION_DURATION = "id=duration";
   protected static final String STARTING_PRICE = "id=price";

   /**
    * Retrieves value of given element in Selenium. Since Selenium specification
    * differs from HTML standards, e.g. text within {@code
    * <textarea></textarea>} blocks must be retrieved with {@code getValue()},
    * this is a preffered way to get value of an element within DOM tree
    *
    * @author kpiwko
    *
    */
   protected static enum SeleniumValueRetriever
   {
      TEXTAREA("Value"), OTHER("Text");

      private String sa;

      private SeleniumValueRetriever(String seleniumAttribute)
      {
         this.sa = seleniumAttribute;
      }

      /**
       * Returns JavaScript selenium function, which can retrieve a value under
       * given locator
       *
       * @param locator Selenium locator
       * @return Function call to be used in waitForCondition()
       */
      public String getSeleniumValueFunction(String locator)
      {
         return String.format("selenium.get%s(\"%s\")", sa, locator);
      }

   }

   /**
    * Modifies AJAX waits to match behavior of asynchronous services
    *
    * @return Modified SeamSelenium browser
    */
   @Override
   public SeamSelenium startBrowser()
   {
      SeamSelenium newBrowser = new SeamSelenium(HOST, PORT, BROWSER, BROWSER_URL)
      {
         /**
          * Wait until service says it is executing a request
          */
         @Override
         public void waitForAJAXUpdate(String timeout)
         {
            waitForCondition("selenium.browserbot.getCurrentWindow().selectedService.active===false", timeout);
            waitForElementContent(SeleniumValueRetriever.TEXTAREA, RESPONSE_AREA, "</env:Envelope>", timeout);
         };

         /**
          * Check typed result in the request field
          */
         @Override
         public void type(String locator, String value)
         {
            super.type(locator, value);
            waitForElementContent(SeleniumValueRetriever.TEXTAREA, REQUEST_AREA, value, TIMEOUT);
         }
      };
      newBrowser.start();
      newBrowser.allowNativeXpath("false");
      newBrowser.setSpeed(SPEED);
      newBrowser.setTimeout(TIMEOUT);
      return newBrowser;
   }

   @Test
   public void simplePageContentTest()
   {
      browser.clickAndWait(HERE_LINK);
      waitForElementPresent(RESPONSE_AREA, TIMEOUT);
      assertTrue("Page should contain service page heading", browser.isTextPresent(SERVICE_PAGE_HEADING));
   }

   @Test(dependsOnMethods = { "simplePageContentTest" })
   public void loginTest()
   {
      loginService();
      String x = browser.getValue(RESPONSE_AREA);
      assertTrue("Response area should contain \"true\"", x.contains(getProperty("LOGIN_RIGHT_RESPONSE")));
   }

   public void loginService()
   {
      String username = "demo";
      String password = "demo";
      browser.clickAndWait(HERE_LINK);
      browser.click(LOGIN_LINK);
      waitForElementPresent(LOGIN_INPUT_PASSWORD, TIMEOUT);
      browser.type(LOGIN_INPUT_USERNAME, username);
      // this wait is needed because we can't distinguish username from password
      waitForElementContent(SeleniumValueRetriever.TEXTAREA, REQUEST_AREA, "<arg0>" + username + "</arg0>", TIMEOUT);
      browser.type(LOGIN_INPUT_PASSWORD, password);
      waitForElementContent(SeleniumValueRetriever.TEXTAREA, REQUEST_AREA, "<arg1>" + password + "</arg1>", TIMEOUT);
      browser.click(INVOKE_SERVICE_BUTTON);
      browser.waitForAJAXUpdate();
   }

   @Test(dependsOnMethods = { "loginTest" })
   public void listCategoriesTest()
   {
      loginService();
      waitForElementPresent(LIST_CATEGORIES_LINK, TIMEOUT);
      browser.click(LIST_CATEGORIES_LINK);
      waitForElementPresent(INVOKE_SERVICE_BUTTON, TIMEOUT);
      browser.click(INVOKE_SERVICE_BUTTON);
      browser.waitForAJAXUpdate();
      String x = browser.getValue(RESPONSE_AREA);
      assertTrue("Response area should contain a list of categories.", x.contains(getProperty("LIST_CATEGORIES_RESPONSE")));
   }

   @Test(dependsOnMethods = { "loginTest" })
   public void createNewAuctionTest()
   {
      loginService();
      createNewAuctionService();
      String x = browser.getValue(RESPONSE_AREA);
      assertTrue("Response area should contain information about creating the auction.", x.contains(getProperty("CREATE_NEW_AUCTION_RESPONSE")));
   }

   public void createNewAuctionService()
   {
      String title = "Animals";
      String description = "You can buy an animal here";
      String categoryId = "6";
      waitForElementPresent(CREATE_NEW_AUCTION_LINK, TIMEOUT);
      browser.click(CREATE_NEW_AUCTION_LINK);
      waitForElementPresent(AUCTION_TITLE, TIMEOUT);
      waitForElementPresent(AUCTION_DESCRIPTION, TIMEOUT);
      waitForElementPresent(AUCTION_CATEGORY_ID, TIMEOUT);
      browser.type(AUCTION_TITLE, title);
      browser.type(AUCTION_DESCRIPTION, description);
      browser.type(AUCTION_CATEGORY_ID, categoryId);
      waitForElementPresent(INVOKE_SERVICE_BUTTON, TIMEOUT);
      browser.click(INVOKE_SERVICE_BUTTON);
      browser.waitForAJAXUpdate();
   }

   @Test(dependsOnMethods = { "loginTest", "createNewAuctionTest" })
   public void findAuctionsTest()
   {
      String searchTerm = "Animals";
      loginService();
      createNewAuctionService();
      confirmAuctionService();
      waitForElementPresent(FIND_AUCTIONS_LINK, TIMEOUT);
      browser.click(FIND_AUCTIONS_LINK);
      waitForElementPresent(SEARCH_TERM, TIMEOUT);
      browser.type(SEARCH_TERM, searchTerm);
      waitForElementPresent(INVOKE_SERVICE_BUTTON, TIMEOUT);
      browser.click(INVOKE_SERVICE_BUTTON);
      browser.waitForAJAXUpdate();
      String x = browser.getValue(RESPONSE_AREA);
      assertTrue("Response area should contain information about finding auction.", x.contains(getProperty("FIND_AUCTIONS_RESPONSE")));
   }

   @Test(dependsOnMethods = { "loginTest", "createNewAuctionTest" })
   public void updateAuctionTest()
   {
      String title = "Animals";
      String description = "Another description";
      String categoryId = "5";
      loginService();
      createNewAuctionService();
      waitForElementPresent(UPDATE_AUCTION_DETAILS_LINK, TIMEOUT);
      browser.click(UPDATE_AUCTION_DETAILS_LINK);
      waitForElementPresent(AUCTION_TITLE, TIMEOUT);
      waitForElementPresent(AUCTION_DESCRIPTION, TIMEOUT);
      waitForElementPresent(AUCTION_CATEGORY_ID, TIMEOUT);
      browser.type(AUCTION_TITLE, title);
      browser.type(AUCTION_DESCRIPTION, description);
      browser.type(AUCTION_CATEGORY_ID, categoryId);
      waitForElementPresent(INVOKE_SERVICE_BUTTON, TIMEOUT);
      browser.click(INVOKE_SERVICE_BUTTON);
      browser.waitForAJAXUpdate();
      String x = browser.getValue(RESPONSE_AREA);
      assertTrue("Response area should contain information about updating the auction.", x.contains(getProperty("UPDATE_AUCTION_RESPONSE")));
   }

   @Test(dependsOnMethods = { "loginTest", "createNewAuctionTest" })
   public void setAuctionDurationTest()
   {
      String duration = "20";
      loginService();
      createNewAuctionService();
      waitForElementPresent(SET_AUCTION_DURATION_LINK, TIMEOUT);
      browser.click(SET_AUCTION_DURATION_LINK);
      waitForElementPresent(AUCTION_DURATION, TIMEOUT);
      browser.type(AUCTION_DURATION, duration);
      waitForElementPresent(INVOKE_SERVICE_BUTTON, TIMEOUT);
      browser.click(INVOKE_SERVICE_BUTTON);
      browser.waitForAJAXUpdate();
      String x = browser.getValue(RESPONSE_AREA);
      assertTrue("Response area should contain information about setting duration.", x.contains(getProperty("SET_DURATION_RESPONSE")));
   }

   @Test(dependsOnMethods = { "loginTest", "createNewAuctionTest" })
   public void setStartingPriceTest()
   {
      String price = "1000";
      loginService();
      createNewAuctionService();
      waitForElementPresent(SET_STARTING_PRICE_LINK, TIMEOUT);
      browser.click(SET_STARTING_PRICE_LINK);
      waitForElementPresent(STARTING_PRICE, TIMEOUT);
      browser.type(STARTING_PRICE, price);
      waitForElementPresent(INVOKE_SERVICE_BUTTON, TIMEOUT);
      browser.click(INVOKE_SERVICE_BUTTON);
      browser.waitForAJAXUpdate();
      String x = browser.getValue(RESPONSE_AREA);
      assertTrue("Response area should contain information about setting starting price.", x.contains(getProperty("SET_STARTING_PRICE_RESPONSE")));
   }

   @Test(dependsOnMethods = { "loginTest", "createNewAuctionTest" })
   public void getAuctionDetailsTest()
   {
      loginService();
      createNewAuctionService();
      waitForElementPresent(GET_AUCTION_DETAILS_LINK, TIMEOUT);
      browser.click(GET_AUCTION_DETAILS_LINK);
      waitForElementPresent(INVOKE_SERVICE_BUTTON, TIMEOUT);
      browser.click(INVOKE_SERVICE_BUTTON);
      browser.waitForAJAXUpdate();
      String x = browser.getValue(RESPONSE_AREA);
      assertTrue("Response area should contain auction details.", x.contains(getProperty("AUCTION_DETAILS_PRICE_RESPONSE")));
   }

   @Test(dependsOnMethods = { "loginTest" })
   public void logOutTest()
   {
      loginService();
      waitForElementPresent(LOGOUT_LINK, TIMEOUT);
      browser.click(LOGOUT_LINK);
      waitForElementPresent(INVOKE_SERVICE_BUTTON, TIMEOUT);
      browser.click(INVOKE_SERVICE_BUTTON);
      browser.waitForAJAXUpdate();
      String x = browser.getValue(RESPONSE_AREA);
      assertTrue("Response area should contain logout confirmation.", x.contains(getProperty("LOGOUT_RESPONSE")));
   }

   @Test(dependsOnMethods = { "loginTest", "createNewAuctionTest" })
   public void confirmAuctionTest()
   {
      loginService();
      createNewAuctionService();
      confirmAuctionService();
      String x = browser.getValue(RESPONSE_AREA);
      assertTrue("Response area should contain information about confirmation.", x.contains(getProperty("CONFIRMATION_RESPONSE")));
   }

   public void confirmAuctionService()
   {
      waitForElementPresent(CONFIRM_AUCTION_LINK, TIMEOUT);
      browser.click(CONFIRM_AUCTION_LINK);
      waitForElementPresent(INVOKE_SERVICE_BUTTON, TIMEOUT);
      browser.click(INVOKE_SERVICE_BUTTON);
      browser.waitForAJAXUpdate();
   }

   protected void waitForElementContent(final SeleniumValueRetriever type, final String locator, final String content, String timeout)
   {
      browser.waitForCondition(String.format("var value = %s; value.indexOf(\"%s\");", type.getSeleniumValueFunction(locator), content), timeout);
   }

   protected void waitForElementPresent(final String locator, String timeout)
   {
      browser.waitForCondition(String.format("selenium.isElementPresent(\"%s\")", locator), timeout);
   }

}
TOP

Related Classes of org.jboss.seam.example.seambay.test.selenium.WebServiceTestPageTest

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.