2011-01-12 91 views
2

我正在使用Selenium,我想知道是否有可能讓Selenium找出腳本是否有錯誤。Selenium可以通知腳本錯誤嗎?

我意識到,腳本錯誤的行爲將需要流量控制,而且這個Selenium IDE沒有這個功能。我也意識到,如果錯誤是嚴重的,那麼測試用例肯定會失敗,我們就有了它。不過,我希望Selenium能夠至少將它們存儲在某個地方。

我們在Firefox和IE中運行我們的測試,因此我們可以使用window.onerror來記錄錯誤。但是,我不確定如何將它集成到Selenium。據我所知,錄音機將其處理程序附加到window.document,我們需要附加到window本身。我試圖從用戶擴展文件中修飾Recoreder.prototype.attach來自己添加一個處理程序,但它很笨拙,並導致IDE中的奇怪行爲(就像沒有記錄了,所以我可能做錯了)。

有什麼想法?

+0

您可以添加流量控制很容易:http://51elliot.blogspot.com/2008/02/selenium-ide-goto .html – 2011-01-12 15:35:47

+0

@Martin Jespersen謝謝,我不知道。儘管如此,我們使用Selenium IDE來記錄內容,而Selenium RC可以滿足我們所有的流量控制需求。 – zneak 2011-01-12 15:42:10

回答

1

我已經在Selenium中挖得夠深了,以獲得一個很好的答案。

裝飾Recorder.prototype.attachRecorder.prototype.detach效果很好;您只需將自己附加到window.onerror活動上即可瞭解您的網頁上發生了哪些不好的事情。當需要對錯誤採取行動時,問題就會出現。有兩種選擇:

  • 創建一個自定義命令,用於檢查自上次調用以來是否存在錯誤;
  • 編輯Selenium的源代碼,以檢查每個新命令之前最後一個命令是否有錯誤。

由於需要更改行爲的文件在擴展文件後加載,因此不可能使用擴展來實現後者。

這裏是如何從一個用戶擴展裝點相應的功能:

function decorate(decoratee, decorator) { 
    var decorated = function() { 
     decorator.apply(this, arguments); 
     if (decoratee && decoratee.apply) 
      decoratee.apply(this, arguments); 
    } 
    decorated.base = decoratee; 
    decorated.decorator = decorator; 
    return decorated; 
} 

Recorder.prototype.attach = decorate(Recorder.prototype.attach, function() { 
    var win = this.getWrappedWindow(); 
    win.onerror = decorate(win.onerror, function(message, file, line) { 
     // do something with the error 
    }); 
}); 

Recorder.prototype.detach = decorate(Recorder.prototype.detach, function() { 
    var win = this.getWrappedWindow(); 
    win.onerror = win.onerror.base; 
}); 
相關問題