package pl.labno.bernard.htmlunified; import com.gargoylesoftware.htmlunit.BrowserVersion; 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 org.junit.Assert; import org.junit.Test; import java.io.IOException; import java.util.List; public class ClassDetailsTest { @Test public void openDetailsModalPanel() throws IOException { WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); HtmlPage page = login(client); @SuppressWarnings("unchecked") final List titleElements = (List) page.getElementById("results:schedule").getByXPath(".//span[@class='fc-event-title']"); Assert.assertNotSame(0, titleElements.size()); new RequestResponseLogger(client); page.addDomChangeListener(new DomChangeLogger()); WebClientUtils.waitForJSJob("initial javascript to finish", client, 0, 30000); System.out.println("item:" + titleElements.get(0).asText()); ((HtmlElement) titleElements.get(0).getParentNode()).mouseOver(); ((HtmlElement) titleElements.get(0).getParentNode()).click(); WebClientUtils.waitForJSJob("classDetailsModalPanel shown after schedule event clicked", client, 0, 30000); Assert.assertNotNull(page.getElementById("classDetailsModalPanelContainer")); } @Test public void closeDetailsModalPanel() throws IOException { WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); HtmlPage page = login(client); @SuppressWarnings("unchecked") final List titleElements = (List) page.getElementById("results:schedule").getByXPath(".//span[@class='fc-event-title']"); Assert.assertNotSame(0, titleElements.size()); // new RequestResponseLogger(client); // page.addDomChangeListener(new DomChangeLogger()); WebClientUtils.waitForJSJob("initial javascript to finish", client, 0, 30000); System.out.println("item:" + titleElements.get(0).asText()); ((HtmlElement) titleElements.get(0).getParentNode()).mouseOver(); ((HtmlElement) titleElements.get(0).getParentNode()).click(); WebClientUtils.waitForJSJob("classDetailsModalPanel shown after schedule event clicked", client, 0, 30000); Assert.assertNotNull(page.getElementById("classDetailsModalPanelContainer")); ((HtmlElement) page.getElementById("classDetailsModalPanelContainer").getByXPath("//*[contains(@src,'close.png')]").get(0)).click(); WebClientUtils.waitForJSJob("classDetailsModalPanel hidden after cancel button", client, 0, 30000); Assert.assertNull(page.getElementById("classDetailsModalPanelContainer")); } @Test public void removeClass() throws IOException { WebClient client = new WebClient(BrowserVersion.FIREFOX_2); final RequestResponseLogger requestResponseLogger = new RequestResponseLogger(client); requestResponseLogger.off(); HtmlPage page = login(client); @SuppressWarnings("unchecked") final List titleElements = (List) page.getElementById("results:schedule").getByXPath(".//span[@class='fc-event-title']"); Assert.assertEquals(6, titleElements.size()); Assert.assertNotSame(0, titleElements.size()); WebClientUtils.waitForJSJob("initial javascript to finish", client, 0, 30000); client.setAlertHandler(new AlertLogger()); final DomChangeLogger domChangeLogger = new DomChangeLogger(); domChangeLogger.showDetails("results:j_id2158"); // page.addDomChangeListener(domChangeLogger); // page.addHtmlAttsributeChangeListener(new HtmlAttributeChangeLogger()); // requestResponseLogger.on(); ((HtmlElement) titleElements.get(0).getParentNode()).mouseOver(); ((HtmlElement) titleElements.get(0).getParentNode()).click(); WebClientUtils.waitForJSJob("classDetailsModalPanel shown after schedule event clicked", client, 0, 30000); WebClientUtils.executeAjaxReRenderedScripts(page); Assert.assertNotNull(page.getElementById("classDetailsModalPanelContainer")); ((HtmlElement) page.getElementById("classDetailsModalPanelContainer").getByXPath("//*[contains(@src,'remove.png')]").get(0)).click(); WebClientUtils.waitForJSJob("classDetailsModalPanel hidden after remove button", client, 0, 30000); WebClientUtils.executeAjaxReRenderedScripts(page); WebClientUtils.waitForJSJob("schedule refresh", client, 0, 30000); Assert.assertNull(page.getElementById("classDetailsModalPanelContainer")); Assert.assertEquals(5, page.getElementById("results:schedule").getByXPath(".//span[@class='fc-event-title']").size()); } private HtmlPage login(WebClient client) throws IOException { HtmlPage page = (HtmlPage) client.getPage("http://localhost:8080/schoolmanager/view/class/current.seam?networkId=salsafactory"); ((HtmlInput) page.getElementById("loginForm:email")).setValueAttribute("it.crowd.test@gmail.com"); ((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); return page; } }