无法使用selenium读取</p> <h3>下的<p>文本

时间:2018-02-16 16:14:49

标签: java selenium selenium-webdriver automation selenium-firefoxdriver

我有一个类似的HTML代码:

<h3> Some Heading </h3>
<p> Some String </p>
<p> more string </p>
<h3> Other heading</h3>
<p> some text </p>

我正在尝试访问Some Stringmore stringsome text。使用java,我试图像这样访问:

List<WebElement> h3Tags = driver.findElements(By.tagName("h3"));

List<WebElement> para = null;

WebElement bagInfo = h3Tags.get(0);  //reads first h3
if(bagInfo.getText().contains("carry-on") || bagInfo.getText().contains("Carry-on")){
        para = AutoUtils.findElementsByTagName(bagInfo, "p");
        System.out.println(para.get(0).getText());  //Null pointer here 
}

bagInfo = h3Tags.get(1);
if(bagInfo.getText().contains("checked") || bagInfo.getText().contains("Checked")){
        para = AutoUtils.findElementsByTagName(bagInfo, "p");
        System.out.println(para.get(0).getText());  //Null pointer here too
}

尝试xpath "h3['/p']",但仍然没有运气。访问这些<p>字符串的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

尝试使用xpath //h3/following-sibling::p来匹配所有3个段落

另请注意,您的XPath h3['/p']不起作用,因为它意味着返回h3节点,即DOM根节点。谓词['/p']将始终返回True,因为非空字符串(在您的情况下为'/p')始终为True

答案 1 :(得分:0)

要访问某些字符串更多字符串某些文字,您可以使用以下定位器策略:< / p>

  • 使用某些字符串

    的文本访问节点
    By.xpath("//h3[normalize-space()='Some Heading']//following::p[1]")
    
  • 使用更多字符串

    的文本访问节点
    By.xpath("//h3[normalize-space()='Some Heading']//following::p[2]")
    
  • 要使用某些文字

    的文字访问节点
    By.xpath("//h3[normalize-space()='Other heading']//following::p[1]")
    
  • 找到这些元素后,您可以使用 getAttribute("innerHTML") 方法提取节点内的文字。