这个错误意味着什么:陈旧元素引用:元素没有附加到页面文档?

Wel*_*Wel 9 c# selenium selenium-webdriver

在我的C#app中使用selenium web驱动程序,我收到此错误:

OpenQA.Selenium.StaleElementReferenceException:陈旧元素引用:元素未附加到页面文档

在这段代码中:

IWebElement e = driver.FindElement(By.XPath(link_click), 10);
e.Click();
Run Code Online (Sandbox Code Playgroud)

错误行在e.Click()但是这是一个在XPath指定的同一链接中成功执行但在最后一次尝试失败的过程!那么这个错误意味着什么以及如何解决它?

ade*_*msz 12

这意味着要么在页面中更改元素,要么删除元素,在此链接中提供完整引用http://www.seleniumhq.org/exceptions/stale_element_reference.jsp

解决这个问题的一种方法是,你可以进行重试,可能是类似的

bool staleElement = true; 
while(staleElement){
  try{
     driver.FindElement(By.XPath(link_click), 10).Click();
     staleElement = false;

  } catch(StaleElementReferenceException e){
    staleElement = true;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是有风险的,如果不检查迭代次数,它可能会陷入无限循环。 (2认同)
  • 是的,但它只有在异常类型StaleElementReferenceException时才会出现问题.其他异常仍将被抛出并超出循环对于解决方案的完整性,您可以添加检查超时if(currentTime> start + timeout)break/throw异常,以便在必要时可以停止测试 (2认同)
  • 既然你明确地捕获了StaleElement,我不确定它是如何永远循环的.看起来像一个安全的解决方法,除非页面是荒谬的,并导致元素一遍又一遍地陈旧,在这种情况下你有更大的问题. (2认同)
  • @JeffC,不一定正确,在这种情况下,通过重试查找元素,您尝试获取新元素,因此它不会过时 (2认同)