在页面重新加载后查找元素

时间:2013-10-17 16:59:19

标签: c# selenium selenium-chromedriver

好的,这让我在墙上撞了一会儿。
我看一下网络元素列表。我像这样访问该列表

foreach (IWebElement link in driver.FindElementsByCssSelector("span.cn.mailbox > a"))
        {
              // Click at a lot of page and the page will reload eventually
        }

问题是,在循环内部,我需要更改页面和内容,但最后我回到具有链接列表的页面。
一旦我遇到第二次迭代,我就会收到以下错误:

  

enter image description here

可能是因为我改变了页面,甚至认为我循环的集合中的链接是相同的,编译器似乎并不认为它是完全相同的集合。

有没有解决方法或我可以使用的解决方法?

1 个答案:

答案 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();
}
相关问题