C# System.ArgumentOutOfRangeException:索引超出范围。必须为非负数且小于集合的大小。(参数“索引”)

C# System.ArgumentOutOfRangeException:索引超出范围。必须为非负数且小于集合的大小。(参数“索引”),c#,selenium,indexing,C#,Selenium,Indexing,在测试脚本中执行selenium C代码时出现以下错误 System.ArgumentOutOfRangeException:索引超出范围。必须为非负数且小于集合的大小。参数“索引” 在System.Collections.Generic.List`1.get_ItemInt32索引处 这是什么意思?我的代码中有什么问题 // Access the project IList<IWebElement> allRows = driver.FindElements

在测试脚本中执行selenium C代码时出现以下错误

System.ArgumentOutOfRangeException:索引超出范围。必须为非负数且小于集合的大小。参数“索引” 在System.Collections.Generic.List`1.get_ItemInt32索引处

这是什么意思?我的代码中有什么问题

// Access the project
            IList<IWebElement> allRows = driver.FindElements(By.XPath("//*[@id='GridViewProjList_ctl00']/tbody/tr"));
            IList<IWebElement> allPages = driver.FindElements(By.XPath("//div[@class='rgWrap rgNumPart']//a"));
            string projectName = "TITAN";

            for (int i = 0; i <= (allPages.Count); i++)
            {

                allRows = driver.FindElements(By.XPath("//*[@id='GridViewProjList_ctl00']/tbody/tr"));
                for (int row = 1; row <= (allRows.Count); row++)
                {

                    projectName = "TITAN";
                    IWebElement nameElement = driver.FindElement(By.XPath("//table/tbody/tr/td[2]/div/div/div/table/tbody/tr[3]/td/div/div/div/div[2]/table/tbody/tr[" + row + "]/td[1]"));
                    string name = nameElement.Text;

                    if (projectName.Contains(name))
                    {

                        nameElement = driver.FindElement(By.XPath("//table/tbody/tr/td[2]/div/div/div/table/tbody/tr[3]/td/div/div/div/div[2]/table/tbody/tr[" + row + "]/td[1]"));
                        nameElement.Click();
                        break;

                    }

                    allPages = driver.FindElements(By.XPath("//div[@class='rgWrap rgNumPart']//a"));
                }

                allPages = driver.FindElements(By.XPath("//div[@class='rgWrap rgNumPart']//a"));
                driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(5);
                allPages.ToList()[i].Click();
                Thread.Sleep(3000);

            }

            Thread.Sleep(3000);
            Console.WriteLine($"{projectName} project has been successfully accessed");
            Thread.Sleep(3000);

问题是,您的列表大小不能保证在迭代期间相同:

迭代器基于allPages:

for (int i = 0; i <= (allPages.Count); i++)
这里再次使用原始索引器:

allPages.ToList()[i].Click();
如果新列表项计数小于i-1,则会遇到此错误


解决方案是在访问第i个元素时不要覆盖列表或检查长度。

返回元素不是类型IWebElement或为空。请再次阅读错误消息:[Index]必须为非负数且小于集合的大小。您的最终迭代不小于集合的大小。长度检查中也有错误,因为集合是基于零的,对于int i=0,它应该是基于零的;我<所有页面数;i++@Guruston:接得好,我试过了。同样的错误也存在coming@DilshanKay:您到底尝试了什么?如果我不使用allPages=driver.FindElementsBy.XPath//div[@class='rgWrap rgNumPart']//a;OpenQA.Selenium.StaleElementReferenceException多次出现以下错误:stale元素引用:元素未附加到页面文档
allPages.ToList()[i].Click();