【问题标题】:Too many results when finding within element with Selenium WebDriver使用 Selenium WebDriver 在元素内查找时结果太多
【发布时间】:2017-05-28 02:17:12
【问题描述】:

我做了以下搜索

parts.get(i).findElements(By.xpath("//li[starts-with(@class, '_lessons--row-')]"))

它返回了几十个结果,而我在开发者工具中看到的结果不超过 3 个。

parts.get(i) 返回单个 WebElement

看起来它不是搜索给定元素的子元素,而是搜索整个页面。双斜杠会导致这种情况吗? XPath 中的双斜线是什么意思?

【问题讨论】:

  • ///descendant-or-self::node()/ 的缩写。请参阅w3.org/TR/xpath/#path-abbrev 了解更多信息。
  • “后代或自我”听起来与其他人所说的(从根)相矛盾?
  • 查看上述规范的链接。滚动浏览该部分开头的示例并阅读最后几段。它解释了//. 以及它们如何协同工作。
  • 这可能也有帮助:stackoverflow.com/q/33918010/317052

标签: java selenium xpath selenium-webdriver selenium-chromedriver


【解决方案1】:

这里你的 xpath 有问题。

"//li[starts-with(@class, '_lessons--row-')]"

//从根级别搜索,从节点预附加.搜索:

".//li[starts-with(@class, '_lessons--row-')]"

【讨论】:

    【解决方案2】:

    用 .// 试试你的 xpath,通常你应该用 "." 开始 xpath停止从根中查找元素。

    .//li[starts-with(@class, '_lessons--row-')]
    

    【讨论】:

      【解决方案3】:

      // 匹配相关数据。从文档根目录开始。在您的情况下,您正在尝试使用

      //li[starts-with(@class, '_lessons--row-')]
      

      因此它将返回您的 html 中的所有匹配项。如果您想使用 class 定位元素的某些特定部分,请使用 start text_lessons--row- 。你必须让你的xpath 更具体。

      例如

       //div[@id='someid']//li[starts-with(@class, '_lessons--row-')]
      

      【讨论】:

        猜你喜欢
        • 2017-07-03
        • 2017-09-12
        • 2014-07-18
        • 1970-01-01
        • 2021-03-31
        • 1970-01-01
        • 2012-12-12
        • 1970-01-01
        相关资源
        最近更新 更多