我有这部分代码让我发疯
我正在迭代从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);
}
答案 0 :(得分:3)
那是因为你在//
中使用了Xpath
,这意味着“选择root 的后代”,所以它会返回第一个找到的文档的
如果要查找该节点的后代,可能需要尝试:
.//span[@class='cat-icons-tree']/img
.//
表示“选择上下文节点的后代”
您可以检查轴here
的所有缩写