首页 > 解决方案 > 选择 webdriver 中包含文本的任何元素

问题描述

我正在寻找使用 webdriver 实现一般本地化测试,我的想法是:

  1. 选择所有包含文本的元素
  2. 使用 java 语言识别库来验证文本是否为某种特定语言

我查找了使用文本选择元素的各种方法,但记录的所有内容似乎都显示了使用 contains() 或 text() 使用特定文本进行定位的方法

我认为以下方法会起作用:

//*[contains(text(), '')]

但这会选择所有内容,无论是否有文本。它还选择标题中的元素。我想选择页面上的所有可见文本,提取该文本并将其逐个元素地传递给语言识别库。

标签: javatextlocalizationwebdriver

解决方案


你可以使用这个 XPath

//*[text() != ""]

这将为您提供所有具有非空文本的元素。
以便

List<WebElement> list = driver.findElements(By.xpath("//*[text() != '']"));

将为您提供包含文本的页面上所有 Web 元素的列表。
UPD
如果您希望仅获取包含文本本身的元素,则可以仅通过以下代码排除在其子项中包含文本的元素:

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);
}

最终的元素列表将在real列表中。
想法来自这里。根据这个语法从 Python 翻译成 Java


推荐阅读