Цикл таблицы с использованием селена (c #) - PullRequest
1 голос
/ 16 марта 2019

У меня проблема с заполнением этого словаря результатом из таблицы HTML.HTML выглядит примерно так:

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

Я хочу заполнить словарь HiearchyId и именем для каждого тд, но в итоге он заполняет только первый столбец, а во второй итерации возвращает ошибку, что тот же идентификатор уже существует в словаре,Пожалуйста, совет.

  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;
    }

1 Ответ

2 голосов
/ 16 марта 2019

Добавьте .// в 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;
}

Css селектор:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...