|
What this is
Other links
The source code/* * 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. */ SELENIUM_PROCESS_WAIT = "wait"; starting_up = true; TEST_FINISHED = true; TEST_CONTINUE = false; function TestLoop(commandFactory) { this.commandFactory = commandFactory; var self = this; this.start = function() { this.continueCurrentTest(); } this.continueCurrentTest = function() { var testStatus = this.kickoffNextCommandExecution(); if (testStatus == TEST_FINISHED) { this.testComplete(); } } this.kickoffNextCommandExecution = function() { var command; if (starting_up == true) { command = this.firstCommand(); starting_up = false; } else { command = this.nextCommand(); } if (!command) return TEST_FINISHED; // Make the current row blue this.commandStarted(command); var result; try { var handler = this.commandFactory.getCommandHandler(command.command); if(handler == null) { throw new Error("Unknown command"); } result = handler.execute(selenium, command); } catch (e) { this.commandError(e.message); return TEST_FINISHED; } // Record the result so that we can continue the execution using window.setTimeout() this.lastCommandResult = result; if (result.processState == SELENIUM_PROCESS_WAIT) { // Since we're waiting for page to reload, we can't continue command execution // directly, we need use a page load listener. // TODO there is a potential race condition by attaching a load listener after // the command has completed execution. selenium.callOnNextPageLoad( function() {eval("testLoop.continueCommandExecutionWithDelay()")} ); } else { // Continue processing this.continueCommandExecutionWithDelay(); } // Test is not finished. return TEST_CONTINUE; } /** * Continues the command execution, after waiting for the specified delay. */ this.continueCommandExecutionWithDelay = function() { // Get the interval to use for this command execution, using the pauseInterval is // specified. Reset the pause interval, since it's a one-off thing. var interval = this.pauseInterval || this.getCommandInterval(); this.pauseInterval = undefined; // Continue processing if (interval >= 0) { window.setTimeout("testLoop.finishCommandExecution()", interval); } } /** * Finishes the execution of the previous command, and continues the test */ this.finishCommandExecution = function() { this.commandComplete(this.lastCommandResult); this.continueCurrentTest(); } } /** The default is not to have any interval between commands. */ TestLoop.prototype.getCommandInterval = function() { return 0; } TestLoop.prototype.firstCommand = noop; TestLoop.prototype.nextCommand = noop; TestLoop.prototype.commandStarted = noop; TestLoop.prototype.commandError = noop; TestLoop.prototype.commandComplete = noop; TestLoop.prototype.testComplete = noop; function noop() {}; |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.