これを修正するために、デフォルトの「runSeleniumTest」関数を、ユーザー拡張機能として以下のパッチが適用されたバージョンに置き換えました。
function runSeleniumTest() {
runOptions = new RemoteRunnerOptions();
var testAppWindow;
if (runOptions.isMultiWindowMode()) {
try{
testAppWindow = openSeparateApplicationWindow('Blank.html', true);
}
catch (e) {
window.onunload = function () { };
window.location.reload();
return;
}
} else if (sel$('selenium_myiframe') != null) {
var myiframe = sel$('selenium_myiframe');
if (myiframe) {
testAppWindow = myiframe.contentWindow;
}
}
else {
proxyInjectionMode = true;
testAppWindow = window;
}
selenium = Selenium.createForWindow(testAppWindow, proxyInjectionMode);
if (runOptions.getBaseUrl()) {
selenium.browserbot.baseUrl = runOptions.getBaseUrl();
}
if (!debugMode) {
debugMode = runOptions.isDebugMode();
}
if (proxyInjectionMode) {
LOG.logHook = logToRc;
selenium.browserbot._modifyWindow(testAppWindow);
}
else if (debugMode) {
LOG.logHook = logToRc;
}
window.selenium = selenium;
commandFactory = new CommandHandlerFactory();
commandFactory.registerAll(selenium);
currentTest = new RemoteRunner(commandFactory);
var doContinue = runOptions.getContinue();
if (doContinue != null) postResult = "OK";
currentTest.start();
}
「openSeparateApplicationWindow」内で「システムのシャットダウンは既にスケジュールされています」というエラーが発生していることがわかりました。また、エラーが発生した後に Selenium テスト ランナー ウィンドウを更新すると、エラーなしでテストが「再開」されることもわかりました。したがって、「openSeparateApplicationWindow」にエラーがある場合にテスト ランナー ウィンドウがリロードされるように、次の try catch ステートメントで「runSeleniumTest」にパッチを適用しました。
try{
testAppWindow = openSeparateApplicationWindow('Blank.html', true);
}
catch (e) {
window.onunload = function () { };
window.location.reload();
return;
}
Selenium ユーザー拡張機能のより具体的な例については、ブログ投稿も使用しました