strands.compiler.options.debug = true; // by default, debugMode is private. overriding the strands.errorWrapper to forcibly enable debug mode strands.errorWrapper = function(func) { var newFunc = function() { func.apply(this,arguments); } newFunc.noTryCatch = func; return newFunc; } strands.compiler.eval = function(script) { eval(this.compile(script)); } // simple function to wait until the specified function returns true Selenium.prototype.pollForDecoratedCondition = function(condition) { while (!condition()) {sleep(10);} }; strands.compiler.eval("Selenium.prototype.pollForDecoratedCondition = " + Selenium.prototype.pollForDecoratedCondition.toString()); // replace all of the doBlah functions with blah functions for (var functionName in Selenium.prototype) { var match = /^do([A-Z].+)$/.exec(functionName); if (match) { var shortName = match[1]; // lowercase first character var shortName = shortName.charAt(0).toLowerCase() + shortName.substr(1); // replace waitFor functions with functions that automatically wait if (/^waitFor/.test(shortName) || "open" == shortName) { var evalString = "Selenium.prototype."+shortName+"=function() {\n" + "this.pollForDecoratedCondition(this."+ functionName + ".apply(this,arguments));\n};"; strands.compiler.eval(evalString); } else { Selenium.prototype[shortName] = Selenium.prototype[functionName]; } } // TODO blahAndWait functions } Selenium.prototype.bustCache = function(url) { // DGF this function didn't compile correctly, not sure why url += (url.indexOf("?") == -1 ? "?" : "&"); url += "cacheBuster=" + new Date().getTime(); return url; } Selenium.prototype.loadAndRunTest = function(testUrl) { testUrl = this.bustCache(testUrl); var testScript = strands.request(testUrl); var evalString = "selenium.runTest = function() { with (this) { " + testScript + " } }"; strands.compiler.eval(evalString); this.runTest(); } strands.compiler.eval("Selenium.prototype.loadAndRunTest = " + Selenium.prototype.loadAndRunTest.toString());