diff --git b/pom.xml a/pom.xml
new file mode 100644
index 0000000..7b0149f
--- /dev/null
+++ a/pom.xml
@@ -0,0 +1,47 @@
+
+
+
+ 4.0.0
+
+
+ pl.labno.bernard
+ htmlunit-sandbox
+ 1.0-SNAPSHOT
+ ${project.artifactId} : ${project.version}
+ Htmlunit sandbox
+
+ pom
+
+
+
+
+ net.sourceforge.htmlunit
+ htmlunit
+ 2.8
+
+
+ junit
+ junit
+ 4.8.2
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ 1.5
+ true
+ false
+
+
+
+
+
+
+
+
diff --git b/src/test/java/pl/labno/bernard/htmlunified/ScheduleTest.java a/src/test/java/pl/labno/bernard/htmlunified/ScheduleTest.java
new file mode 100644
index 0000000..395a95b
--- /dev/null
+++ a/src/test/java/pl/labno/bernard/htmlunified/ScheduleTest.java
@@ -0,0 +1,98 @@
+package pl.labno.bernard.htmlunified;
+
+import com.gargoylesoftware.htmlunit.BrowserVersion;
+import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlElement;
+import com.gargoylesoftware.htmlunit.html.HtmlInput;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import com.gargoylesoftware.htmlunit.html.HtmlSpan;
+import com.gargoylesoftware.htmlunit.html.HtmlTableCell;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class ScheduleTest {
+
+ // @Test
+ public void accessEventTitles() throws IOException {
+ WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6);
+ //login-----------------------------------
+ HtmlPage page = (HtmlPage) client.getPage("http://localhost:8080/schoolmanager/view/class/current.seam?networkId=salsafactory");
+ ((HtmlInput) page.getElementById("loginForm:email")).setValueAttribute("s4237@pjwstk.edu.pl");
+ ((HtmlInput) page.getElementById("loginForm:password")).setValueAttribute("aaaaa");
+ HtmlPage oldPage = page;
+ page = page.getElementById("loginForm:submit").click();
+// This assert would fail (when page redidrects than you need to obtain new page)
+// Assert.assertEquals(page,oldPage);
+ Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page);
+ //----------------------------------------
+
+ final List titleElements = (List) page.getElementById("results:schedule").getByXPath(".//span[@class='fc-event-title']");
+ List titles = new ArrayList(titleElements.size());
+ for (HtmlSpan o : titleElements) {
+ titles.add(o.asText());
+ }
+ Assert.assertEquals(2, titles.size());
+ }
+
+ @Test
+ public void clickSuggestionBox() throws IOException {
+ WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6);
+ client.setAjaxController(new NicelyResynchronizingAjaxController());
+ //login-----------------------------------
+ HtmlPage page = (HtmlPage) client.getPage("http://localhost:8080/schoolmanager/view/class/current.seam?networkId=salsafactory");
+ ((HtmlInput) page.getElementById("loginForm:email")).setValueAttribute("s4237@pjwstk.edu.pl");
+ ((HtmlInput) page.getElementById("loginForm:password")).setValueAttribute("aaaaa");
+ HtmlPage oldPage = page;
+ page = page.getElementById("loginForm:submit").click();
+// This assert would fail (when page redidrects than you need to obtain new page)
+// Assert.assertEquals(page,oldPage);
+ Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page);
+ //----------------------------------------
+ final HtmlInput studentInput = (HtmlInput) page.getElementById("searchClass:student_i");
+ int initialJobs = client.waitForBackgroundJavaScript(10);
+
+ studentInput.type('w');
+ studentInput.type('i');
+ Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page);
+// Here the suggestionBox is still hidden
+// System.out.println(page.asXml());
+
+ int jobs = WebClientUtils.waitForJSJob(client, 0, 30000);
+// Here suggestionBox is visible
+// System.out.println(page.asXml());
+ System.out.println(page.getElementById("searchClass:sS").asXml());
+ System.out.println("initialJobs:" + initialJobs);
+ System.out.println("jobs:" + jobs);
+ Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page);
+ synchronized (page) {
+ try {
+ page.wait(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
+ }
+ }
+ Map suggestions = WebClientUtils.getSuggestions(page.getElementById("searchClass:sS"), 0);
+ Assert.assertEquals(1, suggestions.size());
+ System.out.println(suggestions);
+ HtmlTableCell cell = suggestions.get("Willis Bruce");
+ Assert.assertNotNull(cell);
+ initialJobs = client.waitForBackgroundJavaScript(10);
+ System.out.println("initial jobs:"+initialJobs);
+ cell.click();
+ System.out.println("Starting jobs:"+client.waitForBackgroundJavaScriptStartingBefore(3000));
+ System.out.println("Running jobs:"+client.waitForBackgroundJavaScript(10));
+// studentInput.type('\t');
+ jobs = WebClientUtils.waitForJSJob(client,initialJobs, 30000);
+ System.out.println("initialJobs:" + initialJobs);
+ System.out.println("jobs:" + jobs);
+ System.out.println(page.asXml());
+ Assert.assertEquals("Willis Bruce",((HtmlElement)page.getByXPath("//*[@id='searchClass:searchStudent']").get(0)).asText());
+ }
+
+}
diff --git b/src/test/java/pl/labno/bernard/htmlunified/WebClientUtils.java a/src/test/java/pl/labno/bernard/htmlunified/WebClientUtils.java
new file mode 100644
index 0000000..0ff45b3
--- /dev/null
+++ a/src/test/java/pl/labno/bernard/htmlunified/WebClientUtils.java
@@ -0,0 +1,77 @@
+package pl.labno.bernard.htmlunified;
+
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.DomNodeList;
+import com.gargoylesoftware.htmlunit.html.HtmlElement;
+import com.gargoylesoftware.htmlunit.html.HtmlTableCell;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class WebClientUtils {
+
+ private static long defaultCheckInterval = 500;
+ private static long defaultTimeout = 10000;
+
+ public static long getDefaultCheckInterval() {
+ return defaultCheckInterval;
+ }
+
+ public static void setDefaultCheckInterval(long defaultCheckInterval) {
+ WebClientUtils.defaultCheckInterval = defaultCheckInterval;
+ }
+
+ public static long getDefaultTimeout() {
+ return defaultTimeout;
+ }
+
+ public static void setDefaultTimeout(long defaultTimeout) {
+ WebClientUtils.defaultTimeout = defaultTimeout;
+ }
+
+ public static int waitForJSJob(WebClient webClient) {
+ return waitForJSJob(webClient, webClient.waitForBackgroundJavaScript(10) - 1, defaultCheckInterval, defaultTimeout);
+ }
+
+ public static int waitForJSJob(WebClient webClient, int initialJobCount) {
+ return waitForJSJob(webClient, initialJobCount, defaultCheckInterval, defaultTimeout);
+ }
+
+ public static int waitForJSJob(WebClient webClient, int initialJobCount, long timeout) {
+ return waitForJSJob(webClient, initialJobCount, defaultCheckInterval, timeout);
+ }
+
+ public static int waitForJSJob(WebClient webClient, int initialJobCount, long checkInterval, long timeout) {
+ int jobs;
+ long startTime = System.currentTimeMillis();
+ do {
+ jobs = webClient.waitForBackgroundJavaScript(checkInterval);
+ if (startTime + timeout < System.currentTimeMillis()) {
+ throw new RuntimeException("Number of JavaScript jobs doesn't drop to initial level for 10000 seconds. It's memory leak in your JavaScript rather then request taking so long!");
+ }
+ } while (jobs > initialJobCount);
+ System.out.println("Waiting took: " + (System.currentTimeMillis() - startTime) + "ms");
+ return jobs;
+ }
+
+ /**
+ * Returns list of suggestions from rich:suggestionBox
+ *
+ * @param suggestion suggestionBox element
+ * @param column column of suggestionBox to extract text from
+ * @return list of suggestions
+ */
+ public static Map getSuggestions(HtmlElement suggestion, int column) {
+ final Map suggestions = new HashMap();
+ final HtmlElement suggestElement = suggestion.getElementById(suggestion.getId() + ":suggest");
+ @SuppressWarnings("unchecked")
+ final DomNodeList suggestionRows = suggestElement.getElementsByTagName("tr");
+ for (HtmlElement row : suggestionRows) {
+ @SuppressWarnings("unchecked")
+ final DomNodeList cells = row.getElementsByTagName("td");
+ final HtmlTableCell cell = (HtmlTableCell) cells.get(column + 1);
+ suggestions.put(cell.asText(), cell);
+ }
+ return suggestions;
+ }
+}