好的,这让我在墙上撞了一会儿。
我看一下网络元素列表。我像这样访问该列表
foreach (IWebElement link in driver.FindElementsByCssSelector("span.cn.mailbox > a"))
{
// Click at a lot of page and the page will reload eventually
}
问题是,在循环内部,我需要更改页面和内容,但最后我回到具有链接列表的页面。
一旦我遇到第二次迭代,我就会收到以下错误:
可能是因为我改变了页面,甚至认为我循环的集合中的链接是相同的,编译器似乎并不认为它是完全相同的集合。
有没有解决方法或我可以使用的解决方法?
答案 0 :(得分:0)
您获得异常的原因是因为重新加载了driver.FindElementsByCssSelector引用的页面。
这样的事情应该有效: 创建一个链接文本数组。通过链接文本数组迭代,单击每个链接。
string [] links = new string[driver.FindElementsByCssSelector("span.cn.mailbox > a").Count);
int i = 0;
foreach (IWebElement link in driver.FindElementsByCssSelector("span.cn.mailbox > a"))
{
links[i++] = link.Text;
}
for (int i = 0; i < driver.FindElementsByCssSelector("span.cn.mailbox > a").Count; i++)
{
driver.FindElementByLinkText(links[i]).Click();
}