从 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);
}
我正在尝试从 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);
}