Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用xpath查找元素_Java_Html_Selenium_Xpath - Fatal编程技术网

Java 使用xpath查找元素

Java 使用xpath查找元素,java,html,selenium,xpath,Java,Html,Selenium,Xpath,今天我遇到了这个问题: 我有一些html代码: <div class="Main"> <div> <div class="display">First:</div> <div class="price">$0.01</div> </div> <div> <div class="display">Second:</

今天我遇到了这个问题: 我有一些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>

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

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

  • 您需要容纳包含
    元素的容器
  • 如果要根据元素的索引检索元素,则需要将选择器包装在
    ()
  • 您可以使用单个XPath表达式,而不是调用两次
    findElement
下面是我将使用的表达式。请注意,它:

  • 查找
    元素
  • 容纳集装箱
  • 使用XPath检索
    text()
  • 将选择器包装在
    ()
    中,以便我们可以使用索引访问器

(//*[@class='Main']/*/*[以(@class,'price')]开头])[2]/text()

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

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

xpath=“//div[conatins(text(),'$0.02')]”


这将对您有所帮助。

尝试使用以下xpath表达式
(//div/div[@class=“price”])[2]
哇,太快了!Thx,xpath exps中的括号是什么意思?正如@Ivan所说,括号用于使用索引访问器,然后使用
[2]
选择第二个元素
chromeDriver.findElement(By.className("Main"))
        .findElement(By.xpath(".//*[starts-with(@class, 'price')][2]")).getText()