Commit f76f0d3e4337dd31db68575d8b13f1f4062f511c
1 parent
5bc796f3
Implemented method for executing ajax re-rendered scripts.
Implemented several tests for ClassDetails.
Showing
8 changed files
with
211 additions
and
14 deletions
@@ -43,6 +43,17 @@ | @@ -43,6 +43,17 @@ | ||
43 | <optimize>false</optimize> | 43 | <optimize>false</optimize> |
44 | </configuration> | 44 | </configuration> |
45 | </plugin> | 45 | </plugin> |
46 | + <plugin> | ||
47 | + <groupId>org.apache.maven.plugins</groupId> | ||
48 | + <artifactId>maven-source-plugin</artifactId> | ||
49 | + <executions> | ||
50 | + <execution> | ||
51 | + <goals> | ||
52 | + <goal>jar</goal> | ||
53 | + </goals> | ||
54 | + </execution> | ||
55 | + </executions> | ||
56 | + </plugin> | ||
46 | 57 | ||
47 | </plugins> | 58 | </plugins> |
48 | </build> | 59 | </build> |
@@ -7,9 +7,13 @@ import org.apache.commons.logging.Log; | @@ -7,9 +7,13 @@ import org.apache.commons.logging.Log; | ||
7 | import org.apache.commons.logging.LogFactory; | 7 | import org.apache.commons.logging.LogFactory; |
8 | import org.w3c.dom.Node; | 8 | import org.w3c.dom.Node; |
9 | 9 | ||
10 | +import java.util.HashSet; | ||
11 | +import java.util.Set; | ||
12 | + | ||
10 | public class DomChangeLogger implements DomChangeListener { | 13 | public class DomChangeLogger implements DomChangeListener { |
11 | 14 | ||
12 | private static final Log LOG = LogFactory.getLog(DomChangeLogger.class); | 15 | private static final Log LOG = LogFactory.getLog(DomChangeLogger.class); |
16 | + private Set<String> detailIds = new HashSet<String>(); | ||
13 | 17 | ||
14 | public void nodeAdded(DomChangeEvent event) { | 18 | public void nodeAdded(DomChangeEvent event) { |
15 | logEvent(event, "added"); | 19 | logEvent(event, "added"); |
@@ -19,6 +23,14 @@ public class DomChangeLogger implements DomChangeListener { | @@ -19,6 +23,14 @@ public class DomChangeLogger implements DomChangeListener { | ||
19 | logEvent(event, "removed"); | 23 | logEvent(event, "removed"); |
20 | } | 24 | } |
21 | 25 | ||
26 | + public void showDetails(String id) { | ||
27 | + detailIds.add(id); | ||
28 | + } | ||
29 | + | ||
30 | + public void hideDetails(String id) { | ||
31 | + detailIds.remove(id); | ||
32 | + } | ||
33 | + | ||
22 | private void logEvent(DomChangeEvent event, String action) { | 34 | private void logEvent(DomChangeEvent event, String action) { |
23 | String changed; | 35 | String changed; |
24 | final DomNode changedNode = event.getChangedNode(); | 36 | final DomNode changedNode = event.getChangedNode(); |
@@ -36,7 +48,7 @@ public class DomChangeLogger implements DomChangeListener { | @@ -36,7 +48,7 @@ public class DomChangeLogger implements DomChangeListener { | ||
36 | } | 48 | } |
37 | LOG.info("DomChangeEvent[action=" + action + ";changedElement=" + changed + ";source=" + event.getSource() + ";parent=" + parent + "]"); | 49 | LOG.info("DomChangeEvent[action=" + action + ";changedElement=" + changed + ";source=" + event.getSource() + ";parent=" + parent + "]"); |
38 | final Node id = event.getChangedNode().getAttributes().getNamedItem("id"); | 50 | final Node id = event.getChangedNode().getAttributes().getNamedItem("id"); |
39 | - if (id != null && "searchClass:searchStudent".equals(id.getTextContent())) { | 51 | + if (id != null && detailIds.contains(id.getTextContent())) { |
40 | LOG.info(event.getChangedNode().asXml()); | 52 | LOG.info(event.getChangedNode().asXml()); |
41 | } | 53 | } |
42 | } | 54 | } |
1 | package pl.labno.bernard.htmlunified; | 1 | package pl.labno.bernard.htmlunified; |
2 | 2 | ||
3 | import com.gargoylesoftware.htmlunit.WebClient; | 3 | import com.gargoylesoftware.htmlunit.WebClient; |
4 | +import com.gargoylesoftware.htmlunit.html.DomNode; | ||
4 | import com.gargoylesoftware.htmlunit.html.DomNodeList; | 5 | import com.gargoylesoftware.htmlunit.html.DomNodeList; |
5 | import com.gargoylesoftware.htmlunit.html.HtmlElement; | 6 | import com.gargoylesoftware.htmlunit.html.HtmlElement; |
7 | +import com.gargoylesoftware.htmlunit.html.HtmlPage; | ||
6 | import com.gargoylesoftware.htmlunit.html.HtmlTableCell; | 8 | import com.gargoylesoftware.htmlunit.html.HtmlTableCell; |
7 | 9 | ||
10 | +import java.util.ArrayList; | ||
8 | import java.util.HashMap; | 11 | import java.util.HashMap; |
12 | +import java.util.List; | ||
9 | import java.util.Map; | 13 | import java.util.Map; |
10 | 14 | ||
11 | public class WebClientUtils { | 15 | public class WebClientUtils { |
@@ -29,19 +33,27 @@ public class WebClientUtils { | @@ -29,19 +33,27 @@ public class WebClientUtils { | ||
29 | WebClientUtils.defaultTimeout = defaultTimeout; | 33 | WebClientUtils.defaultTimeout = defaultTimeout; |
30 | } | 34 | } |
31 | 35 | ||
32 | - public static int waitForJSJob(WebClient webClient) { | ||
33 | - return waitForJSJob(webClient, webClient.waitForBackgroundJavaScript(10) - 1); | 36 | + public static int waitForJSJob(String message, WebClient webClient) { |
37 | + return waitForJSJob(message, webClient, webClient.waitForBackgroundJavaScript(10) - 1); | ||
34 | } | 38 | } |
35 | 39 | ||
36 | - public static int waitForJSJob(WebClient webClient, int initialJobCount) { | ||
37 | - return waitForJSJob(webClient, initialJobCount, defaultTimeout); | 40 | + public static int waitForJSJob(String message, WebClient webClient, int initialJobCount) { |
41 | + return waitForJSJob(message, webClient, initialJobCount, defaultTimeout); | ||
38 | } | 42 | } |
39 | 43 | ||
40 | - public static int waitForJSJob(WebClient webClient, int initialJobCount, long timeout) { | ||
41 | - return waitForJSJob(webClient, initialJobCount, timeout, defaultCheckInterval); | 44 | + public static int waitForJSJob(WebClient webClient, int initialJobCount, int timeout) { |
45 | + return waitForJSJob(null, webClient, initialJobCount, timeout); | ||
42 | } | 46 | } |
43 | 47 | ||
44 | - public static int waitForJSJob(WebClient webClient, int initialJobCount, long timeout, long checkInterval) { | 48 | + public static int waitForJSJob(String message, WebClient webClient, int initialJobCount, long timeout) { |
49 | + return waitForJSJob(message, webClient, initialJobCount, timeout, defaultCheckInterval); | ||
50 | + } | ||
51 | + | ||
52 | + public static int waitForJSJob(String message, WebClient webClient, int initialJobCount, int timeout) { | ||
53 | + return waitForJSJob(message, webClient, initialJobCount, timeout, defaultCheckInterval); | ||
54 | + } | ||
55 | + | ||
56 | + public static int waitForJSJob(String message, WebClient webClient, int initialJobCount, long timeout, long checkInterval) { | ||
45 | int jobs; | 57 | int jobs; |
46 | long startTime = System.currentTimeMillis(); | 58 | long startTime = System.currentTimeMillis(); |
47 | do { | 59 | do { |
@@ -50,7 +62,7 @@ public class WebClientUtils { | @@ -50,7 +62,7 @@ public class WebClientUtils { | ||
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!"); | 62 | 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 | } | 63 | } |
52 | } while (jobs > initialJobCount); | 64 | } while (jobs > initialJobCount); |
53 | - System.out.println("Waiting took: " + (System.currentTimeMillis() - startTime) + "ms"); | 65 | + System.out.println("Waiting" + (message == null ? "" : " for " + message) + " took: " + (System.currentTimeMillis() - startTime) + "ms"); |
54 | return jobs; | 66 | return jobs; |
55 | } | 67 | } |
56 | 68 | ||
@@ -88,4 +100,32 @@ public class WebClientUtils { | @@ -88,4 +100,32 @@ public class WebClientUtils { | ||
88 | } | 100 | } |
89 | } while (startTime + timeout > System.currentTimeMillis()); | 101 | } while (startTime + timeout > System.currentTimeMillis()); |
90 | } | 102 | } |
103 | + | ||
104 | + public static void executeAjaxReRenderedScripts(HtmlPage page) { | ||
105 | + final DomNodeList<HtmlElement> scripts = page.getElementsByTagName("script"); | ||
106 | + /** | ||
107 | + * We cannot iterate over html DomNodeList cause it depends on sibling relationship which we will modify. | ||
108 | + */ | ||
109 | + final List<HtmlElement> scriptsList = new ArrayList<HtmlElement>(); | ||
110 | + for (HtmlElement element : scripts) { | ||
111 | + scriptsList.add(element); | ||
112 | + } | ||
113 | + for (HtmlElement element : scriptsList) { | ||
114 | + if (element.getChildNodes().size() > 1) { | ||
115 | + element.removeChild(element.getFirstChild()); | ||
116 | + final DomNode sibling = element.getNextSibling(); | ||
117 | + final DomNode parentNode = element.getParentNode(); | ||
118 | + /** | ||
119 | + * Script will be executed upon inserting into DOM tree, so we removed and add it again. | ||
120 | + */ | ||
121 | + if (sibling != null) { | ||
122 | + parentNode.removeChild(element); | ||
123 | + sibling.insertBefore(element); | ||
124 | + } else { | ||
125 | + parentNode.removeChild(element); | ||
126 | + parentNode.appendChild(element); | ||
127 | + } | ||
128 | + } | ||
129 | + } | ||
130 | + } | ||
91 | } | 131 | } |
1 | +package pl.labno.bernard.htmlunified; | ||
2 | + | ||
3 | +import com.gargoylesoftware.htmlunit.BrowserVersion; | ||
4 | +import com.gargoylesoftware.htmlunit.WebClient; | ||
5 | +import com.gargoylesoftware.htmlunit.html.HtmlElement; | ||
6 | +import com.gargoylesoftware.htmlunit.html.HtmlInput; | ||
7 | +import com.gargoylesoftware.htmlunit.html.HtmlPage; | ||
8 | +import com.gargoylesoftware.htmlunit.html.HtmlSpan; | ||
9 | +import org.junit.Assert; | ||
10 | +import org.junit.Test; | ||
11 | + | ||
12 | +import java.io.IOException; | ||
13 | +import java.util.List; | ||
14 | + | ||
15 | +public class ClassDetailsTest { | ||
16 | + | ||
17 | + @Test | ||
18 | + public void openDetailsModalPanel() throws IOException { | ||
19 | + WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); | ||
20 | + HtmlPage page = login(client); | ||
21 | + @SuppressWarnings("unchecked") | ||
22 | + final List<HtmlSpan> titleElements = (List<HtmlSpan>) page.getElementById("results:schedule").getByXPath(".//span[@class='fc-event-title']"); | ||
23 | + Assert.assertNotSame(0, titleElements.size()); | ||
24 | + new RequestResponseLogger(client); | ||
25 | + page.addDomChangeListener(new DomChangeLogger()); | ||
26 | + WebClientUtils.waitForJSJob("initial javascript to finish", client, 0, 30000); | ||
27 | + System.out.println("item:" + titleElements.get(0).asText()); | ||
28 | + ((HtmlElement) titleElements.get(0).getParentNode()).mouseOver(); | ||
29 | + ((HtmlElement) titleElements.get(0).getParentNode()).click(); | ||
30 | + WebClientUtils.waitForJSJob("classDetailsModalPanel shown after schedule event clicked", client, 0, 30000); | ||
31 | + Assert.assertNotNull(page.getElementById("classDetailsModalPanelContainer")); | ||
32 | + } | ||
33 | + | ||
34 | + @Test | ||
35 | + public void closeDetailsModalPanel() throws IOException { | ||
36 | + WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); | ||
37 | + HtmlPage page = login(client); | ||
38 | + @SuppressWarnings("unchecked") | ||
39 | + final List<HtmlSpan> titleElements = (List<HtmlSpan>) page.getElementById("results:schedule").getByXPath(".//span[@class='fc-event-title']"); | ||
40 | + Assert.assertNotSame(0, titleElements.size()); | ||
41 | +// new RequestResponseLogger(client); | ||
42 | +// page.addDomChangeListener(new DomChangeLogger()); | ||
43 | + WebClientUtils.waitForJSJob("initial javascript to finish", client, 0, 30000); | ||
44 | + System.out.println("item:" + titleElements.get(0).asText()); | ||
45 | + ((HtmlElement) titleElements.get(0).getParentNode()).mouseOver(); | ||
46 | + ((HtmlElement) titleElements.get(0).getParentNode()).click(); | ||
47 | + WebClientUtils.waitForJSJob("classDetailsModalPanel shown after schedule event clicked", client, 0, 30000); | ||
48 | + Assert.assertNotNull(page.getElementById("classDetailsModalPanelContainer")); | ||
49 | + ((HtmlElement) page.getElementById("classDetailsModalPanelContainer").getByXPath("//*[contains(@src,'close.png')]").get(0)).click(); | ||
50 | + WebClientUtils.waitForJSJob("classDetailsModalPanel hidden after cancel button", client, 0, 30000); | ||
51 | + Assert.assertNull(page.getElementById("classDetailsModalPanelContainer")); | ||
52 | + } | ||
53 | + | ||
54 | + @Test | ||
55 | + public void removeClass() throws IOException { | ||
56 | + WebClient client = new WebClient(BrowserVersion.FIREFOX_2); | ||
57 | + final RequestResponseLogger requestResponseLogger = new RequestResponseLogger(client); | ||
58 | + requestResponseLogger.off(); | ||
59 | + HtmlPage page = login(client); | ||
60 | + @SuppressWarnings("unchecked") | ||
61 | + final List<HtmlSpan> titleElements = (List<HtmlSpan>) page.getElementById("results:schedule").getByXPath(".//span[@class='fc-event-title']"); | ||
62 | + Assert.assertEquals(6, titleElements.size()); | ||
63 | + Assert.assertNotSame(0, titleElements.size()); | ||
64 | + WebClientUtils.waitForJSJob("initial javascript to finish", client, 0, 30000); | ||
65 | + | ||
66 | + client.setAlertHandler(new AlertLogger()); | ||
67 | + final DomChangeLogger domChangeLogger = new DomChangeLogger(); | ||
68 | + domChangeLogger.showDetails("results:j_id2158"); | ||
69 | +// page.addDomChangeListener(domChangeLogger); | ||
70 | +// page.addHtmlAttsributeChangeListener(new HtmlAttributeChangeLogger()); | ||
71 | +// requestResponseLogger.on(); | ||
72 | + | ||
73 | + ((HtmlElement) titleElements.get(0).getParentNode()).mouseOver(); | ||
74 | + ((HtmlElement) titleElements.get(0).getParentNode()).click(); | ||
75 | + WebClientUtils.waitForJSJob("classDetailsModalPanel shown after schedule event clicked", client, 0, 30000); | ||
76 | + WebClientUtils.executeAjaxReRenderedScripts(page); | ||
77 | + Assert.assertNotNull(page.getElementById("classDetailsModalPanelContainer")); | ||
78 | + ((HtmlElement) page.getElementById("classDetailsModalPanelContainer").getByXPath("//*[contains(@src,'remove.png')]").get(0)).click(); | ||
79 | + WebClientUtils.waitForJSJob("classDetailsModalPanel hidden after remove button", client, 0, 30000); | ||
80 | + WebClientUtils.executeAjaxReRenderedScripts(page); | ||
81 | + WebClientUtils.waitForJSJob("schedule refresh", client, 0, 30000); | ||
82 | + Assert.assertNull(page.getElementById("classDetailsModalPanelContainer")); | ||
83 | + Assert.assertEquals(5, page.getElementById("results:schedule").getByXPath(".//span[@class='fc-event-title']").size()); | ||
84 | + } | ||
85 | + | ||
86 | + private HtmlPage login(WebClient client) throws IOException { | ||
87 | + HtmlPage page = (HtmlPage) client.getPage("http://localhost:8080/schoolmanager/view/class/current.seam?networkId=salsafactory"); | ||
88 | + ((HtmlInput) page.getElementById("loginForm:email")).setValueAttribute("it.crowd.test@gmail.com"); | ||
89 | + ((HtmlInput) page.getElementById("loginForm:password")).setValueAttribute("aaaaa"); | ||
90 | + HtmlPage oldPage = page; | ||
91 | + page = page.getElementById("loginForm:submit").click(); | ||
92 | +// This assert would fail (when page redidrects than you need to obtain new page) | ||
93 | +// Assert.assertEquals(page,oldPage); | ||
94 | + Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); | ||
95 | + return page; | ||
96 | + } | ||
97 | +} |
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.CollectingAlertHandler; | ||
4 | import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController; | 5 | import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController; |
5 | import com.gargoylesoftware.htmlunit.WebClient; | 6 | import com.gargoylesoftware.htmlunit.WebClient; |
6 | import com.gargoylesoftware.htmlunit.html.HtmlPage; | 7 | import com.gargoylesoftware.htmlunit.html.HtmlPage; |
@@ -8,11 +9,12 @@ import org.junit.Assert; | @@ -8,11 +9,12 @@ import org.junit.Assert; | ||
8 | import org.junit.Test; | 9 | import org.junit.Test; |
9 | 10 | ||
10 | import java.io.IOException; | 11 | import java.io.IOException; |
12 | +import java.util.ArrayList; | ||
11 | 13 | ||
12 | public class SandboxTest { | 14 | public class SandboxTest { |
13 | 15 | ||
14 | @Test | 16 | @Test |
15 | - public void test() throws IOException { | 17 | + public void testClickImage() throws IOException { |
16 | final WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); | 18 | final WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); |
17 | client.setAjaxController(new NicelyResynchronizingAjaxController()); | 19 | client.setAjaxController(new NicelyResynchronizingAjaxController()); |
18 | HtmlPage page = (HtmlPage) client.getPage("file:./target/test-classes/sandbox.html"); | 20 | HtmlPage page = (HtmlPage) client.getPage("file:./target/test-classes/sandbox.html"); |
@@ -20,4 +22,23 @@ public class SandboxTest { | @@ -20,4 +22,23 @@ public class SandboxTest { | ||
20 | page.getElementById("close").click(); | 22 | page.getElementById("close").click(); |
21 | Assert.assertEquals("", page.getElementById("elementToHide").asText()); | 23 | Assert.assertEquals("", page.getElementById("elementToHide").asText()); |
22 | } | 24 | } |
25 | + | ||
26 | + @Test | ||
27 | + public void testClickJQueryBoundElement() throws IOException { | ||
28 | + final WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); | ||
29 | + client.setAjaxController(new NicelyResynchronizingAjaxController()); | ||
30 | + HtmlPage page = (HtmlPage) client.getPage("file:./target/test-classes/sandbox.html"); | ||
31 | + final ArrayList<String> alerts = new ArrayList<String>(); | ||
32 | + client.setAlertHandler(new CollectingAlertHandler(alerts)); | ||
33 | + page.getElementById("clickable").click(); | ||
34 | + System.out.println(alerts); | ||
35 | + Assert.assertEquals(1, alerts.size()); | ||
36 | + Assert.assertEquals("Clicked clickable", alerts.get(0)); | ||
37 | + | ||
38 | + alerts.clear(); | ||
39 | + page.getElementById("clickable2child").click(); | ||
40 | + System.out.println(alerts); | ||
41 | + Assert.assertEquals(1, alerts.size()); | ||
42 | + Assert.assertEquals("Clicked clickable2", alerts.get(0)); | ||
43 | + } | ||
23 | } | 44 | } |
@@ -30,7 +30,7 @@ public class ScheduleTest { | @@ -30,7 +30,7 @@ public class ScheduleTest { | ||
30 | for (HtmlSpan o : titleElements) { | 30 | for (HtmlSpan o : titleElements) { |
31 | titles.add(o.asText()); | 31 | titles.add(o.asText()); |
32 | } | 32 | } |
33 | - Assert.assertEquals(4, titles.size()); | 33 | + Assert.assertEquals(6, titles.size()); |
34 | } | 34 | } |
35 | 35 | ||
36 | @Test | 36 | @Test |
@@ -58,7 +58,6 @@ public class ScheduleTest { | @@ -58,7 +58,6 @@ public class ScheduleTest { | ||
58 | System.out.println("Success!"); | 58 | System.out.println("Success!"); |
59 | 59 | ||
60 | 60 | ||
61 | -// page = (HtmlPage) client.getPage("http://localhost:8080/schoolmanager/view/class/current.seam?networkId=salsafactory"); | ||
62 | WebClientUtils.waitForJSJob(client, 0, 30000); | 61 | WebClientUtils.waitForJSJob(client, 0, 30000); |
63 | Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); | 62 | Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); |
64 | studentInput = (HtmlInput) page.getElementById("searchClass:student_i"); | 63 | studentInput = (HtmlInput) page.getElementById("searchClass:student_i"); |
@@ -66,7 +65,6 @@ public class ScheduleTest { | @@ -66,7 +65,6 @@ public class ScheduleTest { | ||
66 | studentInput.type('l'); | 65 | studentInput.type('l'); |
67 | studentInput.type('i'); | 66 | studentInput.type('i'); |
68 | Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); | 67 | Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page); |
69 | -// WebClientUtils.forceWait(2000); | ||
70 | // Here the suggestionBox is still hidden | 68 | // Here the suggestionBox is still hidden |
71 | WebClientUtils.waitForJSJob(client, 0, 30000); | 69 | WebClientUtils.waitForJSJob(client, 0, 30000); |
72 | // Here suggestionBox is visible | 70 | // Here suggestionBox is visible |
@@ -138,7 +136,7 @@ public class ScheduleTest { | @@ -138,7 +136,7 @@ public class ScheduleTest { | ||
138 | 136 | ||
139 | private HtmlPage login(WebClient client) throws IOException { | 137 | private HtmlPage login(WebClient client) throws IOException { |
140 | HtmlPage page = (HtmlPage) client.getPage("http://localhost:8080/schoolmanager/view/class/current.seam?networkId=salsafactory"); | 138 | 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"); | 139 | + ((HtmlInput) page.getElementById("loginForm:email")).setValueAttribute("it.crowd.test@gmail.com"); |
142 | ((HtmlInput) page.getElementById("loginForm:password")).setValueAttribute("aaaaa"); | 140 | ((HtmlInput) page.getElementById("loginForm:password")).setValueAttribute("aaaaa"); |
143 | HtmlPage oldPage = page; | 141 | HtmlPage oldPage = page; |
144 | page = page.getElementById("loginForm:submit").click(); | 142 | page = page.getElementById("loginForm:submit").click(); |
src/test/resources/jquery-1.3.2.js
0 → 100644
This diff could not be displayed because it is too large.
@@ -3,10 +3,28 @@ | @@ -3,10 +3,28 @@ | ||
3 | <html> | 3 | <html> |
4 | <head> | 4 | <head> |
5 | <title></title> | 5 | <title></title> |
6 | + <script type="text/javascript" src="jquery-1.3.2.js"></script> | ||
7 | + <script type="text/javascript"> | ||
8 | + jQuery(function() { | ||
9 | + jQuery("#clickable").click(function() { | ||
10 | + alert("Clicked " + this.id); | ||
11 | + }); | ||
12 | + jQuery("#clickable2").click(function() { | ||
13 | + alert("Clicked " + this.id); | ||
14 | + }); | ||
15 | + }); | ||
16 | + </script> | ||
6 | </head> | 17 | </head> |
7 | <body> | 18 | <body> |
8 | <img id="close" onclick="var e = document.getElementById('elementToHide');e.removeChild(e.firstChild)" alt="close"/> | 19 | <img id="close" onclick="var e = document.getElementById('elementToHide');e.removeChild(e.firstChild)" alt="close"/> |
9 | 20 | ||
10 | <div id="elementToHide">elementToHide</div> | 21 | <div id="elementToHide">elementToHide</div> |
22 | + | ||
23 | +<div id="clickable">Click me</div> | ||
24 | +<div id="clickable2"> | ||
25 | + <a> | ||
26 | + <span id="clickable2child">Clickable child</span> | ||
27 | + </a> | ||
28 | +</div> | ||
11 | </body> | 29 | </body> |
12 | </html> | 30 | </html> |
Please
register
or
login
to post a comment