【发布时间】:2015-10-12 06:44:53
【问题描述】:
当查找页面上的元素时,Selenium 会抛出异常。它抱怨“元素不再有效”。
例如,在带有下拉列表的页面上,当我选择一个选项时,我需要找到一些表格。对于前几个选项,我找到了表格,但最终搜索元素会导致异常。
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(25));
IList<IWebElement> tableTRCollection = null;
IList<IWebElement> tableTDCollection;
bool exist = false;
while(!exist)
{
try
{
tableTRCollection = driver.FindElements(By.XPath("//table[@id='t1']/tbody/tr"));
exist = true;
}
catch(Exception ex)
{
Wait(1);
}
}
for (int k = 0; k < tableTRCollection.Count; k++)
{
tableTDCollection = tableTRCollection[k].FindElements(By.TagName("td")); // -> Element is no longer valid
}
每个下拉选项我都会遍历整个代码块一次。前几次一切正常。下次通过我看到这个:
- 退出while循环(它找到了表和
tableTRCollection) - 进入for循环(
tabletTRCollection至少包含一行) -
tableTRCollection[k].FindElements(By.TagName("td"))抛出“元素不再有效”异常。
我尝试了 Selenium 的等待功能,但结果是一样的。
是什么导致tableTRCollection[k] 元素不再有效?页面没有变化。
【问题讨论】:
-
您遇到了哪个异常?
-
for (int k = 1; k
-
你想获取页面的所有 TD 还是特定 TR 部分的所有 TD?
-
来自特定 TR 的所有 TD(当我在初始化 trCollection 之前等待 3 秒时一切正常),但是等待时间不对。
-
然后您可以使用显式等待并告诉网络驱动程序等待所有 TD 加载。
标签: c# .net selenium webdriver