Commit dfb1a9df authored by Rafael Monnerat's avatar Rafael Monnerat Committed by Łukasz Nowak

Upgrade Selenium code from 0.8.3 to 2.6.0

The Selenium code were upgraded removing the selenium folder content and replacing it with
the selenium-server-2.6.0.jar content provided by the follow url:

  http://code.google.com/p/selenium/downloads/detail?name=selenium-server-2.6.0.zip&can=2&q=
parent 804743ab
Copyright 2004 ThoughtWorks, Inc
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Manifest-Version: 1.0 Manifest-Version: 1.0
Archiver-Version: Plexus Archiver Ant-Version: Apache Ant 1.8.1
Created-By: Apache Maven Created-By: 1.6.0-google-v4-54639-21652009 (Sun Microsystems Inc.)
Built-By: openqa Main-Class: org.openqa.grid.selenium.GridLauncher
Build-Jdk: 1.6.0
Name: Build-Info
Selenium-Version: 2.6.0
Selenium-Revision: 13840
Selenium-Build-Time: 2011-09-13 14:55:47
#Generated by Maven
#Thu Sep 20 01:04:44 PDT 2007
version=0.8.3
groupId=org.openqa.selenium.core
artifactId=selenium-core
selenium.core.version=0.8.3 selenium.rc.version=2.6
selenium.core.revision=1879 selenium.rc.revision=.0
\ No newline at end of file selenium.core.version=2.6
selenium.core.revision=.0
rake_file(
name = "jsunit",
src = ".")
\ No newline at end of file
Coding standards for Selenium Core Javascript code
--------------------------------------------------
Here is a set of conventions agreed by the active Selenium Core
developers at ThoughtWorks. Please stick to these guidelines when
working on the Selenium Core code-base.
Whitespace: we use spaces, NOT TABS. Indent in 4-space increments.
Braces: we place open-braces on the same line as the associated keyword,
for example:
if (command.isBreakpoint) {
this.pause();
} else {
window.setTimeout(this.resume.bind(this), delay);
}
Encapsulation: we prefer to encapsulate functions and variables inside
objects, where possible.
Variable declarations: declare variables (using "var") ... even if they're
"global".
Class definitions: we're shifting to "prototype.js" style for
definition of classes, e.g.
var MyClass = Class.create();
Object.extend(MyClass.prototype, {
initialize: function() {
// ... constructor code ...
},
doStuff: function() {
// ... method body ...
}
});
'Private' functions/properties: we simulate "private" properties by
prepended the name with an underscore ("_"), e.g.
_resumeAfterDelay : function() {
// ...etc...
},
Element addressing: use "$(id)" rather than
"document.getElementById('id')".
Timeout functions: pass function objects to setTimeout(), rather than
strings, e.g.
window.setTimeout(this.resume.bind(this), delay);
<html>
<!--
Copyright 2004 ThoughtWorks, Inc
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<HTA:APPLICATION ID="SeleniumHTARunner" APPLICATIONNAME="Selenium" >
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title>Selenium Remote Control</title>
<link rel="stylesheet" type="text/css" href="selenium.css" />
<script type="text/javascript" src="scripts/xmlextras.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/prototype.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/sizzle.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/snapsie.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/atoms.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/htmlutils.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/ui-element.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-browserdetect.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-browserbot.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/find_matching_child.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-api.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-commandhandlers.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-executionloop.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-remoterunner.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-logging.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-version.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/util.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/xmltoken.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/dom.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/xpath.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/javascript-xpath-0.1.11.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/user-extensions.js"></script>
<script language="JavaScript" type="text/javascript">
function cleanUp() {
if (LOG != null) {
LOG.close();
}
}
</script>
</head>
<body onLoad="setTimeout(function(){runSeleniumTest();},1000)" onUnload="cleanUp()">
<table border="1" style="height: 100%; width: 100%;">
<tr>
<td width="50%">
<table>
<tr>
<td class="remoterunner">
<h4><a href="http://seleniumhq.org">Selenium</a> Functional Testing for Web Apps</h4>
Open Source From <a href="http://seleniumhq.org/about/contributors.html">ThoughtWorks and Friends</a>
<form action="">
<br/>
<iframe id="seleniumLoggingFrame" name="seleniumLoggingFrame" src="Blank.html" style="border: 0; height: 0; width: 0; "></iframe>
<fieldset>
<button type="button" onclick="LOG.show();">
Show Log
</button>
<label><INPUT TYPE="CHECKBOX" NAME="FASTMODE" VALUE="YES" onmouseup="slowClicked()"> Slow Mode</label>
</fieldset>
</form>
</td>
</tr>
</table>
<form action="">
<label id="context" name="context"></label>
</form>
</td>
<td width="50%" class="remoterunner">
<h4>Command History:</h4>
<form name="commands">
<textarea style="overflow:auto; height:8em; width:100%" wrap="off" id="commandList"></textarea>
</form>
</td>
</tr>
<tr>
<td colspan="2" height="100%">
<iframe name="selenium_myiframe" id="selenium_myiframe" src="Blank.html" height="100%" width="100%"></iframe>
</td>
</tr>
</table>
</body>
</html>
...@@ -23,8 +23,11 @@ http-equiv="content-type"> ...@@ -23,8 +23,11 @@ http-equiv="content-type">
<link rel="stylesheet" type="text/css" href="selenium.css" /> <link rel="stylesheet" type="text/css" href="selenium.css" />
<script type="text/javascript" src="scripts/xmlextras.js"></script> <script type="text/javascript" src="scripts/xmlextras.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/prototype.js"></script> <script language="JavaScript" type="text/javascript" src="lib/prototype.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/cssQuery/cssQuery-p.js"></script> <script language="JavaScript" type="text/javascript" src="lib/sizzle.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/snapsie.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/atoms.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/htmlutils.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/htmlutils.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/ui-element.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-browserdetect.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/selenium-browserdetect.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-browserbot.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/selenium-browserbot.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/find_matching_child.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/find_matching_child.js"></script>
...@@ -34,18 +37,13 @@ http-equiv="content-type"> ...@@ -34,18 +37,13 @@ http-equiv="content-type">
<script language="JavaScript" type="text/javascript" src="scripts/selenium-remoterunner.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/selenium-remoterunner.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-logging.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/selenium-logging.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-version.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/selenium-version.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/misc.js"></script> <script language="JavaScript" type="text/javascript" src="xpath/util.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/xmltoken.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/dom.js"></script> <script language="JavaScript" type="text/javascript" src="xpath/dom.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/xpath.js"></script> <script language="JavaScript" type="text/javascript" src="xpath/xpath.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/javascript-xpath-0.1.11.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/user-extensions.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/user-extensions.js"></script>
<script language="JavaScript" type="text/javascript"> <script language="JavaScript" type="text/javascript">
function openDomViewer() {
var autFrame = document.getElementById('selenium_myiframe');
var autFrameDocument = getIframeDocument(autFrame);
var domViewer = window.open(getDocumentBase(document) + 'domviewer/domviewer.html');
domViewer.rootDocument = autFrameDocument;
return false;
}
function cleanUp() { function cleanUp() {
if (LOG != null) { if (LOG != null) {
...@@ -58,30 +56,22 @@ http-equiv="content-type"> ...@@ -58,30 +56,22 @@ http-equiv="content-type">
<body onLoad="setTimeout(function(){runSeleniumTest();},1000)" onUnload="cleanUp()"> <body onLoad="setTimeout(function(){runSeleniumTest();},1000)" onUnload="cleanUp()">
<table border="1" style="height: 100%;"> <table border="1" style="height: 100%; width: 100%;">
<tr> <tr>
<td width="50%" height="30%"> <td width="50%">
<table> <table>
<tr> <tr>
<td> <td class="remoterunner">
<img src="selenium-logo.png"> <h4><a href="http://seleniumhq.org">Selenium</a> Functional Testing for Web Apps</h4>
</td> Open Source From <a href="http://seleniumhq.org/about/contributors.html">ThoughtWorks and Friends</a>
<td>
<h1><a href="http://selenium.thoughtworks.com" >Selenium</a> Functional Testing for Web Apps</h1>
Open Source From <a href="http://www.thoughtworks.com">ThoughtWorks, Inc</a> and Friends
<form action=""> <form action="">
<br/>Slow Mode:<INPUT TYPE="CHECKBOX" NAME="FASTMODE" VALUE="YES" onmouseup="slowClicked()"> <br/>
<iframe id="seleniumLoggingFrame" name="seleniumLoggingFrame" src="Blank.html" style="border: 0; height: 0; width: 0; "></iframe> <iframe id="seleniumLoggingFrame" name="seleniumLoggingFrame" src="Blank.html" style="border: 0; height: 0; width: 0; "></iframe>
<fieldset> <fieldset>
<legend>Tools</legend>
<button type="button" id="domViewer1" onclick="openDomViewer();">
View DOM
</button>
<button type="button" onclick="LOG.show();"> <button type="button" onclick="LOG.show();">
Show Log Show Log
</button> </button>
<label><INPUT TYPE="CHECKBOX" NAME="FASTMODE" VALUE="YES" onmouseup="slowClicked()"> Slow Mode</label>
</fieldset> </fieldset>
</form> </form>
...@@ -93,13 +83,15 @@ http-equiv="content-type"> ...@@ -93,13 +83,15 @@ http-equiv="content-type">
<label id="context" name="context"></label> <label id="context" name="context"></label>
</form> </form>
</td> </td>
<td width="50%" height="30%"> <td width="50%" class="remoterunner">
<b>Last Four Test Commands:</b><br/> <h4>Command History:</h4>
<div id="commandList"></div> <form name="commands">
<textarea style="overflow:auto; height:8em; width:100%" wrap="off" id="commandList"></textarea>
</form>
</td> </td>
</tr> </tr>
<tr> <tr>
<td colspan="2" height="70%"> <td colspan="2" height="100%">
<iframe name="selenium_myiframe" id="selenium_myiframe" src="Blank.html" height="100%" width="100%"></iframe> <iframe name="selenium_myiframe" id="selenium_myiframe" src="Blank.html" height="100%" width="100%"></iframe>
</td> </td>
</tr> </tr>
......
...@@ -67,7 +67,7 @@ Copyright 2004 ThoughtWorks, Inc ...@@ -67,7 +67,7 @@ Copyright 2004 ThoughtWorks, Inc
} }
function go() { function go() {
if (!browserVersion.isHTA) return true; if (!browserVersion.isHTA && !browserVersion.isChrome) return true;
var inputs = document.getElementsByTagName("input"); var inputs = document.getElementsByTagName("input");
var queryString = ""; var queryString = "";
for (var i = 0; i < inputs.length; i++) { for (var i = 0; i < inputs.length; i++) {
......
...@@ -35,16 +35,16 @@ Copyright 2005 ThoughtWorks, Inc ...@@ -35,16 +35,16 @@ Copyright 2005 ThoughtWorks, Inc
<td></td> <td></td>
<td class="selenium splash"> <td class="selenium splash">
<img src="selenium-logo.png" align="right"> <a href="http://seleniumhq.org" title="Visit the Selenium website"><img border="0" align="right" src="selenium-logo.png"></a>
<h1>Selenium</h1> <h1>Selenium</h1>
<h2>by <a href="http://www.thoughtworks.com">ThoughtWorks</a> and friends</h2> <h2>by <a href="http://www.thoughtworks.com">ThoughtWorks</a> and <a href="http://seleniumhq.org/about/contributors.html">friends</a></h2>
<p> <p>
For more information on Selenium, visit For more information on Selenium, visit
<pre> <pre>
<a href="http://selenium.openqa.org" target="_blank">http://selenium.openqa.org</a> <a href="http://seleniumhq.org" target="_blank">http://seleniumhq.org</a>
</pre> </pre>
</td> </td>
......
...@@ -26,14 +26,14 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function ...@@ -26,14 +26,14 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function
<title>Selenium Functional Test Runner</title> <title>Selenium Functional Test Runner</title>
<link rel="stylesheet" type="text/css" href="selenium.css"/> <link rel="stylesheet" type="text/css" href="selenium.css"/>
<script type="text/javascript" src="scripts/narcissus-defs.js"></script>
<script type="text/javascript" src="scripts/narcissus-parse.js"></script>
<script type="text/javascript" src="scripts/narcissus-exec.js"></script>
<script type="text/javascript" src="scripts/xmlextras.js"></script> <script type="text/javascript" src="scripts/xmlextras.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/prototype.js"></script> <script language="JavaScript" type="text/javascript" src="lib/prototype.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/sizzle.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/snapsie.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/atoms.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/htmlutils.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/htmlutils.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/ui-element.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/scriptaculous/scriptaculous.js"></script> <script language="JavaScript" type="text/javascript" src="lib/scriptaculous/scriptaculous.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/cssQuery/cssQuery-p.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-browserdetect.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/selenium-browserdetect.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-browserbot.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/selenium-browserbot.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/find_matching_child.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/find_matching_child.js"></script>
...@@ -43,19 +43,12 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function ...@@ -43,19 +43,12 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function
<script language="JavaScript" type="text/javascript" src="scripts/selenium-testrunner.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/selenium-testrunner.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-logging.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/selenium-logging.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-version.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/selenium-version.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/misc.js"></script> <script language="JavaScript" type="text/javascript" src="xpath/util.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/xmltoken.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/dom.js"></script> <script language="JavaScript" type="text/javascript" src="xpath/dom.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/xpath.js"></script> <script language="JavaScript" type="text/javascript" src="xpath/xpath.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/javascript-xpath-0.1.11.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/user-extensions.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/user-extensions.js"></script>
<script language="JavaScript" type="text/javascript">
function openDomViewer() {
var autFrame = document.getElementById('selenium_myiframe');
var autFrameDocument = new SeleniumFrame(autFrame).getDocument();
this.rootDocument = autFrameDocument;
var domViewer = window.open(getDocumentBase(document) + 'domviewer/domviewer.html');
return false;
}
</script>
</head> </head>
<body onLoad="onSeleniumLoad();"> <body onLoad="onSeleniumLoad();">
...@@ -69,14 +62,14 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function ...@@ -69,14 +62,14 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function
<iframe name="testSuiteFrame" id="testSuiteFrame" src="./TestPrompt.html" application="yes"></iframe> <iframe name="testSuiteFrame" id="testSuiteFrame" src="./TestPrompt.html" application="yes"></iframe>
</td> </td>
<td width="50%" height="30%"> <td width="50%" height="30%">
<iframe name="testFrame" id="testFrame" application="yes"></iframe> <iframe name="testFrame" id="testFrame" application="yes" src="Blank.html"></iframe>
</td> </td>
<td width="25%"> <td width="25%">
<table class="layout"> <table class="layout">
<tr class="selenium"> <tr class="selenium">
<th width="25%" height="1" class="header"> <th width="25%" height="1" class="header">
<h1><a href="http://selenium.thoughtworks.com" title="The Selenium Project">Selenium</a> TestRunner <h1><a href="http://seleniumhq.org" title="The Selenium Project">Selenium</a> TestRunner
</h1> </h1>
</th> </th>
</tr> </tr>
...@@ -87,16 +80,16 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function ...@@ -87,16 +80,16 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function
<div id="imageButtonPanel"> <div id="imageButtonPanel">
<button type="button" id="runSuite" onClick="htmlTestRunner.startTestSuite();" <button type="button" id="runSuite" onClick="htmlTestRunner.startTestSuite();"
title="Run All tests" accesskey="a"> title="Run All tests [a]" accesskey="a">
</button> </button>
<button type="button" id="runSeleniumTest" onClick="htmlTestRunner.runSingleTest();" <button type="button" id="runSeleniumTest" onClick="htmlTestRunner.runSingleTest();"
title="Run the Selected test" accesskey="r"> title="Run the Selected test [r]" accesskey="r">
</button> </button>
<button type="button" id="pauseTest" disabled="disabled" <button type="button" id="pauseTest" disabled="disabled"
title="Pause/Continue" accesskey="p" class="cssPauseTest"> title="Pause/Continue [p]" accesskey="p" class="cssPauseTest">
</button> </button>
<button type="button" id="stepTest" disabled="disabled" <button type="button" id="stepTest" disabled="disabled"
title="Step" accesskey="s"> title="Step [s]" accesskey="s">
</button> </button>
</div> </div>
...@@ -146,9 +139,6 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function ...@@ -146,9 +139,6 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function
<fieldset> <fieldset>
<legend>Tools</legend> <legend>Tools</legend>
<button type="button" id="domViewer1" onClick="openDomViewer();">
View DOM
</button>
<button type="button" onClick="LOG.show();"> <button type="button" onClick="LOG.show();">
Show Log Show Log
</button> </button>
......
...@@ -26,14 +26,14 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function ...@@ -26,14 +26,14 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function
<title>Selenium Functional Test Runner</title> <title>Selenium Functional Test Runner</title>
<link rel="stylesheet" type="text/css" href="selenium.css"/> <link rel="stylesheet" type="text/css" href="selenium.css"/>
<script type="text/javascript" src="scripts/narcissus-defs.js"></script>
<script type="text/javascript" src="scripts/narcissus-parse.js"></script>
<script type="text/javascript" src="scripts/narcissus-exec.js"></script>
<script type="text/javascript" src="scripts/xmlextras.js"></script> <script type="text/javascript" src="scripts/xmlextras.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/prototype.js"></script> <script language="JavaScript" type="text/javascript" src="lib/prototype.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/sizzle.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/snapsie.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/atoms.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/htmlutils.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/htmlutils.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/ui-element.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/scriptaculous/scriptaculous.js"></script> <script language="JavaScript" type="text/javascript" src="lib/scriptaculous/scriptaculous.js"></script>
<script language="JavaScript" type="text/javascript" src="lib/cssQuery/cssQuery-p.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-browserdetect.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/selenium-browserdetect.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-browserbot.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/selenium-browserbot.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/find_matching_child.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/find_matching_child.js"></script>
...@@ -43,19 +43,12 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function ...@@ -43,19 +43,12 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function
<script language="JavaScript" type="text/javascript" src="scripts/selenium-testrunner.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/selenium-testrunner.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-logging.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/selenium-logging.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/selenium-version.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/selenium-version.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/misc.js"></script> <script language="JavaScript" type="text/javascript" src="xpath/util.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/xmltoken.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/dom.js"></script> <script language="JavaScript" type="text/javascript" src="xpath/dom.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/xpath.js"></script> <script language="JavaScript" type="text/javascript" src="xpath/xpath.js"></script>
<script language="JavaScript" type="text/javascript" src="xpath/javascript-xpath-0.1.11.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/user-extensions.js"></script> <script language="JavaScript" type="text/javascript" src="scripts/user-extensions.js"></script>
<script language="JavaScript" type="text/javascript">
function openDomViewer() {
var autFrame = document.getElementById('selenium_myiframe');
var autFrameDocument = new SeleniumFrame(autFrame).getDocument();
this.rootDocument = autFrameDocument;
var domViewer = window.open(getDocumentBase(document) + 'domviewer/domviewer.html');
return false;
}
</script>
</head> </head>
<body onLoad="onSeleniumLoad();"> <body onLoad="onSeleniumLoad();">
...@@ -69,14 +62,14 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function ...@@ -69,14 +62,14 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function
<iframe name="testSuiteFrame" id="testSuiteFrame" src="./TestPrompt.html" application="yes"></iframe> <iframe name="testSuiteFrame" id="testSuiteFrame" src="./TestPrompt.html" application="yes"></iframe>
</td> </td>
<td width="50%" height="30%"> <td width="50%" height="30%">
<iframe name="testFrame" id="testFrame" application="yes"></iframe> <iframe name="testFrame" id="testFrame" application="yes" src="Blank.html"></iframe>
</td> </td>
<td width="25%"> <td width="25%">
<table class="layout"> <table class="layout">
<tr class="selenium"> <tr class="selenium">
<th width="25%" height="1" class="header"> <th width="25%" height="1" class="header">
<h1><a href="http://selenium.thoughtworks.com" title="The Selenium Project">Selenium</a> TestRunner <h1><a href="http://seleniumhq.org" title="The Selenium Project">Selenium</a> TestRunner
</h1> </h1>
</th> </th>
</tr> </tr>
...@@ -87,16 +80,16 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function ...@@ -87,16 +80,16 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function
<div id="imageButtonPanel"> <div id="imageButtonPanel">
<button type="button" id="runSuite" onClick="htmlTestRunner.startTestSuite();" <button type="button" id="runSuite" onClick="htmlTestRunner.startTestSuite();"
title="Run All tests" accesskey="a"> title="Run All tests [a]" accesskey="a">
</button> </button>
<button type="button" id="runSeleniumTest" onClick="htmlTestRunner.runSingleTest();" <button type="button" id="runSeleniumTest" onClick="htmlTestRunner.runSingleTest();"
title="Run the Selected test" accesskey="r"> title="Run the Selected test [r]" accesskey="r">
</button> </button>
<button type="button" id="pauseTest" disabled="disabled" <button type="button" id="pauseTest" disabled="disabled"
title="Pause/Continue" accesskey="p" class="cssPauseTest"> title="Pause/Continue [p]" accesskey="p" class="cssPauseTest">
</button> </button>
<button type="button" id="stepTest" disabled="disabled" <button type="button" id="stepTest" disabled="disabled"
title="Step" accesskey="s"> title="Step [s]" accesskey="s">
</button> </button>
</div> </div>
...@@ -146,9 +139,6 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function ...@@ -146,9 +139,6 @@ to work-around a bug in IE on Win2K whereby the HTA application doesn't function
<fieldset> <fieldset>
<legend>Tools</legend> <legend>Tools</legend>
<button type="button" id="domViewer1" onClick="openDomViewer();">
View DOM
</button>
<button type="button" onClick="LOG.show();"> <button type="button" onClick="LOG.show();">
Show Log Show Log
</button> </button>
......
/******************************************************************************
* Defines default styles for site pages. *
******************************************************************************/
.hidden {
display: none;
}
img{
display: inline;
border: none;
}
.box{
background: #fcfcfc;
border: 1px solid #000;
border-color: blue;
color: #000000;
margin: 10px auto;
padding: 3px;
vertical-align: bottom;
}
a {
text-decoration: none;
}
body {
background-color: #ffffff;
color: #000000;
font-family: Arial, Helvetica, sans-serif;
font-size: 10pt;
}
h2 {
font-size: 140%;
}
h3 {
font-size: 120%;
}
h4 {
font-size: 100%;
}
pre {
font-family: Courier New, Courier, monospace;
font-size: 80%;
}
td, th {
font-family: Arial, Helvetica, sans-serif;
font-size: 10pt;
text-align: left;
vertical-align: top;
}
th {
font-weight: bold;
vertical-align: bottom;
}
ul {
list-style-type: square;
}
#demoBox {
border-color: #000000;
border-style: solid;
border-width: 1px;
padding: 8px;
width: 24em;
}
.footer {
margin-bottom: 0px;
text-align: center;
}
/* Boxed table styles */
table.boxed {
border-spacing: 2px;
empty-cells: hide;
}
td.boxed, th.boxed, th.boxedHeader {
background-color: #ffffff;
border-color: #000000;
border-style: solid;
border-width: 1px;
color: #000000;
padding: 2px;
padding-left: 8px;
padding-right: 8px;
}
th.boxed {
background-color: #c0c0c0;
}
th.boxedHeader {
background-color: #808080;
color: #ffffff;
}
a.object {
color: #0000ff;
}
li {
white-space: nowrap;
}
ul {
list-style-type: square;
margin-left: 0px;
padding-left: 1em;
}
.boxlevel1{
background: #FFD700;
}
.boxlevel2{
background: #D2691E;
}
.boxlevel3{
background: #DCDCDC;
}
.boxlevel4{
background: #F5F5F5;
}
.boxlevel5{
background: #BEBEBE;
}
.boxlevel6{
background: #D3D3D3;
}
.boxlevel7{
background: #A9A9A9;
}
.boxlevel8{
background: #191970;
}
.boxlevel9{
background: #000080;
}
.boxlevel10{
background: #6495ED;
}
.boxlevel11{
background: #483D8B;
}
.boxlevel12{
background: #6A5ACD;
}
.boxlevel13{
background: #7B68EE;
}
.boxlevel14{
background: #8470FF;
}
.boxlevel15{
background: #0000CD;
}
.boxlevel16{
background: #4169E1;
}
.boxlevel17{
background: #0000FF;
}
.boxlevel18{
background: #1E90FF;
}
.boxlevel19{
background: #00BFFF;
}
.boxlevel20{
background: #87CEEB;
}
.boxlevel21{
background: #B0C4DE;
}
.boxlevel22{
background: #ADD8E6;
}
.boxlevel23{
background: #00CED1;
}
.boxlevel24{
background: #48D1CC;
}
.boxlevel25{
background: #40E0D0;
}
.boxlevel26{
background: #008B8B;
}
.boxlevel27{
background: #00FFFF;
}
.boxlevel28{
background: #E0FFFF;
}
.boxlevel29{
background: #5F9EA0;
}
.boxlevel30{
background: #66CDAA;
}
.boxlevel31{
background: #7FFFD4;
}
.boxlevel32{
background: #006400;
}
.boxlevel33{
background: #556B2F;
}
.boxlevel34{
background: #8FBC8F;
}
.boxlevel35{
background: #2E8B57;
}
.boxlevel36{
background: #3CB371;
}
.boxlevel37{
background: #20B2AA;
}
.boxlevel38{
background: #00FF7F;
}
.boxlevel39{
background: #7CFC00;
}
.boxlevel40{
background: #90EE90;
}
.boxlevel41{
background: #00FF00;
}
.boxlevel41{
background: #7FFF00;
}
.boxlevel42{
background: #00FA9A;
}
.boxlevel43{
background: #ADFF2F;
}
.boxlevel44{
background: #32CD32;
}
\ No newline at end of file
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>DOM Viewer</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<link rel="stylesheet" type="text/css" href="domviewer.css"/>
<script type="text/javascript" src="selenium-domviewer.js"></script>
</head>
<body onload="loadDomViewer();">
<h3>DOM Viewer</h3>
<p> This page is generated using JavaScript. If you see this text, your
browser doesn't support JavaScript.</p>
</body>
</html>
var HIDDEN="hidden";
var LEVEL = "level";
var PLUS_SRC="butplus.gif";
var MIN_SRC="butmin.gif";
var newRoot;
var maxColumns=1;
function loadDomViewer() {
// See if the rootDocument variable has been set on this window.
var rootDocument = window.rootDocument;
// If not look to the opener for an explicity rootDocument variable, otherwise, use the opener document
if (!rootDocument && window.opener) {
rootDocument = window.opener.rootDocument || window.opener.document;
}
if (rootDocument) {
document.body.innerHTML = displayDOM(rootDocument);
}
else {
document.body.innerHTML = "<b>Must specify rootDocument for window. This can be done by setting the rootDocument variable on this window, or on the opener window for a popup window.</b>";
}
}
function displayDOM(root){
var str = "";
str+="<table>";
str += treeTraversal(root,0);
// to make table columns work well.
str += "<tr>";
for (var i=0; i < maxColumns; i++) {
str+= "<td>&nbsp;&nbsp;&nbsp;&nbsp;</td>";
}
str += "</tr>";
str += "</table>";
return str;
}
function checkForChildren(element){
if(!element.hasChildNodes())
return false;
var nodes = element.childNodes;
var size = nodes.length;
var count=0;
for(var i=0; i< size; i++){
var node = nodes.item(i);
//if(node.toString()=="[object Text]"){
//this is equalent to the above
//but will work with more browsers
if(node.nodeType!=1){
count++;
}
}
if(count == size)
return false;
else
return true;
}
function treeTraversal(root, level){
var str = "";
var nodes= null;
var size = null;
//it is supposed to show the last node,
//but the last node is always nodeText type
//and we don't show it
if(!root.hasChildNodes())
return "";//displayNode(root,level,false);
nodes = root.childNodes;
size = nodes.length;
for(var i=0; i< size; i++){
var element = nodes.item(i);
//if the node is textNode, don't display
if(element.nodeType==1){
str+= displayNode(element,level,checkForChildren(element));
str+=treeTraversal(element, level+1);
}
}
return str;
}
function displayNode(element, level, isLink){
nodeContent = getNodeContent(element);
columns = Math.round((nodeContent.length / 12) + 0.5);
if (columns + level > maxColumns) {
maxColumns = columns + level;
}
var str ="<tr class='"+LEVEL+level+"'>";
for (var i=0; i < level; i++)
str+= "<td> </td>";
str+="<td colspan='"+ columns +"' class='box"+" boxlevel"+level+"' >";
if(isLink){
str+='<a onclick="hide(this);return false;" href="javascript:void();">';
str+='<img src="'+MIN_SRC+'" />';
}
str += nodeContent;
if(isLink)
str+="</a></td></tr>";
return str;
}
function getNodeContent(element) {
str = "";
id ="";
if (element.id != null && element.id != "") {
id = " ID(" + element.id +")";
}
name ="";
if (element.name != null && element.name != "") {
name = " NAME(" + element.name + ")";
}
value ="";
if (element.value != null && element.value != "") {
value = " VALUE(" + element.value + ")";
}
href ="";
if (element.href != null && element.href != "") {
href = " HREF(" + element.href + ")";
}
clazz = "";
if (element.className != null && element.className != "") {
clazz = " CLASS(" + element.className + ")";
}
src = "";
if (element.src != null && element.src != "") {
src = " SRC(" + element.src + ")";
}
alt = "";
if (element.alt != null && element.alt != "") {
alt = " ALT(" + element.alt + ")";
}
type = "";
if (element.type != null && element.type != "") {
type = " TYPE(" + element.type + ")";
}
text ="";
if (element.text != null && element.text != "" && element.text != "undefined") {
text = " #TEXT(" + trim(element.text) +")";
}
str+=" <b>"+ element.nodeName + id + alt + type + clazz + name + value + href + src + text + "</b>";
return str;
}
function trim(val) {
val2 = val.substring(0,40) + " ";
var spaceChr = String.fromCharCode(32);
var length = val2.length;
var retVal = "";
var ix = length -1;
while(ix > -1){
if(val2.charAt(ix) == spaceChr) {
} else {
retVal = val2.substring(0, ix +1);
break;
}
ix = ix-1;
}
if (val.length > 40) {
retVal += "...";
}
return retVal;
}
function hide(hlink){
var isHidden = false;
var image = hlink.firstChild;
if(image.src.toString().indexOf(MIN_SRC)!=-1){
image.src=PLUS_SRC;
isHidden=true;
}else{
image.src=MIN_SRC;
}
var rowObj= hlink.parentNode.parentNode;
var rowLevel = parseInt(rowObj.className.substring(LEVEL.length));
var sibling = rowObj.nextSibling;
var siblingLevel = sibling.className.substring(LEVEL.length);
if(siblingLevel.indexOf(HIDDEN)!=-1){
siblingLevel = siblingLevel.substring(0,siblingLevel.length - HIDDEN.length-1);
}
siblingLevel=parseInt(siblingLevel);
while(sibling!=null && rowLevel<siblingLevel){
if(isHidden){
sibling.className += " "+ HIDDEN;
}else if(!isHidden && sibling.className.indexOf(HIDDEN)!=-1){
var str = sibling.className;
sibling.className=str.substring(0, str.length - HIDDEN.length-1);
}
sibling = sibling.nextSibling;
siblingLevel = parseInt(sibling.className.substring(LEVEL.length));
}
}
function LOG(message) {
window.opener.LOG.warn(message);
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/**
* This file wraps the Snapsie ActiveX object, exposing a single saveSnapshot()
* method on a the object.
*
* See http://snapsie.sourceforge.net/
*/
function Snapsie() {
// private methods
function isQuirksMode(inDocument) {
return (inDocument.compatMode == 'BackCompat');
}
function getDrawableElement(inDocument) {
if (isQuirksMode(inDocument)) {
var body = inDocument.getElementsByTagName('body')[0];
return body;
}
else {
// standards mode
return inDocument.documentElement;
}
}
/**
* Returns the canonical Windows path for a given path. This means
* basically replacing any forwards slashes with backslashes.
*
* @param path the path whose canonical form to return
*/
function getCanonicalPath(path) {
path = path.replace(/\//g, '\\');
path = path.replace(/\\\\/g, '\\');
return path;
}
// public methods
/**
* Saves a screenshot of the current document to a file. If frameId is
* specified, a screenshot of just the frame is captured instead.
*
* @param outputFile the file to which to save the screenshot
* @param frameId the frame to capture; omit to capture entire document
*/
this.saveSnapshot = function(outputFile, frameId) {
var drawableElement = getDrawableElement(document);
var drawableInfo = {
overflow : drawableElement.style.overflow
, scrollLeft: drawableElement.scrollLeft
, scrollTop : drawableElement.scrollTop
};
drawableElement.style.overflow = 'hidden';
var capturableDocument;
var frameBCR = { left: 0, top: 0 };
if (!frameId) {
capturableDocument = document;
}
else {
var frame = document.getElementById(frameId);
capturableDocument = frame.document;
// scroll as much of the frame into view as possible
frameBCR = frame.getBoundingClientRect();
window.scroll(frameBCR.left, frameBCR.top);
frameBCR = frame.getBoundingClientRect();
}
var nativeObj = new ActiveXObject('Snapsie.CoSnapsie');
nativeObj.saveSnapshot(
getCanonicalPath(outputFile),
frameId,
drawableElement.scrollWidth,
drawableElement.scrollHeight,
drawableElement.clientWidth,
drawableElement.clientHeight,
drawableElement.clientLeft,
drawableElement.clientTop,
frameBCR.left,
frameBCR.top
);
// revert
drawableElement.style.overflow = drawableInfo.overflow;
drawableElement.scrollLeft = drawableInfo.scrollLeft;
drawableElement.scrollTop = drawableInfo.scrollTop;
}
};
This diff is collapsed.
...@@ -46,7 +46,7 @@ function selenium_frameRunTest(oldOnLoadRoutine) { ...@@ -46,7 +46,7 @@ function selenium_frameRunTest(oldOnLoadRoutine) {
} }
function seleniumOnLoad() { function seleniumOnLoad() {
injectedSessionId = @SESSION_ID@; injectedSessionId = "@SESSION_ID@";
window["selenium_has_been_loaded_into_this_window"] = true; window["selenium_has_been_loaded_into_this_window"] = true;
runSeleniumTest(); runSeleniumTest();
} }
...@@ -66,7 +66,7 @@ else { ...@@ -66,7 +66,7 @@ else {
throw "causing a JavaScript error to tell the world that I did not arrange to be run on load"; throw "causing a JavaScript error to tell the world that I did not arrange to be run on load";
} }
injectedSessionId = @SESSION_ID@; injectedSessionId = "@SESSION_ID@";
proxyInjectionMode = true; proxyInjectionMode = true;
} }
</script> </script>
/*
This is an experiment in using the Narcissus JavaScript engine
to allow Selenium scripts to be written in plain JavaScript.
The 'jsparse' function will compile each high level block into a Selenium table script.
TODO:
1) Test! (More browsers, more sample scripts)
2) Stepping and walking lower levels of the parse tree
3) Calling Selenium commands directly from JavaScript
4) Do we want comments to appear in the TestRunner?
5) Fix context so variables don't have to be global
For now, variables defined with "var" won't be found
if used later on in a script.
6) Fix formatting
*/
function jsparse() {
var script = document.getElementById('sejs')
var fname = 'javascript script';
parse_result = parse(script.text, fname, 0);
var x2 = new ExecutionContext(GLOBAL_CODE);
ExecutionContext.current = x2;
var new_test_source = '';
var new_line = '';
for (i=0;i<parse_result.$length;i++){
var the_start = parse_result[i].start;
var the_end;
if ( i == (parse_result.$length-1)) {
the_end = parse_result.tokenizer.source.length;
} else {
the_end = parse_result[i+1].start;
}
var script_fragment = parse_result.tokenizer.source.slice(the_start,the_end)
new_line = '<tr><td style="display:none;" class="js">getEval</td>' +
'<td style="display:none;">currentTest.doNextCommand()</td>' +
'<td style="white-space: pre;">' + script_fragment + '</td>' +
'<td></td></tr>\n';
new_test_source += new_line;
//eval(script_fragment);
};
execute(parse_result,x2)
// Create HTML Table
body = document.body
body.innerHTML += "<table class='selenium' id='se-js-table'>"+
"<tbody>" +
"<tr><td>// " + document.title + "</td></tr>" +
new_test_source +
"</tbody" +
"</table>";
//body.innerHTML = "<pre>" + parse_result + "</pre>"
}
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is the Narcissus JavaScript engine.
*
* The Initial Developer of the Original Code is
* Brendan Eich <brendan@mozilla.org>.
* Portions created by the Initial Developer are Copyright (C) 2004
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
/*
* Narcissus - JS implemented in JS.
*
* Well-known constants and lookup tables. Many consts are generated from the
* tokens table via eval to minimize redundancy, so consumers must be compiled
* separately to take advantage of the simple switch-case constant propagation
* done by SpiderMonkey.
*/
// jrh
//module('JS.Defs');
GLOBAL = this;
var tokens = [
// End of source.
"END",
// Operators and punctuators. Some pair-wise order matters, e.g. (+, -)
// and (UNARY_PLUS, UNARY_MINUS).
"\n", ";",
",",
"=",
"?", ":", "CONDITIONAL",
"||",
"&&",
"|",
"^",
"&",
"==", "!=", "===", "!==",
"<", "<=", ">=", ">",
"<<", ">>", ">>>",
"+", "-",
"*", "/", "%",
"!", "~", "UNARY_PLUS", "UNARY_MINUS",
"++", "--",
".",
"[", "]",
"{", "}",
"(", ")",
// Nonterminal tree node type codes.
"SCRIPT", "BLOCK", "LABEL", "FOR_IN", "CALL", "NEW_WITH_ARGS", "INDEX",
"ARRAY_INIT", "OBJECT_INIT", "PROPERTY_INIT", "GETTER", "SETTER",
"GROUP", "LIST",
// Terminals.
"IDENTIFIER", "NUMBER", "STRING", "REGEXP",
// Keywords.
"break",
"case", "catch", "const", "continue",
"debugger", "default", "delete", "do",
"else", "enum",
"false", "finally", "for", "function",
"if", "in", "instanceof",
"new", "null",
"return",
"switch",
"this", "throw", "true", "try", "typeof",
"var", "void",
"while", "with",
// Extensions
"require", "bless", "mixin", "import"
];
// Operator and punctuator mapping from token to tree node type name.
// NB: superstring tokens (e.g., ++) must come before their substring token
// counterparts (+ in the example), so that the opRegExp regular expression
// synthesized from this list makes the longest possible match.
var opTypeNames = {
'\n': "NEWLINE",
';': "SEMICOLON",
',': "COMMA",
'?': "HOOK",
':': "COLON",
'||': "OR",
'&&': "AND",
'|': "BITWISE_OR",
'^': "BITWISE_XOR",
'&': "BITWISE_AND",
'===': "STRICT_EQ",
'==': "EQ",
'=': "ASSIGN",
'!==': "STRICT_NE",
'!=': "NE",
'<<': "LSH",
'<=': "LE",
'<': "LT",
'>>>': "URSH",
'>>': "RSH",
'>=': "GE",
'>': "GT",
'++': "INCREMENT",
'--': "DECREMENT",
'+': "PLUS",
'-': "MINUS",
'*': "MUL",
'/': "DIV",
'%': "MOD",
'!': "NOT",
'~': "BITWISE_NOT",
'.': "DOT",
'[': "LEFT_BRACKET",
']': "RIGHT_BRACKET",
'{': "LEFT_CURLY",
'}': "RIGHT_CURLY",
'(': "LEFT_PAREN",
')': "RIGHT_PAREN"
};
// Hash of keyword identifier to tokens index. NB: we must null __proto__ to
// avoid toString, etc. namespace pollution.
var keywords = {__proto__: null};
// Define const END, etc., based on the token names. Also map name to index.
var consts = " ";
for (var i = 0, j = tokens.length; i < j; i++) {
if (i > 0)
consts += "; ";
var t = tokens[i];
if (/^[a-z]/.test(t)) {
consts += t.toUpperCase();
keywords[t] = i;
} else {
consts += (/^\W/.test(t) ? opTypeNames[t] : t);
}
consts += " = " + i;
tokens[t] = i;
}
eval(consts + ";");
// Map assignment operators to their indexes in the tokens array.
var assignOps = ['|', '^', '&', '<<', '>>', '>>>', '+', '-', '*', '/', '%'];
for (i = 0, j = assignOps.length; i < j; i++) {
t = assignOps[i];
assignOps[t] = tokens[t];
}
/*
This is an experiment in creating a "selenese" parser that drastically
cuts down on the line noise associated with writing tests in HTML.
The 'parse' function will accept the follow sample commands.
test-cases:
//comment
command "param"
command "param" // comment
command "param" "param2"
command "param" "param2" // this is a comment
TODO:
1) Deal with multiline parameters
2) Escape quotes properly
3) Determine whether this should/will become the "preferred" syntax
for delivered Selenium self-test scripts
*/
function separse(doc) {
// Get object
script = doc.getElementById('testcase')
// Split into lines
lines = script.text.split('\n');
var command_pattern = / *(\w+) *"([^"]*)" *(?:"([^"]*)"){0,1}(?: *(\/\/ *.+))*/i;
var comment_pattern = /^ *(\/\/ *.+)/
// Regex each line into selenium command and convert into table row.
// eg. "<command> <quote> <quote> <comment>"
var new_test_source = '';
var new_line = '';
for (var x=0; x < lines.length; x++) {
result = lines[x].match(command_pattern);
if (result != null) {
new_line = "<tr><td>" + (result[1] || '&nbsp;') + "</td>" +
"<td>" + (result[2] || '&nbsp;') + "</td>" +
"<td>" + (result[3] || '&nbsp;') + "</td>" +
"<td>" + (result[4] || '&nbsp;') + "</td></tr>\n";
new_test_source += new_line;
}
result = lines[x].match(comment_pattern);
if (result != null) {
new_line = '<tr><td rowspan="1" colspan="4">' +
(result[1] || '&nbsp;') +
'</td></tr>';
new_test_source += new_line;
}
}
// Create HTML Table
body = doc.body
body.innerHTML += "<table class='selenium' id='testtable'>"+
new_test_source +
"</table>";
}
...@@ -74,7 +74,7 @@ var BrowserVersion = function() { ...@@ -74,7 +74,7 @@ var BrowserVersion = function() {
} }
} };
...@@ -93,15 +93,28 @@ var BrowserVersion = function() { ...@@ -93,15 +93,28 @@ var BrowserVersion = function() {
self.isHTA = false; self.isHTA = false;
} }
} }
if (navigator.appVersion.match(/MSIE 6.0/)) {
this.isIE6 = true;
}
if ("0" == navigator.appMinorVersion) { if ("0" == navigator.appMinorVersion) {
this.preSV1 = true; this.preSV1 = true;
if (navigator.appVersion.match(/MSIE 6.0/)) { if (this.isIE6) {
this.appearsToBeBrokenInitialIE6 = true; this.appearsToBeBrokenInitialIE6 = true;
} }
} }
return; return;
} }
// google chrome has both 'safari' and 'gecko' in the user agent so
// it has to go before them - see http://www.google.com/chrome/intl/en/webmasters-faq.html#useragent
if (navigator.userAgent.indexOf('Chrome/') != -1) {
this.browser = BrowserVersion.GOOGLECHROME;
this.isGoogleChrome = true;
this.isGecko = true;
this.khtml = true;
return;
}
if (navigator.userAgent.indexOf('Safari') != -1) { if (navigator.userAgent.indexOf('Safari') != -1) {
this.browser = BrowserVersion.SAFARI; this.browser = BrowserVersion.SAFARI;
this.isSafari = true; this.isSafari = true;
...@@ -116,11 +129,13 @@ var BrowserVersion = function() { ...@@ -116,11 +129,13 @@ var BrowserVersion = function() {
return; return;
} }
if (navigator.userAgent.indexOf('Firefox') != -1) { if (navigator.userAgent.indexOf('Firefox') != -1 ||
navigator.userAgent.indexOf('Namoroka') != -1 ||
navigator.userAgent.indexOf('Shiretoko') != -1) {
this.browser = BrowserVersion.FIREFOX; this.browser = BrowserVersion.FIREFOX;
this.isFirefox = true; this.isFirefox = true;
this.isGecko = true; this.isGecko = true;
var result = /.*Firefox\/([\d\.]+).*/.exec(navigator.userAgent); var result = /.*[Firefox|Namoroka|Shiretoko]\/([\d\.]+).*/.exec(navigator.userAgent);
if (result) { if (result) {
this.firefoxVersion = result[1]; this.firefoxVersion = result[1];
} }
...@@ -137,7 +152,7 @@ var BrowserVersion = function() { ...@@ -137,7 +152,7 @@ var BrowserVersion = function() {
} }
this.browser = BrowserVersion.UNKNOWN; this.browser = BrowserVersion.UNKNOWN;
} };
BrowserVersion.OPERA = "Opera"; BrowserVersion.OPERA = "Opera";
BrowserVersion.IE = "IE"; BrowserVersion.IE = "IE";
...@@ -145,6 +160,7 @@ BrowserVersion.KONQUEROR = "Konqueror"; ...@@ -145,6 +160,7 @@ BrowserVersion.KONQUEROR = "Konqueror";
BrowserVersion.SAFARI = "Safari"; BrowserVersion.SAFARI = "Safari";
BrowserVersion.FIREFOX = "Firefox"; BrowserVersion.FIREFOX = "Firefox";
BrowserVersion.MOZILLA = "Mozilla"; BrowserVersion.MOZILLA = "Mozilla";
BrowserVersion.GOOGLECHROME = "Google Chrome";
BrowserVersion.UNKNOWN = "Unknown"; BrowserVersion.UNKNOWN = "Unknown";
var browserVersion = new BrowserVersion(); var browserVersion = new BrowserVersion();
...@@ -306,12 +306,14 @@ ActionHandler.prototype.execute = function(seleniumApi, command) { ...@@ -306,12 +306,14 @@ ActionHandler.prototype.execute = function(seleniumApi, command) {
// todo: this conditional logic is ugly // todo: this conditional logic is ugly
seleniumApi.ensureNoUnhandledPopups(); seleniumApi.ensureNoUnhandledPopups();
} }
var terminationCondition = this.actionBlock(command.target, command.value);
// If the handler didn't return a wait flag, check to see if the var handlerCondition = this.actionBlock(command.target, command.value);
// handler was registered with the wait flag.
if (terminationCondition == undefined && this.wait) { // page load waiting takes precedence over any wait condition returned by
terminationCondition = seleniumApi.makePageLoadCondition(); // the action handler.
} var terminationCondition = (this.wait)
? seleniumApi.makePageLoadCondition() : handlerCondition;
return new ActionResult(terminationCondition); return new ActionResult(terminationCondition);
}; };
...@@ -330,7 +332,14 @@ AccessorHandler.prototype.execute = function(seleniumApi, command) { ...@@ -330,7 +332,14 @@ AccessorHandler.prototype.execute = function(seleniumApi, command) {
}; };
function AccessorResult(result) { function AccessorResult(result) {
if (result.terminationCondition) {
var self = this;
this.terminationCondition = function() {
return result.terminationCondition.call(self);
};
} else {
this.result = result; this.result = result;
}
} }
/** /**
...@@ -362,14 +371,15 @@ AssertHandler.prototype.execute = function(seleniumApi, command) { ...@@ -362,14 +371,15 @@ AssertHandler.prototype.execute = function(seleniumApi, command) {
function AssertResult() { function AssertResult() {
this.passed = true; this.passed = true;
} }
AssertResult.prototype.setFailed = function(message) { AssertResult.prototype.setFailed = function(message) {
this.passed = null; this.passed = null;
this.failed = true; this.failed = true;
this.failureMessage = message; this.failureMessage = message;
} };
function SeleniumCommand(command, target, value, isBreakpoint) { function SeleniumCommand(command, target, value, isBreakpoint) {
this.command = command; this.command = command.trim();
this.target = target; this.target = target;
this.value = value; this.value = value;
this.isBreakpoint = isBreakpoint; this.isBreakpoint = isBreakpoint;
......
...@@ -119,7 +119,7 @@ TestLoop.prototype = { ...@@ -119,7 +119,7 @@ TestLoop.prototype = {
_handleCommandError : function(e) { _handleCommandError : function(e) {
if (!e.isSeleniumError) { if (!e.isSeleniumError) {
LOG.exception(e); LOG.exception(e);
var msg = "Selenium failure. Please report to the Selenium Users forum at http://forums.openqa.org, with error details from the log window."; var msg = "Command execution failure. Please search the user group at https://groups.google.com/forum/#!forum/selenium-users for error details from the log window.";
msg += " The error message is: " + extractExceptionMessage(e); msg += " The error message is: " + extractExceptionMessage(e);
return this.commandError(msg); return this.commandError(msg);
} else { } else {
......
...@@ -87,14 +87,14 @@ Logger.prototype = { ...@@ -87,14 +87,14 @@ Logger.prototype = {
logWindow.enableButtons(); logWindow.enableButtons();
} }
if (this.pendingMessages.length > 0) { if (this.pendingMessages.length > 0) {
logWindow.append("info: Appending missed logging messages", "info"); logWindow.append("info("+(new Date().getTime())+"): Appending missed logging messages", "info");
while (this.pendingMessages.length > 0) { while (this.pendingMessages.length > 0) {
var msg = this.pendingMessages.shift(); var msg = this.pendingMessages.shift();
logWindow.append(msg.type + ": " + msg.msg, msg.type); logWindow.append(msg.type + "("+msg.timestamp+"): " + msg.msg, msg.type);
} }
logWindow.append("info: Done appending missed logging messages", "info"); logWindow.append("info("+(new Date().getTime())+"): Done appending missed logging messages", "info");
} }
logWindow.append(logLevel + ": " + message, logLevel); logWindow.append(logLevel + "("+(new Date().getTime())+"): " + message, logLevel);
} }
} else { } else {
// TODO these logging messages are never flushed, which creates // TODO these logging messages are never flushed, which creates
...@@ -144,4 +144,5 @@ var LOG = new Logger(); ...@@ -144,4 +144,5 @@ var LOG = new Logger();
var LogMessage = function(type, msg) { var LogMessage = function(type, msg) {
this.type = type; this.type = type;
this.msg = msg; this.msg = msg;
this.timestamp = (new Date().getTime());
} }
Selenium.version = "0.8.3"; Selenium.version = "2.6";
Selenium.revision = "1879"; Selenium.revision = ".0";
window.top.document.title += " v" + Selenium.version + " [" + Selenium.revision + "]"; window.top.document.title += " v" + Selenium.version + Selenium.revision;
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -48,7 +48,11 @@ iframe { ...@@ -48,7 +48,11 @@ iframe {
width: 100%; width: 100%;
height: 100%; height: 100%;
background: white; background: white;
overflow: auto; /* HBC - this particular property seems to be causing an issue in
conjunction with the native Draw() method in Snapsie. I don't really
see a visual difference from commenting this out, so I'm going ahead
with it.
overflow: auto; */
} }
/*---( Style )---*/ /*---( Style )---*/
...@@ -67,6 +71,19 @@ body, html { ...@@ -67,6 +71,19 @@ body, html {
font-size: 90%; font-size: 90%;
} }
.remoterunner {
font-size: 10pt;
}
.remoterunner fieldset {
padding: 0.25em;
}
.remoterunner button, .remoterunner label {
margin-right: 1em;
}
#controlPanel { #controlPanel {
padding: 0.5ex; padding: 0.5ex;
background: #eee; background: #eee;
...@@ -241,6 +258,7 @@ button, label { ...@@ -241,6 +258,7 @@ button, label {
#logging-console li.error { #logging-console li.error {
font-weight: bold; font-weight: bold;
color: red; color: red;
white-space:pre-wrap;
} }
#logging-console li.warn { #logging-console li.warn {
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
content readystate jar:chrome/readystate.jar!/content/ xpcnativewrappers=no
overlay chrome://browser/content/browser.xul chrome://readystate/content/overlay.xul
content readystate jar:chrome/readystate.jar!/content/ xpcnativewrappers=no
overlay chrome://browser/content/browser.xul chrome://readystate/content/overlay.xul
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment