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

问题描述 投票:0回答:2

我遇到了一个问题,在该问题上,我无法获得将另一个span标签作为子元素的span标签的文本:

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

当我使用时

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

Selenium返回“内部跨度”和“外部跨度”。我想在这里使用innerText。但是,我只需要带有“ abc”类的外部跨度的文本“外部跨度”。

html selenium xpath css-selectors webdriverwait
2个回答
1
投票

文本外部跨度文本节点,并且是父级<span>节点的lastChild。因此,提取您需要为visibilityOfElementLocated()引入WebDriverWait的文本,然后可以使用以下任何一个Locator Strategies

  • 使用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());
    

0
投票

尝试JavascriptExecutor并获得textContentlastChild

产生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());
© www.soinside.com 2019 - 2024. All rights reserved.