1

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

1 回答 1

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;

这意味着文本将在元素被选中时被检索。我想知道在通过其父元素获取元素的句柄和检索文本之间是否会失去对该元素的关注。或者,>div从您的 css 中删除 并查看它是否仍然检索文本。

这不起作用表明您面临的情况是标题The Element is not Attached to the DOM下的点。您的目标文本仅在 div 中这一事实表明该区域正在由 javascript 设置样式,因此可能仅在特定时间处于活动状态。如果此元素未激活,但可访问,您仍然可以收到StaleElementReferenceException,如该页面所示。下一步是查看是否可以在访问其文本之前单击父 div 以激活此目标 div(例如,确保元素附加到 DOM,然后调用您提供的代码)。

于 2013-06-05T03:24:35.647 回答