使用selenium(c#)在表中循环

使用selenium(c#)在表中循环,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,我在用HTML表的结果填写这本词典时遇到了一个问题。 HTML如下所示: <td class="name"> <span data-bind="text:'hierarchyId'"></span> <span data-bind="text:'name'"></span> </td> 我想用hierarchyid和每个td的名称来填充dictionary,但它只填充第一列,在第二次迭代

我在用HTML表的结果填写这本词典时遇到了一个问题。 HTML如下所示:

  <td class="name">
     <span data-bind="text:'hierarchyId'"></span>
     <span data-bind="text:'name'"></span> 
   </td>

我想用hierarchyid和每个td的名称来填充dictionary,但它只填充第一列,在第二次迭代中返回错误,即dictionary中已经存在相同的ID。 请给我一些建议

  public Dictionary<string,string> ListOfSections()
    {
        Dictionary<string,string> newDictionary = new Dictionary<string,string>();
        IList<IWebElement> tdSectionName = sectionTable.FindElements(By.XPath("//td[@class='name']"));
        foreach (IWebElement element in tdSectionName)
        {
            IWebElement hierarchy = element.FindElement(By.XPath("//span[@data-bind='text: hierarchyId']"));
            IWebElement name = element.FindElement(By.XPath("//span[@data-bind='text: Name']"));
            newDictionary.Add(hierarchy.Text, name.Text);
        }
        return newDictionary;
    }
公共字典ListOfSections()
{
Dictionary newDictionary=新字典();
IList tdSectionName=sectionTable.FindElements(By.XPath(“//td[@class='name']);
foreach(tdSectionName中的IWebElement元素)
{
IWebElement hierarchy=element.FindElement(By.XPath(//span[@data bind='text:hierarchyId']);
IWebElement name=element.FindElement(By.XPath(//span[@data bind='text:name']);
添加(hierarchy.Text,name.Text);
}
返回新字典;
}

/
添加到xpath以获得如下所示的子元素,或使用css选择器:

public Dictionary<string,string> ListOfSections()
{
    Dictionary<string,string> newDictionary = new Dictionary<string,string>();
    IList<IWebElement> tdSectionName = sectionTable.FindElements(By.XPath("//td[@class='name']"));
    foreach (IWebElement element in tdName)
    {
        IWebElement hierarchy = element.FindElement(By.XPath(".//span[@data-bind='text: hierarchyId']"));
        IWebElement name = element.FindElement(By.XPath(".//span[@data-bind='text: Name']"));
        newDictionary.Add(hierarchy.Text, name.Text);
    }
    return newDictionary;
}
public Dictionary<string,string> ListOfSections()
{
    Dictionary<string,string> newDictionary = new Dictionary<string,string>();
    IList<IWebElement> tdSectionName = sectionTable.FindElements(By.CssSelector("td.name"));
    foreach (IWebElement element in tdName)
    {
        IWebElement hierarchy = element.FindElement(By.CssSelector("span[data-bind='text: hierarchyId']"));
        IWebElement name = element.FindElement(By.CssSelector("span[data-bind='text: Name']"));
        newDictionary.Add(hierarchy.Text, name.Text);
    }
    return newDictionary;
}
公共字典ListOfSections()
{
Dictionary newDictionary=新字典();
IList tdSectionName=sectionTable.FindElements(By.XPath(“//td[@class='name']);
foreach(tdName中的IWebElement元素)
{
IWebElement hierarchy=element.FindElement(By.XPath(“.//span[@data bind='text:hierarchyId']);
IWebElement name=element.FindElement(By.XPath(“.//span[@data bind='text:name']);
添加(hierarchy.Text,name.Text);
}
返回新字典;
}
Css选择器:

public Dictionary<string,string> ListOfSections()
{
    Dictionary<string,string> newDictionary = new Dictionary<string,string>();
    IList<IWebElement> tdSectionName = sectionTable.FindElements(By.XPath("//td[@class='name']"));
    foreach (IWebElement element in tdName)
    {
        IWebElement hierarchy = element.FindElement(By.XPath(".//span[@data-bind='text: hierarchyId']"));
        IWebElement name = element.FindElement(By.XPath(".//span[@data-bind='text: Name']"));
        newDictionary.Add(hierarchy.Text, name.Text);
    }
    return newDictionary;
}
public Dictionary<string,string> ListOfSections()
{
    Dictionary<string,string> newDictionary = new Dictionary<string,string>();
    IList<IWebElement> tdSectionName = sectionTable.FindElements(By.CssSelector("td.name"));
    foreach (IWebElement element in tdName)
    {
        IWebElement hierarchy = element.FindElement(By.CssSelector("span[data-bind='text: hierarchyId']"));
        IWebElement name = element.FindElement(By.CssSelector("span[data-bind='text: Name']"));
        newDictionary.Add(hierarchy.Text, name.Text);
    }
    return newDictionary;
}
公共字典ListOfSections()
{
Dictionary newDictionary=新字典();
IList tdSectionName=sectionTable.FindElements(By.CssSelector(“td.name”));
foreach(tdName中的IWebElement元素)
{
IWebElement hierarchy=element.FindElement(由.CssSelector(“span[data bind='text:hierarchyId']));
IWebElement name=element.FindElement(由.CssSelector(“span[data bind='text:name']));
添加(hierarchy.Text,name.Text);
}
返回新字典;
}

An需要检查层次结构和名称是否不为null!。这是真的吗?解释一下,空是什么意思?可能父元素没有span[data bind='text:hierarchyId']或span[data bind='text:Name']子元素?@isaid您应该知道。如果找不到,你会被解雇的error@runningman您可以使用
element.FindElements(通过.CssSelector(“span[data bind='text:hierarchyId'])
并检查大小。如果大于0,则元素退出。
foreach(tdName中的IWebElement元素)
是否应使用
tdSectionName
列表?我不知道您从何处获得
tdName
。您还可以确保html是正确的,我们没有看到span的
数据绑定
属性。您是对的。我正在使用tdSectionName,但在上传之前编辑了代码。Html不完整。我只是想指出,在一个td元素中有两个span,所以我绘制了html。但是是的,html.Ty中有数据绑定属性供您注释