2017-04-21 81 views
1

在我的C#應用​​程序使用Selenium網絡驅動器我得到這個錯誤:這個錯誤的含義是什麼:陳舊的元素引用:元素沒有附加到頁面文檔?

OpenQA.Selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document

在此代碼:

IWebElement e = driver.FindElement(By.XPath(link_click), 10); 
e.Click(); 

錯誤行是在e.Click()但是這是在成功執行的過程。 XPath之前指定了相同的鏈接,但最後一次嘗試失敗!那麼這個錯誤意味着什麼以及如何解決它?

+0

防止這種情況的一種方法是在打開頁面對象時調用WaitForPageToLoad方法。然後,您可以在頁面上等待一兩件事情,表明它已準備好,然後您可以放心地繼續下去,任何東西都不會在您的下面陳舊。 – mrfreester

回答

3

這意味着,在頁面改變任一元素,或元素被刪除,在這個環節上充分參考了應付這種http://www.seleniumhq.org/exceptions/stale_element_reference.jsp

的一種方式,你可以把重試,大概就像

bool staleElement = true; 
while(staleElement){ 
    try{ 
    driver.FindElement(By.XPath(link_click), 10).Click(); 
    staleElement = false; 

    } catch(StaleElementReferenceException e){ 
    staleElement = true; 
    } 
} 
+0

這是有風險的,如果沒有選中迭代,它可能會在無限循環中發生。 –

+2

是的,但它的唯一的,如果異常類型StaleElementReferenceException這是問題。如果(currentTime> start + timeout)打破/拋出異常,可以在必要時停止測試 –

+1

因爲您是完美的解決方案,您可以添加檢查超時明確捕獲StaleElement,我不知道這將永遠循環。看起來像一個安全的解決方法,除非當然頁面是荒謬的,並導致元素一遍又一遍地老化,在這種情況下,你有更大的問題。 – mrfreester

相關問題