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