验证文本时如何处理StaleElementReferenceException?

时间:2013-06-04 14:45:21

标签: c# selenium selenium-webdriver

我有一套常用的方法,我为每个测试运行。就像我需要在我的购物车中添加一些项目,并为每个项目运行整个测试。但是对于第一个项目,它运行正常,当第二个项目重复该过程时,它在验证文本时失败,我得到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"));

1 个答案:

答案 0 :(得分: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,然后调用您提供的代码)。