AI подсказывает, вытащить внешний текст можно с помощью запуска JavaScript кода:
В Playwright:
String directText = page.locator(".outer-div").evaluate("""
element => Array.from(element.childNodes)
.filter(node => node.nodeType === Node.TEXT_NODE)
.map(node => node.textContent.trim())
.filter(Boolean)
.join(' ')
""").toString();
System.out.println(directText);
В Selenium:
WebElement outerDiv = driver.findElement(By.cssSelector(".outer-div"));
JavascriptExecutor js = (JavascriptExecutor) driver;
String directText = (String) js.executeScript("""
return Array.from(arguments[0].childNodes)
.filter(node => node.nodeType === Node.TEXT_NODE)
.map(node => node.textContent.trim())
.filter(Boolean)
.join(' ');
""", outerDiv);
System.out.println(directText);
Это можно красиво оформить в метод:
public static String getDirectText(Locator locator) {
return (String) locator.evaluate("""
element => Array.from(element.childNodes)
.filter(node => node.nodeType === Node.TEXT_NODE)
.map(node => node.textContent.trim())
.filter(Boolean)
.join(' ')
""");
}