From 98215a603fb798cdb4178e49061977544aaa45b7 Mon Sep 17 00:00:00 2001 From: wei <> Date: Sat, 10 Dec 2005 11:49:29 +0000 Subject: Initial import selenium functional test framework. --- .../selenium/selenium-seleneserunner.js | 172 +++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 tests/FunctionalTests/selenium/selenium-seleneserunner.js (limited to 'tests/FunctionalTests/selenium/selenium-seleneserunner.js') diff --git a/tests/FunctionalTests/selenium/selenium-seleneserunner.js b/tests/FunctionalTests/selenium/selenium-seleneserunner.js new file mode 100644 index 00000000..e1ae6f88 --- /dev/null +++ b/tests/FunctionalTests/selenium/selenium-seleneserunner.js @@ -0,0 +1,172 @@ +/* +* Copyright 2005 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. +* +*/ + +passColor = "#cfffcf"; +failColor = "#ffcfcf"; +errorColor = "#ffffff"; +workingColor = "#DEE7EC"; +doneColor = "#FFFFCC"; + +slowMode = false; + +var cmd1 = document.createElement("div"); +var cmd2 = document.createElement("div"); +var cmd3 = document.createElement("div"); +var cmd4 = document.createElement("div"); + +var postResult = "START"; + +function runTest() { + var testAppFrame = document.getElementById('myiframe'); + selenium = Selenium.createForFrame(testAppFrame); + + commandFactory = new CommandHandlerFactory(); + commandFactory.registerAll(selenium); + + testLoop = new TestLoop(commandFactory); + + testLoop.nextCommand = nextCommand; + testLoop.commandStarted = commandStarted; + testLoop.commandComplete = commandComplete; + testLoop.commandError = commandError; + testLoop.testComplete = function() {window.status = "Selenium Tests Complete, for this Test"}; + + document.getElementById("commandList").appendChild(cmd4); + document.getElementById("commandList").appendChild(cmd3); + document.getElementById("commandList").appendChild(cmd2); + document.getElementById("commandList").appendChild(cmd1); + + testLoop.start(); +} + +function nextCommand() { + + var xmlHttp = XmlHttp.create(); + + try { + alert("postResult == " + postResult); + if (postResult == "START") { + xmlHttp.open("GET", "driver?seleniumStart=true", false); + } else { + xmlHttp.open("GET", "driver?commandResult=" + postResult, false); + } + xmlHttp.send(null); + } catch(e) { + return null; + } + return extractCommand(xmlHttp); +} + +function extractCommand(xmlHttp) { + if (slowMode) { + delay(2000); + } + + var command; + try { + command = xmlHttp.responseText; + } catch (e) { + alert('could not get responseText: ' + e.message); + } + if (command.substr(0,'|testComplete'.length)=='|testComplete') { + return null; + } + + return createCommandFromWikiRow(command); +} + +function commandStarted(command) { + commandNode = document.createElement("div"); + innerHTML = command.command + '('; + if (command.target != null && command.target != "") { + innerHTML += command.target; + if (command.value != null && command.value != "") { + innerHTML += ', ' + command.value; + } + } + innerHTML += ")"; + commandNode.innerHTML = innerHTML; + commandNode.style.backgroundColor = workingColor; + document.getElementById("commandList").removeChild(cmd1); + document.getElementById("commandList").removeChild(cmd2); + document.getElementById("commandList").removeChild(cmd3); + document.getElementById("commandList").removeChild(cmd4); + cmd4 = cmd3; + cmd3 = cmd2; + cmd2 = cmd1; + cmd1 = commandNode; + document.getElementById("commandList").appendChild(cmd4); + document.getElementById("commandList").appendChild(cmd3); + document.getElementById("commandList").appendChild(cmd2); + document.getElementById("commandList").appendChild(cmd1); +} + +function commandComplete(result) { + if (result.failed) { + postResult = result.failureMessage; + commandNode.title = result.failureMessage; + commandNode.style.backgroundColor = failColor; + } else if (result.passed) { + postResult = "PASSED"; + commandNode.style.backgroundColor = passColor; + } else { + postResult = result.result; + commandNode.style.backgroundColor = doneColor; + } +} + +function commandError(message) { + postResult = "ERROR"; + commandNode.style.backgroundColor = errorColor; + commandNode.title = message; +} + +function slowClicked() { + slowMode = !slowMode; +} + +function delay(millis) { + startMillis = new Date(); + while (true) { + milli = new Date(); + if (milli-startMillis > millis) { + break; + } + } +} + +function getIframeDocument(iframe) { + if (iframe.contentDocument) { + return iframe.contentDocument; + } + else { + return iframe.contentWindow.document; + } +} + +// Parses a Wiki table row into a Javascript expression +function createCommandFromWikiRow(wikiRow) { + var tokens; + if(tokens = wikiRow.trim().match(/^\|([^\|]*)\|([^\|]*)\|([^\|]*)\|$/m)) { + var functionName = tokens[1].trim(); + var arg1 = tokens[2].trim(); + var arg2 = tokens[3].trim(); + return new SeleniumCommand(functionName, arg1, arg2); + } else { + throw new Error("Bad wiki row format:" + wikiRow); + } +} -- cgit v1.2.3