如何使用xpath确定我们要选择哪个子元素?

时间:2019-02-27 20:25:55

标签: java xml selenium xpath nodes

例如,如果我们有一个如下所示的xml:

<tr>
 <th>LION</th>
 <th>TIGER</th>
 <th>CHEETAH</th>
 <th>GIRAFFE</th>
 <th>BEAR</th>
</tr>

,并且我想为GIRAFFE选择xpath元素...(使用xpath)我如何分辨GIRAFFE元素下的哪个元素?显然,通过查看xml,它是// tr / th [4] ....,但是有一种方法可以使用xpath来确定它是??下的第4个元素。

2 个答案:

答案 0 :(得分:2)

不确定您要问的是什么,但是也许其中一个XPath会有所帮助...


此XPath表达式,

docker pull tensorflow/tensorflow

将计算为

count(/tr/th[.="GIRAFFE"]/preceding-sibling::th)+1

指示GIRAFFE 4 元素是第四个th兄弟元素。


此XPath,

th

将根据其内容选择GIRAFFE /tr/th[.="GIRAFFE"]


此XPath,

th

将根据其在CHEETAH /tr/th[.="CHEETAH"]/following-sibling::th[1] 之后的位置来选择GIRAFFE th

答案 1 :(得分:0)

如果要按行中的标题文本选择列元素并在Selenium中使用,请参见以下示例:

HTML示例:

<table>
    <thead>
        <tr>
            <th>LION</th>
            <th>TIGER</th>
            <th>CHEETAH</th>
            <th>GIRAFFE</th>
            <th>BEAR</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
            <td>4</td>
            <td>5</td>
        </tr>
        <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
            <td>4</td>
            <td>5</td>
        </tr>
    </tbody>
</table>

用于硒的XPATH:

//table/tbody/tr/td[count(//table//th[.="GIRAFFE"]/preceding::th)+1]

硒Java用法示例:

String animalName = "GIRAFFE";

WebElement element = driver.findElement(By.xpath("//table/tbody/tr/td[count(//table//th[.='" + animalName + "']/preceding::th)+1]"));

WebElement animalElementFromRow1 = driver.findElement(By.xpath("//table/tbody/tr[1]/td[count(//table//th[.='" + animalName + "']/preceding::th)+1]"));
WebElement animalElementFromRow2 = driver.findElement(By.xpath("//table/tbody/tr[2]/td[count(//table//th[.='" + animalName + "']/preceding::th)+1]"));