for循环“索引超出范围”c#webdriver
我从这个循环得到“索引超出范围”。 但我需要使用循环创建的新元素,我该怎么做? 请帮助解决问题
int linkCount = driver.FindElements(By.CssSelector("a[href]")).Count; string[] links = new string[linkCount]; for (int i = 0; i < linkCount; i++) { List linksToClick = driver.FindElements(By.CssSelector("a[href]")).ToList(); links[i] = linksToClick[i].GetAttribute("href"); }
我认为你可以重构你的代码:
var linkElements = driver.FindElements(By.CssSelector("a[href]")).ToList(); var links = new List(); foreach (var elem in linkElements) { links.Add(elem.GetAttribute("href")); }
如果可行,您可以简化查询:
var instantLinks = driver.FindElements(By.CssSelector("a[href]")) .Select(e => e.GetAttribute("href")) .ToList();
您可以重写代码以绕过for循环:
string[] links = driver.FindElements(By.CssSelector("a[href]")).Select(l => l.GetAttribute("href")).ToArray();
这也应该避免索引超出范围问题,并减少你必须编写的代码量。
首先,我没有看到在循环中分配linkstoclick值的一点……错误的原因必须是linksToClick列表的长度大于linkCount的长度。
int linkCount = driver.FindElements(By.CssSelector("a[href]")).Count; List links = new List (); for (int i = 0; i < linkCount; i++) { List linksToClick = driver.FindElements(By.CssSelector("a[href]")).ToList(); if (linksToClick.Count < i) links.Add(linksToClick[i].GetAttribute("href")); }
这可能有助于超出范围的exception。 这样做可以创建一个type:string列表,而不必显式定义列表的大小
第一个按标签名称获取所有元素…让我们假设为5。
在循环中,您的驱动程序通过css选择器获取所有元素,并且您可能在此处使用不同的数字。 让我们说4。
那么,您可能正在尝试在四元素数组中设置第五个元素。 繁荣。
最容易修复调试:
int linkCount = driver.FindElements(By.TagName("a")).Count; string[] links = new string[linkCount]; // WRITE OUT HOM MANY links you have for (int i = 0; i < linkCount; i++) { List linksToClick = driver.FindElements(By.CssSelector("a[href]")).ToList(); // ASSERT THAT YOU HAVE THE SAME AMOUNT HERE If (links.Count != linksToClick.Count) // your logic here links[i] = linksToClick[i].GetAttribute("href"); }
- 不允许使用用于访问路径的HTTP谓词POST
- WndProc没有可见的forms?
- 如何在ASP.NET 5中修复CS0433错误?
- 操作可能会破坏StructureMap中的运行时的稳定性
- 升级到Entity Framework 4.3.1后出现未处理的exception
- 使用webbrowser单击网页中的按钮
- 如何在我的应用程序中加密用户设置(如密码)?
- Fluent NHibernate使用FluentMappings忽略ClassMap中的属性
- 无法处理消息,因为内容类型为’application / json; charset = utf-8’不是预期的类型’text / xml; 字符集= UTF-8′