【问题标题】:Merge to IList<IWebElement> element into a Dictionary将 IList<IWebElement> 元素合并到字典中
【发布时间】:2017-08-09 13:11:57
【问题描述】:

我正在尝试从我从 selenium 获得的两个 IWeb 元素创建一个字典,第一个元素是表的标题,第二个元素是每列的值。有可能吗?

这是我的两个 Ilist:

IList<IWebElement> headersrows = tableheaders.FindElements(By.XPath("tr"));
IList<IWebElement> resultsrows = tableresults.FindElements(By.XPath("tr"));

我做了一个 for 从每个列表中获取所有元素:

    IList<IWebElement> columnsTable;
    foreach (IWebElement row in resultsrows)
    {
        columnsTable = row.FindElements(By.TagName("td"));

    }

【问题讨论】:

    标签: c# .net selenium


    【解决方案1】:
    IDictionary<IWebElement, IList<IWebElement>> dict = new Dictionary<IWebElement, IList<IWebElement>>();
    
    int index = 0;
    foreach (var header in headersRows.SelectMany(r => r.FindElements(By.XPath("th"))))
    {
        dict.Add(header, resultsRows.Select(r => r.FindElements(By.TagName("td"))[index]).ToList());
        index++;
    }
    

    这将为您提供一个字典,其中键是第 th 元素,值是包含列值的 td 元素列表。

    【讨论】:

    • 我需要的就是这么多。稍微了解一下:您创建一个新字典,它是 IDictionary 和 Ilist 的合并,并使用 jquery 为每一行选择标记名的所有值?
    • @FranciscoGonzalez,这是正确的。关键是单个标题元素。通过在标题列的索引处查找 TD 元素来检索列值列表(第 4 个标题的值将在每行的第 4 个 TD 中)。 Selenium 提供了一种类似于 Jquery 的搜索元素的方法,但由于它是 C#,这当然不是真正的 Jquery。
    • 注意:这个解决方案有一个嵌套循环:它使用 Select() 函数多次遍历所有 resultsRows。您可以通过首先遍历 resultsRows 并填充多维数组来优化它,然后遍历 headerRows 并立即创建字典条目。但是,这可能不会大大提高性能,并且可读性会降低。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2021-12-08
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    相关资源
    最近更新 更多