[英]Unable to find page elements because “Element is no longer valid”
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
}
我為每個下拉選項循環遍歷整個代碼塊。 頭幾次都沒關系。 下次通過我看到以下內容:
tableTRCollection
) tabletTRCollection
至少包含一行) tableTRCollection[k].FindElements(By.TagName("td"))
引發“元素不再有效”異常。 我嘗試了Selenium的wait函數,但是結果是一樣的。 是什么導致tableTRCollection[k]
元素不再有效? 頁面沒有變化。
在從下拉列表中進行選擇會導致DOM(JavaScript魔術,AJAX請求等)更改的頁面上,選擇后立即找到的元素可能會在您使用它們查找更多元素時消失。 簡單的時間表可能是:
X.FindElement(...)
該頁面看起來好像沒有更改,但是Selenium對所有DOM更改都很敏感並且會抱怨。
通常,您可以直接使用driver.FindElements()
而不是element.FindElements()
。 如果您使用的是By.CssSelector()
或By.Xpath()
,則可能要聰明一些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.