从 HTML-Code 中获取每个包含特定 Css-Value 的 ID

Get every ID from HTML-Code which contains certain Css-Value

我正在尝试从 HTML-代码中获取每个包含特定 Css-值的 ID,并将它们写入列表。

我已经可以通过以下方式获得第一个ID:

List<string> MyList = new List<string>();
int Count = driver.FindElements(By.TagName("My_Value")).Count;

for(int i=0; i<Count; i++)
{
     string ID = driver.FindElement(By.CssSelector("div.My_Value")).GetAttribute("id");

     MyList.Add(ID);
}

问题是,尽管 MyValue 存在于不同的 ID 中,但我总是从 HTML-Code 中获取第一个 ID。那么我如何告诉程序 'Jump' 已经检查过的值?

代码看起来不错,但它不是 运行 循环,正如您所说,它是找到符合您条件的第一个元素,然后完成。要获得所有这些,请尝试:

string ID = driver.FindElements(By.CssSelector("div.My_Value")).GetAttribute("id");

我自己没有尝试过,但试一试

如果您使用 By.TagName("My_Value") 构建列表,则只会收集 <My_Value> 个元素并将其放入列表中,即

<My_Value>class="foo bar"...</My_Value> 

向前移动,在循环中 FindElement(By.CssSelector("div.My_Value")) 仅将具有 class 属性的 <div> 元素标识为 My_Value

<div>class="My_Value"...</div>

所以外环FindElements()和内环FindElement()不匹配。因此你没有得到所有的值。


解决方案

要遍历您需要使用的所有收集的列表元素:

string ID = driver.FindElement(By.TagName("My_Value")).GetAttribute("id");

我想通了。

您必须使用 var 变量来保护所有元素。并通过 foreach 循环获取 ID。

List<string> MyList = new List<string>();

var ID = driver.FindElement(By.CssSelector("div.My_Value"));

foreach(IWebElement element in ID)
{
     element.GetAttribute("id")
     MyList.Add(ID);
}