2017-08-09 19 views
0

我想从我从硒获得的两个IWebelement创建一个字典,第一个元素是表头,第二个是每列的值。有可能做到这一点?合并到IList <IWebElement>元素到字典

这是我的两个ILIST:

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

我做的,从每一个列表的获取所有的元素:

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

    } 

回答

0
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元素列表。

+0

很多都是我需要的。理解一点:你创建一个新的字典,它是一个IDictionary和Ilist的合并,并且他们使用jquery为每行选择所有的值作为标记名? –

+0

@FranciscoGonzalez,这是正确的。关键是一个单一的标题元素。列值的列表是通过在标题列的索引处查找TD元素来检索的(第四个标题的值将在每行的第四个TD中)。 Selenium提供了一种搜索类似于Jquery的元素的方法,但是因为它是C#,所以这当然不是真正的Jquery。 – Simmetric

+0

注意:此解决方案具有嵌套循环:它使用Select()函数多次遍历所有resultsRows。您可以通过循环遍历resultsRows并填充多维数组,然后循环遍历headerRows并立即创建字典条目来优化它。然而,这可能不会提高性能,并且可读性会降低。 – Simmetric