我遇到了一个循环浏览WebElements列表的问题。它在第一次迭代中起作用,但在第二次迭代时失败。
循环1正确执行并创建Web元素列表。我这样做是因为我认为循环2失败是因为导航切换(例如点击网页元素)
Durning Loop 2执行
ListofLinks
已填充Item.Text
失败。看起来该项目不存在。 有什么想法?
var ListOflinks = new List<IWebElement>();
//Loop 1
foreach (var item in driver.FindElements(By.TagName("a")))
{
if (item.Text != "")
{
ListOflinks.Add(item);
}
}
// Loop 2
foreach (var item in ListOflinks)
{
if (item.Text != "") // <<<<---- Fails Here
{
// Clicks on Current Link
item.Click();
}
}
注意:在我尝试2循环解决方案之前。我正在考虑相同的结果。它适用于第一个Web元素,然后在第二次迭代时失败。
foreach (var item in driver.FindElements(By.TagName("a")))
{
if (item.Text != "")
{
item.Click();
}
}
答案 0 :(得分:2)
IList<IWebElement> links = driver.FindElements(By.TagName("a"));
IList<IWebElement> listOflinks = new List<IWebElement>();
foreach (IWebElement link in links)
{
if (!string.IsNullOrEmpty(link.Text))
listOflinks.Add(link);
}
在第一次点击 DOM将会改变后,你会给你所有链接引用,你将失去所有元素!
要获取元素,您需要再次初始化链接
出于您的目的,您应该使用for循环来检查获取正确的索引
IList<IWebElement> links = driver.FindElements(By.TagName("a"));
IList<IWebElement> listOflinks = new List<IWebElement>();
for(int i = 0 ; i < links.Count ; i++)
{
links = driver.FindElements(By.TagName("a"));
if (!string.IsNullOrEmpty(link[i].Text))
links[i].Click();
}
如果点击链接后页面重定向到其他页面,则需要更改逻辑,否则无效!
答案 1 :(得分:0)
可能是因为当单击第一个链接并导航到新视图时,先前找到的元素在当前视图中不存在。
如果是这种情况,您可以在第二个循环中导航回来,然后单击链接。