在验证文本时如何处理StaleElementReferenceException
本文关键字:处理 StaleElementReferenceException 何处理 验证 文本 | 更新日期: 2023-09-27 18:16:56
我为每个测试运行了一组常用方法。例如,我需要在购物车中添加一些项目,然后为每个项目运行整个测试。但是对于第一个项目,它运行良好,当对第二个项目重复该过程时,它在验证文本时失败,我得到一个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"));
我会尝试连接你的代码行:
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
,看看它是否检索文本。
这个不工作表明你所面临的情况是标题下的点元素没有附加到DOM。您的目标文本仅在div内的事实表明,该区域正在被javascript样式化,因此可能仅在某些时间活跃。如果这个元素不是活动的,但是可以访问,您仍然可以收到StaleElementReferenceException
,如该页所示。你的下一步将是看看你是否可以点击一个父级div来激活这个目标div之前访问其文本(如。确保元素被附加到DOM,然后调用您提供的代码)。