Selenium C#-如何检查所有链接

Selenium C#-如何检查所有链接,c#,selenium-webdriver,C#,Selenium Webdriver,我正在尝试检查页面上的所有链接。在这个话题上已经有人问了一些问题,但由于某些原因,当我尝试时,没有一个是有效的。我遇到的一个特殊问题是,在进入一个页面并将所有链接放入一个列表变量后,当循环遍历它们时,错误消息显示该链接是一个过时的引用。以下是代码片段: var driver = new FirefoxDriver(); driver.Navigate().GoToUrl(URLPROD); driver.Manage().Window.Maximize(); ICollection<IW

我正在尝试检查页面上的所有链接。在这个话题上已经有人问了一些问题,但由于某些原因,当我尝试时,没有一个是有效的。我遇到的一个特殊问题是,在进入一个页面并将所有链接放入一个列表变量后,当循环遍历它们时,错误消息显示该链接是一个过时的引用。以下是代码片段:

var driver = new FirefoxDriver();
driver.Navigate().GoToUrl(URLPROD);
driver.Manage().Window.Maximize();

ICollection<IWebElement> links = driver.FindElements(By.TagName("a"));

foreach (var link in links)
{
   if (!(link.Text.Contains("Email")) || !(link.Text == "") || !(link.Text == null) || !(link.Text.Contains("Element")))
   {
      ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView(true);", link);
      Console.WriteLine(link);
      driver.ExecuteScript("arguments[0].click();", link);

      driver.Navigate().Back();

    }

}
var-driver=新的FirefoxDriver();
driver.Navigate().gotour(URLPROD);
driver.Manage().Window.Maximize();
ICollection links=driver.FindElements(按.TagName(“a”));
foreach(链接中的var链接)
{
如果(!(link.Text.Contains(“电子邮件”))| |!(link.Text==“”)| |!(link.Text==null)| | |!(link.Text.Contains(“元素”))
{
((IJavaScriptExecutor)driver.ExecuteScript(“参数[0]。ScrollingToView(true);”,链接);
控制台写入线(链接);
ExecuteScript(“参数[0]。单击();”,链接);
driver.Navigate().Back();
}
}
错误消息:OpenQA.Selenium.StaleElementReferenceException:'的元素引用已过时;元素不再附加到DOM,它不在当前框架上下文中,或者文档已刷新'


我应该如何更正此错误,以便检查页面上的每个链接

您可以重新找到链接。 所以1。获取链接数2。循环该编号,以使链接每次都保持新鲜(以避免过时的错误)

var links=driver.FindElements(按.TagName(“a”));
对于(int i=0;i
linksString的大小是多少?linkString的大小是135哪一行导致了以前版本中的过时元素?很抱歉,我必须重写代码,因为很遗憾,我没有保存以前的版本。我将尝试重新生成相同的错误。请清理您的问题。所有的更新都使得你很难理解你当前的问题到底是什么。只需发布您正在使用的当前代码的一部分,以及您收到的错误消息。foreach循环似乎有错误。你能检查并编辑代码吗?谢谢。@Sohel现在就试试谢谢你纠正了这个问题。代码显示以下错误:OpenQA.Selenium.elementNotInteractivatableException:“element去掉调用javascript调用的另一个循环,现在不需要它。您不需要滚动到该项目。没有外循环。我使用的是一个独立的控制台程序。在单元测试(Selenium)代码中放置代码段时,现在我发现以下错误::索引超出范围。必须为非负数且小于集合的大小。参数名称:index-它指向这行代码“newLinks[i]。单击();
        var links = driver.FindElements(By.TagName("a"));

        for (int i=0; i < links.Count(); i++)
        {
            var newLinks = driver.FindElements(By.TagName("a"));
            newLinks[i].Click();
            driver.Navigate().Back();
        }