package org.jboss.seam.rest.examples.tasks.ftest;
import static org.jboss.arquillian.ajocado.Ajocado.attributePresent;
import static org.jboss.arquillian.ajocado.Ajocado.waitAjax;
import static org.jboss.arquillian.ajocado.locator.LocatorFactory.jq;
import java.net.URL;
import org.jboss.arquillian.ajocado.dom.Attribute;
import org.jboss.arquillian.ajocado.framework.AjaxSelenium;
import org.jboss.arquillian.ajocado.javascript.JavaScript;
import org.jboss.arquillian.ajocado.locator.JQueryLocator;
import org.jboss.arquillian.ajocado.locator.option.OptionLocatorFactory;
import org.jboss.arquillian.ajocado.locator.option.OptionValueLocator;
import org.jboss.arquillian.ajocado.utils.URLUtils;
/**
* This abstract page class contains common methods for all the pages.
*
* @author <a href="http://community.jboss.org/people/jharting">Jozef Hartinger</a>
*/
public abstract class AbstractPage {
public static final JQueryLocator TASK_NAME = jq("#{0} .name");
public static final JQueryLocator CATEGORY_NAME = jq("#{0} .name");
public static final JavaScript JQUERY_IDLE_CONNECTION = new JavaScript(
"selenium.browserbot.getCurrentWindow().jQuery.active===0");
public static final JQueryLocator PAGE_INITIALIZED = jq("body");
private static final String APP_NAME = "/rest-tasks/";
protected AjaxSelenium selenium;
protected URL contextPath;
public AbstractPage(AjaxSelenium selenium, URL contextPath) {
this.selenium = selenium;
this.contextPath = contextPath;
reload();
}
/**
* Return url of the page
*/
public abstract String getPageSuffix();
public void reload() {
URL url = URLUtils.buildUrl(contextPath, APP_NAME + getPageSuffix());
// firefox sometimes freezes, if that happens, let's give it two more tries
for (int i = 0; i < 3; i++) {
try {
selenium.open(url);
selenium.waitForPageToLoad();
waitAjax.interval(1000).until(attributePresent.locator(PAGE_INITIALIZED.getAttribute(new Attribute("initialized"))));
break;
} catch (Exception e) {
continue;
}
}
}
public void waitForJQuery() {
selenium.waitForCondition(JQUERY_IDLE_CONNECTION);
}
public JQueryLocator getTaskNameLocator(int id) {
return TASK_NAME.format(id);
}
public ResolvedPage goToResolvedPage() {
return new ResolvedPage(selenium, contextPath);
}
public TaskPage goToTaskPage() {
return new TaskPage(selenium, contextPath);
}
public CategoryPage goToCategoryPage() {
return new CategoryPage(selenium, contextPath);
}
public boolean isTaskPresent(int id) {
return selenium.isElementPresent(getTaskNameLocator(id));
}
public boolean isTaskPresent(int id, String name) {
return isTaskPresent(id) && selenium.getText(getTaskNameLocator(id)).equals(name);
}
public boolean isCategoryPresent(String name) {
return selenium.isElementPresent(CATEGORY_NAME.format(name));
}
protected OptionValueLocator createOptionValueLocator(String value)
{
return (OptionValueLocator) OptionLocatorFactory.optionValue(value);
}
}