2012-01-12 25 views
0

我得到陳舊的引用異常(元素不再有 有效),我正在使用c# - Webdriver進行自動化。EventFiringWebDriver監聽器的陳舊引用異常

我使用Selenium進行自動化框架。在此我已使用Selenium Event的EventFiringWebDriver類 。它偵聽InterenetExplorerWebdriver(Like Click()或SendKeys())的每個 事件。在 EventFiringWebDriver類的事件,如 (ElementClicked,ElementValueChanged)我已經實現了邏輯, 將WebElementEventArgs對象的屬性記錄到基於XML的日誌 文件。所以在執行結束時,我可以看到以XSLT格式執行每個測試用例的 的詳細信息並跟蹤功能 錯誤。

代碼: -

public class SeleniumEventListener : EventFiringWebDriver 
{ 
    public SeleniumEventListener(IWebDriver webDriver):base(webDriver) 
    { 
      ElementClicked += new EventHandler<WebElementEventArgs>SeleniumEventListener_ElementClicked); 
//more events handled here.. 
} 
    void SeleniumEventListener_ElementValueChanged(object sender,WebElementEventArgs e) 
{ 
      LogPassedStep(e) 
    } 
    private LogPassedStep(e) 
    { 
      string title = e.Element.value; 
      string status = "clicked" 

     //XML based logging here. 
    } 

}

在我的應用程序,我使用自動化的硒。我有一些文本 框和按鈕,EventFiringWebDriver類XMLLogging工作 正確的文本框通過了測試用例執行但是 爲按鈕或鏈接的一些時間它給「元素沒有 更長的有效」陳舊的引用異常在一些按鈕是 類型的展開收起導致DOM改變,而在我的應用程序 我有刷新在該 陳舊引用異常來經常定期間隔)任務頁面

的webdriver的正確點擊作品整個執行過程中,但EventFiringWebDriver無法識別該對象,並且Stale參考 例外來

請幫助我..還是請大家建議我得到那個 網頁對象(如按鈕,鏈接)的細節,使我能夠實現 日誌記錄功能的方式(我使用C#-webdriver)/

回答

0

StaleElementReferenceException表示您正在訪問不再存在的元素屬性。 您需要在DOM更改之前收集元素的所有必需屬性值。

所以,如果你想:頁面上

  1. 尋找元素
  2. 使元素消失(如打開另一個頁面)
  3. 日誌元素的name

您需要:

  1. 查找頁面上的元素
  2. 存儲元素在變量中的名稱(my_elements_name
  3. 使元素消失(例如,打開另一頁)
  4. 記錄該元素的名稱,使用my_elements_name變量,而不是元素本身。

在蟒蛇它看起來就像這樣:

from selenium.webdriver import Firefox 


browser = Firefox() 
browser.get('http://google.com') 

element = browser.find_element_by_id('lst-ib') 
element_name = element.get_attribute('name') 

browser.get('http://en.wikipedia.org') 

# this will raise 'StaleElementReferenceException': 
print element.get_attribute('name') 

# and this will work: 
print element_name 
# prints out: 'q' 
+0

這種做法會增加不必要的code.Because每一個我處理的執行過程中,我將不得不增加額外的code.In事件元素EventListener類的我只需要編寫一次XML日誌記錄邏輯。 – 2012-01-12 08:18:35

+0

我打算使用EventDriver類是以XML格式獲取詳細的執行報告..所以我們有任何其他選項來做到這一點.. – 2012-01-12 08:22:27

相關問題