selenium-core-runner 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. data/Gemfile +9 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +30 -0
  5. data/app/controllers/selenium_core_runner/suites_controller.rb +19 -0
  6. data/app/views/selenium_core_runner/suites/index.html.erb +177 -0
  7. data/app/views/selenium_core_runner/suites/show.html.erb +0 -0
  8. data/config/routes.rb +6 -0
  9. data/lib/selenium-core-runner/engine.rb +19 -0
  10. data/lib/selenium-core-runner.rb +3 -0
  11. data/public/selenium-core-runner/Blank.html +7 -0
  12. data/public/selenium-core-runner/InjectedRemoteRunner.html +8 -0
  13. data/public/selenium-core-runner/RemoteRunner.html +101 -0
  14. data/public/selenium-core-runner/SeleniumLog.html +109 -0
  15. data/public/selenium-core-runner/TestPrompt.html +145 -0
  16. data/public/selenium-core-runner/TestRunner-splash.html +55 -0
  17. data/public/selenium-core-runner/TestRunner.hta +177 -0
  18. data/public/selenium-core-runner/TestRunner.html +177 -0
  19. data/public/selenium-core-runner/icons/all.png +0 -0
  20. data/public/selenium-core-runner/icons/continue.png +0 -0
  21. data/public/selenium-core-runner/icons/continue_disabled.png +0 -0
  22. data/public/selenium-core-runner/icons/pause.png +0 -0
  23. data/public/selenium-core-runner/icons/pause_disabled.png +0 -0
  24. data/public/selenium-core-runner/icons/selected.png +0 -0
  25. data/public/selenium-core-runner/icons/step.png +0 -0
  26. data/public/selenium-core-runner/icons/step_disabled.png +0 -0
  27. data/public/selenium-core-runner/iedoc-core.xml +1789 -0
  28. data/public/selenium-core-runner/iedoc.xml +1830 -0
  29. data/public/selenium-core-runner/lib/cssQuery/cssQuery-p.js +6 -0
  30. data/public/selenium-core-runner/lib/cssQuery/src/cssQuery-level2.js +142 -0
  31. data/public/selenium-core-runner/lib/cssQuery/src/cssQuery-level3.js +150 -0
  32. data/public/selenium-core-runner/lib/cssQuery/src/cssQuery-standard.js +53 -0
  33. data/public/selenium-core-runner/lib/cssQuery/src/cssQuery.js +356 -0
  34. data/public/selenium-core-runner/lib/prototype.js +2006 -0
  35. data/public/selenium-core-runner/lib/scriptaculous/builder.js +101 -0
  36. data/public/selenium-core-runner/lib/scriptaculous/controls.js +815 -0
  37. data/public/selenium-core-runner/lib/scriptaculous/dragdrop.js +915 -0
  38. data/public/selenium-core-runner/lib/scriptaculous/effects.js +958 -0
  39. data/public/selenium-core-runner/lib/scriptaculous/scriptaculous.js +47 -0
  40. data/public/selenium-core-runner/lib/scriptaculous/slider.js +283 -0
  41. data/public/selenium-core-runner/lib/scriptaculous/unittest.js +383 -0
  42. data/public/selenium-core-runner/lib/snapsie.js +91 -0
  43. data/public/selenium-core-runner/scripts/find_matching_child.js +69 -0
  44. data/public/selenium-core-runner/scripts/htmlutils.js +1623 -0
  45. data/public/selenium-core-runner/scripts/injection.html +72 -0
  46. data/public/selenium-core-runner/scripts/selenium-api.js +3240 -0
  47. data/public/selenium-core-runner/scripts/selenium-browserbot.js +2333 -0
  48. data/public/selenium-core-runner/scripts/selenium-browserdetect.js +153 -0
  49. data/public/selenium-core-runner/scripts/selenium-commandhandlers.js +379 -0
  50. data/public/selenium-core-runner/scripts/selenium-executionloop.js +175 -0
  51. data/public/selenium-core-runner/scripts/selenium-logging.js +148 -0
  52. data/public/selenium-core-runner/scripts/selenium-remoterunner.js +695 -0
  53. data/public/selenium-core-runner/scripts/selenium-testrunner.js +1362 -0
  54. data/public/selenium-core-runner/scripts/selenium-version.js +5 -0
  55. data/public/selenium-core-runner/scripts/ui-doc.html +803 -0
  56. data/public/selenium-core-runner/scripts/ui-element.js +1627 -0
  57. data/public/selenium-core-runner/scripts/ui-map-sample.js +979 -0
  58. data/public/selenium-core-runner/scripts/user-extensions.js +3 -0
  59. data/public/selenium-core-runner/scripts/user-extensions.js.sample +75 -0
  60. data/public/selenium-core-runner/scripts/xmlextras.js +153 -0
  61. data/public/selenium-core-runner/selenium-logo.png +0 -0
  62. data/public/selenium-core-runner/selenium-test.css +43 -0
  63. data/public/selenium-core-runner/selenium.css +316 -0
  64. data/public/selenium-core-runner/xpath/dom.js +566 -0
  65. data/public/selenium-core-runner/xpath/javascript-xpath-0.1.11.js +2816 -0
  66. data/public/selenium-core-runner/xpath/util.js +549 -0
  67. data/public/selenium-core-runner/xpath/xmltoken.js +149 -0
  68. data/public/selenium-core-runner/xpath/xpath.js +2481 -0
  69. metadata +121 -0
@@ -0,0 +1,3 @@
1
+ // User extensions can be added here.
2
+ //
3
+ // Keep this file to avoid mystifying "Invalid Character" error in IE
@@ -0,0 +1,75 @@
1
+ /*
2
+ * By default, Selenium looks for a file called "user-extensions.js", and loads and javascript
3
+ * code found in that file. This file is a sample of what that file could look like.
4
+ *
5
+ * user-extensions.js provides a convenient location for adding extensions to Selenium, like
6
+ * new actions, checks and locator-strategies.
7
+ * By default, this file does not exist. Users can create this file and place their extension code
8
+ * in this common location, removing the need to modify the Selenium sources, and hopefully assisting
9
+ * with the upgrade process.
10
+ *
11
+ * You can find contributed extensions at http://wiki.openqa.org/display/SEL/Contributed%20User-Extensions
12
+ */
13
+
14
+ // The following examples try to give an indication of how Selenium can be extended with javascript.
15
+
16
+ // All do* methods on the Selenium prototype are added as actions.
17
+ // Eg add a typeRepeated action to Selenium, which types the text twice into a text box.
18
+ // The typeTwiceAndWait command will be available automatically
19
+ Selenium.prototype.doTypeRepeated = function(locator, text) {
20
+ // All locator-strategies are automatically handled by "findElement"
21
+ var element = this.page().findElement(locator);
22
+
23
+ // Create the text to type
24
+ var valueToType = text + text;
25
+
26
+ // Replace the element text with the new text
27
+ this.page().replaceText(element, valueToType);
28
+ };
29
+
30
+ // All assert* methods on the Selenium prototype are added as checks.
31
+ // Eg add a assertValueRepeated check, that makes sure that the element value
32
+ // consists of the supplied text repeated.
33
+ // The verify version will be available automatically.
34
+ Selenium.prototype.assertValueRepeated = function(locator, text) {
35
+ // All locator-strategies are automatically handled by "findElement"
36
+ var element = this.page().findElement(locator);
37
+
38
+ // Create the text to verify
39
+ var expectedValue = text + text;
40
+
41
+ // Get the actual element value
42
+ var actualValue = element.value;
43
+
44
+ // Make sure the actual value matches the expected
45
+ Assert.matches(expectedValue, actualValue);
46
+ };
47
+
48
+ // All get* methods on the Selenium prototype result in
49
+ // store, assert, assertNot, verify, verifyNot, waitFor, and waitForNot commands.
50
+ // E.g. add a getTextLength method that returns the length of the text
51
+ // of a specified element.
52
+ // Will result in support for storeTextLength, assertTextLength, etc.
53
+ Selenium.prototype.getTextLength = function(locator) {
54
+ return this.getText(locator).length;
55
+ };
56
+
57
+ // All locateElementBy* methods are added as locator-strategies.
58
+ // Eg add a "valuerepeated=" locator, that finds the first element with the supplied value, repeated.
59
+ // The "inDocument" is a the document you are searching.
60
+ PageBot.prototype.locateElementByValueRepeated = function(text, inDocument) {
61
+ // Create the text to search for
62
+ var expectedValue = text + text;
63
+
64
+ // Loop through all elements, looking for ones that have a value === our expected value
65
+ var allElements = inDocument.getElementsByTagName("*");
66
+ for (var i = 0; i < allElements.length; i++) {
67
+ var testElement = allElements[i];
68
+ if (testElement.value && testElement.value === expectedValue) {
69
+ return testElement;
70
+ }
71
+ }
72
+ return null;
73
+ };
74
+
75
+
@@ -0,0 +1,153 @@
1
+ // This is a third party JavaScript library from
2
+ // http://webfx.eae.net/dhtml/xmlextras/xmlextras.html
3
+ // i.e. This has not been written by ThoughtWorks.
4
+
5
+ //<script>
6
+ //////////////////
7
+ // Helper Stuff //
8
+ //////////////////
9
+
10
+ // used to find the Automation server name
11
+ function getDomDocumentPrefix() {
12
+ if (getDomDocumentPrefix.prefix)
13
+ return getDomDocumentPrefix.prefix;
14
+
15
+ var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
16
+ var o;
17
+ for (var i = 0; i < prefixes.length; i++) {
18
+ try {
19
+ // try to create the objects
20
+ o = new ActiveXObject(prefixes[i] + ".DomDocument");
21
+ return getDomDocumentPrefix.prefix = prefixes[i];
22
+ }
23
+ catch (ex) {};
24
+ }
25
+
26
+ throw new Error("Could not find an installed XML parser");
27
+ }
28
+
29
+ function getXmlHttpPrefix() {
30
+ if (getXmlHttpPrefix.prefix)
31
+ return getXmlHttpPrefix.prefix;
32
+
33
+ var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
34
+ var o;
35
+ for (var i = 0; i < prefixes.length; i++) {
36
+ try {
37
+ // try to create the objects
38
+ o = new ActiveXObject(prefixes[i] + ".XmlHttp");
39
+ return getXmlHttpPrefix.prefix = prefixes[i];
40
+ }
41
+ catch (ex) {};
42
+ }
43
+
44
+ throw new Error("Could not find an installed XML parser");
45
+ }
46
+
47
+ //////////////////////////
48
+ // Start the Real stuff //
49
+ //////////////////////////
50
+
51
+
52
+ // XmlHttp factory
53
+ function XmlHttp() {}
54
+
55
+ XmlHttp.create = function () {
56
+ try {
57
+ if (window.XMLHttpRequest) {
58
+ var req = new XMLHttpRequest();
59
+
60
+ // some versions of Moz do not support the readyState property
61
+ // and the onreadystate event so we patch it!
62
+ if (req.readyState == null) {
63
+ req.readyState = 1;
64
+ req.addEventListener("load", function () {
65
+ req.readyState = 4;
66
+ if (typeof req.onreadystatechange == "function")
67
+ req.onreadystatechange();
68
+ }, false);
69
+ }
70
+
71
+ return req;
72
+ }
73
+ if (window.ActiveXObject) {
74
+ return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");
75
+ }
76
+ }
77
+ catch (ex) {}
78
+ // fell through
79
+ throw new Error("Your browser does not support XmlHttp objects");
80
+ };
81
+
82
+ // XmlDocument factory
83
+ function XmlDocument() {}
84
+
85
+ XmlDocument.create = function () {
86
+ try {
87
+ // DOM2
88
+ if (document.implementation && document.implementation.createDocument) {
89
+ var doc = document.implementation.createDocument("", "", null);
90
+
91
+ // some versions of Moz do not support the readyState property
92
+ // and the onreadystate event so we patch it!
93
+ if (doc.readyState == null) {
94
+ doc.readyState = 1;
95
+ doc.addEventListener("load", function () {
96
+ doc.readyState = 4;
97
+ if (typeof doc.onreadystatechange == "function")
98
+ doc.onreadystatechange();
99
+ }, false);
100
+ }
101
+
102
+ return doc;
103
+ }
104
+ if (window.ActiveXObject)
105
+ return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument");
106
+ }
107
+ catch (ex) {}
108
+ throw new Error("Your browser does not support XmlDocument objects");
109
+ };
110
+
111
+ // Create the loadXML method and xml getter for Mozilla
112
+ if (window.DOMParser &&
113
+ window.XMLSerializer &&
114
+ window.Node && Node.prototype && Node.prototype.__defineGetter__) {
115
+
116
+ // XMLDocument did not extend the Document interface in some versions
117
+ // of Mozilla. Extend both!
118
+ //XMLDocument.prototype.loadXML =
119
+ Document.prototype.loadXML = function (s) {
120
+
121
+ // parse the string to a new doc
122
+ var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
123
+
124
+ // remove all initial children
125
+ while (this.hasChildNodes())
126
+ this.removeChild(this.lastChild);
127
+
128
+ // insert and import nodes
129
+ for (var i = 0; i < doc2.childNodes.length; i++) {
130
+ this.appendChild(this.importNode(doc2.childNodes[i], true));
131
+ }
132
+ };
133
+
134
+
135
+ /*
136
+ * xml getter
137
+ *
138
+ * This serializes the DOM tree to an XML String
139
+ *
140
+ * Usage: var sXml = oNode.xml
141
+ *
142
+ */
143
+ // XMLDocument did not extend the Document interface in some versions
144
+ // of Mozilla. Extend both!
145
+ /*
146
+ XMLDocument.prototype.__defineGetter__("xml", function () {
147
+ return (new XMLSerializer()).serializeToString(this);
148
+ });
149
+ */
150
+ Document.prototype.__defineGetter__("xml", function () {
151
+ return (new XMLSerializer()).serializeToString(this);
152
+ });
153
+ }
@@ -0,0 +1,43 @@
1
+ body, table {
2
+ font-family: Verdana, Arial, sans-serif;
3
+ font-size: 12;
4
+ }
5
+
6
+ table {
7
+ border-collapse: collapse;
8
+ border: 1px solid #ccc;
9
+ }
10
+
11
+ th, td {
12
+ padding-left: 0.3em;
13
+ padding-right: 0.3em;
14
+ }
15
+
16
+ a {
17
+ text-decoration: none;
18
+ }
19
+
20
+ .title {
21
+ font-style: italic;
22
+ }
23
+
24
+ .selected {
25
+ background-color: #ffffcc;
26
+ }
27
+
28
+ .status_done {
29
+ background-color: #eeffee;
30
+ }
31
+
32
+ .status_passed {
33
+ background-color: #ccffcc;
34
+ }
35
+
36
+ .status_failed {
37
+ background-color: #ffcccc;
38
+ }
39
+
40
+ .breakpoint {
41
+ background-color: #cccccc;
42
+ border: 1px solid black;
43
+ }
@@ -0,0 +1,316 @@
1
+ /*
2
+ * Copyright 2005 ThoughtWorks, Inc
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /*---( Layout )---*/
18
+
19
+ * {
20
+ margin: 0px;
21
+ padding: 0px;
22
+ }
23
+
24
+ body {
25
+ overflow: auto;
26
+ }
27
+
28
+ td {
29
+ position: static;
30
+ }
31
+
32
+ tr {
33
+ vertical-align: top;
34
+ }
35
+
36
+ .layout {
37
+ width: 100%;
38
+ height: 100%;
39
+ border-collapse: collapse;
40
+ }
41
+
42
+ .layout td {
43
+ border: 0;
44
+ }
45
+
46
+ iframe {
47
+ border: 0px;
48
+ width: 100%;
49
+ height: 100%;
50
+ background: white;
51
+ /* HBC - this particular property seems to be causing an issue in
52
+ conjunction with the native Draw() method in Snapsie. I don't really
53
+ see a visual difference from commenting this out, so I'm going ahead
54
+ with it.
55
+ overflow: auto; */
56
+ }
57
+
58
+ /*---( Style )---*/
59
+
60
+ body, html {
61
+ font-family: Verdana, Arial, sans-serif;
62
+ }
63
+
64
+ .selenium th, .selenium td {
65
+ border: 1px solid #999;
66
+ }
67
+
68
+ .header {
69
+ background: #ccc;
70
+ padding: 0;
71
+ font-size: 90%;
72
+ }
73
+
74
+ .remoterunner {
75
+ font-size: 10pt;
76
+ }
77
+
78
+ .remoterunner fieldset {
79
+ padding: 0.25em;
80
+ }
81
+
82
+ .remoterunner button, .remoterunner label {
83
+ margin-right: 1em;
84
+ }
85
+
86
+
87
+ #controlPanel {
88
+ padding: 0.5ex;
89
+ background: #eee;
90
+ overflow: auto;
91
+ font-size: 75%;
92
+ text-align: center;
93
+ }
94
+
95
+ #controlPanel fieldset {
96
+ margin: 0.3ex;
97
+ padding: 0.3ex;
98
+ }
99
+
100
+ #controlPanel fieldset legend {
101
+ color: black;
102
+ }
103
+
104
+ #controlPanel button {
105
+ margin: 0.5ex;
106
+ }
107
+
108
+ #imageButtonPanel button {
109
+ width: 24px;
110
+ height: 20px;
111
+ background-color:white;
112
+ background-repeat: no-repeat;
113
+ background-position: center;
114
+ border-style: solid;
115
+ border-color: black;
116
+ border-width: 1px;
117
+ }
118
+
119
+ #controlPanel #runSuite {
120
+ width: 32px;
121
+ background-image: url("icons/all.png");
122
+ }
123
+
124
+ #controlPanel #runSeleniumTest {
125
+ width: 32px;
126
+ background-image: url("icons/selected.png");
127
+ }
128
+
129
+ .cssPauseTest {
130
+ background-image: url("icons/pause.png");
131
+ }
132
+
133
+ .cssPauseTest[disabled] {
134
+ background-image: url("icons/pause_disabled.png");
135
+ }
136
+
137
+ .cssContinueTest {
138
+ background-image: url("icons/continue.png");
139
+ }
140
+
141
+ .cssContinueTest[disabled] {
142
+ background-image: url("icons/continue_disabled.png");
143
+ }
144
+
145
+ #controlPanel #stepTest {
146
+ background-image: url("icons/step.png");
147
+ }
148
+
149
+ #controlPanel #stepTest[disabled] {
150
+ background-image: url("icons/step_disabled.png");
151
+ }
152
+
153
+ #controlPanel table {
154
+ font-size: 100%;
155
+ }
156
+
157
+ #controlPanel th, #controlPanel td {
158
+ border: 0;
159
+ }
160
+
161
+ h1 {
162
+ margin: 0.2ex;
163
+ font-size: 130%;
164
+ font-weight: bold;
165
+ }
166
+
167
+ h2 {
168
+ margin: 0.2ex;
169
+ font-size: 80%;
170
+ font-weight: normal;
171
+ }
172
+
173
+ .selenium a {
174
+ color: black;
175
+ text-decoration: none;
176
+ }
177
+
178
+ .selenium a:hover {
179
+ text-decoration: underline;
180
+ }
181
+
182
+ button, label {
183
+ cursor: pointer;
184
+ }
185
+
186
+ #stats {
187
+ margin: 0.5em auto 0.5em auto;
188
+ }
189
+
190
+ #stats th, #stats td {
191
+ text-align: left;
192
+ padding-left: 2px;
193
+ }
194
+
195
+ #stats th {
196
+ text-decoration: underline;
197
+ }
198
+
199
+ #stats td.count {
200
+ font-weight: bold;
201
+ text-align: right;
202
+ }
203
+
204
+ #testRuns {
205
+ color: green;
206
+ }
207
+
208
+ #testFailures {
209
+ color: red;
210
+ }
211
+
212
+ #commandPasses {
213
+ color: green;
214
+ }
215
+
216
+ #commandFailures {
217
+ color: red;
218
+ }
219
+
220
+ #commandErrors {
221
+ color: #f90;
222
+ }
223
+
224
+
225
+ /*---( Logging Console )---*/
226
+
227
+ #logging-console {
228
+ background: #fff;
229
+ font-size: 75%;
230
+ }
231
+
232
+ #logging-console #banner {
233
+ display: block;
234
+ width: 100%;
235
+ position: fixed;
236
+ top: 0;
237
+ background: #ddd;
238
+ border-bottom: 1px solid #666;
239
+ }
240
+
241
+ #logging-console #logLevelChooser {
242
+ float: right;
243
+ margin: 3px;
244
+ }
245
+
246
+ #logging-console ul {
247
+ list-style-type: none;
248
+ margin: 0px;
249
+ margin-top: 3em;
250
+ padding-left: 5px;
251
+ }
252
+
253
+ #logging-console li {
254
+ margin: 2px;
255
+ border-top: 1px solid #ccc;
256
+ }
257
+
258
+ #logging-console li.error {
259
+ font-weight: bold;
260
+ color: red;
261
+ }
262
+
263
+ #logging-console li.warn {
264
+ color: red;
265
+ }
266
+
267
+ #logging-console li.debug {
268
+ color: green;
269
+ }
270
+
271
+ div.executionOptions {
272
+ padding-left: 5em;
273
+ }
274
+
275
+ div.executionOptions label, div.executionOptions input {
276
+ display: block;
277
+ float: left;
278
+ }
279
+
280
+ div.executionOptions br {
281
+ clear: left;
282
+ }
283
+
284
+ #speedSlider {
285
+ text-align: left;
286
+ margin: 0px auto;
287
+ width: 260px;
288
+ line-height: 0px;
289
+ font-size: 0px;
290
+ padding: 0px;
291
+ }
292
+
293
+ #speedSlider #speedTrack {
294
+ background-color: #333;
295
+ width: 260px;
296
+ height: 2px;
297
+ line-height: 2px;
298
+ z-index: 1;
299
+ border: 1px solid;
300
+ border-color: #999 #ddd #ddd #999;
301
+ cursor: pointer;
302
+ }
303
+
304
+ #speedSlider #speedHandle {
305
+ width: 12px;
306
+ top: -8px;
307
+ background-color: #666;
308
+ position: relative;
309
+ margin: 0px;
310
+ height: 8px;
311
+ line-height: 8px;
312
+ z-index: 1;
313
+ border: 1px solid;
314
+ border-color: #999 #333 #333 #999;
315
+ cursor: pointer;
316
+ }