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.
- data/Gemfile +9 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +30 -0
- data/app/controllers/selenium_core_runner/suites_controller.rb +19 -0
- data/app/views/selenium_core_runner/suites/index.html.erb +177 -0
- data/app/views/selenium_core_runner/suites/show.html.erb +0 -0
- data/config/routes.rb +6 -0
- data/lib/selenium-core-runner/engine.rb +19 -0
- data/lib/selenium-core-runner.rb +3 -0
- data/public/selenium-core-runner/Blank.html +7 -0
- data/public/selenium-core-runner/InjectedRemoteRunner.html +8 -0
- data/public/selenium-core-runner/RemoteRunner.html +101 -0
- data/public/selenium-core-runner/SeleniumLog.html +109 -0
- data/public/selenium-core-runner/TestPrompt.html +145 -0
- data/public/selenium-core-runner/TestRunner-splash.html +55 -0
- data/public/selenium-core-runner/TestRunner.hta +177 -0
- data/public/selenium-core-runner/TestRunner.html +177 -0
- data/public/selenium-core-runner/icons/all.png +0 -0
- data/public/selenium-core-runner/icons/continue.png +0 -0
- data/public/selenium-core-runner/icons/continue_disabled.png +0 -0
- data/public/selenium-core-runner/icons/pause.png +0 -0
- data/public/selenium-core-runner/icons/pause_disabled.png +0 -0
- data/public/selenium-core-runner/icons/selected.png +0 -0
- data/public/selenium-core-runner/icons/step.png +0 -0
- data/public/selenium-core-runner/icons/step_disabled.png +0 -0
- data/public/selenium-core-runner/iedoc-core.xml +1789 -0
- data/public/selenium-core-runner/iedoc.xml +1830 -0
- data/public/selenium-core-runner/lib/cssQuery/cssQuery-p.js +6 -0
- data/public/selenium-core-runner/lib/cssQuery/src/cssQuery-level2.js +142 -0
- data/public/selenium-core-runner/lib/cssQuery/src/cssQuery-level3.js +150 -0
- data/public/selenium-core-runner/lib/cssQuery/src/cssQuery-standard.js +53 -0
- data/public/selenium-core-runner/lib/cssQuery/src/cssQuery.js +356 -0
- data/public/selenium-core-runner/lib/prototype.js +2006 -0
- data/public/selenium-core-runner/lib/scriptaculous/builder.js +101 -0
- data/public/selenium-core-runner/lib/scriptaculous/controls.js +815 -0
- data/public/selenium-core-runner/lib/scriptaculous/dragdrop.js +915 -0
- data/public/selenium-core-runner/lib/scriptaculous/effects.js +958 -0
- data/public/selenium-core-runner/lib/scriptaculous/scriptaculous.js +47 -0
- data/public/selenium-core-runner/lib/scriptaculous/slider.js +283 -0
- data/public/selenium-core-runner/lib/scriptaculous/unittest.js +383 -0
- data/public/selenium-core-runner/lib/snapsie.js +91 -0
- data/public/selenium-core-runner/scripts/find_matching_child.js +69 -0
- data/public/selenium-core-runner/scripts/htmlutils.js +1623 -0
- data/public/selenium-core-runner/scripts/injection.html +72 -0
- data/public/selenium-core-runner/scripts/selenium-api.js +3240 -0
- data/public/selenium-core-runner/scripts/selenium-browserbot.js +2333 -0
- data/public/selenium-core-runner/scripts/selenium-browserdetect.js +153 -0
- data/public/selenium-core-runner/scripts/selenium-commandhandlers.js +379 -0
- data/public/selenium-core-runner/scripts/selenium-executionloop.js +175 -0
- data/public/selenium-core-runner/scripts/selenium-logging.js +148 -0
- data/public/selenium-core-runner/scripts/selenium-remoterunner.js +695 -0
- data/public/selenium-core-runner/scripts/selenium-testrunner.js +1362 -0
- data/public/selenium-core-runner/scripts/selenium-version.js +5 -0
- data/public/selenium-core-runner/scripts/ui-doc.html +803 -0
- data/public/selenium-core-runner/scripts/ui-element.js +1627 -0
- data/public/selenium-core-runner/scripts/ui-map-sample.js +979 -0
- data/public/selenium-core-runner/scripts/user-extensions.js +3 -0
- data/public/selenium-core-runner/scripts/user-extensions.js.sample +75 -0
- data/public/selenium-core-runner/scripts/xmlextras.js +153 -0
- data/public/selenium-core-runner/selenium-logo.png +0 -0
- data/public/selenium-core-runner/selenium-test.css +43 -0
- data/public/selenium-core-runner/selenium.css +316 -0
- data/public/selenium-core-runner/xpath/dom.js +566 -0
- data/public/selenium-core-runner/xpath/javascript-xpath-0.1.11.js +2816 -0
- data/public/selenium-core-runner/xpath/util.js +549 -0
- data/public/selenium-core-runner/xpath/xmltoken.js +149 -0
- data/public/selenium-core-runner/xpath/xpath.js +2481 -0
- metadata +121 -0
@@ -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
|
+
}
|
Binary file
|
@@ -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
|
+
}
|