From 5bc796f336257268cfc9d5378e9fe32eba829219 Mon Sep 17 00:00:00 2001 From: Bernard Labno Date: Tue, 1 Feb 2011 14:46:37 +0000 Subject: [PATCH] Added loggers for alerts,domChangeEvents,htmlAttributeChangeEvents,request/response. Added SandboxTest. Implemented switchBetwenScheduleAndTableMode test. implemented selectStudentSuggestionByTab test. --- pom.xml | 15 +++++++++++++-- src/main/java/pl/labno/bernard/htmlunified/AlertLogger.java | 15 +++++++++++++++ src/main/java/pl/labno/bernard/htmlunified/DomChangeLogger.java | 43 +++++++++++++++++++++++++++++++++++++++++++ src/main/java/pl/labno/bernard/htmlunified/HtmlAttributeChangeLogger.java | 27 +++++++++++++++++++++++++++ src/main/java/pl/labno/bernard/htmlunified/RequestResponseLogger.java | 38 ++++++++++++++++++++++++++++++++++++++ src/main/java/pl/labno/bernard/htmlunified/WebClientUtils.java | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/test/java/pl/labno/bernard/htmlunified/SandboxTest.java | 23 +++++++++++++++++++++++ src/test/java/pl/labno/bernard/htmlunified/ScheduleTest.java | 159 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------- src/test/java/pl/labno/bernard/htmlunified/WebClientUtils.java | 77 ----------------------------------------------------------------------------- src/test/resources/sandbox.html | 12 ++++++++++++ 10 files changed, 368 insertions(+), 132 deletions(-) create mode 100644 src/main/java/pl/labno/bernard/htmlunified/AlertLogger.java create mode 100644 src/main/java/pl/labno/bernard/htmlunified/DomChangeLogger.java create mode 100644 src/main/java/pl/labno/bernard/htmlunified/HtmlAttributeChangeLogger.java create mode 100644 src/main/java/pl/labno/bernard/htmlunified/RequestResponseLogger.java create mode 100644 src/main/java/pl/labno/bernard/htmlunified/WebClientUtils.java create mode 100644 src/test/java/pl/labno/bernard/htmlunified/SandboxTest.java delete mode 100644 src/test/java/pl/labno/bernard/htmlunified/WebClientUtils.java create mode 100644 src/test/resources/sandbox.html diff --git a/pom.xml b/pom.xml index 7b0149f..aeeea7b 100644 --- a/pom.xml +++ b/pom.xml @@ -10,9 +10,13 @@ 1.0-SNAPSHOT ${project.artifactId} : ${project.version} Htmlunit sandbox - - pom + jar + + UTF-8 + UTF-8 + UTF-8 + @@ -43,5 +47,12 @@ + + + bernard.labno.pl + MyCo Internal Repository + http://bernard.labno.pl/artifactory/libs-snapshot-local + + diff --git a/src/main/java/pl/labno/bernard/htmlunified/AlertLogger.java b/src/main/java/pl/labno/bernard/htmlunified/AlertLogger.java new file mode 100644 index 0000000..4e5423d --- /dev/null +++ b/src/main/java/pl/labno/bernard/htmlunified/AlertLogger.java @@ -0,0 +1,15 @@ +package pl.labno.bernard.htmlunified; + +import com.gargoylesoftware.htmlunit.AlertHandler; +import com.gargoylesoftware.htmlunit.Page; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class AlertLogger implements AlertHandler { + + private static final Log LOG = LogFactory.getLog(AlertLogger.class); + + public void handleAlert(Page page, String message) { + LOG.info("Alert message:" + message); + } +} diff --git a/src/main/java/pl/labno/bernard/htmlunified/DomChangeLogger.java b/src/main/java/pl/labno/bernard/htmlunified/DomChangeLogger.java new file mode 100644 index 0000000..b809ca9 --- /dev/null +++ b/src/main/java/pl/labno/bernard/htmlunified/DomChangeLogger.java @@ -0,0 +1,43 @@ +package pl.labno.bernard.htmlunified; + +import com.gargoylesoftware.htmlunit.html.DomChangeEvent; +import com.gargoylesoftware.htmlunit.html.DomChangeListener; +import com.gargoylesoftware.htmlunit.html.DomNode; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.w3c.dom.Node; + +public class DomChangeLogger implements DomChangeListener { + + private static final Log LOG = LogFactory.getLog(DomChangeLogger.class); + + public void nodeAdded(DomChangeEvent event) { + logEvent(event, "added"); + } + + public void nodeDeleted(DomChangeEvent event) { + logEvent(event, "removed"); + } + + private void logEvent(DomChangeEvent event, String action) { + String changed; + final DomNode changedNode = event.getChangedNode(); + try { + changed = changedNode.toString(); + } catch (Exception e) { + changed = changedNode.getNodeName() + "[id=" + changedNode.getAttributes().getNamedItem("id") + ("#text".equals(changedNode.getNodeName()) ? ";value=" + changedNode.getTextContent() : "") + "]"; + } + String parent; + final DomNode parentNode = event.getParentNode(); + try { + parent = parentNode.toString(); + } catch (Exception e) { + parent = parentNode.getNodeName() + "[id=" + parentNode.getAttributes().getNamedItem("id") + ("#text".equals(parentNode.getNodeName()) ? ";value=" + parentNode.getTextContent() : "") + "]"; + } + LOG.info("DomChangeEvent[action=" + action + ";changedElement=" + changed + ";source=" + event.getSource() + ";parent=" + parent + "]"); + final Node id = event.getChangedNode().getAttributes().getNamedItem("id"); + if (id != null && "searchClass:searchStudent".equals(id.getTextContent())) { + LOG.info(event.getChangedNode().asXml()); + } + } +} diff --git a/src/main/java/pl/labno/bernard/htmlunified/HtmlAttributeChangeLogger.java b/src/main/java/pl/labno/bernard/htmlunified/HtmlAttributeChangeLogger.java new file mode 100644 index 0000000..0c0dcf0 --- /dev/null +++ b/src/main/java/pl/labno/bernard/htmlunified/HtmlAttributeChangeLogger.java @@ -0,0 +1,27 @@ +package pl.labno.bernard.htmlunified; + +import com.gargoylesoftware.htmlunit.html.HtmlAttributeChangeEvent; +import com.gargoylesoftware.htmlunit.html.HtmlAttributeChangeListener; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class HtmlAttributeChangeLogger implements HtmlAttributeChangeListener { + + private static final Log LOG = LogFactory.getLog(HtmlAttributeChangeLogger.class); + + public void attributeAdded(HtmlAttributeChangeEvent event) { + log(event, "added"); + } + + public void attributeRemoved(HtmlAttributeChangeEvent event) { + log(event, "removed"); + } + + public void attributeReplaced(HtmlAttributeChangeEvent event) { + log(event, "replaced"); + } + + private void log(HtmlAttributeChangeEvent event, String action) { + LOG.info("HtmlAttributeChangeEvent[" + action + ":" + event.getName() + "=" + event.getValue() + ";source=" + event.getSource() + "]"); + } +} \ No newline at end of file diff --git a/src/main/java/pl/labno/bernard/htmlunified/RequestResponseLogger.java b/src/main/java/pl/labno/bernard/htmlunified/RequestResponseLogger.java new file mode 100644 index 0000000..d11b3c8 --- /dev/null +++ b/src/main/java/pl/labno/bernard/htmlunified/RequestResponseLogger.java @@ -0,0 +1,38 @@ +package pl.labno.bernard.htmlunified; + +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.WebRequest; +import com.gargoylesoftware.htmlunit.WebResponse; +import com.gargoylesoftware.htmlunit.util.WebConnectionWrapper; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.IOException; + +public class RequestResponseLogger extends WebConnectionWrapper { + + private static final Log LOG = LogFactory.getLog(RequestResponseLogger.class); + + private boolean active = true; + + public RequestResponseLogger(WebClient webClient) throws IllegalArgumentException { + super(webClient); + } + + @Override + public WebResponse getResponse(WebRequest request) throws IOException { + final WebResponse response = super.getResponse(request); + if (active) { + LOG.info("request=" + request.getRequestBody() + "\nresponse=" + response.getContentAsString()); + } + return response; + } + + public void off() { + active = false; + } + + public void on() { + active = true; + } +} diff --git a/src/main/java/pl/labno/bernard/htmlunified/WebClientUtils.java b/src/main/java/pl/labno/bernard/htmlunified/WebClientUtils.java new file mode 100644 index 0000000..8c23130 --- /dev/null +++ b/src/main/java/pl/labno/bernard/htmlunified/WebClientUtils.java @@ -0,0 +1,91 @@ +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); + } + + public static int waitForJSJob(WebClient webClient, int initialJobCount) { + return waitForJSJob(webClient, initialJobCount, defaultTimeout); + } + + public static int waitForJSJob(WebClient webClient, int initialJobCount, long timeout) { + return waitForJSJob(webClient, initialJobCount, timeout, defaultCheckInterval); + } + + public static int waitForJSJob(WebClient webClient, int initialJobCount, long timeout, long checkInterval) { + 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 " + timeout + " 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; + } + + public static void forceWait(int timeout) { + final long startTime = System.currentTimeMillis(); + do { + try { + final long millis = startTime + timeout - System.currentTimeMillis(); + if (millis > 0) { + Thread.sleep(millis); + } + } catch (InterruptedException ignore) { + } catch (IllegalArgumentException ignore) { + } + } while (startTime + timeout > System.currentTimeMillis()); + } +} diff --git a/src/test/java/pl/labno/bernard/htmlunified/SandboxTest.java b/src/test/java/pl/labno/bernard/htmlunified/SandboxTest.java new file mode 100644 index 0000000..22a4039 --- /dev/null +++ b/src/test/java/pl/labno/bernard/htmlunified/SandboxTest.java @@ -0,0 +1,23 @@ +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.HtmlPage; +import org.junit.Assert; +import org.junit.Test; + +import java.io.IOException; + +public class SandboxTest { + + @Test + public void test() throws IOException { + final WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); + client.setAjaxController(new NicelyResynchronizingAjaxController()); + HtmlPage page = (HtmlPage) client.getPage("file:./target/test-classes/sandbox.html"); + Assert.assertEquals("elementToHide", page.getElementById("elementToHide").asText()); + page.getElementById("close").click(); + Assert.assertEquals("", page.getElementById("elementToHide").asText()); + } +} diff --git a/src/test/java/pl/labno/bernard/htmlunified/ScheduleTest.java b/src/test/java/pl/labno/bernard/htmlunified/ScheduleTest.java index 395a95b..f906a31 100644 --- a/src/test/java/pl/labno/bernard/htmlunified/ScheduleTest.java +++ b/src/test/java/pl/labno/bernard/htmlunified/ScheduleTest.java @@ -1,7 +1,6 @@ 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; @@ -16,83 +15,137 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +/** + * NicelyResynchronizingAjaxController is EVIL! Don't use it! + */ public class ScheduleTest { - // @Test + @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); - //---------------------------------------- - + HtmlPage page = login(client); + @SuppressWarnings("unchecked") 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()); + Assert.assertEquals(4, titles.size()); } @Test - public void clickSuggestionBox() throws IOException { + public void clickStudentSuggestionBox() 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); - + HtmlPage page = login(client); + page.addDomChangeListener(new DomChangeLogger()); + page.getElementById("searchClass:sS").addHtmlAttributeChangeListener(new HtmlAttributeChangeLogger()); + HtmlInput studentInput = (HtmlInput) page.getElementById("searchClass:student_i"); 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); + 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()); + WebClientUtils.waitForJSJob(client, 0, 30000); + Assert.assertEquals("Willis Bruce", ((HtmlElement) page.getByXPath("//*[@id='searchClass:searchStudent']").get(0)).asText()); + System.out.println("Success!"); + + +// page = (HtmlPage) client.getPage("http://localhost:8080/schoolmanager/view/class/current.seam?networkId=salsafactory"); + WebClientUtils.waitForJSJob(client, 0, 30000); + Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); + studentInput = (HtmlInput) page.getElementById("searchClass:student_i"); + studentInput.setValueAttribute(""); + studentInput.type('l'); + studentInput.type('i'); + Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); +// WebClientUtils.forceWait(2000); +// Here the suggestionBox is still hidden + WebClientUtils.waitForJSJob(client, 0, 30000); +// Here suggestionBox is visible + Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); + suggestions = WebClientUtils.getSuggestions(page.getElementById("searchClass:sS"), 0); + Assert.assertEquals(1, suggestions.size()); + System.out.println(suggestions); + cell = suggestions.get("Linda Bogusław"); + Assert.assertNotNull(cell); + cell.click(); + WebClientUtils.waitForJSJob(client, 0, 30000); + Assert.assertEquals("Linda Bogusław", ((HtmlElement) page.getByXPath("//*[@id='searchClass:searchStudent']").get(0)).asText()); + System.out.println("Success2!"); + } + + @Test + public void switchBetwenScheduleAndTableMode() throws IOException { + WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); + HtmlPage page = login(client); + page.getElementById("j_id2118:j_id2119:0").click(); + page.getElementById("j_id2118:j_id2119:0").blur(); + WebClientUtils.waitForJSJob(client, 0, 30000); +// System.out.println(page.getElementById("results").asXml()); + Assert.assertNotNull(page.getElementById("results:table")); + page.getElementById("j_id2118:j_id2119:1").click(); + page.getElementById("j_id2118:j_id2119:1").blur(); + WebClientUtils.waitForJSJob(client, 0, 30000); +// System.out.println(page.getElementById("results").asXml()); + Assert.assertNotNull(page.getElementById("results:schedule")); + page.getElementById("j_id2118:j_id2119:0").click(); + page.getElementById("j_id2118:j_id2119:0").blur(); + WebClientUtils.waitForJSJob(client, 0, 30000); +// System.out.println(page.getElementById("results").asXml()); + Assert.assertNotNull(page.getElementById("results:table")); + } + + @Test + public void selectStudentSuggestionByTab() throws IOException { + final WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); + final RequestResponseLogger requestResponseLogger = new RequestResponseLogger(client); + requestResponseLogger.off(); + HtmlPage page = login(client); + final HtmlInput studentInput = (HtmlInput) page.getElementById("searchClass:student_i"); + studentInput.type('w'); + studentInput.type('i'); + Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); +// Here the suggestionBox is still hidden + WebClientUtils.waitForJSJob(client, 0, 30000); +// Here suggestionBox is visible + 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); + studentInput.type('\t'); + WebClientUtils.waitForJSJob(client, 0, 30000); + Assert.assertEquals("Willis Bruce", page.getElementById("searchClass:searchStudent").asText()); + +// requestResponseLogger.on(); +// client.setAlertHandler(new AlertLogger()); +// page.addDomChangeListener(new DomChangeLogger()); + final HtmlElement element = page.getElementById("searchClass:searchStudent").getElementsByTagName("img").get(0); + element.click(); + WebClientUtils.waitForJSJob(client, 0, 30000); + Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); + Assert.assertEquals("", page.getElementById("searchClass:searchStudent").asText()); + + } + + 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("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); + return page; } } diff --git a/src/test/java/pl/labno/bernard/htmlunified/WebClientUtils.java b/src/test/java/pl/labno/bernard/htmlunified/WebClientUtils.java deleted file mode 100644 index 0ff45b3..0000000 --- a/src/test/java/pl/labno/bernard/htmlunified/WebClientUtils.java +++ /dev/null @@ -1,77 +0,0 @@ -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; - } -} diff --git a/src/test/resources/sandbox.html b/src/test/resources/sandbox.html new file mode 100644 index 0000000..52e19db --- /dev/null +++ b/src/test/resources/sandbox.html @@ -0,0 +1,12 @@ + + + + + + +close + +
elementToHide
+ + \ No newline at end of file -- libgit2 0.24.0