如何使用 Selenium WebDriver 和 Java 提取外部跨度的文本

How to extract the text of the outer span using Selenium WebDriver and Java

我遇到了一个问题,我无法获取将另一个 span 标签作为子标签的 span 标签的文本:

<span class="abc">
        <span class="def">Inner Span</span> 
        Outer Span
</span>

当我使用

driver.findElement(By.cssSelector(".abc")).getText()

硒 returns "Inner Span" 以及 "Outer Span"。我猜这里使用了 innerText。但我只需要外跨度的文本 "Outer Span" 和 class "abc".

尝试 JavascriptExecutor 并获得 lastChildtextContent

诱导WebDriverWait()并等待visibilityOfElementLocated()

WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[@class='abc']")));
JavascriptExecutor js= (JavascriptExecutor) driver; 
String strtext=(String) js.executeScript("return arguments[0].lastChild.textContent;", element);
System.out.println(strtext.trim());

或者您可以分割线并使用索引获取期望值。

WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[@class='abc']")));
String text=element.getAttribute("textContent");
String[] lines = text.split("\r?\n");
System.out.println(lines[2].trim());

文本 Outer Span 是一个 Text Node 并且是父节点的 lastChild <span> 节点。因此,提取您需要为 visibilityOfElementLocated() 引入 WebDriverWait 的文本,您可以使用以下任一方法 :

  • 使用 cssSelector:

    System.out.println(((JavaScriptExecutor)driver).executeScript("return arguments[0].lastChild.textContent;", new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("span.abc")))).toString());
    
  • 使用 xpath:

    System.out.println(((JavaScriptExecutor)driver).executeScript("return arguments[0].lastChild.textContent;", new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[@class='abc']")))).toString());