c# selenium 通过导航 StaleElementReferenceException 控制台应用程序验证所有链接

c# selenium verify all links with navigating through them StaleElementReferenceException console application

当我尝试查找所有链接并在我的控制台应用程序中浏览它们时,我不断收到 StaleElementReferenceException 错误,我有以下代码并且昨天一整天都在尝试修复它但没有结果:

{

    static void Main(string[] args)
    {
        try
        {
            Console.WriteLine("Starting the browser...");
            IWebDriver driver = new FirefoxDriver();
            driver.Navigate().GoToUrl("http://www.site.ro");
            System.Threading.Thread.Sleep(2000);
            Console.WriteLine("Gathering the Links...");
            List<IWebElement> links = new List<IWebElement>();
            try
            {
                foreach (IWebElement item in driver.FindElements(By.TagName("a")))
                {
                    try
                    {
                        if (item.Displayed == true)
                        {
                            item.Click();
                            Console.WriteLine("Item is displayed \a\n" + "Navigating to link...");
                        } else
                        {
                            continue;
                        }
                        Random r1 = new Random();
                        Random r2 = new Random();
                        Random r3 = new Random();
                        var last = r3.Next(1, 10) * 700;
                        var mseconds = r2.Next(1, 10) * 500;
                        var time = mseconds + r1.Next(1, 10) * 300;
                        Console.WriteLine("Waiting for " + (time + last) + " miliseconds before next link");
                        System.Threading.Thread.Sleep(time + last);
                        driver.Navigate().Back();
                        System.Threading.Thread.Sleep(2000);
                    }
                    catch (Exception e2)
                    {
                        Console.WriteLine(e2);
                        Console.ReadLine();
                    }
                    }
                }
            catch (Exception e1)
            {
                Console.WriteLine(e1);
                Console.ReadLine();
            }
            Console.WriteLine("Test finished.");
            driver.Quit();
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            Console.ReadLine();
        }
    }
}

}

driver.FindElements(By.TagName("a")) 正在为您查找页面上的所有 link。

然后您将使用第一个 link 转到另一个页面:item.Click();

你终于要回去了driver.Navigate().Back();

但这不是初始页面(根据 selenium 的意见)。并且第一步存储的所有 link 都没有了,因为你的初始页面没有了。这就是为什么你不能点击第二个。

您需要在每个 driver.Navigate().Back();

之后重新查找所有 link

或者最好将所有 href 存储到 linksList.Add(Item.getAttribute("href")); 等列表中并使用存储的 href。