Java 如何在<;p>;和跨度标签

Java 如何在<;p>;和跨度标签,java,selenium,xpath,webdriverwait,xpath-1.0,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> 我也试着让他们和for循环,但它没有工作。你能帮

我正在尝试一个接一个地获取名为text1、text2、text3、text4的文本

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

我也试着让他们和for循环,但它没有工作。你能帮我一下吗?

你能试试下面的“div>p>span”吗?

首先用
xpath
更改你的定位器:

By.xpath("//*[@class='element']//p")
然后将它们收集到
列表中
,使用循环并用换行符分隔

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);
    }
}
List elements=driver.findElements(By.xpath(“//*[@class='element']///p”);

对于(inti=0;iNull指针异常意味着您试图从不存在的元素中获取文本。因此,您首先确保找到了该元素,然后尝试对其进行处理

此外,由于文本被不同的标记分割,因此无法在此处编写通用循环。我建议您将div容器中的所有文本放在一个字符串中,其中的文本将被特殊符号分割,如/r/n或其他。您可以使用所需的方式分割此字符串。

提取文本TEXT1、TEXT2、TEXT3和TEXT1TEXT4一个接一个您可以使用以下内容:

  • 正文1:

  • 文本2:

  • 文本3:

  • 正文4:


首先,您需要一次一个,这有什么原因吗?在数组中一次获取所有内容,然后在数组中进行迭代会容易得多。其次,您的
findelelement()
无法按预期工作。它只会获取
“TEXT1”
“TEXT2”
“TEXT3”
“TEXT4”
。但我们无法解决这个问题,除非我们知道是否有可能一次获得所有信息,或者必须一次获得一个信息。在我获取这些信息后,我会将这些信息发送到位于同一网页上的textbox,所以我认为一个一个地获取信息可能非常实用。我尝试了List Allegements=driver.findElements(by.cssSelector(“div.element>p>span”));但我仍然收到nullpointer异常。我不相信您在给定HTML的情况下发布的确切代码会导致null指针异常。如果找不到元素,您将收到NosTouchElementException。如果元素不包含文本,您将收到空字符串,而不是null。请仔细检查您发布的内容ed,再次运行它并发布您收到的确切消息(将其编辑到问题中)。@BaturTürkmen您能否交叉检查HTML一次,可能第二个
span
标记未正确关闭。
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);
    }
}
System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='element']/p/span"))).getAttribute("innerHTML"););
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());
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());
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());