2017-08-09 2 views
0

私はセレニウムから取得した2つのIWebelementから辞書を作成しようとしています。最初の要素は表のヘッダーで、2番目の要素は各列の値です。それは可能ですか?IList <IWebElement>の要素を辞書にマージ

これは私の2の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要素を検索することによって取得されます(4番目のヘッダーの値はすべての行の4番目のTDになります)。 SqueniumはJqueryに似た要素を検索する方法を提供しますが、C#のため、これは実際のJqueryではありません。 – Simmetric

+0

注:このソリューションにはネストループがあります。これは、Select()関数を使用してすべてのresultsRowsを複数回実行します。最初にresultsRowsをループし、多次元配列を塗りつぶしてから、headerRowsをループしてすぐに辞書項目を作成することで、最適化することができます。ただし、これによりパフォーマンスが大幅に向上するとは限りません。 – Simmetric

関連する問題