XPath建议需要选择文本

时间:2017-03-17 19:05:00

标签: java html selenium xpath

我有一个包含以下HTML代码的html文档:

<!DOCTYPE html>
<html>
<head>
    <title>page XYZ</title>
</head>

<body>
<p><b>bold text</b> some more text </p>
    
    <p><b>1.</b>&nbsp;hello<br><b>2.</b>&nbsp;how<br><b>3.</b>&nbsp;do you do?</p><p>some more text in a paragraph.</p>   
    </body>
</html>

我需要编写XPath来打印带有文本的3个点,即

1. hello
2. how
3. do you do?

到目前为止,我已经尝试过这个:(但它不是打印文本)

    List<WebElement> list = driver.findElements(By.xpath("//p/following-sibling::p/b"));

    for (int i = 0; i < list.size(); i++) {

        WebElement el = list.get(i);
        String text = el.getText();
        System.out.println(text);
}

请建议我。

2 个答案:

答案 0 :(得分:1)

使用xpath "(//p[2])/text()",它将返回同级<p>标记内的文字。使用xpath "(//p[2])/b"以粗体显示数字1,2,3。

要获得所需的输出,您可以尝试以下操作:

List<WebElement> numberList = driver.findElements(By.xpath("(//p[2])/b"));
List<WebElement> textList = driver.findElements(By.xpath("(//p[2])/text()"));

for(int i = 0; i < textList.size() && i < numberList.size(); i++) {
    System.out.println(numberList.get(i).getText() + " " + textList.get(i).getText());
}

答案 1 :(得分:0)

要仅选择文字,您应使用//p[2]/text()
如果你需要打印1. 2. 3.你应该使用p[2]/b

如果你需要选择两个你应该使用 //p[2]为没有.findElements()的字符串,然后在您的代码中将其拆分为列表