在迭代IReadOnlyCollection中的元素时,FindElement不会迭代

Mar*_*rek 5 c# selenium c#-5.0 phantomjs selenium-webdriver

我有这部分代码让我发疯.
我正在迭代从HTML中获取的元素.
structureElement似乎包含了精细元素,但是当我在它上面运行.FindElement()时,它始终返回第一次迭代的值.为什么?grrrrrrrr
这是我的代码:

IReadOnlyCollection<IWebElement> structureElements =
    driver.FindElements(By.XPath(".//div[contains(@id, 'PSBTree_x-auto-')]"));
//.Where(sE => sE.FindElement(By.XPath("//img[@title]")).GetAttribute("title") != "Customer Item")
IWebElement tmp;
foreach (IWebElement structureElement in structureElements)
{
    //if (structureElement.FindElement(By.XPath("//span//img[@title]")).GetAttribute("title").Contains("Customer Item"))
    //    continue;
    tmp = structureElement.FindElement(By.XPath("//span[@class='cat-icons-tree']/img"));
    ReportProgress(progress, ref r, ct, allsteps, message + tmp.GetCssValue("background"));
    Thread.Sleep(100);
    ReportProgress(progress, ref r, ct, allsteps, message + structureElement.Text);
    Thread.Sleep(300);
}
Run Code Online (Sandbox Code Playgroud)

Jcl*_*Jcl 3

这是因为您正在使用//in Xpath,这意味着“选择根的后代”,因此它返回在文档中找到的第一个

如果您想找到该节点的后代,您可能需要尝试:

.//span[@class='cat-icons-tree']/img
Run Code Online (Sandbox Code Playgroud)

.//意思是“选择上下文节点的后代”

您可以在此处查看轴的所有缩写