2013-06-04 20 views
1

我有一套常用的方法,我爲每個測試運行。就像我需要在我的購物車中添加一些項目並且每個項目都運行整個測試。但對於第一個項目,它運行良好,並且當第二個項目重複該過程時,它在驗證文本時失敗,並且我得到一個StaleElementReferenceException如何在驗證文本時處理StaleElementReferenceException?

我該如何再次查找物品或解決此問題?謝謝。它失敗

代碼:

public bool VerifyItemPresentInCart() 
{ 
     //Get the cartsize and verify if one item present 
     IWebElement cartSize = driver.FindElement(By.CssSelector("div[class='cart-size']>div"));            
     string actualMsg = cartSize.Text; 
     string expectedMsg = "1"; 
     VerifyIfTextPresentMethod(expectedMsg,actualMsg);     
     return true;     
} 

錯誤在

IWebElement cartSize = driver.FindElement(By.CssSelector("div[class='cart-size']>div")); 

更新:HTML代碼

<a class="header-button show-cart has-cart-items" data-view-name="cart-badge" data-view-cid="view5" data-model-cid="c6" data-tappable="true"> 
    Cart 
    <div class="cart-size"> 
    <div>3</div> 
    </div> 

新代碼:

IWebElement cardDetails = driver.FindElement(By.CssSelector("div[class='form-field clear-fix']>label[for='cardNumber']>div")); 
+0

我認爲錯誤發生在'cartSize.Text'這一行上?我不知道爲什麼你會得到一個'StaleElementReferenceException',因爲這通常是在刷新或重要操作之前有一個元素的句柄,然後嘗試使用舊元素句柄的情況。 – Nashibukasan

+0

@Nashibukasan,找到元素時發生錯誤。我嘗試使用刷新和刪除cookie,但仍顯示此異常。當我將這四行註釋掉時,測試運行良好,沒有任何錯誤。我認爲元素沒有附加到DOM或已經改變。我想知道如何再次查找元素。 – jessica

+0

你的代碼每次調用FindElement時都應該獲取元素。請參閱下面的答案以解決可能的問題也許還可以提供目標HTML,因爲也許有更好的方法來訪問元素。 – Nashibukasan

回答

3

我會嘗試加入的代碼,你的臺詞:

IWebElement cartSize = driver.FindElement(By.CssSelector("div[class='cart-size']>div"));               
string actualMsg = cartSize.Text; 

所以,他們分別是:

string actualMsg = driver.FindElement(By.CssSelector("div[class='cart-size']>div")).Text; 

這意味着該文本將在元素上,因爲它是選擇被檢索。我想知道如果通過它的父母獲取元素的句柄,並檢索你正在失去焦點的文本的元素。或者,從你的CSS中刪除>div,看它是否檢索文本。

這不起作用表明您正面臨的情況是標題The Element is not Attached to the DOM下的要點。您的目標文本僅位於div內的事實表明此區域正在使用javascript進行樣式化,因此可能只會在特定時間處於活動狀態。如果此元素未處於活動狀態,但是可以訪問,您仍然可以收到StaleElementReferenceException,如該頁面所示。您的下一步是查看是否可以在訪問其文本之前單擊父母的div來激活此目標div(例如,確保元素已附加到DOM,然後調用您提供的代碼)。

+0

對不起你的代碼。它仍然顯示相同的錯誤。試圖去除div。 – jessica

+0

我已經用html更新了代碼。 – jessica

+0

查看編輯答案。 – Nashibukasan