【发布时间】:2021-07-27 12:21:39
【问题描述】:
我想选择页面上包含任何文本的所有元素。
只有元素本身实际包含文本,而不是仅在其子元素中包含文本的父元素。
此 XPath 匹配包含任何非空文本的元素
//*[text() != ""]
不过这个
List<WebElement> list = driver.findElements(By.xpath("//*[text() != '']"));
给我一个包含文本本身或其子元素中的所有元素的列表。
我可以用类似这样的方法迭代这个list,以将实际包含文本的元素放入real列表中
List<WebElement> real = new ArrayList<>();
for(WebElement element : list){
js = (JavascriptExecutor)driver;
String text = js.executeScript("""
return jQuery(arguments[0]).contents().filter(function() {
return this.nodeType == Node.TEXT_NODE;
}).text();
""", element);
if(text.length()>0){
real.add(element);
}
但这是一种解决方法。
我想知道有没有办法让元素列表实际上包含任何直接或更优雅地执行此操作的文本?
【问题讨论】: