如何从2个不同的列表中获取与第3个列表中的值匹配的索引

时间:2015-10-23 02:38:46

标签: c# linq selenium selenium-webdriver

下面的代码将检查Element或Element2 List中是否有测试值。但是,当它匹配时,我怎么能得到它的索引呢?

public void Method3(List<string> testingValues, IList<IWebElement> Element, IList<IWebElement> Element2)
{
  if (testingValues.All(item => Element.Any(x => x.Text == item) || Element2.Any(y => y.Text == item)))
    {

    }

    else
    {
        Assert.Fail();
    }

}

1 个答案:

答案 0 :(得分:0)

您可以编写一个使用IList.IndexOf:

的帮助方法
private int[] GetIndices(string key, IList<IWebElement> objectList) {
  return objectList.Where(e => e.Text.Equals(key)).Select(e => objectList.IndexOf(e)).ToArray();
}


public void Method3(List<string> testingValues, IList<IWebElement> Element, IList<IWebElement> Element2) {
    if (testingValues.All(item => Element.Any(x => x.Text == item) || Element2.Any(y => y.Text == item))) {
        foreach(string key in testingValues) {
            Debug.WriteLine("Indices of {0} in first list: {1}", key, IndicesString(GetIndices(key, Element)));
            Debug.WriteLine("Indices of {0} in second list: {1}", key, IndicesString(GetIndices(key, Element2));
        }
    } else {
        Assert.Fail();
    }

}

private string IndicesString(int[] indices) {
    if (indices.Length == 0) return "NONE";
    StringBuilder sb = new StringBuilder();
    sb.Append("{");
    for(int i=0; i<indices.Length; i++) {
        if (i > 0) sb.Append(", ");
        sb.Append(indices[i]);
    }
    sb.Append("}");
    return sb.ToString();
}