【问题标题】:Find an element using xpath使用 xpath 查找元素
【发布时间】:2020-05-19 04:33:48
【问题描述】:

今天我遇到了这个问题: 我有一些 html 代码:

<div class="Main">
    <div>
        <div class="display">First:</div>
        <div class="price">$0.01</div>
    </div>
    <div>
        <div class="display">Second:</div>
        <div class="price">$0.02</div>
    </div>
    <div>
        <div class="display">Third:</div>
        <div class="price">$0.03</div>
    </div>
</div>

例如,我想找到第二个元素。我该怎么办?我正在使用 Java 和 Selenium,但这种方式不起作用:

chromeDriver.findElement(By.className("Main"))
        .findElement(By.xpath(".//*[starts-with(@class, 'price')][2]")).getText()

我知道 findElements 方法,但我想通过 xpath。

【问题讨论】:

  • 试试下面的xpath表达式(//div/div[@class="price"])[2]
  • 哇,这么快! Thx,xpath exps 中的括号是什么意思?
  • 正如@Ivan 所说,括号用于使用索引访问器,然后使用[2] 选择第二个元素

标签: java html selenium xpath


【解决方案1】:

在 xpath 中使用 [1] 或 [2] 不是 一个好方法...因为当页面结构发生变化时,您的定位器不会将其指向同一个 Web 元素。

问题的更好解决方案是使用文本 标签之间。 如果标签之间的文本是唯一的,您可以直接在 xpath 中使用它们的文本内容并访问第二个元素。

xpath = "//div[conatins(text(),'$0.02')]" ;

这会对你有所帮助。

【讨论】:

    【解决方案2】:

    查看您的 XPath 表达式有几个问题:

    • 您需要容纳包含&lt;div class="display"&gt;&lt;/div&gt;&lt;div class="price"&gt;&lt;/div&gt; 元素的容器&lt;div&gt;
    • 如果要根据索引检索元素,则需要将选择器包装在 () 中。
    • 您可以使用单个 XPath 表达式,而不是调用两次 findElement

    这是我会使用的表达方式。请注意:

    • 查找&lt;div class="Main"&gt; 元素
    • 容纳容器&lt;div&gt;
    • 使用 XPath 检索 text()
    • 将选择器包装在() 中,这样我们就可以使用索引访问器了

    (//*[@class='Main']/*/*[starts-with(@class, 'price')])[2]/text()

    【讨论】:

      猜你喜欢
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      • 2011-04-14
      相关资源
      最近更新 更多