package org.jboss.seam.rest.examples.tasks.ftest;
import static org.jboss.arquillian.ajocado.Ajocado.elementPresent;
import static org.jboss.arquillian.ajocado.Ajocado.waitAjax;
import static org.jboss.arquillian.ajocado.Ajocado.waitForXhr;
import static org.jboss.arquillian.ajocado.locator.LocatorFactory.jq;
import java.net.URL;
import org.jboss.arquillian.ajocado.framework.AjaxSelenium;
import org.jboss.arquillian.ajocado.locator.JQueryLocator;
/**
* Page object for the tasks page (tasks.html)
*
* @author <a href="http://community.jboss.org/people/jharting">Jozef Hartinger</a>
*/
public class TaskPage extends AbstractPage {
public static final JQueryLocator NEW_TASK_NAME_FIELD = jq("#editTaskName");
public static final JQueryLocator NEW_TASK_CATEGORY_SELECT = jq("#editTaskCategory");
public static final JQueryLocator NEW_TASK_SUBMIT = jq("#editTaskSubmit");
public static final JQueryLocator TASK_BY_NAME = jq(".name:contains('{0}')");
// public static final JQueryLocator TASK_BY_ID_AND_CATEGORY = jq("#{0} ~ #{1}:first .name");
public static final JQueryLocator TASK_BY_ID_AND_CATEGORY = jq("#{0} ~ #{1}");
public static final JQueryLocator TASK_DONE_BUTTON = jq("#{0} img:first");
public static final JQueryLocator TASK_DELETE_BUTTON = jq("#{0} img:last");
public static final JQueryLocator TASK_EDIT_BUTTON = jq("#{0} img:nth-child(2)");
public static final JQueryLocator TASK_EDIT_FORM = jq("#{0} .updateTask");
public static final JQueryLocator TASK_EDIT_NAME_FIELD = jq("#{0} .nameField");
public static final JQueryLocator TASK_EDIT_CATEGORY_SELECT = jq("#{0} #editTaskCategory");
public static final JQueryLocator TASK_EDIT_UPDATE_BUTTON = jq("#{0} #update");
public TaskPage(AjaxSelenium selenium, URL contextPath) {
super(selenium, contextPath);
reload();
}
@Override
public String getPageSuffix() {
return "tasks.html";
}
public void newTask(String name, String category) {
selenium.type(NEW_TASK_NAME_FIELD, name);
selenium.select(NEW_TASK_CATEGORY_SELECT, createOptionValueLocator(category));
waitForXhr(selenium).click(NEW_TASK_SUBMIT);
waitAjax.interval(1000).until(elementPresent.locator(TASK_BY_NAME.format(name)));
}
public boolean isTaskPresent(String taskName) {
return selenium.isElementPresent(TASK_BY_NAME.format(taskName));
}
public boolean isTaskPresent(String categoryName, int taskId) {
return selenium.isElementPresent(TASK_BY_ID_AND_CATEGORY.format(categoryName, taskId));
}
public boolean isTaskPresent(String categoryName, int taskId, String taskName) {
return isTaskPresent(categoryName, taskId)
&& selenium.getText(TASK_BY_ID_AND_CATEGORY.format(categoryName, taskId)).equals(taskName);
}
public void resolveTask(int id) {
waitForXhr(selenium).click(TASK_DONE_BUTTON.format(id));
}
public void editTask(int id, String taskName, String categoryName) {
selenium.click(TASK_EDIT_BUTTON.format(id));
waitForJQuery();
selenium.type(TASK_EDIT_NAME_FIELD.format(id), taskName);
// for some reason we need to hit the select first
selenium.isElementPresent(TASK_EDIT_CATEGORY_SELECT.format(id));
selenium.select(TASK_EDIT_CATEGORY_SELECT.format(id), createOptionValueLocator(categoryName));
waitForXhr(selenium).click(TASK_EDIT_UPDATE_BUTTON.format(id));
}
public void removeTask(int id) {
waitForXhr(selenium).click(TASK_DELETE_BUTTON.format(id));
}
public boolean isEditFormPresent(int id) {
return selenium.isElementPresent(TASK_EDIT_FORM.format(id));
}
}