【发布时间】:2017-07-24 17:16:14
【问题描述】:
在遍历有活动删除按钮的表行时,我在第二遍时收到以下错误。
“结果 StackTrace:OpenQA.Selenium.StaleElementReferenceException:过时的元素引用:元素未附加到页面文档”
IWebElement baseTable = Browser.Driver.FindElement(By.XPath("//*[@id='approvalsGrid']/table/tbody"));
ICollection<IWebElement> delButton = baseTable.FindElements(By.XPath("//*[@class = 'k-grid-remove lnkDelete']"));
foreach (var button in delButton)
{
button.Click();
WaitForAjax();
//2nd delete button in popup
Browser.Driver.FindElement(By.XPath("//a[text() = ' Delete']")).Click();
WaitForAjax();
}
任何帮助将不胜感激。
【问题讨论】:
-
这是一个私人网页还是我们可以查看它?
-
这是开发服务器上的私有页面。必须在网络内才能访问它。
-
可能发生的情况是第二次迭代可能会找到前一个删除按钮,因为它太快了。这将是有道理的,为什么你会得到一个陈旧的元素异常。在单击删除按钮之前,您可以尝试将单击功能包装在 try catch 中或放入另一个类似这样的睡眠/等待命令 (stackoverflow.com/questions/20798752/…)
-
当您单击一个按钮时,页面结构会发生变化,从而使所有其余按钮都过时。每次迭代时重新查找第一个删除按钮可能会更好,并根据您找到的删除按钮进行迭代,而不是在集合中的每个按钮上进行迭代。
标签: selenium selenium-webdriver c#-3.0