如何在<p>和span标记之间一一提取文本

时间:2019-08-29 21:59:30

标签: java selenium xpath webdriverwait xpath-1.0

我正在尝试获取一个分别命名为text1,text2,text3,text4的文本。

<div class="element">
    <p><span>"TEXT1"</span></p>
    <p><span>"TEXT2"<br>"TEXT3"<br>"TEXT4"</span</p>
</div>

当我尝试将div.element>p>span与css选择器一起使用时,硒会抛出nullpointer异常。

WebElement element = driver.findElement(By.cssSelector("div.element>p>span"));
String a = element.getText();
System.out.println("a : "+a);

我也试图让它们带有for循环,但是没有用。你能帮我吗?

4 个答案:

答案 0 :(得分:0)

您可以尝试以下“ div> p> span”

答案 1 :(得分:0)

首先尝试使用xpath更改您的定位器:

By.xpath("//*[@class='element']//p")

然后将它们收集在List中,使用循环并将其与换行符分开。

List<WebElement> elements = driver.findElements(By.xpath("//*[@class='element']//p"));

for(int i=0; i<elements.size(); i++) {
    WebElement p = elements.get(i);
    String lines[] = p.getText().split("\\r?\\n");
    for(String line: lines) {
        System.out.println("line :" +line);
    }
}

答案 2 :(得分:0)

空指针异常意味着您正在尝试从不存在的元素中获取文本。因此,您首先要确保找到了元素,然后尝试对其进行处理。

此外,由于您的文本由不同的标记分开,因此无法在此处编写通用循环。我建议您将div容器中的所有文本都放在一个字符串中,该文本将是文本,并用特殊符号(例如/ r / n或类似符号)分隔。然后,您可以使用Regex将此字符串拆分为所需的字符串。

答案 3 :(得分:0)

要逐个提取文本 TEXT1 TEXT2 TEXT3 TEXT4 ,可以使用以下命令XPaths

  • TEXT1

    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='element']/p/span"))).getAttribute("innerHTML"););
    
  • TEXT2

    System.out.println(((JavascriptExecutor)driver).executeScript('return arguments[0].firstChild.textContent;', new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='element']//following-sibling::p[2]")))).toString());
    
  • TEXT3

    System.out.println(((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[3].textContent;', new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='element']//following-sibling::p[2]")))).toString());
    
  • TEXT4

    System.out.println(((JavascriptExecutor)driver).executeScript('return arguments[0].lastChild.textContent;', new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='element']//following-sibling::p[2]")))).toString());