firewatir 1.6.5 → 1.6.6.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. data/CHANGES +461 -0
  2. data/LICENSE +31 -31
  3. data/README.rdoc +112 -0
  4. data/VERSION +1 -0
  5. data/lib/firewatir.rb +41 -40
  6. data/lib/firewatir/container.rb +491 -491
  7. data/lib/firewatir/document.rb +239 -239
  8. data/lib/firewatir/element.rb +1364 -1364
  9. data/lib/firewatir/element_collections.rb +314 -314
  10. data/lib/firewatir/elements/button.rb +15 -15
  11. data/lib/firewatir/elements/file_field.rb +29 -29
  12. data/lib/firewatir/elements/form.rb +40 -40
  13. data/lib/firewatir/elements/frame.rb +55 -55
  14. data/lib/firewatir/elements/hidden.rb +56 -56
  15. data/lib/firewatir/elements/image.rb +139 -139
  16. data/lib/firewatir/elements/input_element.rb +44 -44
  17. data/lib/firewatir/elements/link.rb +76 -76
  18. data/lib/firewatir/elements/non_control_element.rb +53 -53
  19. data/lib/firewatir/elements/non_control_elements.rb +108 -108
  20. data/lib/firewatir/elements/not_used.rb +278 -278
  21. data/lib/firewatir/elements/option.rb +130 -130
  22. data/lib/firewatir/elements/radio_check_common.rb +163 -163
  23. data/lib/firewatir/elements/select_list.rb +188 -188
  24. data/lib/firewatir/elements/table.rb +218 -218
  25. data/lib/firewatir/elements/table_cell.rb +54 -54
  26. data/lib/firewatir/elements/table_row.rb +100 -100
  27. data/lib/firewatir/elements/text_field.rb +218 -218
  28. data/lib/firewatir/exceptions.rb +10 -10
  29. data/lib/firewatir/firefox.rb +984 -1040
  30. data/lib/firewatir/jssh_socket.rb +100 -100
  31. data/lib/firewatir/winClicker.rb +122 -122
  32. data/lib/firewatir/x11.rb +192 -192
  33. data/rakefile.rb +15 -0
  34. data/unittests/attach_to_new_window_test.rb +49 -49
  35. data/unittests/bug_fixes_test.rb +195 -195
  36. data/unittests/buttons_xpath_test.rb +88 -88
  37. data/unittests/checkbox_test.rb +158 -158
  38. data/unittests/checkbox_xpath_test.rb +107 -107
  39. data/unittests/div_test.rb +275 -275
  40. data/unittests/ff_test.rb +47 -0
  41. data/unittests/filefield_test.rb +49 -49
  42. data/unittests/filefield_xpath_test.rb +35 -35
  43. data/unittests/form_test.rb +296 -296
  44. data/unittests/frame_test.rb +159 -159
  45. data/unittests/hidden_test.rb +85 -85
  46. data/unittests/hidden_xpath_test.rb +72 -72
  47. data/unittests/html/JavascriptClick.html +42 -42
  48. data/unittests/html/blankpage.html +11 -11
  49. data/unittests/html/buttons1.html +61 -61
  50. data/unittests/html/checkboxes1.html +70 -70
  51. data/unittests/html/complex_table.html +36 -36
  52. data/unittests/html/cssTest.html +42 -42
  53. data/unittests/html/div.html +72 -72
  54. data/unittests/html/div_xml.html +20 -20
  55. data/unittests/html/fileupload.html +45 -45
  56. data/unittests/html/formTest1.html +38 -38
  57. data/unittests/html/forms2.html +45 -45
  58. data/unittests/html/forms3.html +132 -132
  59. data/unittests/html/forms4.html +27 -27
  60. data/unittests/html/frame_buttons.html +3 -3
  61. data/unittests/html/frame_links.html +3 -3
  62. data/unittests/html/frame_multi.html +4 -4
  63. data/unittests/html/iframeTest.html +14 -14
  64. data/unittests/html/iframeTest1.html +13 -13
  65. data/unittests/html/iframeTest2.html +5 -5
  66. data/unittests/html/images1.html +66 -66
  67. data/unittests/html/javascriptevents.html +35 -35
  68. data/unittests/html/link_pass.html +10 -10
  69. data/unittests/html/links1.html +42 -42
  70. data/unittests/html/links2.html +10 -10
  71. data/unittests/html/modal_dialog.html +8 -8
  72. data/unittests/html/modal_dialog_launcher.html +11 -11
  73. data/unittests/html/nestedFrames.html +6 -6
  74. data/unittests/html/new_browser.html +17 -17
  75. data/unittests/html/new_browser_popup.html +7 -7
  76. data/unittests/html/pass.html +9 -9
  77. data/unittests/html/popups1.html +60 -60
  78. data/unittests/html/pre.html +27 -27
  79. data/unittests/html/radioButtons1.html +70 -70
  80. data/unittests/html/redirect.html +10 -10
  81. data/unittests/html/redirect1.html +8 -8
  82. data/unittests/html/redirect2.html +8 -8
  83. data/unittests/html/redirect3.html +8 -8
  84. data/unittests/html/select_tealeaf.html +54 -54
  85. data/unittests/html/selectboxes1.html +55 -55
  86. data/unittests/html/simple_table.html +26 -26
  87. data/unittests/html/simple_table_buttons.html +104 -104
  88. data/unittests/html/simple_table_columns.html +74 -74
  89. data/unittests/html/table1.html +165 -165
  90. data/unittests/html/tableCell_using_xpath.html +19 -19
  91. data/unittests/html/textarea.html +30 -30
  92. data/unittests/html/textfields1.html +62 -62
  93. data/unittests/html/textsearch.html +44 -44
  94. data/unittests/images_test.rb +198 -198
  95. data/unittests/images_xpath_test.rb +118 -118
  96. data/unittests/javascript_test.rb +75 -75
  97. data/unittests/links_test.rb +231 -231
  98. data/unittests/links_xpath_test.rb +79 -79
  99. data/unittests/mozilla_all_tests.rb +7 -7
  100. data/unittests/pre_test.rb +75 -75
  101. data/unittests/radios_test.rb +166 -166
  102. data/unittests/radios_xpath_test.rb +101 -101
  103. data/unittests/redirect_test.rb +41 -41
  104. data/unittests/selectbox_test.rb +142 -142
  105. data/unittests/selectbox_xpath_test.rb +129 -129
  106. data/unittests/setup.rb +29 -29
  107. data/unittests/table_test.rb +385 -385
  108. data/unittests/table_xpath_test.rb +185 -185
  109. data/unittests/textfields_test.rb +234 -234
  110. data/unittests/textfields_xpath_test.rb +113 -113
  111. metadata +51 -19
  112. data/lib/firewatir/version.rb +0 -5
@@ -1,55 +1,55 @@
1
- <html>
2
- <head>
3
- <title>
4
- Test page for select boxes
5
- </title>
6
- <link rel="stylesheet" type="text/css" href="watir_unit_tests.css">
7
- </head>
8
- <body>
9
- <script language="javascript">
10
- function changeLocation()
11
- {
12
- document.location.href = "pass.html";
13
- }
14
- function show_alert()
15
- {
16
- textbox = document.getElementById('txtAlert');
17
- alert("Press OK")
18
- textbox.value = "You pressed OK button";
19
- }
20
- </script>
21
- CVS Revision: $Revision: 1.0 $
22
- <br>
23
- <br>
24
- <table>
25
-
26
- <tr>
27
- <td>
28
- <select name = sel1 class='list_style'>
29
- <option value=o1 >Option 1</option><option value=o2 >Option 2</option><option value=o3 SELECTED >Option 3</option><option value=o4 >Option 4</option></select></td></tr>
30
- <tr>
31
- <td>
32
- <select name = sel2 multiple>
33
- <option value=o1 >Option 1</option><option value=o2 class='option_style'>Option 2</option><option value=o3 class='option_style' SELECTED >Option 3</option><option value=o4 class='option_style'>Option 4</option><option value=o6 class='option_style'>Option 5</option><option value=o6 class='option_style' SELECTED >Option 6</option></select></td>
34
- </tr>
35
- <tr>
36
- <td>
37
- <select name = sel3 onChange = 'changeLocation();'>
38
- <option value = o1>Option 1</option><option value = o2>Option 2</option><option value = o3 selected>Option 3</option><option value = o4>Option 4</option></select></td>
39
-
40
- <td> This box is used for testing the onchange event
41
- </td></tr>
42
- <tr>
43
- <td><select id = 'selectbox_4' disabled><option value = o1>Option 1</option><option value = o2>Option 2</option>
44
- </td>
45
- <td>This box has an id</td></tr>
46
- <tr>
47
- <td><select id= 'selectbox_5' onchange='show_alert();'><option value = o1>Option 1</option><option value = o2>Option 2</option></select></td><td>
48
- <input id='txtAlert'>
49
- </td></tr>
50
- </table>
51
-
52
-
53
-
54
- </body>
55
- </html>
1
+ <html>
2
+ <head>
3
+ <title>
4
+ Test page for select boxes
5
+ </title>
6
+ <link rel="stylesheet" type="text/css" href="watir_unit_tests.css">
7
+ </head>
8
+ <body>
9
+ <script language="javascript">
10
+ function changeLocation()
11
+ {
12
+ document.location.href = "pass.html";
13
+ }
14
+ function show_alert()
15
+ {
16
+ textbox = document.getElementById('txtAlert');
17
+ alert("Press OK")
18
+ textbox.value = "You pressed OK button";
19
+ }
20
+ </script>
21
+ CVS Revision: $Revision: 1.0 $
22
+ <br>
23
+ <br>
24
+ <table>
25
+
26
+ <tr>
27
+ <td>
28
+ <select name = sel1 class='list_style'>
29
+ <option value=o1 >Option 1</option><option value=o2 >Option 2</option><option value=o3 SELECTED >Option 3</option><option value=o4 >Option 4</option></select></td></tr>
30
+ <tr>
31
+ <td>
32
+ <select name = sel2 multiple>
33
+ <option value=o1 >Option 1</option><option value=o2 class='option_style'>Option 2</option><option value=o3 class='option_style' SELECTED >Option 3</option><option value=o4 class='option_style'>Option 4</option><option value=o6 class='option_style'>Option 5</option><option value=o6 class='option_style' SELECTED >Option 6</option></select></td>
34
+ </tr>
35
+ <tr>
36
+ <td>
37
+ <select name = sel3 onChange = 'changeLocation();'>
38
+ <option value = o1>Option 1</option><option value = o2>Option 2</option><option value = o3 selected>Option 3</option><option value = o4>Option 4</option></select></td>
39
+
40
+ <td> This box is used for testing the onchange event
41
+ </td></tr>
42
+ <tr>
43
+ <td><select id = 'selectbox_4' disabled><option value = o1>Option 1</option><option value = o2>Option 2</option>
44
+ </td>
45
+ <td>This box has an id</td></tr>
46
+ <tr>
47
+ <td><select id= 'selectbox_5' onchange='show_alert();'><option value = o1>Option 1</option><option value = o2>Option 2</option></select></td><td>
48
+ <input id='txtAlert'>
49
+ </td></tr>
50
+ </table>
51
+
52
+
53
+
54
+ </body>
55
+ </html>
@@ -1,26 +1,26 @@
1
- <html>
2
- <head>
3
- <title>
4
- Test page for Tables
5
- </title>
6
- </head>
7
- <body>
8
- CVS Revision: "$Revision: 1.0 $"
9
- <br>
10
- <br>
11
- <table >
12
- <tr>
13
- <td> Row 1 Col1 </td>
14
- <td> Row 1 Col2 </td>
15
- </tr>
16
- <tr>
17
- <td> Row 2 Col1 </td>
18
- <td> Row 2 Col2 </td>
19
- </tr>
20
- <tr>
21
- <td> Row 3 Col1 </td>
22
- <td> Row 3 Col2 </td>
23
- </tr>
24
- </table>
25
- </body>
26
- </html>
1
+ <html>
2
+ <head>
3
+ <title>
4
+ Test page for Tables
5
+ </title>
6
+ </head>
7
+ <body>
8
+ CVS Revision: "$Revision: 1.0 $"
9
+ <br>
10
+ <br>
11
+ <table >
12
+ <tr>
13
+ <td> Row 1 Col1 </td>
14
+ <td> Row 1 Col2 </td>
15
+ </tr>
16
+ <tr>
17
+ <td> Row 2 Col1 </td>
18
+ <td> Row 2 Col2 </td>
19
+ </tr>
20
+ <tr>
21
+ <td> Row 3 Col1 </td>
22
+ <td> Row 3 Col2 </td>
23
+ </tr>
24
+ </table>
25
+ </body>
26
+ </html>
@@ -1,104 +1,104 @@
1
- <html>
2
- <head>
3
- <title>
4
- simple table buttons
5
- </title>
6
- </head>
7
- <body>
8
-
9
- <input type = text name="confirmtext">
10
- <table >
11
- <tr>
12
- <td> <input type = button value = "Click" id = "b1" onClick = "document.all.confirmtext.value = 'CLICK1';"><td>Click1 </td>
13
- </tr>
14
- <tr>
15
- <td> <input type = button value = "Click" onClick = "document.all.confirmtext.value = 'CLICK2';"><td>Click2 </td>
16
- </tr>
17
- <tr>
18
- <td> <input type = button value = "Click" onClick = "document.all.confirmtext.value = 'CLICK3';">
19
- <input type = button value = "Click too" onClick = "document.all.confirmtext.value = 'CLICK TOO';">
20
- <td>Click3</td>
21
- </tr>
22
- <tr>
23
- <td> <input type = text value = "Im a text field" ></td>
24
- </tr>
25
-
26
-
27
- <tr>
28
- <td>An input field and a button in the same cell<br> <input type = text name='same_cell' value = "Click ->" ><input type=button value = "Click To Change <-" onClick = "document.all.same_cell.value = '';" </td>
29
- </tr>
30
-
31
- </table>
32
-
33
- This table has 3 images in each row. Each is a seperate cell
34
- <table>
35
- <tr>
36
- <td><img src = images/1.gif><td><img src = images/2.gif><td><img src = images/3.gif>
37
- <tr>
38
- <td><img src = images/1.gif><td><img src = images/2.gif><td><img src = images/3.gif>
39
- <tr>
40
- <td><img src = images/1.gif><td><img src = images/2.gif><td><img src = images/3.gif>
41
- </table>
42
-
43
- This table has 3 images in each row. They are all in the same cell
44
- <table>
45
- <tr>
46
- <td><img src = images/1.gif><img src = images/2.gif><img src = images/3.gif>
47
- <tr>
48
- <td><img src = images/1.gif><img src = images/2.gif><img src = images/3.gif>
49
- <tr>
50
- <td><img src = images/1.gif><img src = images/2.gif><img src = images/3.gif>
51
- </table>
52
-
53
-
54
- <style type="text/css">
55
- div.hide { display: none; margin-left: auto; margin-right: auto; }
56
- div.show { display: block; margin-left: auto; margin-right: auto; }
57
-
58
- tr.hide { display: none; margin-left: auto; margin-right: auto; }
59
- tr.show { display: block; margin-left: auto; margin-right: auto; }
60
-
61
- </style>
62
-
63
-
64
- <script language=javascript>
65
-
66
- function expand_or_shrink_row( row ) {
67
-
68
- which_row = 'r' + row;
69
- which_image = 'i' + row;
70
- if ( document.getElementById(which_row).className=='hide' ){
71
- document.getElementById(which_row).className='show';
72
- document.getElementById(which_image).src='images/minus.gif';
73
-
74
- }
75
- else {
76
- document.getElementById(which_row).className='hide'
77
- document.getElementById(which_image).src='images/plus.gif'
78
- }
79
-
80
- }
81
-
82
- </script>
83
-
84
- The table below can show or hide its rows. Click the + (or -) to show or hide the row
85
- <table id=show_hide>
86
- <tr><td><img id=i1 width=30 height=30 src = images/plus.gif onClick='javascript:expand_or_shrink_row("1")'>
87
- <tr class = hide id=r1><td>Line 1
88
- <tr><td><img id=i2 width=30 height=30 src = images/plus.gif onClick='javascript:expand_or_shrink_row("2")'>
89
- <tr class = hide id=r2><td>Line 2
90
- <tr><td><img id=i3 width=30 height=30 src = images/plus.gif onClick='javascript:expand_or_shrink_row("3")'>
91
- <tr class = hide id=r3><td>Line 3
92
- <tr><td><img id=i4 width=30 height=30 src = images/plus.gif onClick='javascript:expand_or_shrink_row("4")'>
93
- <tr class = hide id=r4><td>Line 4
94
- <tr><td><img id=i5 width=30 height=30 src = images/plus.gif onClick='javascript:expand_or_shrink_row("5")'>
95
- <tr class = hide id=r5><td>Line 5
96
- </table>
97
-
98
-
99
-
100
-
101
-
102
- </body>
103
-
104
- </html>
1
+ <html>
2
+ <head>
3
+ <title>
4
+ simple table buttons
5
+ </title>
6
+ </head>
7
+ <body>
8
+
9
+ <input type = text name="confirmtext">
10
+ <table >
11
+ <tr>
12
+ <td> <input type = button value = "Click" id = "b1" onClick = "document.all.confirmtext.value = 'CLICK1';"><td>Click1 </td>
13
+ </tr>
14
+ <tr>
15
+ <td> <input type = button value = "Click" onClick = "document.all.confirmtext.value = 'CLICK2';"><td>Click2 </td>
16
+ </tr>
17
+ <tr>
18
+ <td> <input type = button value = "Click" onClick = "document.all.confirmtext.value = 'CLICK3';">
19
+ <input type = button value = "Click too" onClick = "document.all.confirmtext.value = 'CLICK TOO';">
20
+ <td>Click3</td>
21
+ </tr>
22
+ <tr>
23
+ <td> <input type = text value = "Im a text field" ></td>
24
+ </tr>
25
+
26
+
27
+ <tr>
28
+ <td>An input field and a button in the same cell<br> <input type = text name='same_cell' value = "Click ->" ><input type=button value = "Click To Change <-" onClick = "document.all.same_cell.value = '';" </td>
29
+ </tr>
30
+
31
+ </table>
32
+
33
+ This table has 3 images in each row. Each is a seperate cell
34
+ <table>
35
+ <tr>
36
+ <td><img src = images/1.gif><td><img src = images/2.gif><td><img src = images/3.gif>
37
+ <tr>
38
+ <td><img src = images/1.gif><td><img src = images/2.gif><td><img src = images/3.gif>
39
+ <tr>
40
+ <td><img src = images/1.gif><td><img src = images/2.gif><td><img src = images/3.gif>
41
+ </table>
42
+
43
+ This table has 3 images in each row. They are all in the same cell
44
+ <table>
45
+ <tr>
46
+ <td><img src = images/1.gif><img src = images/2.gif><img src = images/3.gif>
47
+ <tr>
48
+ <td><img src = images/1.gif><img src = images/2.gif><img src = images/3.gif>
49
+ <tr>
50
+ <td><img src = images/1.gif><img src = images/2.gif><img src = images/3.gif>
51
+ </table>
52
+
53
+
54
+ <style type="text/css">
55
+ div.hide { display: none; margin-left: auto; margin-right: auto; }
56
+ div.show { display: block; margin-left: auto; margin-right: auto; }
57
+
58
+ tr.hide { display: none; margin-left: auto; margin-right: auto; }
59
+ tr.show { display: block; margin-left: auto; margin-right: auto; }
60
+
61
+ </style>
62
+
63
+
64
+ <script language=javascript>
65
+
66
+ function expand_or_shrink_row( row ) {
67
+
68
+ which_row = 'r' + row;
69
+ which_image = 'i' + row;
70
+ if ( document.getElementById(which_row).className=='hide' ){
71
+ document.getElementById(which_row).className='show';
72
+ document.getElementById(which_image).src='images/minus.gif';
73
+
74
+ }
75
+ else {
76
+ document.getElementById(which_row).className='hide'
77
+ document.getElementById(which_image).src='images/plus.gif'
78
+ }
79
+
80
+ }
81
+
82
+ </script>
83
+
84
+ The table below can show or hide its rows. Click the + (or -) to show or hide the row
85
+ <table id=show_hide>
86
+ <tr><td><img id=i1 width=30 height=30 src = images/plus.gif onClick='javascript:expand_or_shrink_row("1")'>
87
+ <tr class = hide id=r1><td>Line 1
88
+ <tr><td><img id=i2 width=30 height=30 src = images/plus.gif onClick='javascript:expand_or_shrink_row("2")'>
89
+ <tr class = hide id=r2><td>Line 2
90
+ <tr><td><img id=i3 width=30 height=30 src = images/plus.gif onClick='javascript:expand_or_shrink_row("3")'>
91
+ <tr class = hide id=r3><td>Line 3
92
+ <tr><td><img id=i4 width=30 height=30 src = images/plus.gif onClick='javascript:expand_or_shrink_row("4")'>
93
+ <tr class = hide id=r4><td>Line 4
94
+ <tr><td><img id=i5 width=30 height=30 src = images/plus.gif onClick='javascript:expand_or_shrink_row("5")'>
95
+ <tr class = hide id=r5><td>Line 5
96
+ </table>
97
+
98
+
99
+
100
+
101
+
102
+ </body>
103
+
104
+ </html>
@@ -1,74 +1,74 @@
1
- <html>
2
- <head>
3
- <title>Test page for testing column value extraction </title>
4
- </head>
5
- <body>
6
- CVS Revision: "$Revision: 1.0 $"
7
- <br>
8
- <br>
9
- <b>Test page for testing column value extraction</b>
10
- <br>
11
- <br>
12
- Single Column
13
- <table border="1">
14
- <tr>
15
- <td>R1C1</td>
16
- </tr>
17
- <tr>
18
- <td>R2C1</td>
19
- </tr>
20
- <tr>
21
- <td>R3C1</td>
22
- </tr>
23
- </table>
24
- <br>
25
- Multiple Column
26
- <table border="1">
27
- <tr>
28
- <td>R1C1</td>
29
- <td>R1C2</td>
30
- <td>R1C3</td>
31
- </tr>
32
- <tr>
33
- <td>R2C1</td>
34
- <td>R2C2</td>
35
- <td>R2C3</td>
36
- </tr>
37
- <tr>
38
- <td>R3C1</td>
39
- <td>R3C2</td>
40
- <td>R3C3</td>
41
- </tr>
42
- </table>
43
- <br>
44
- Multiple Column With Jagged ColSpan
45
- <table border="1">
46
- <tr>
47
- <td>R1C1</td>
48
- <td>R1C2</td>
49
- <td>R1C3</td>
50
- </tr>
51
- <tr>
52
- <td colspan="2">R2C1</td>
53
- <td>R2C2</td>
54
- </tr>
55
- <tr>
56
- <td>R3C1</td>
57
- <td>R3C2</td>
58
- <td>R3C3</td>
59
- </tr>
60
- <tr>
61
- <td colspan="3">R4C1</td>
62
- </tr>
63
- <tr>
64
- <td rowspan="2">R5C1</td>
65
- <td>R5C2</td>
66
- <td>R5C3</td>
67
- </tr>
68
- <tr>
69
- <td>R6C2</td>
70
- <td>R6C3</td>
71
- </tr>
72
- </table>
73
- </body>
74
- </html>
1
+ <html>
2
+ <head>
3
+ <title>Test page for testing column value extraction </title>
4
+ </head>
5
+ <body>
6
+ CVS Revision: "$Revision: 1.0 $"
7
+ <br>
8
+ <br>
9
+ <b>Test page for testing column value extraction</b>
10
+ <br>
11
+ <br>
12
+ Single Column
13
+ <table border="1">
14
+ <tr>
15
+ <td>R1C1</td>
16
+ </tr>
17
+ <tr>
18
+ <td>R2C1</td>
19
+ </tr>
20
+ <tr>
21
+ <td>R3C1</td>
22
+ </tr>
23
+ </table>
24
+ <br>
25
+ Multiple Column
26
+ <table border="1">
27
+ <tr>
28
+ <td>R1C1</td>
29
+ <td>R1C2</td>
30
+ <td>R1C3</td>
31
+ </tr>
32
+ <tr>
33
+ <td>R2C1</td>
34
+ <td>R2C2</td>
35
+ <td>R2C3</td>
36
+ </tr>
37
+ <tr>
38
+ <td>R3C1</td>
39
+ <td>R3C2</td>
40
+ <td>R3C3</td>
41
+ </tr>
42
+ </table>
43
+ <br>
44
+ Multiple Column With Jagged ColSpan
45
+ <table border="1">
46
+ <tr>
47
+ <td>R1C1</td>
48
+ <td>R1C2</td>
49
+ <td>R1C3</td>
50
+ </tr>
51
+ <tr>
52
+ <td colspan="2">R2C1</td>
53
+ <td>R2C2</td>
54
+ </tr>
55
+ <tr>
56
+ <td>R3C1</td>
57
+ <td>R3C2</td>
58
+ <td>R3C3</td>
59
+ </tr>
60
+ <tr>
61
+ <td colspan="3">R4C1</td>
62
+ </tr>
63
+ <tr>
64
+ <td rowspan="2">R5C1</td>
65
+ <td>R5C2</td>
66
+ <td>R5C3</td>
67
+ </tr>
68
+ <tr>
69
+ <td>R6C2</td>
70
+ <td>R6C3</td>
71
+ </tr>
72
+ </table>
73
+ </body>
74
+ </html>