package org.jboss.seam.examples.booking.ftest; import java.io.File; import java.net.URL; import org.jboss.arquillian.ajocado.dom.Event; import org.jboss.arquillian.ajocado.framework.AjaxSelenium; import org.jboss.arquillian.ajocado.locator.JQueryLocator; import org.jboss.arquillian.ajocado.locator.XPathLocator; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.drone.api.annotation.Drone; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.importer.ZipImporter; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Before; import org.junit.runner.RunWith; import static org.jboss.arquillian.ajocado.Ajocado.waitForXhr; import static org.jboss.arquillian.ajocado.locator.LocatorFactory.*; import static org.junit.Assert.assertTrue; /** * Utility methods for the booking example. * * @author <a href="http://community.jboss.org/people/jharting">Jozef Hartinger</a> */ @RunWith(Arquillian.class) public abstract class AbstractBookingTest { public static final String TITLE = "JBoss Suites: Seam Framework Demo"; public static final JQueryLocator LOGIN_USERNAME = jq("[id='login:username']"); public static final JQueryLocator LOGIN_PASSWORD = jq("[id='login:password']"); public static final JQueryLocator LOGIN_SUBMIT = jq("[id='login:login']"); public static final JQueryLocator LOGOUT = jq("a:contains('Logout')"); public static final JQueryLocator MENU_FIND = jq("a:contains('Find a Hotel')"); public static final JQueryLocator MENU_HOME = jq("a:contains('Home')"); public static final JQueryLocator MENU_ACCOUNT = jq("a:contains('Account')"); public static final XPathLocator SEARCH_QUERY = xp("//input[contains(@name,'query')]"); public static final JQueryLocator SEARCH_NO_RESULTS = jq("#noHotelsMsg"); public static final JQueryLocator SEARCH_PAGE_SIZE = jq("#pageSize"); public static final XPathLocator SEARCH_RESULT_TABLE_FIRST_ROW_LINK = xp("//a[contains(@name,'hotelSelectionForm:hotels:0:view')]"); public static final String ARCHIVE_NAME = "seam-booking.war"; public static final String BUILD_DIRECTORY = "target"; private final String DEFAULT_USERNAME = "jose"; private final String DEFAULT_PASSWORD = "brazil"; @Drone AjaxSelenium selenium; @ArquillianResource URL contextPath; @Deployment(testable = false) public static WebArchive createDeployment() { return ShrinkWrap.create(ZipImporter.class, ARCHIVE_NAME).importFrom(new File(BUILD_DIRECTORY + '/' + ARCHIVE_NAME)) .as(WebArchive.class); } @Before public void setUp() { selenium.open(contextPath); selenium.waitForPageToLoad(); if (isLoggedIn()) { logout(); } login(); selenium.click(MENU_FIND); selenium.waitForPageToLoad(); } public void login() { login(DEFAULT_USERNAME, DEFAULT_PASSWORD); } public void login(String username, String password) { selenium.click(MENU_HOME); selenium.waitForPageToLoad(); selenium.type(LOGIN_USERNAME, username); selenium.type(LOGIN_PASSWORD, password); selenium.click(LOGIN_SUBMIT); selenium.waitForPageToLoad(); assertTrue("Login failed.", isLoggedIn()); } public void logout() { if (isLoggedIn()) { selenium.click(LOGOUT); selenium.waitForPageToLoad(); } } public boolean isLoggedIn() { return selenium.isElementPresent(LOGOUT); } public void enterSearchQuery(String query) { selenium.type(SEARCH_QUERY, query); waitForXhr(selenium).fireEvent(SEARCH_QUERY, Event.KEYUP); } }