Java 如何使用xpath确定要选择的子元素?

Java 如何使用xpath确定要选择的子元素?,java,xml,selenium,xpath,nodes,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>LION</th>
 <th>TIGER</th>
 <th>CHEETAH</th>
 <th>GIRAFFE</th>
 <th>BEAR</th>
</tr>

狮子
老虎
猎豹
长颈鹿
熊

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

不完全确定您在问什么,但是这些xpath中的一个可能会有帮助


这个XPath表达式

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

4
表示长颈鹿
th
元素是第四个
th
兄弟元素


这个XPath

/tr/th[.="GIRAFFE"]
/tr/th[.="CHEETAH"]/following-sibling::th[1]
将根据内容选择长颈鹿
th


这个XPath

/tr/th[.="GIRAFFE"]
/tr/th[.="CHEETAH"]/following-sibling::th[1]

将根据长颈鹿在猎豹之后的位置来选择长颈鹿,但不完全确定你在问什么,但这些XPath中的一个可能会有帮助


这个XPath表达式

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

4
表示长颈鹿
th
元素是第四个
th
兄弟元素


这个XPath

/tr/th[.="GIRAFFE"]
/tr/th[.="CHEETAH"]/following-sibling::th[1]
将根据内容选择长颈鹿
th


这个XPath

/tr/th[.="GIRAFFE"]
/tr/th[.="CHEETAH"]/following-sibling::th[1]

将根据长颈鹿在猎豹之后的位置选择长颈鹿
th
,如果要按行中的标题文本选择列元素,并在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>
//table/tbody/tr/td[count(//table//th[.="GIRAFFE"]/preceding::th)+1]
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]"));
Selenium Java使用示例:

<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>
//table/tbody/tr/td[count(//table//th[.="GIRAFFE"]/preceding::th)+1]
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]"));

如果要按行中的标题文本选择列元素并在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>
//table/tbody/tr/td[count(//table//th[.="GIRAFFE"]/preceding::th)+1]
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]"));
Selenium Java使用示例:

<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>
//table/tbody/tr/td[count(//table//th[.="GIRAFFE"]/preceding::th)+1]
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]"));

有什么原因不能用
//th[.='GIRAFFE']
来选择元素吗?有什么原因不能用
//th[.='GIRAFFE']
来选择元素吗?