我有一套常用的方法,我爲每個測試運行。就像我需要在我的購物車中添加一些項目並且每個項目都運行整個測試。但對於第一個項目,它運行良好,並且當第二個項目重複該過程時,它在驗證文本時失敗,並且我得到一個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"));
我認爲錯誤發生在'cartSize.Text'這一行上?我不知道爲什麼你會得到一個'StaleElementReferenceException',因爲這通常是在刷新或重要操作之前有一個元素的句柄,然後嘗試使用舊元素句柄的情況。 – Nashibukasan
@Nashibukasan,找到元素時發生錯誤。我嘗試使用刷新和刪除cookie,但仍顯示此異常。當我將這四行註釋掉時,測試運行良好,沒有任何錯誤。我認爲元素沒有附加到DOM或已經改變。我想知道如何再次查找元素。 – jessica
你的代碼每次調用FindElement時都應該獲取元素。請參閱下面的答案以解決可能的問題也許還可以提供目標HTML,因爲也許有更好的方法來訪問元素。 – Nashibukasan