selenium-core-runner 0.0.3

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 (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
+ }