2017-08-09 20 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