1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.javascript.host.html;
16
17 import java.net.URL;
18
19 import org.htmlunit.WebDriverTestCase;
20 import org.htmlunit.junit.BrowserRunner;
21 import org.htmlunit.junit.annotation.Alerts;
22 import org.htmlunit.junit.annotation.HtmlUnitNYI;
23 import org.htmlunit.util.MimeType;
24 import org.junit.Test;
25 import org.junit.runner.RunWith;
26 import org.openqa.selenium.By;
27 import org.openqa.selenium.WebDriver;
28
29
30
31
32
33
34
35
36 @RunWith(BrowserRunner.class)
37 public class HTMLIFrameElement2Test extends WebDriverTestCase {
38
39
40
41
42 @Test
43 @Alerts("loaded")
44 public void onLoad() throws Exception {
45 final String html = DOCTYPE_HTML
46 + "<html>\n"
47 + " <body>\n"
48 + " <script>\n"
49 + LOG_TITLE_FUNCTION
50 + " </script>\n"
51 + " <iframe id='i' onload='log(\"loaded\");' src='" + URL_SECOND + "'></iframe>\n"
52 + " </body>\n"
53 + "</html>";
54
55 final String html2 = DOCTYPE_HTML + "<html><body>foo</body></html>";
56 getMockWebConnection().setResponse(URL_SECOND, html2);
57
58 loadPageVerifyTitle2(html);
59 }
60
61
62
63
64 @Test
65 @Alerts("loaded")
66 public void onLoad_noSrc() throws Exception {
67 final String html = DOCTYPE_HTML
68 + "<html>\n"
69 + " <body>\n"
70 + " <script>\n"
71 + LOG_TITLE_FUNCTION
72 + " </script>\n"
73 + " <iframe id='i' onload='log(\"loaded\");'></iframe>\n"
74 + " </body>\n"
75 + "</html>";
76
77 loadPageVerifyTitle2(html);
78 }
79
80
81
82
83 @Test
84 @Alerts("loaded")
85 public void documentWrite_onLoad() throws Exception {
86 final String html = DOCTYPE_HTML
87 + "<html>\n"
88 + "<body>\n"
89 + "<script>\n"
90 + LOG_TITLE_FUNCTION
91 + "document.write(\"<iframe id='i' onload='log(\\\"loaded\\\");' src='" + URL_SECOND + "'></iframe>\");\n"
92 + "</script>\n"
93 + "</body>\n"
94 + "</html>";
95 final String html2 = DOCTYPE_HTML + "<html><body>foo</body></html>";
96 getMockWebConnection().setResponse(URL_SECOND, html2);
97
98 loadPageVerifyTitle2(html);
99 }
100
101
102
103
104 @Test
105 @Alerts("loaded")
106 public void documentWrite_onLoad_noSrc() throws Exception {
107 final String html = DOCTYPE_HTML
108 + "<html>\n"
109 + " <body>\n"
110 + " <script>\n"
111 + LOG_TITLE_FUNCTION
112 + " document.write(\"<iframe id='i' onload='log(\\\"loaded\\\");'></iframe>\");\n"
113 + " </script>\n"
114 + " </body>\n"
115 + "</html>";
116
117 loadPageVerifyTitle2(html);
118 }
119
120
121
122
123 @Test
124 @Alerts({"loaded", "foo"})
125 public void documentCreateElement_onLoad() throws Exception {
126 final String html = DOCTYPE_HTML
127 + "<html>\n"
128 + "<head><script type='text/javascript'>\n"
129 + LOG_TITLE_FUNCTION
130 + " function handleFrameLoad() {\n"
131 + " log('loaded');\n"
132 + " var myFrame = document.getElementById('myFrame');\n"
133 + " log(myFrame.contentWindow.document.body.innerHTML);\n"
134 + " }\n"
135 + "</script></head>\n"
136
137 + " <body>\n"
138 + " <script>\n"
139 + " var myFrame = document.createElement('iframe');\n"
140 + " myFrame.id = 'myFrame';\n"
141 + " myFrame.src = '" + URL_SECOND + "';\n"
142 + " myFrame.onload = handleFrameLoad;\n"
143 + " var body = document.getElementsByTagName('body')[0];\n"
144 + " body.appendChild(myFrame);\n"
145 + " </script>\n"
146 + " </body>\n"
147 + "</html>";
148 final String html2 = DOCTYPE_HTML + "<html><body>foo</body></html>";
149 getMockWebConnection().setResponse(URL_SECOND, html2);
150
151 loadPageVerifyTitle2(html);
152 }
153
154
155
156
157 @Test
158 @Alerts({"loaded", ""})
159 public void documentCreateElement_onLoad_noSrc() throws Exception {
160 final String html = DOCTYPE_HTML
161 + "<html>\n"
162 + "<head><script type='text/javascript'>\n"
163 + LOG_TITLE_FUNCTION
164 + " function handleFrameLoad() {\n"
165 + " log('loaded');\n"
166 + " var myFrame = document.getElementById('myFrame');\n"
167 + " log(myFrame.contentWindow.document.body.innerHTML);\n"
168 + " }\n"
169 + "</script></head>\n"
170
171 + " <body>\n"
172 + " <script>\n"
173 + " var myFrame = document.createElement('iframe');\n"
174 + " myFrame.id = 'myFrame';\n"
175 + " myFrame.onload = handleFrameLoad;\n"
176 + " var body = document.getElementsByTagName('body')[0];\n"
177 + " body.appendChild(myFrame);\n"
178 + " </script>\n"
179 + " </body>\n"
180 + "</html>";
181
182 loadPageVerifyTitle2(html);
183 }
184
185
186
187
188 @Test
189 @Alerts({"createIFrame", "loaded", "foo"})
190 public void documentCreateElement_onLoad2() throws Exception {
191 final String html = DOCTYPE_HTML
192 + "<html>\n"
193 + "<head><script type='text/javascript'>\n"
194 + LOG_TITLE_FUNCTION
195 + " function createIFrame() {\n"
196 + " log('createIFrame');\n"
197 + " var myFrame = document.createElement('iframe');\n"
198 + " myFrame.id = 'myFrame';\n"
199 + " myFrame.src = '" + URL_SECOND + "';\n"
200 + " myFrame.onload = handleFrameLoad;\n"
201 + " var body = document.getElementsByTagName('body')[0];\n"
202 + " body.appendChild(myFrame);\n"
203 + " }\n"
204 + " function handleFrameLoad() {\n"
205 + " log('loaded');\n"
206 + " var myFrame = document.getElementById('myFrame');\n"
207 + " log(myFrame.contentWindow.document.body.innerHTML);\n"
208 + " }\n"
209 + "</script></head>\n"
210
211 + " <body onload='createIFrame();' >\n"
212 + " </body>\n"
213 + "</html>";
214 final String html2 = DOCTYPE_HTML + "<html><body>foo</body></html>";
215 getMockWebConnection().setResponse(URL_SECOND, html2);
216
217 loadPage2(html);
218 verifyTitle2(DEFAULT_WAIT_TIME, getWebDriver(), getExpectedAlerts());
219 }
220
221
222
223
224 @Test
225 @Alerts({"createIFrame", "loaded", ""})
226 public void documentCreateElement_onLoad2_noSrc() throws Exception {
227 final String html = DOCTYPE_HTML
228 + "<html>\n"
229 + "<head><script type='text/javascript'>\n"
230 + LOG_TITLE_FUNCTION
231 + " function createIFrame() {\n"
232 + " log('createIFrame');\n"
233 + " var myFrame = document.createElement('iframe');\n"
234 + " myFrame.id = 'myFrame';\n"
235 + " myFrame.onload = handleFrameLoad;\n"
236 + " var body = document.getElementsByTagName('body')[0];\n"
237 + " body.appendChild(myFrame);\n"
238 + " }\n"
239 + " function handleFrameLoad() {\n"
240 + " log('loaded');\n"
241 + " var myFrame = document.getElementById('myFrame');\n"
242 + " log(myFrame.contentWindow.document.body.innerHTML);\n"
243 + " }\n"
244 + "</script></head>\n"
245
246 + " <body onload='createIFrame();' >\n"
247 + " </body>\n"
248 + "</html>";
249
250 loadPageVerifyTitle2(html);
251 }
252
253
254
255
256
257 @Test
258 @Alerts("created")
259 public void documentCreateElement_noAppendNoLoad() throws Exception {
260 final String html = DOCTYPE_HTML
261 + "<html><body><script>\n"
262 + LOG_TITLE_FUNCTION
263 + "var myFrame = document.createElement('iframe');\n"
264 + "myFrame.src = 'notExisting.html';\n"
265 + "log('created');\n"
266 + "</script></body></html>";
267
268 loadPageVerifyTitle2(html);
269 assertEquals(1, getMockWebConnection().getRequestCount());
270 }
271
272
273
274
275
276 @Test
277 @Alerts({"createIFrame", "loaded"})
278 public void documentCreateElement_iFrameInsideDiv() throws Exception {
279 final String html = DOCTYPE_HTML
280 + "<html>\n"
281 + "<head><script type='text/javascript'>\n"
282 + LOG_TITLE_FUNCTION
283 + " function createIFrame() {\n"
284 + " log('createIFrame');\n"
285 + " var content = document.getElementById('content');\n"
286 + " var newContent = document.createElement('div');\n"
287 + " newContent.innerHTML = '<iframe name=\"iFrame\" src=\"" + URL_SECOND + "\"></iframe>';\n"
288 + " content.appendChild(newContent);\n"
289 + " }\n"
290 + "</script></head>\n"
291
292 + " <body>\n"
293 + " <div id='content'>content</div>\n"
294 + " <a id='test' onclick='createIFrame();'>insert frame</a>\n"
295 + " </body>\n"
296 + "</html>";
297 final String html2 = DOCTYPE_HTML
298 + "<html><body>"
299 + "<script>window.parent.document.title += 'loaded\\u00a7';</script></body></html>";
300 getMockWebConnection().setResponse(URL_SECOND, html2);
301
302 final WebDriver driver = loadPage2(html);
303
304 driver.findElement(By.id("test")).click();
305
306 verifyTitle2(driver, getExpectedAlerts());
307 assertEquals(2, getMockWebConnection().getRequestCount());
308 }
309
310
311
312
313 @Test
314 @Alerts({"createIFrame", "loaded", "foo"})
315 public void documentCreateElement_onLoad3() throws Exception {
316 final String html = DOCTYPE_HTML
317 + "<html>\n"
318 + "<head><script type='text/javascript'>\n"
319 + LOG_TITLE_FUNCTION
320 + " function createIFrame() {\n"
321 + " log('createIFrame');\n"
322 + " var myFrame = document.createElement('iframe');\n"
323 + " myFrame.id = 'myFrame';\n"
324 + " myFrame.onload = handleFrameLoad;\n"
325 + " myFrame.src = '" + URL_SECOND + "';\n"
326 + " var body = document.getElementsByTagName('body')[0];\n"
327 + " body.appendChild(myFrame);\n"
328 + " }\n"
329 + " function handleFrameLoad() {\n"
330 + " log('loaded');\n"
331 + " var myFrame = document.getElementById('myFrame');\n"
332 + " log(myFrame.contentWindow.document.body.innerHTML);\n"
333 + " }\n"
334 + "</script></head>\n"
335
336 + " <body onload='createIFrame();' >\n"
337 + " </body>\n"
338 + "</html>";
339 final String html2 = DOCTYPE_HTML + "<html><body>foo</body></html>";
340 getMockWebConnection().setResponse(URL_SECOND, html2);
341
342 loadPage2(html);
343 verifyTitle2(DEFAULT_WAIT_TIME, getWebDriver(), getExpectedAlerts());
344 }
345
346
347
348
349 @Test
350 @Alerts({"createIFrame", "loaded", ""})
351 public void documentCreateElement_onLoad3_noSrc() throws Exception {
352 final String html = DOCTYPE_HTML
353 + "<html>\n"
354 + "<head><script type='text/javascript'>\n"
355 + LOG_TITLE_FUNCTION
356 + " function createIFrame() {\n"
357 + " log('createIFrame');\n"
358 + " var myFrame = document.createElement('iframe');\n"
359 + " myFrame.id = 'myFrame';\n"
360 + " myFrame.onload = handleFrameLoad;\n"
361 + " var body = document.getElementsByTagName('body')[0];\n"
362 + " body.appendChild(myFrame);\n"
363 + " }\n"
364 + " function handleFrameLoad() {\n"
365 + " log('loaded');\n"
366 + " var myFrame = document.getElementById('myFrame');\n"
367 + " log(myFrame.contentWindow.document.body.innerHTML);\n"
368 + " }\n"
369 + "</script></head>\n"
370
371 + " <body onload='createIFrame();' >\n"
372 + " </body>\n"
373 + "</html>";
374
375 loadPageVerifyTitle2(html);
376 }
377
378
379
380
381 @Test
382 public void documentFragmentCreateElement_onLoad() throws Exception {
383 final String html = DOCTYPE_HTML
384 + "<html>\n"
385 + "<head><script type='text/javascript'>\n"
386 + LOG_TITLE_FUNCTION
387 + " function handleFrameLoad() {\n"
388 + " log('loaded');\n"
389 + " }\n"
390 + "</script></head>\n"
391
392 + " <body>\n"
393 + " <script>\n"
394 + " var myFrame = document.createElement('iframe');\n"
395 + " myFrame.id = 'myFrame';\n"
396 + " myFrame.src = '" + URL_SECOND + "';\n"
397 + " myFrame.onload = handleFrameLoad;\n"
398 + " var fragment = document.createDocumentFragment();\n"
399 + " fragment.appendChild(myFrame);\n"
400 + " </script>\n"
401 + " </body>\n"
402 + "</html>";
403 final String html2 = DOCTYPE_HTML + "<html><body>foo</body></html>";
404 getMockWebConnection().setResponse(URL_SECOND, html2);
405
406 loadPageVerifyTitle2(html);
407 }
408
409
410
411
412 @Test
413 public void documentFragmentCreateElement_onLoad_noSrc() throws Exception {
414 final String html =
415 "<html>\n"
416 + "<head><script type='text/javascript'>\n"
417 + LOG_TITLE_FUNCTION
418 + " function handleFrameLoad() {\n"
419 + " log('loaded');\n"
420 + " }\n"
421 + "</script></head>\n"
422
423 + " <body>\n"
424 + " <script>\n"
425 + " var myFrame = document.createElement('iframe');\n"
426 + " myFrame.id = 'myFrame';\n"
427 + " myFrame.onload = handleFrameLoad;\n"
428 + " var fragment = document.createDocumentFragment();\n"
429 + " fragment.appendChild(myFrame);\n"
430 + " </script>\n"
431 + " </body>\n"
432 + "</html>";
433
434 loadPageVerifyTitle2(html);
435 }
436
437
438
439
440 @Test
441 @Alerts("createIFrame")
442 public void documentFragmentCreateElement_onLoad2() throws Exception {
443 final String html = DOCTYPE_HTML
444 + "<html>\n"
445 + "<head><script type='text/javascript'>\n"
446 + LOG_TITLE_FUNCTION
447 + " function createIFrame() {\n"
448 + " log('createIFrame');\n"
449 + " var myFrame = document.createElement('iframe');\n"
450 + " myFrame.id = 'myFrame';\n"
451 + " myFrame.src = '" + URL_SECOND + "';\n"
452 + " myFrame.onload = handleFrameLoad;\n"
453 + " var fragment = document.createDocumentFragment();\n"
454 + " fragment.appendChild(myFrame);\n"
455 + " }\n"
456 + " function handleFrameLoad() {\n"
457 + " log('loaded');\n"
458 + " }\n"
459 + "</script></head>\n"
460
461 + " <body onload='createIFrame();' >\n"
462 + " </body>\n"
463 + "</html>";
464 final String html2 = DOCTYPE_HTML + "<html><body>foo</body></html>";
465 getMockWebConnection().setResponse(URL_SECOND, html2);
466
467 loadPageVerifyTitle2(html);
468 }
469
470
471
472
473 @Test
474 @Alerts("createIFrame")
475 public void documentFragmentCreateElement_onLoad2_noSrc() throws Exception {
476 final String html = DOCTYPE_HTML
477 + "<html>\n"
478 + "<head><script type='text/javascript'>\n"
479 + LOG_TITLE_FUNCTION
480 + " function createIFrame() {\n"
481 + " log('createIFrame');\n"
482 + " var myFrame = document.createElement('iframe');\n"
483 + " myFrame.id = 'myFrame';\n"
484 + " myFrame.onload = handleFrameLoad;\n"
485 + " var fragment = document.createDocumentFragment();\n"
486 + " fragment.appendChild(myFrame);\n"
487 + " }\n"
488 + " function handleFrameLoad() {\n"
489 + " log('loaded');\n"
490 + " }\n"
491 + "</script></head>\n"
492
493 + " <body onload='createIFrame();' >\n"
494 + " </body>\n"
495 + "</html>";
496
497 loadPageVerifyTitle2(html);
498 }
499
500
501
502
503 @Test
504 @Alerts("createIFrame")
505 public void documentFragmentCreateElement_onLoad3() throws Exception {
506 final String html = DOCTYPE_HTML
507 + "<html>\n"
508 + "<head><script type='text/javascript'>\n"
509 + LOG_TITLE_FUNCTION
510 + " function createIFrame() {\n"
511 + " log('createIFrame');\n"
512 + " var myFrame = document.createElement('iframe');\n"
513 + " myFrame.id = 'myFrame';\n"
514 + " myFrame.onload = handleFrameLoad;\n"
515 + " myFrame.src = '" + URL_SECOND + "';\n"
516 + " var fragment = document.createDocumentFragment();\n"
517 + " fragment.appendChild(myFrame);\n"
518 + " }\n"
519 + " function handleFrameLoad() {\n"
520 + " log('loaded');\n"
521 + " }\n"
522 + "</script></head>\n"
523
524 + " <body onload='createIFrame();' >\n"
525 + " </body>\n"
526 + "</html>";
527 final String html2 = DOCTYPE_HTML + "<html><body>foo</body></html>";
528 getMockWebConnection().setResponse(URL_SECOND, html2);
529
530 loadPageVerifyTitle2(html);
531 }
532
533
534
535
536 @Test
537 @Alerts({"createIFrame", "loaded"})
538 public void documentCreateElement_onLoad_srcAboutBlank() throws Exception {
539 documentCreateElement_onLoad_srcX("about:blank");
540 }
541
542
543
544
545 @Test
546 @Alerts({"createIFrame", "loaded"})
547 public void documentCreateElement_onLoad_srcSomePage() throws Exception {
548 documentCreateElement_onLoad_srcX("foo.html");
549 }
550
551 private void documentCreateElement_onLoad_srcX(final String iframeSrc) throws Exception {
552 final String html = DOCTYPE_HTML
553 + "<html><body><script>\n"
554 + LOG_TITLE_FUNCTION
555 + "function createIFrame() {\n"
556 + " log('createIFrame');\n"
557 + " var myFrame = document.createElement('iframe');\n"
558 + " myFrame.onload = handleFrameLoad;\n"
559 + " myFrame.src = '" + iframeSrc + "';\n"
560 + " document.body.appendChild(myFrame);\n"
561 + "}\n"
562 + "function handleFrameLoad() {\n"
563 + " log('loaded');\n"
564 + "}\n"
565 + "</script>\n"
566 + "<button id='it' onclick='createIFrame()'>click me</button>\n"
567 + "</body></html>";
568
569 getMockWebConnection().setDefaultResponse("");
570 final WebDriver driver = loadPage2(html);
571 driver.findElement(By.id("it")).click();
572 if (useRealBrowser()) {
573 Thread.sleep(400);
574 }
575
576 verifyTitle2(driver, getExpectedAlerts());
577 }
578
579
580
581
582 @Test
583 @Alerts("createIFrame")
584 public void documentFragmentCreateElement_onLoad3_noSrc() throws Exception {
585 final String html = DOCTYPE_HTML
586 + "<html>\n"
587 + "<head><script type='text/javascript'>\n"
588 + LOG_TITLE_FUNCTION
589 + " function createIFrame() {\n"
590 + " log('createIFrame');\n"
591 + " var myFrame = document.createElement('iframe');\n"
592 + " myFrame.id = 'myFrame';\n"
593 + " myFrame.onload = handleFrameLoad;\n"
594 + " var fragment = document.createDocumentFragment();\n"
595 + " fragment.appendChild(myFrame);\n"
596 + " }\n"
597 + " function handleFrameLoad() {\n"
598 + " log('loaded');\n"
599 + " }\n"
600 + "</script></head>\n"
601
602 + " <body onload='createIFrame();' >\n"
603 + " </body>\n"
604 + "</html>";
605
606 loadPageVerifyTitle2(html);
607 }
608
609
610
611
612 @Test
613 @Alerts({"fragment append done", "loaded"})
614 public void documentDocumentFragmentCreateElement_onLoad() throws Exception {
615 final String html = DOCTYPE_HTML
616 + "<html>\n"
617 + "<head><script type='text/javascript'>\n"
618 + LOG_TITLE_FUNCTION
619 + " function handleFrameLoad() {\n"
620 + " log('loaded');\n"
621 + " }\n"
622 + "</script></head>\n"
623
624 + " <body>\n"
625 + " <script>\n"
626 + " var myFrame = document.createElement('iframe');\n"
627 + " myFrame.id = 'myFrame';\n"
628 + " myFrame.src = '" + URL_SECOND + "';\n"
629 + " myFrame.onload = handleFrameLoad;\n"
630 + " var fragment = document.createDocumentFragment();\n"
631 + " fragment.appendChild(myFrame);\n"
632 + " log('fragment append done');\n"
633 + " var body = document.getElementsByTagName('body')[0];\n"
634 + " body.appendChild(myFrame);\n"
635 + " </script>\n"
636 + " </body>\n"
637 + "</html>";
638 final String html2 = DOCTYPE_HTML + "<html><body>foo</body></html>";
639 getMockWebConnection().setResponse(URL_SECOND, html2);
640
641 loadPageVerifyTitle2(html);
642 }
643
644
645
646
647 @Test
648 @Alerts({"fragment append done", "loaded"})
649 public void documentDocumentFragmentCreateElement_onLoad_noSrc() throws Exception {
650 final String html = DOCTYPE_HTML
651 + "<html>\n"
652 + "<head><script type='text/javascript'>\n"
653 + LOG_TITLE_FUNCTION
654 + " function handleFrameLoad() {\n"
655 + " log('loaded');\n"
656 + " }\n"
657 + "</script></head>\n"
658
659 + " <body>\n"
660 + " <script>\n"
661 + " var myFrame = document.createElement('iframe');\n"
662 + " myFrame.id = 'myFrame';\n"
663 + " myFrame.onload = handleFrameLoad;\n"
664 + " var fragment = document.createDocumentFragment();\n"
665 + " fragment.appendChild(myFrame);\n"
666 + " log('fragment append done');\n"
667 + " var body = document.getElementsByTagName('body')[0];\n"
668 + " body.appendChild(myFrame);\n"
669 + " </script>\n"
670 + " </body>\n"
671 + "</html>";
672
673 loadPageVerifyTitle2(html);
674 }
675
676
677
678
679 @Test
680 @Alerts({"createIFrame", "fragment append done", "loaded"})
681 public void documentDocumentFragmentCreateElement_onLoad2() throws Exception {
682 final String html = DOCTYPE_HTML
683 + "<html>\n"
684 + "<head><script type='text/javascript'>\n"
685 + LOG_TITLE_FUNCTION
686 + " function createIFrame() {\n"
687 + " log('createIFrame');\n"
688 + " var myFrame = document.createElement('iframe');\n"
689 + " myFrame.id = 'myFrame';\n"
690 + " myFrame.src = '" + URL_SECOND + "';\n"
691 + " myFrame.onload = handleFrameLoad;\n"
692 + " var fragment = document.createDocumentFragment();\n"
693 + " fragment.appendChild(myFrame);\n"
694 + " log('fragment append done');\n"
695 + " var body = document.getElementsByTagName('body')[0];\n"
696 + " body.appendChild(myFrame);\n"
697 + " }\n"
698 + " function handleFrameLoad() {\n"
699 + " log('loaded');\n"
700 + " }\n"
701 + "</script></head>\n"
702
703 + " <body onload='createIFrame();' >\n"
704 + " </body>\n"
705 + "</html>";
706 final String html2 = DOCTYPE_HTML + "<html><body>foo</body></html>";
707 getMockWebConnection().setResponse(URL_SECOND, html2);
708
709 loadPage2(html);
710 verifyTitle2(DEFAULT_WAIT_TIME, getWebDriver(), getExpectedAlerts());
711 }
712
713
714
715
716 @Test
717 @Alerts({"createIFrame", "fragment append done", "loaded"})
718 public void documentDocumentFragmentCreateElement_onLoad2_noSrc() throws Exception {
719 final String html = DOCTYPE_HTML
720 + "<html>\n"
721 + "<head><script type='text/javascript'>\n"
722 + LOG_TITLE_FUNCTION
723 + " function createIFrame() {\n"
724 + " log('createIFrame');\n"
725 + " var myFrame = document.createElement('iframe');\n"
726 + " myFrame.id = 'myFrame';\n"
727 + " myFrame.onload = handleFrameLoad;\n"
728 + " var fragment = document.createDocumentFragment();\n"
729 + " fragment.appendChild(myFrame);\n"
730 + " log('fragment append done');\n"
731 + " var body = document.getElementsByTagName('body')[0];\n"
732 + " body.appendChild(myFrame);\n"
733 + " }\n"
734 + " function handleFrameLoad() {\n"
735 + " log('loaded');\n"
736 + " }\n"
737 + "</script></head>\n"
738
739 + " <body onload='createIFrame();' >\n"
740 + " </body>\n"
741 + "</html>";
742
743 loadPageVerifyTitle2(html);
744 }
745
746
747
748
749 @Test
750 @Alerts({"createIFrame", "fragment append done", "loaded"})
751 public void documentDocumentFragmentCreateElement_onLoad3() throws Exception {
752 final String html = DOCTYPE_HTML
753 + "<html>\n"
754 + "<head><script type='text/javascript'>\n"
755 + LOG_TITLE_FUNCTION
756 + " function createIFrame() {\n"
757 + " log('createIFrame');\n"
758 + " var myFrame = document.createElement('iframe');\n"
759 + " myFrame.id = 'myFrame';\n"
760 + " myFrame.onload = handleFrameLoad;\n"
761 + " myFrame.src = '" + URL_SECOND + "';\n"
762 + " var fragment = document.createDocumentFragment();\n"
763 + " fragment.appendChild(myFrame);\n"
764 + " log('fragment append done');\n"
765 + " var body = document.getElementsByTagName('body')[0];\n"
766 + " body.appendChild(myFrame);\n"
767 + " }\n"
768 + " function handleFrameLoad() {\n"
769 + " log('loaded');\n"
770 + " }\n"
771 + "</script></head>\n"
772
773 + " <body onload='createIFrame();' >\n"
774 + " </body>\n"
775 + "</html>";
776 final String html2 = DOCTYPE_HTML + "<html><body>foo</body></html>";
777 getMockWebConnection().setResponse(URL_SECOND, html2);
778
779 loadPage2(html);
780 verifyTitle2(DEFAULT_WAIT_TIME, getWebDriver(), getExpectedAlerts());
781 }
782
783
784
785
786 @Test
787 @Alerts({"createIFrame", "fragment append done", "loaded"})
788 public void documentDocumentFragmentCreateElement_onLoad3_noSrc() throws Exception {
789 final String html = DOCTYPE_HTML
790 + "<html>\n"
791 + "<head><script type='text/javascript'>\n"
792 + LOG_TITLE_FUNCTION
793 + " function createIFrame() {\n"
794 + " log('createIFrame');\n"
795 + " var myFrame = document.createElement('iframe');\n"
796 + " myFrame.id = 'myFrame';\n"
797 + " myFrame.onload = handleFrameLoad;\n"
798 + " var fragment = document.createDocumentFragment();\n"
799 + " fragment.appendChild(myFrame);\n"
800 + " log('fragment append done');\n"
801 + " var body = document.getElementsByTagName('body')[0];\n"
802 + " body.appendChild(myFrame);\n"
803 + " }\n"
804 + " function handleFrameLoad() {\n"
805 + " log('loaded');\n"
806 + " }\n"
807 + "</script></head>\n"
808
809 + " <body onload='createIFrame();' >\n"
810 + " </body>\n"
811 + "</html>";
812
813 loadPage2(html);
814 verifyTitle2(DEFAULT_WAIT_TIME, getWebDriver(), getExpectedAlerts());
815 }
816
817
818
819
820 @Test
821 @Alerts({"left", "right", "bottom", "middle", "top", "wrong", ""})
822 public void getAlign() throws Exception {
823 final String html = DOCTYPE_HTML
824 + "<html><body>\n"
825 + " <iframe id='i1' align='left' ></iframe>\n"
826 + " <iframe id='i2' align='right' ></iframe>\n"
827 + " <iframe id='i3' align='bottom' ></iframe>\n"
828 + " <iframe id='i4' align='middle' ></iframe>\n"
829 + " <iframe id='i5' align='top' ></iframe>\n"
830 + " <iframe id='i6' align='wrong' ></iframe>\n"
831 + " <iframe id='i7' ></iframe>\n"
832
833 + "<script>\n"
834 + LOG_TITLE_FUNCTION
835 + " for (var i = 1; i <= 7; i++) {\n"
836 + " log(document.getElementById('i' + i).align);\n"
837 + " }\n"
838 + "</script>\n"
839 + "</body></html>";
840
841 loadPageVerifyTitle2(html);
842 }
843
844
845
846
847 @Test
848 @Alerts({"CenTer", "8", "foo", "left", "right", "bottom", "middle", "top"})
849 public void setAlign() throws Exception {
850 final String html = DOCTYPE_HTML
851 + "<html><body>\n"
852 + " <iframe id='i1' align='left' ></iframe>\n"
853
854 + "<script>\n"
855 + LOG_TITLE_FUNCTION
856 + " function setAlign(elem, value) {\n"
857 + " try {\n"
858 + " elem.align = value;\n"
859 + " } catch(e) { logEx(e); }\n"
860 + " log(elem.align);\n"
861 + " }\n"
862
863 + " var elem = document.getElementById('i1');\n"
864 + " setAlign(elem, 'CenTer');\n"
865
866 + " setAlign(elem, '8');\n"
867 + " setAlign(elem, 'foo');\n"
868
869 + " setAlign(elem, 'left');\n"
870 + " setAlign(elem, 'right');\n"
871 + " setAlign(elem, 'bottom');\n"
872 + " setAlign(elem, 'middle');\n"
873 + " setAlign(elem, 'top');\n"
874 + "</script>\n"
875 + "</body></html>";
876
877 loadPageVerifyTitle2(html);
878 }
879
880
881
882
883 @Test
884 @Alerts({"loaded", "loaded", "loaded"})
885 public void onLoadCalledEachTimeFrameContentChanges() throws Exception {
886 final String html = DOCTYPE_HTML
887 + "<html>\n"
888 + " <body>\n"
889 + " <script>\n"
890 + LOG_TITLE_FUNCTION
891 + " </script>\n"
892 + " <iframe id='testFrame' onload='log(\"loaded\");'></iframe>\n"
893 + " <div id='d1' onclick='i.contentWindow.location.replace(\"blah.html\")'>1</div>\n"
894 + " <div id='d2' onclick='i.contentWindow.location.href=\"blah.html\"'>2</div>\n"
895 + " <script>var i = document.getElementById('testFrame')</script>\n"
896 + " </body>\n"
897 + "</html>";
898
899 final String frameHtml = DOCTYPE_HTML + "<html><body>foo</body></html>";
900
901 getMockWebConnection().setDefaultResponse(frameHtml);
902
903 final WebDriver driver = loadPage2(html);
904 verifyTitle2(driver, getExpectedAlerts()[0]);
905 driver.findElement(By.id("d1")).click();
906 verifyTitle2(driver, new String[] {getExpectedAlerts()[0], getExpectedAlerts()[1]});
907 driver.findElement(By.id("d2")).click();
908 verifyTitle2(driver, getExpectedAlerts());
909 }
910
911
912
913
914 @Test
915 @Alerts({"about:blank", "§§URL§§", "§§URL§§"})
916 public void location() throws Exception {
917 final String html = DOCTYPE_HTML
918 + "<html>\n"
919 + "<head><script>\n"
920 + LOG_TITLE_FUNCTION
921 + " function test() {\n"
922 + " var myFrame = document.createElement('iframe');\n"
923 + " document.body.appendChild(myFrame);\n"
924 + " var win = myFrame.contentWindow;\n"
925 + " var doc = win.document;\n"
926 + " log(win.location);\n"
927 + " doc.open();\n"
928 + " log(win.location);\n"
929 + " doc.write('');\n"
930 + " doc.close();\n"
931 + " log(win.location);\n"
932 + " }\n"
933 + "</script></head>\n"
934 + " <body onload='test()'>\n"
935 + " </body>\n"
936 + "</html>";
937
938 expandExpectedAlertsVariables(URL_FIRST);
939 loadPage2(html);
940 verifyTitle2(DEFAULT_WAIT_TIME, getWebDriver(), getExpectedAlerts());
941 }
942
943
944
945
946 @Test
947 @Alerts({"loaded", "§§URL§§", "§§URL§§", "loaded", "about:blank"})
948 public void removeSourceAttribute() throws Exception {
949 final String html = DOCTYPE_HTML
950 + "<html>\n"
951 + "<head><script>\n"
952 + LOG_TEXTAREA_FUNCTION
953
954 + " function test() {\n"
955 + " var myFrame = document.getElementById('i');\n"
956 + " var win = myFrame.contentWindow;\n"
957 + " log(win.location);\n"
958
959 + " myFrame.removeAttribute('src');\n"
960 + " log(win.location);\n"
961 + " }\n"
962
963 + " function test2() {\n"
964 + " var myFrame = document.getElementById('i');\n"
965 + " var win = myFrame.contentWindow;\n"
966 + " log(win.location);\n"
967 + " }\n"
968 + "</script></head>\n"
969 + " <body>\n"
970 + " <iframe id='i' onload='log(\"loaded\");' src='" + URL_SECOND + "'></iframe>\n"
971
972 + LOG_TEXTAREA
973 + " <button id='clickMe' onclick='test()'>Click Me</button>\n"
974 + " <button id='clickMe2' onclick='test2()'>Click Me</button>\n"
975 + " </body>\n"
976 + "</html>";
977
978 final String html2 = DOCTYPE_HTML + "<html><body>foo</body></html>";
979 getMockWebConnection().setResponse(URL_SECOND, html2);
980
981 final WebDriver driver = loadPage2(html);
982 driver.findElement(By.id("clickMe")).click();
983 driver.findElement(By.id("clickMe2")).click();
984
985 expandExpectedAlertsVariables(URL_SECOND);
986 verifyTextArea2(driver, getExpectedAlerts());
987 }
988
989
990
991
992 @Test
993 @Alerts({"loaded", "§§URL§§", "[object HTMLDocument]", "http://localhost:22222/second/",
994 "1", "[object Window]", "[object HTMLDocument]", "http://localhost:22222/second/",
995 "0", "#[object Window]", "#[object HTMLDocument]", "http://localhost:22222/second/"})
996 public void detach() throws Exception {
997 final String html = DOCTYPE_HTML
998 + "<html>\n"
999 + "<head><script>\n"
1000 + LOG_TEXTAREA_FUNCTION
1001
1002 + " function test() {\n"
1003 + " var myFrame = document.getElementById('i');\n"
1004 + " var win = myFrame.contentWindow;\n"
1005 + " log(win.location);\n"
1006 + " log(win.document);\n"
1007 + " log(win.document.URL);\n"
1008 + " log(window.frames.length);\n"
1009
1010 + " myFrame.parentNode.removeChild(myFrame);\n"
1011 + " log(win);\n"
1012 + " log(win.document);\n"
1013 + " log(win.document.URL);\n"
1014 + " log(window.frames.length);\n"
1015
1016 + " window.setTimeout(function () "
1017 + "{ log('#' + win); log('#' + win.document); log(win.document.URL); }, 42);\n"
1018 + " }\n"
1019
1020 + "</script></head>\n"
1021 + " <body>\n"
1022 + " <iframe id='i' onload='log(\"loaded\");' src='" + URL_SECOND + "'></iframe>\n"
1023
1024 + LOG_TEXTAREA
1025 + " <button id='clickMe' onclick='test()'>Click Me</button>\n"
1026 + " </body>\n"
1027 + "</html>";
1028
1029 final String html2 = DOCTYPE_HTML + "<html><body>foo</body></html>";
1030 getMockWebConnection().setResponse(URL_SECOND, html2);
1031
1032 final WebDriver driver = loadPage2(html);
1033 driver.findElement(By.id("clickMe")).click();
1034 Thread.sleep(200);
1035
1036 expandExpectedAlertsVariables(URL_SECOND);
1037 verifyTextArea2(driver, getExpectedAlerts());
1038 }
1039
1040
1041
1042
1043 @Test
1044 @Alerts({"iframe script", "loaded", "null", "[object Window]",
1045 "about:blank", "iframe script", "loaded"})
1046 @HtmlUnitNYI(CHROME = {"iframe script", "loaded", "null", "loaded", "[object Window]",
1047 "about:blank", "iframe script", "loaded"},
1048 EDGE = {"iframe script", "loaded", "null", "loaded", "[object Window]",
1049 "about:blank", "iframe script", "loaded"},
1050 FF = {"iframe script", "loaded", "null", "loaded", "[object Window]",
1051 "about:blank", "iframe script", "loaded"},
1052 FF_ESR = {"iframe script", "loaded", "null", "loaded", "[object Window]",
1053 "about:blank", "iframe script", "loaded"})
1054 public void detachAppend() throws Exception {
1055 final String html = DOCTYPE_HTML
1056 + "<html>\n"
1057 + "<head><script>\n"
1058 + LOG_TEXTAREA_FUNCTION
1059
1060 + " function test() {\n"
1061 + " var myFrame = document.getElementById('i');\n"
1062
1063 + " var parent = myFrame.parentNode;\n"
1064 + " parent.removeChild(myFrame);\n"
1065 + " log(myFrame.contentWindow);\n"
1066
1067 + " parent.appendChild(myFrame);\n"
1068 + " log(myFrame.contentWindow);\n"
1069 + " log(myFrame.contentWindow.location);\n"
1070 + " }\n"
1071
1072 + "</script></head>\n"
1073 + " <body>\n"
1074 + " <iframe id='i' onload='log(\"loaded\");' src='" + URL_SECOND + "'></iframe>\n"
1075
1076 + LOG_TEXTAREA
1077 + " <button id='clickMe' onclick='test()'>Click Me</button>\n"
1078 + " </body>\n"
1079 + "</html>";
1080
1081 final String html2 = DOCTYPE_HTML
1082 + "<html><body>foo<script>parent.log('iframe script');</script></body></html>";
1083 getMockWebConnection().setResponse(URL_SECOND, html2);
1084
1085 final WebDriver driver = loadPage2(html);
1086 Thread.sleep(DEFAULT_WAIT_TIME.toMillis());
1087 final int start = getMockWebConnection().getRequestCount();
1088
1089 driver.findElement(By.id("clickMe")).click();
1090 Thread.sleep(DEFAULT_WAIT_TIME.toMillis());
1091
1092 assertEquals(1, getMockWebConnection().getRequestCount() - start);
1093
1094 expandExpectedAlertsVariables(URL_SECOND);
1095 verifyTextArea2(driver, getExpectedAlerts());
1096 }
1097
1098
1099
1100
1101 @Test
1102 @Alerts({"iframe external script", "loaded", "null", "[object Window]",
1103 "about:blank", "iframe external script", "loaded"})
1104 @HtmlUnitNYI(CHROME = {"iframe external script", "loaded", "null", "loaded", "[object Window]",
1105 "about:blank", "iframe external script", "loaded"},
1106 EDGE = {"iframe external script", "loaded", "null", "loaded", "[object Window]",
1107 "about:blank", "iframe external script", "loaded"},
1108 FF = {"iframe external script", "loaded", "null", "loaded", "[object Window]",
1109 "about:blank", "iframe external script", "loaded"},
1110 FF_ESR = {"iframe external script", "loaded", "null", "loaded", "[object Window]",
1111 "about:blank", "iframe external script", "loaded"})
1112 public void detachAppendExternalScript() throws Exception {
1113 final String html = DOCTYPE_HTML
1114 + "<html>\n"
1115 + "<head><script>\n"
1116 + LOG_TEXTAREA_FUNCTION
1117
1118 + " function test() {\n"
1119 + " var myFrame = document.getElementById('i');\n"
1120
1121 + " var parent = myFrame.parentNode;\n"
1122 + " parent.removeChild(myFrame);\n"
1123 + " log(myFrame.contentWindow);\n"
1124
1125 + " parent.appendChild(myFrame);\n"
1126 + " log(myFrame.contentWindow);\n"
1127 + " log(myFrame.contentWindow.location);\n"
1128 + " }\n"
1129
1130 + "</script></head>\n"
1131 + " <body>\n"
1132 + " <iframe id='i' onload='log(\"loaded\");' src='" + URL_SECOND + "'></iframe>\n"
1133
1134 + LOG_TEXTAREA
1135 + " <button id='clickMe' onclick='test()'>Click Me</button>\n"
1136 + " </body>\n"
1137 + "</html>";
1138
1139 final String html2 = DOCTYPE_HTML
1140 + "<html><body>foo<script src='"
1141 + URL_SECOND + "ext.js'></script></body></html>";
1142 getMockWebConnection().setResponse(URL_SECOND, html2);
1143 final String js = "parent.log('iframe external script');";
1144 getMockWebConnection().setResponse(new URL(URL_SECOND, "ext.js"), js, MimeType.TEXT_JAVASCRIPT);
1145
1146 final WebDriver driver = loadPage2(html);
1147 Thread.sleep(DEFAULT_WAIT_TIME.toMillis());
1148 final int start = getMockWebConnection().getRequestCount();
1149
1150 driver.findElement(By.id("clickMe")).click();
1151 Thread.sleep(DEFAULT_WAIT_TIME.toMillis());
1152
1153 assertEquals(2, getMockWebConnection().getRequestCount() - start);
1154
1155 expandExpectedAlertsVariables(URL_SECOND);
1156 verifyTextArea2(driver, getExpectedAlerts());
1157 }
1158 }