Commit 5bc796f336257268cfc9d5378e9fe32eba829219
1 parent
1031a1b2
Added loggers for alerts,domChangeEvents,htmlAttributeChangeEvents,request/response.
Added SandboxTest. Implemented switchBetwenScheduleAndTableMode test. implemented selectStudentSuggestionByTab test.
Showing
9 changed files
with
296 additions
and
60 deletions
@@ -10,9 +10,13 @@ | @@ -10,9 +10,13 @@ | ||
10 | <version>1.0-SNAPSHOT</version> | 10 | <version>1.0-SNAPSHOT</version> |
11 | <name>${project.artifactId} : ${project.version}</name> | 11 | <name>${project.artifactId} : ${project.version}</name> |
12 | <description>Htmlunit sandbox</description> | 12 | <description>Htmlunit sandbox</description> |
13 | - <url></url> | ||
14 | - <packaging>pom</packaging> | 13 | + <packaging>jar</packaging> |
15 | 14 | ||
15 | + <properties> | ||
16 | + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||
17 | + <project.build.outputEncoding>UTF-8</project.build.outputEncoding> | ||
18 | + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> | ||
19 | + </properties> | ||
16 | 20 | ||
17 | <dependencies> | 21 | <dependencies> |
18 | <dependency> | 22 | <dependency> |
@@ -43,5 +47,12 @@ | @@ -43,5 +47,12 @@ | ||
43 | </plugins> | 47 | </plugins> |
44 | </build> | 48 | </build> |
45 | 49 | ||
50 | + <distributionManagement> | ||
51 | + <repository> | ||
52 | + <id>bernard.labno.pl</id> | ||
53 | + <name>MyCo Internal Repository</name> | ||
54 | + <url>http://bernard.labno.pl/artifactory/libs-snapshot-local</url> | ||
55 | + </repository> | ||
56 | + </distributionManagement> | ||
46 | 57 | ||
47 | </project> | 58 | </project> |
1 | +package pl.labno.bernard.htmlunified; | ||
2 | + | ||
3 | +import com.gargoylesoftware.htmlunit.AlertHandler; | ||
4 | +import com.gargoylesoftware.htmlunit.Page; | ||
5 | +import org.apache.commons.logging.Log; | ||
6 | +import org.apache.commons.logging.LogFactory; | ||
7 | + | ||
8 | +public class AlertLogger implements AlertHandler { | ||
9 | + | ||
10 | + private static final Log LOG = LogFactory.getLog(AlertLogger.class); | ||
11 | + | ||
12 | + public void handleAlert(Page page, String message) { | ||
13 | + LOG.info("Alert message:" + message); | ||
14 | + } | ||
15 | +} |
1 | +package pl.labno.bernard.htmlunified; | ||
2 | + | ||
3 | +import com.gargoylesoftware.htmlunit.html.DomChangeEvent; | ||
4 | +import com.gargoylesoftware.htmlunit.html.DomChangeListener; | ||
5 | +import com.gargoylesoftware.htmlunit.html.DomNode; | ||
6 | +import org.apache.commons.logging.Log; | ||
7 | +import org.apache.commons.logging.LogFactory; | ||
8 | +import org.w3c.dom.Node; | ||
9 | + | ||
10 | +public class DomChangeLogger implements DomChangeListener { | ||
11 | + | ||
12 | + private static final Log LOG = LogFactory.getLog(DomChangeLogger.class); | ||
13 | + | ||
14 | + public void nodeAdded(DomChangeEvent event) { | ||
15 | + logEvent(event, "added"); | ||
16 | + } | ||
17 | + | ||
18 | + public void nodeDeleted(DomChangeEvent event) { | ||
19 | + logEvent(event, "removed"); | ||
20 | + } | ||
21 | + | ||
22 | + private void logEvent(DomChangeEvent event, String action) { | ||
23 | + String changed; | ||
24 | + final DomNode changedNode = event.getChangedNode(); | ||
25 | + try { | ||
26 | + changed = changedNode.toString(); | ||
27 | + } catch (Exception e) { | ||
28 | + changed = changedNode.getNodeName() + "[id=" + changedNode.getAttributes().getNamedItem("id") + ("#text".equals(changedNode.getNodeName()) ? ";value=" + changedNode.getTextContent() : "") + "]"; | ||
29 | + } | ||
30 | + String parent; | ||
31 | + final DomNode parentNode = event.getParentNode(); | ||
32 | + try { | ||
33 | + parent = parentNode.toString(); | ||
34 | + } catch (Exception e) { | ||
35 | + parent = parentNode.getNodeName() + "[id=" + parentNode.getAttributes().getNamedItem("id") + ("#text".equals(parentNode.getNodeName()) ? ";value=" + parentNode.getTextContent() : "") + "]"; | ||
36 | + } | ||
37 | + LOG.info("DomChangeEvent[action=" + action + ";changedElement=" + changed + ";source=" + event.getSource() + ";parent=" + parent + "]"); | ||
38 | + final Node id = event.getChangedNode().getAttributes().getNamedItem("id"); | ||
39 | + if (id != null && "searchClass:searchStudent".equals(id.getTextContent())) { | ||
40 | + LOG.info(event.getChangedNode().asXml()); | ||
41 | + } | ||
42 | + } | ||
43 | +} |
1 | +package pl.labno.bernard.htmlunified; | ||
2 | + | ||
3 | +import com.gargoylesoftware.htmlunit.html.HtmlAttributeChangeEvent; | ||
4 | +import com.gargoylesoftware.htmlunit.html.HtmlAttributeChangeListener; | ||
5 | +import org.apache.commons.logging.Log; | ||
6 | +import org.apache.commons.logging.LogFactory; | ||
7 | + | ||
8 | +public class HtmlAttributeChangeLogger implements HtmlAttributeChangeListener { | ||
9 | + | ||
10 | + private static final Log LOG = LogFactory.getLog(HtmlAttributeChangeLogger.class); | ||
11 | + | ||
12 | + public void attributeAdded(HtmlAttributeChangeEvent event) { | ||
13 | + log(event, "added"); | ||
14 | + } | ||
15 | + | ||
16 | + public void attributeRemoved(HtmlAttributeChangeEvent event) { | ||
17 | + log(event, "removed"); | ||
18 | + } | ||
19 | + | ||
20 | + public void attributeReplaced(HtmlAttributeChangeEvent event) { | ||
21 | + log(event, "replaced"); | ||
22 | + } | ||
23 | + | ||
24 | + private void log(HtmlAttributeChangeEvent event, String action) { | ||
25 | + LOG.info("HtmlAttributeChangeEvent[" + action + ":" + event.getName() + "=" + event.getValue() + ";source=" + event.getSource() + "]"); | ||
26 | + } | ||
27 | +} |
1 | +package pl.labno.bernard.htmlunified; | ||
2 | + | ||
3 | +import com.gargoylesoftware.htmlunit.WebClient; | ||
4 | +import com.gargoylesoftware.htmlunit.WebRequest; | ||
5 | +import com.gargoylesoftware.htmlunit.WebResponse; | ||
6 | +import com.gargoylesoftware.htmlunit.util.WebConnectionWrapper; | ||
7 | +import org.apache.commons.logging.Log; | ||
8 | +import org.apache.commons.logging.LogFactory; | ||
9 | + | ||
10 | +import java.io.IOException; | ||
11 | + | ||
12 | +public class RequestResponseLogger extends WebConnectionWrapper { | ||
13 | + | ||
14 | + private static final Log LOG = LogFactory.getLog(RequestResponseLogger.class); | ||
15 | + | ||
16 | + private boolean active = true; | ||
17 | + | ||
18 | + public RequestResponseLogger(WebClient webClient) throws IllegalArgumentException { | ||
19 | + super(webClient); | ||
20 | + } | ||
21 | + | ||
22 | + @Override | ||
23 | + public WebResponse getResponse(WebRequest request) throws IOException { | ||
24 | + final WebResponse response = super.getResponse(request); | ||
25 | + if (active) { | ||
26 | + LOG.info("request=" + request.getRequestBody() + "\nresponse=" + response.getContentAsString()); | ||
27 | + } | ||
28 | + return response; | ||
29 | + } | ||
30 | + | ||
31 | + public void off() { | ||
32 | + active = false; | ||
33 | + } | ||
34 | + | ||
35 | + public void on() { | ||
36 | + active = true; | ||
37 | + } | ||
38 | +} |
@@ -30,24 +30,24 @@ public class WebClientUtils { | @@ -30,24 +30,24 @@ public class WebClientUtils { | ||
30 | } | 30 | } |
31 | 31 | ||
32 | public static int waitForJSJob(WebClient webClient) { | 32 | public static int waitForJSJob(WebClient webClient) { |
33 | - return waitForJSJob(webClient, webClient.waitForBackgroundJavaScript(10) - 1, defaultCheckInterval, defaultTimeout); | 33 | + return waitForJSJob(webClient, webClient.waitForBackgroundJavaScript(10) - 1); |
34 | } | 34 | } |
35 | 35 | ||
36 | public static int waitForJSJob(WebClient webClient, int initialJobCount) { | 36 | public static int waitForJSJob(WebClient webClient, int initialJobCount) { |
37 | - return waitForJSJob(webClient, initialJobCount, defaultCheckInterval, defaultTimeout); | 37 | + return waitForJSJob(webClient, initialJobCount, defaultTimeout); |
38 | } | 38 | } |
39 | 39 | ||
40 | public static int waitForJSJob(WebClient webClient, int initialJobCount, long timeout) { | 40 | public static int waitForJSJob(WebClient webClient, int initialJobCount, long timeout) { |
41 | - return waitForJSJob(webClient, initialJobCount, defaultCheckInterval, timeout); | 41 | + return waitForJSJob(webClient, initialJobCount, timeout, defaultCheckInterval); |
42 | } | 42 | } |
43 | 43 | ||
44 | - public static int waitForJSJob(WebClient webClient, int initialJobCount, long checkInterval, long timeout) { | 44 | + public static int waitForJSJob(WebClient webClient, int initialJobCount, long timeout, long checkInterval) { |
45 | int jobs; | 45 | int jobs; |
46 | long startTime = System.currentTimeMillis(); | 46 | long startTime = System.currentTimeMillis(); |
47 | do { | 47 | do { |
48 | jobs = webClient.waitForBackgroundJavaScript(checkInterval); | 48 | jobs = webClient.waitForBackgroundJavaScript(checkInterval); |
49 | if (startTime + timeout < System.currentTimeMillis()) { | 49 | if (startTime + timeout < System.currentTimeMillis()) { |
50 | - 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!"); | 50 | + 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!"); |
51 | } | 51 | } |
52 | } while (jobs > initialJobCount); | 52 | } while (jobs > initialJobCount); |
53 | System.out.println("Waiting took: " + (System.currentTimeMillis() - startTime) + "ms"); | 53 | System.out.println("Waiting took: " + (System.currentTimeMillis() - startTime) + "ms"); |
@@ -74,4 +74,18 @@ public class WebClientUtils { | @@ -74,4 +74,18 @@ public class WebClientUtils { | ||
74 | } | 74 | } |
75 | return suggestions; | 75 | return suggestions; |
76 | } | 76 | } |
77 | + | ||
78 | + public static void forceWait(int timeout) { | ||
79 | + final long startTime = System.currentTimeMillis(); | ||
80 | + do { | ||
81 | + try { | ||
82 | + final long millis = startTime + timeout - System.currentTimeMillis(); | ||
83 | + if (millis > 0) { | ||
84 | + Thread.sleep(millis); | ||
85 | + } | ||
86 | + } catch (InterruptedException ignore) { | ||
87 | + } catch (IllegalArgumentException ignore) { | ||
88 | + } | ||
89 | + } while (startTime + timeout > System.currentTimeMillis()); | ||
90 | + } | ||
77 | } | 91 | } |
1 | +package pl.labno.bernard.htmlunified; | ||
2 | + | ||
3 | +import com.gargoylesoftware.htmlunit.BrowserVersion; | ||
4 | +import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController; | ||
5 | +import com.gargoylesoftware.htmlunit.WebClient; | ||
6 | +import com.gargoylesoftware.htmlunit.html.HtmlPage; | ||
7 | +import org.junit.Assert; | ||
8 | +import org.junit.Test; | ||
9 | + | ||
10 | +import java.io.IOException; | ||
11 | + | ||
12 | +public class SandboxTest { | ||
13 | + | ||
14 | + @Test | ||
15 | + public void test() throws IOException { | ||
16 | + final WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); | ||
17 | + client.setAjaxController(new NicelyResynchronizingAjaxController()); | ||
18 | + HtmlPage page = (HtmlPage) client.getPage("file:./target/test-classes/sandbox.html"); | ||
19 | + Assert.assertEquals("elementToHide", page.getElementById("elementToHide").asText()); | ||
20 | + page.getElementById("close").click(); | ||
21 | + Assert.assertEquals("", page.getElementById("elementToHide").asText()); | ||
22 | + } | ||
23 | +} |
1 | package pl.labno.bernard.htmlunified; | 1 | package pl.labno.bernard.htmlunified; |
2 | 2 | ||
3 | import com.gargoylesoftware.htmlunit.BrowserVersion; | 3 | import com.gargoylesoftware.htmlunit.BrowserVersion; |
4 | -import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController; | ||
5 | import com.gargoylesoftware.htmlunit.WebClient; | 4 | import com.gargoylesoftware.htmlunit.WebClient; |
6 | import com.gargoylesoftware.htmlunit.html.HtmlElement; | 5 | import com.gargoylesoftware.htmlunit.html.HtmlElement; |
7 | import com.gargoylesoftware.htmlunit.html.HtmlInput; | 6 | import com.gargoylesoftware.htmlunit.html.HtmlInput; |
@@ -16,83 +15,137 @@ import java.util.ArrayList; | @@ -16,83 +15,137 @@ import java.util.ArrayList; | ||
16 | import java.util.List; | 15 | import java.util.List; |
17 | import java.util.Map; | 16 | import java.util.Map; |
18 | 17 | ||
18 | +/** | ||
19 | + * NicelyResynchronizingAjaxController is EVIL! Don't use it! | ||
20 | + */ | ||
19 | public class ScheduleTest { | 21 | public class ScheduleTest { |
20 | 22 | ||
21 | - // @Test | 23 | + @Test |
22 | public void accessEventTitles() throws IOException { | 24 | public void accessEventTitles() throws IOException { |
23 | WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); | 25 | WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); |
24 | - //login----------------------------------- | ||
25 | - HtmlPage page = (HtmlPage) client.getPage("http://localhost:8080/schoolmanager/view/class/current.seam?networkId=salsafactory"); | ||
26 | - ((HtmlInput) page.getElementById("loginForm:email")).setValueAttribute("s4237@pjwstk.edu.pl"); | ||
27 | - ((HtmlInput) page.getElementById("loginForm:password")).setValueAttribute("aaaaa"); | ||
28 | - HtmlPage oldPage = page; | ||
29 | - page = page.getElementById("loginForm:submit").click(); | ||
30 | -// This assert would fail (when page redidrects than you need to obtain new page) | ||
31 | -// Assert.assertEquals(page,oldPage); | ||
32 | - Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); | ||
33 | - //---------------------------------------- | ||
34 | - | 26 | + HtmlPage page = login(client); |
27 | + @SuppressWarnings("unchecked") | ||
35 | final List<HtmlSpan> titleElements = (List<HtmlSpan>) page.getElementById("results:schedule").getByXPath(".//span[@class='fc-event-title']"); | 28 | final List<HtmlSpan> titleElements = (List<HtmlSpan>) page.getElementById("results:schedule").getByXPath(".//span[@class='fc-event-title']"); |
36 | List<String> titles = new ArrayList<String>(titleElements.size()); | 29 | List<String> titles = new ArrayList<String>(titleElements.size()); |
37 | for (HtmlSpan o : titleElements) { | 30 | for (HtmlSpan o : titleElements) { |
38 | titles.add(o.asText()); | 31 | titles.add(o.asText()); |
39 | } | 32 | } |
40 | - Assert.assertEquals(2, titles.size()); | 33 | + Assert.assertEquals(4, titles.size()); |
41 | } | 34 | } |
42 | 35 | ||
43 | @Test | 36 | @Test |
44 | - public void clickSuggestionBox() throws IOException { | 37 | + public void clickStudentSuggestionBox() throws IOException { |
45 | WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); | 38 | WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); |
46 | - client.setAjaxController(new NicelyResynchronizingAjaxController()); | ||
47 | - //login----------------------------------- | ||
48 | - HtmlPage page = (HtmlPage) client.getPage("http://localhost:8080/schoolmanager/view/class/current.seam?networkId=salsafactory"); | ||
49 | - ((HtmlInput) page.getElementById("loginForm:email")).setValueAttribute("s4237@pjwstk.edu.pl"); | ||
50 | - ((HtmlInput) page.getElementById("loginForm:password")).setValueAttribute("aaaaa"); | ||
51 | - HtmlPage oldPage = page; | ||
52 | - page = page.getElementById("loginForm:submit").click(); | ||
53 | -// This assert would fail (when page redidrects than you need to obtain new page) | ||
54 | -// Assert.assertEquals(page,oldPage); | ||
55 | - Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); | ||
56 | - //---------------------------------------- | ||
57 | - final HtmlInput studentInput = (HtmlInput) page.getElementById("searchClass:student_i"); | ||
58 | - int initialJobs = client.waitForBackgroundJavaScript(10); | ||
59 | - | 39 | + HtmlPage page = login(client); |
40 | + page.addDomChangeListener(new DomChangeLogger()); | ||
41 | + page.getElementById("searchClass:sS").addHtmlAttributeChangeListener(new HtmlAttributeChangeLogger()); | ||
42 | + HtmlInput studentInput = (HtmlInput) page.getElementById("searchClass:student_i"); | ||
60 | studentInput.type('w'); | 43 | studentInput.type('w'); |
61 | studentInput.type('i'); | 44 | studentInput.type('i'); |
62 | Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); | 45 | Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); |
63 | // Here the suggestionBox is still hidden | 46 | // Here the suggestionBox is still hidden |
64 | -// System.out.println(page.asXml()); | ||
65 | - | ||
66 | - int jobs = WebClientUtils.waitForJSJob(client, 0, 30000); | 47 | + WebClientUtils.waitForJSJob(client, 0, 30000); |
67 | // Here suggestionBox is visible | 48 | // Here suggestionBox is visible |
68 | -// System.out.println(page.asXml()); | ||
69 | - System.out.println(page.getElementById("searchClass:sS").asXml()); | ||
70 | - System.out.println("initialJobs:" + initialJobs); | ||
71 | - System.out.println("jobs:" + jobs); | ||
72 | Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); | 49 | Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); |
73 | - synchronized (page) { | ||
74 | - try { | ||
75 | - page.wait(1000); | ||
76 | - } catch (InterruptedException e) { | ||
77 | - e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. | ||
78 | - } | ||
79 | - } | ||
80 | Map<String, HtmlTableCell> suggestions = WebClientUtils.getSuggestions(page.getElementById("searchClass:sS"), 0); | 50 | Map<String, HtmlTableCell> suggestions = WebClientUtils.getSuggestions(page.getElementById("searchClass:sS"), 0); |
81 | Assert.assertEquals(1, suggestions.size()); | 51 | Assert.assertEquals(1, suggestions.size()); |
82 | System.out.println(suggestions); | 52 | System.out.println(suggestions); |
83 | HtmlTableCell cell = suggestions.get("Willis Bruce"); | 53 | HtmlTableCell cell = suggestions.get("Willis Bruce"); |
84 | Assert.assertNotNull(cell); | 54 | Assert.assertNotNull(cell); |
85 | - initialJobs = client.waitForBackgroundJavaScript(10); | ||
86 | - System.out.println("initial jobs:"+initialJobs); | ||
87 | cell.click(); | 55 | cell.click(); |
88 | - System.out.println("Starting jobs:"+client.waitForBackgroundJavaScriptStartingBefore(3000)); | ||
89 | - System.out.println("Running jobs:"+client.waitForBackgroundJavaScript(10)); | ||
90 | -// studentInput.type('\t'); | ||
91 | - jobs = WebClientUtils.waitForJSJob(client,initialJobs, 30000); | ||
92 | - System.out.println("initialJobs:" + initialJobs); | ||
93 | - System.out.println("jobs:" + jobs); | ||
94 | - System.out.println(page.asXml()); | ||
95 | - Assert.assertEquals("Willis Bruce",((HtmlElement)page.getByXPath("//*[@id='searchClass:searchStudent']").get(0)).asText()); | 56 | + WebClientUtils.waitForJSJob(client, 0, 30000); |
57 | + Assert.assertEquals("Willis Bruce", ((HtmlElement) page.getByXPath("//*[@id='searchClass:searchStudent']").get(0)).asText()); | ||
58 | + System.out.println("Success!"); | ||
59 | + | ||
60 | + | ||
61 | +// page = (HtmlPage) client.getPage("http://localhost:8080/schoolmanager/view/class/current.seam?networkId=salsafactory"); | ||
62 | + WebClientUtils.waitForJSJob(client, 0, 30000); | ||
63 | + Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); | ||
64 | + studentInput = (HtmlInput) page.getElementById("searchClass:student_i"); | ||
65 | + studentInput.setValueAttribute(""); | ||
66 | + studentInput.type('l'); | ||
67 | + studentInput.type('i'); | ||
68 | + Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); | ||
69 | +// WebClientUtils.forceWait(2000); | ||
70 | +// Here the suggestionBox is still hidden | ||
71 | + WebClientUtils.waitForJSJob(client, 0, 30000); | ||
72 | +// Here suggestionBox is visible | ||
73 | + Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); | ||
74 | + suggestions = WebClientUtils.getSuggestions(page.getElementById("searchClass:sS"), 0); | ||
75 | + Assert.assertEquals(1, suggestions.size()); | ||
76 | + System.out.println(suggestions); | ||
77 | + cell = suggestions.get("Linda Bogusław"); | ||
78 | + Assert.assertNotNull(cell); | ||
79 | + cell.click(); | ||
80 | + WebClientUtils.waitForJSJob(client, 0, 30000); | ||
81 | + Assert.assertEquals("Linda Bogusław", ((HtmlElement) page.getByXPath("//*[@id='searchClass:searchStudent']").get(0)).asText()); | ||
82 | + System.out.println("Success2!"); | ||
83 | + } | ||
84 | + | ||
85 | + @Test | ||
86 | + public void switchBetwenScheduleAndTableMode() throws IOException { | ||
87 | + WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); | ||
88 | + HtmlPage page = login(client); | ||
89 | + page.getElementById("j_id2118:j_id2119:0").click(); | ||
90 | + page.getElementById("j_id2118:j_id2119:0").blur(); | ||
91 | + WebClientUtils.waitForJSJob(client, 0, 30000); | ||
92 | +// System.out.println(page.getElementById("results").asXml()); | ||
93 | + Assert.assertNotNull(page.getElementById("results:table")); | ||
94 | + page.getElementById("j_id2118:j_id2119:1").click(); | ||
95 | + page.getElementById("j_id2118:j_id2119:1").blur(); | ||
96 | + WebClientUtils.waitForJSJob(client, 0, 30000); | ||
97 | +// System.out.println(page.getElementById("results").asXml()); | ||
98 | + Assert.assertNotNull(page.getElementById("results:schedule")); | ||
99 | + page.getElementById("j_id2118:j_id2119:0").click(); | ||
100 | + page.getElementById("j_id2118:j_id2119:0").blur(); | ||
101 | + WebClientUtils.waitForJSJob(client, 0, 30000); | ||
102 | +// System.out.println(page.getElementById("results").asXml()); | ||
103 | + Assert.assertNotNull(page.getElementById("results:table")); | ||
104 | + } | ||
105 | + | ||
106 | + @Test | ||
107 | + public void selectStudentSuggestionByTab() throws IOException { | ||
108 | + final WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); | ||
109 | + final RequestResponseLogger requestResponseLogger = new RequestResponseLogger(client); | ||
110 | + requestResponseLogger.off(); | ||
111 | + HtmlPage page = login(client); | ||
112 | + final HtmlInput studentInput = (HtmlInput) page.getElementById("searchClass:student_i"); | ||
113 | + studentInput.type('w'); | ||
114 | + studentInput.type('i'); | ||
115 | + Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); | ||
116 | +// Here the suggestionBox is still hidden | ||
117 | + WebClientUtils.waitForJSJob(client, 0, 30000); | ||
118 | +// Here suggestionBox is visible | ||
119 | + Map<String, HtmlTableCell> suggestions = WebClientUtils.getSuggestions(page.getElementById("searchClass:sS"), 0); | ||
120 | + Assert.assertEquals(1, suggestions.size()); | ||
121 | +// System.out.println(suggestions); | ||
122 | + HtmlTableCell cell = suggestions.get("Willis Bruce"); | ||
123 | + Assert.assertNotNull(cell); | ||
124 | + studentInput.type('\t'); | ||
125 | + WebClientUtils.waitForJSJob(client, 0, 30000); | ||
126 | + Assert.assertEquals("Willis Bruce", page.getElementById("searchClass:searchStudent").asText()); | ||
127 | + | ||
128 | +// requestResponseLogger.on(); | ||
129 | +// client.setAlertHandler(new AlertLogger()); | ||
130 | +// page.addDomChangeListener(new DomChangeLogger()); | ||
131 | + final HtmlElement element = page.getElementById("searchClass:searchStudent").getElementsByTagName("img").get(0); | ||
132 | + element.click(); | ||
133 | + WebClientUtils.waitForJSJob(client, 0, 30000); | ||
134 | + Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); | ||
135 | + Assert.assertEquals("", page.getElementById("searchClass:searchStudent").asText()); | ||
136 | + | ||
137 | + } | ||
138 | + | ||
139 | + private HtmlPage login(WebClient client) throws IOException { | ||
140 | + HtmlPage page = (HtmlPage) client.getPage("http://localhost:8080/schoolmanager/view/class/current.seam?networkId=salsafactory"); | ||
141 | + ((HtmlInput) page.getElementById("loginForm:email")).setValueAttribute("s4237@pjwstk.edu.pl"); | ||
142 | + ((HtmlInput) page.getElementById("loginForm:password")).setValueAttribute("aaaaa"); | ||
143 | + HtmlPage oldPage = page; | ||
144 | + page = page.getElementById("loginForm:submit").click(); | ||
145 | +// This assert would fail (when page redidrects than you need to obtain new page) | ||
146 | +// Assert.assertEquals(page,oldPage); | ||
147 | + Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); | ||
148 | + return page; | ||
96 | } | 149 | } |
97 | 150 | ||
98 | } | 151 | } |
src/test/resources/sandbox.html
0 → 100644
1 | +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" | ||
2 | + "http://www.w3.org/TR/html4/loose.dtd"> | ||
3 | +<html> | ||
4 | +<head> | ||
5 | + <title></title> | ||
6 | +</head> | ||
7 | +<body> | ||
8 | +<img id="close" onclick="var e = document.getElementById('elementToHide');e.removeChild(e.firstChild)" alt="close"/> | ||
9 | + | ||
10 | +<div id="elementToHide">elementToHide</div> | ||
11 | +</body> | ||
12 | +</html> |
Please
register
or
login
to post a comment