【问题标题】:FindElement doesnt iterate when iterating elements in IReadOnlyCollection迭代 IReadOnlyCollection 中的元素时,FindElement 不迭代
【发布时间】:2019-10-22 14:30:47
【问题描述】:

我正在迭代取自 HTML 的元素。

structureElement 似乎包含找到的元素,但是当我在其上运行 .FindElement() 时,它始终返回第一次迭代的值。这是为什么呢?

这是我的代码:

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);
}

【问题讨论】:

    标签: c# selenium selenium-webdriver phantomjs c#-5.0


    【解决方案1】:

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

    如果你想找到那个节点的后代,你可以试试:

    .//span[@class='cat-icons-tree']/img
    

    .// 表示“选择上下文节点的后代”

    您可以检查轴的所有缩写here

    【讨论】:

      猜你喜欢
      • 2021-11-14
      • 2023-02-22
      • 2021-12-16
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      相关资源
      最近更新 更多