选择webdriver中包含文本的任何元素

p8ekf7hl  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(427)

我希望使用webdriver实施通用本地化测试,我的想法是:
选择包含文本的所有元素
使用java语言标识库验证文本是否使用某种特定语言
我查找了使用文本选择元素的各种方法,但所有文档似乎都显示了使用contains()或text()使用特定文本进行定位的方法
我认为以下方法可行:

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

但无论是否有文本,它都会选择所有内容。它还选择标题中的元素。我希望选择页面上所有可见的文本,提取该文本并逐个元素地通过语言标识库。

kgsdhlau

kgsdhlau1#

您可以使用这个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

相关问题